From 545ef11ac8d09ff20dc71b854d0019b64ec1f3ef Mon Sep 17 00:00:00 2001 From: Maschell Date: Sat, 23 Jun 2018 18:29:23 +0200 Subject: [PATCH] - Remove plugins from the repository (Will be re-uploaded to different reposistories) - Updated the codeblocks template --- .travis.yml | 14 +- README.MD | 10 +- ide_templates/codeblocks/Makefile | 44 ++- ide_templates/codeblocks/makefile.mk | 23 +- ide_templates/codeblocks/src/main.cpp | 59 ++-- plugins/Makefile | 13 - plugins/example_plugin/Makefile | 295 ------------------ plugins/example_plugin/README.md | 12 - plugins/example_plugin/makefile.mk | 58 ---- plugins/example_plugin/src/main.cpp | 146 --------- plugins/example_plugin_wut/Makefile | 295 ------------------ plugins/example_plugin_wut/README.md | 11 - plugins/example_plugin_wut/makefile.mk | 58 ---- plugins/example_plugin_wut/src/main.cpp | 136 -------- plugins/hid_to_vpad/Makefile | 295 ------------------ plugins/hid_to_vpad/README.md | 25 -- plugins/hid_to_vpad/makefile.mk | 58 ---- plugins/hid_to_vpad/src/main.cpp | 92 ------ plugins/memory_info/Makefile | 295 ------------------ plugins/memory_info/README.md | 13 - plugins/memory_info/makefile.mk | 58 ---- plugins/memory_info/src/c_retain_vars.c | 27 -- plugins/memory_info/src/c_retain_vars.h | 32 -- plugins/memory_info/src/common_hooks.c | 34 -- plugins/memory_info/src/main.c | 105 ------- plugins/memory_info/src/main.h | 25 -- plugins/memory_info/src/memory_defs.h | 64 ---- plugins/memory_info/src/memory_hooks.c | 244 --------------- plugins/nnu_patcher/Makefile | 295 ------------------ plugins/nnu_patcher/makefile.mk | 58 ---- plugins/nnu_patcher/src/main.cpp | 14 - plugins/overlay/Makefile | 295 ------------------ plugins/overlay/makefile.mk | 58 ---- plugins/overlay/src/function_patcher.cpp | 61 ---- plugins/overlay/src/main.cpp | 57 ---- plugins/overlay/src/main.h | 34 -- plugins/padcon/Makefile | 295 ------------------ plugins/padcon/README.md | 11 - plugins/padcon/makefile.mk | 59 ---- plugins/padcon/src/main.c | 39 --- plugins/screenshot/Makefile | 295 ------------------ plugins/screenshot/README.md | 20 -- plugins/screenshot/libs/portlibs.zip | Bin 293588 -> 0 bytes plugins/screenshot/makefile.mk | 58 ---- plugins/screenshot/src/common.h | 6 - plugins/screenshot/src/function_patcher.cpp | 63 ---- plugins/screenshot/src/function_patcher.h | 0 plugins/screenshot/src/main.cpp | 160 ---------- plugins/screenshot/src/retain_vars.cpp | 3 - plugins/screenshot/src/retain_vars.hpp | 10 - plugins/screenshot/src/screenshot_utils.cpp | 224 ------------- plugins/screenshot/src/screenshot_utils.h | 20 -- plugins/sdcafiine/Makefile | 295 ------------------ plugins/sdcafiine/README.md | 23 -- plugins/sdcafiine/makefile.mk | 61 ---- plugins/sdcafiine/src/common/common.h | 59 ---- plugins/sdcafiine/src/common/retain_vars.cpp | 9 - plugins/sdcafiine/src/common/retain_vars.h | 15 - plugins/sdcafiine/src/controllers.cpp | 129 -------- plugins/sdcafiine/src/controllers.h | 15 - plugins/sdcafiine/src/main.cpp | 56 ---- plugins/sdcafiine/src/main.h | 18 -- plugins/sdcafiine/src/modpackSelector.cpp | 212 ------------- plugins/sdcafiine/src/modpackSelector.h | 16 - plugins/sdcafiine/src/myfs/fs_utils.cpp | 147 --------- plugins/sdcafiine/src/myfs/fs_utils.h | 18 -- plugins/sdcafiine/src/patches.cpp | 271 ---------------- plugins/swipswapme/Makefile | 295 ------------------ plugins/swipswapme/README.md | 20 -- plugins/swipswapme/makefile.mk | 60 ---- .../swipswapme/src/common/c_retain_vars.cpp | 24 -- plugins/swipswapme/src/common/c_retain_vars.h | 27 -- plugins/swipswapme/src/function_patcher.c | 118 ------- plugins/swipswapme/src/main.cpp | 161 ---------- plugins/swipswapme/src/utils/voice_info.h | 30 -- plugins/swipswapme/src/utils/voice_swapper.c | 64 ---- plugins/swipswapme/src/utils/voice_swapper.h | 37 --- 77 files changed, 96 insertions(+), 6760 deletions(-) delete mode 100644 plugins/Makefile delete mode 100644 plugins/example_plugin/Makefile delete mode 100644 plugins/example_plugin/README.md delete mode 100644 plugins/example_plugin/makefile.mk delete mode 100644 plugins/example_plugin/src/main.cpp delete mode 100644 plugins/example_plugin_wut/Makefile delete mode 100644 plugins/example_plugin_wut/README.md delete mode 100644 plugins/example_plugin_wut/makefile.mk delete mode 100644 plugins/example_plugin_wut/src/main.cpp delete mode 100644 plugins/hid_to_vpad/Makefile delete mode 100644 plugins/hid_to_vpad/README.md delete mode 100644 plugins/hid_to_vpad/makefile.mk delete mode 100644 plugins/hid_to_vpad/src/main.cpp delete mode 100644 plugins/memory_info/Makefile delete mode 100644 plugins/memory_info/README.md delete mode 100644 plugins/memory_info/makefile.mk delete mode 100644 plugins/memory_info/src/c_retain_vars.c delete mode 100644 plugins/memory_info/src/c_retain_vars.h delete mode 100644 plugins/memory_info/src/common_hooks.c delete mode 100644 plugins/memory_info/src/main.c delete mode 100644 plugins/memory_info/src/main.h delete mode 100644 plugins/memory_info/src/memory_defs.h delete mode 100644 plugins/memory_info/src/memory_hooks.c delete mode 100644 plugins/nnu_patcher/Makefile delete mode 100644 plugins/nnu_patcher/makefile.mk delete mode 100644 plugins/nnu_patcher/src/main.cpp delete mode 100644 plugins/overlay/Makefile delete mode 100644 plugins/overlay/makefile.mk delete mode 100644 plugins/overlay/src/function_patcher.cpp delete mode 100644 plugins/overlay/src/main.cpp delete mode 100644 plugins/overlay/src/main.h delete mode 100644 plugins/padcon/Makefile delete mode 100644 plugins/padcon/README.md delete mode 100644 plugins/padcon/makefile.mk delete mode 100644 plugins/padcon/src/main.c delete mode 100644 plugins/screenshot/Makefile delete mode 100644 plugins/screenshot/README.md delete mode 100644 plugins/screenshot/libs/portlibs.zip delete mode 100644 plugins/screenshot/makefile.mk delete mode 100644 plugins/screenshot/src/common.h delete mode 100644 plugins/screenshot/src/function_patcher.cpp delete mode 100644 plugins/screenshot/src/function_patcher.h delete mode 100644 plugins/screenshot/src/main.cpp delete mode 100644 plugins/screenshot/src/retain_vars.cpp delete mode 100644 plugins/screenshot/src/retain_vars.hpp delete mode 100644 plugins/screenshot/src/screenshot_utils.cpp delete mode 100644 plugins/screenshot/src/screenshot_utils.h delete mode 100644 plugins/sdcafiine/Makefile delete mode 100644 plugins/sdcafiine/README.md delete mode 100644 plugins/sdcafiine/makefile.mk delete mode 100644 plugins/sdcafiine/src/common/common.h delete mode 100644 plugins/sdcafiine/src/common/retain_vars.cpp delete mode 100644 plugins/sdcafiine/src/common/retain_vars.h delete mode 100644 plugins/sdcafiine/src/controllers.cpp delete mode 100644 plugins/sdcafiine/src/controllers.h delete mode 100644 plugins/sdcafiine/src/main.cpp delete mode 100644 plugins/sdcafiine/src/main.h delete mode 100644 plugins/sdcafiine/src/modpackSelector.cpp delete mode 100644 plugins/sdcafiine/src/modpackSelector.h delete mode 100644 plugins/sdcafiine/src/myfs/fs_utils.cpp delete mode 100644 plugins/sdcafiine/src/myfs/fs_utils.h delete mode 100644 plugins/sdcafiine/src/patches.cpp delete mode 100644 plugins/swipswapme/Makefile delete mode 100644 plugins/swipswapme/README.md delete mode 100644 plugins/swipswapme/makefile.mk delete mode 100644 plugins/swipswapme/src/common/c_retain_vars.cpp delete mode 100644 plugins/swipswapme/src/common/c_retain_vars.h delete mode 100644 plugins/swipswapme/src/function_patcher.c delete mode 100644 plugins/swipswapme/src/main.cpp delete mode 100644 plugins/swipswapme/src/utils/voice_info.h delete mode 100644 plugins/swipswapme/src/utils/voice_swapper.c delete mode 100644 plugins/swipswapme/src/utils/voice_swapper.h diff --git a/.travis.yml b/.travis.yml index e47af6c..6d8b918 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,7 @@ dist: trusty env: global: - - DEVKITPRO=/opt/devkitpro - - WUT_ROOT=/opt/devkitpro/wut + - DEVKITPRO=/opt/devkitpro - DEVKITPPC=/opt/devkitpro/devkitPPC - DEVKITARM=/opt/devkitpro/devkitARM - PORTLIBREPOS=$HOME/portlibrepos @@ -32,27 +31,21 @@ before_install: - yes | sudo dkp-pacman -Syu devkitPPC --needed - yes | sudo dkp-pacman -Syu devkitARM --needed - yes | sudo dkp-pacman -Syu general-tools --needed - - wget $(curl -s https://api.github.com/repos/decaf-emu/wut/releases/latest | grep 'browser_' | grep 'linux' | cut -d\" -f4) install: - - 7z x -y $(ls | grep "linux") -o${WUT_ROOT} - cd $PORTLIBREPOS - ((git clone https://github.com/Maschell/dynamic_libs.git -b lib && (7z x -y ./dynamic_libs/libs/portlibs.zip -o${DEVKITPRO})) || (cd dynamic_libs && git pull)) - (git clone https://github.com/dimok789/libiosuhax.git || (cd libiosuhax && git pull)) - (git clone https://github.com/Maschell/libfat.git || (cd libfat && git pull)) - (git clone https://github.com/Maschell/libntfs-wiiu.git || (cd libntfs-wiiu && git pull)) - (git clone https://github.com/Maschell/libutils.git || (cd libutils && git pull)) - - ((git clone https://github.com/Maschell/libgui.git && (7z x -y ./libgui/libs/portlibs.zip -o${DEVKITPRO})) || (cd libgui && git pull)) - - (git clone https://github.com/Maschell/fs_wrapper.git || (cd fs_wrapper && git pull)) - - (git clone https://github.com/Maschell/controller_patcher.git || (cd controller_patcher && git pull)) + - ((git clone https://github.com/Maschell/libgui.git && (7z x -y ./libgui/libs/portlibs.zip -o${DEVKITPRO})) || (cd libgui && git pull)) - (cd dynamic_libs && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make)) - (cd libiosuhax && make -j8 && make install) - (cd libfat && make wiiu-release && make wiiu-install) - (cd libntfs-wiiu && make wiiu-install) - (cd libutils && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make)) - (cd libgui && ((make -j8 | grep -c "built ... ") && make install) || echo "no need for make install") - - (cd fs_wrapper && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make)) - - (cd controller_patcher && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make)) before_script: - cd $TRAVIS_BUILD_DIR/ @@ -60,17 +53,14 @@ before_script: script: - make && make install - (cd loader && make) -- (cd plugins && make) before_deploy: - cd $TRAVIS_BUILD_DIR/ - mkdir -p "wiiu/apps/wiiupluginloader" -- mkdir -p "wiiu/plugins" - commit="$(git rev-parse --short=7 HEAD)" - chmod +x gitrev.sh - versiontag="$(./gitrev.sh)" - (cd loader && make) -- find plugins -type f -name "*.mod" | xargs -i cp {} wiiu/plugins - cp loader/meta/* wiiu/apps/wiiupluginloader - cp loader/wiiupluginloader.elf wiiu/apps/wiiupluginloader - zip -r WiiUPluginLoader_$versiontag.zip wiiu diff --git a/README.MD b/README.MD index 17f5f16..ae611d5 100644 --- a/README.MD +++ b/README.MD @@ -46,7 +46,6 @@ For building the loader you need: - [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. - [libutils](https://github.com/Maschell/libutils) for common functions. - [libgui](https://github.com/Maschell/libgui) for the gui elements. -- [wut] (https://github.com/decaf-emu/wut) for the wut support. Install the according to their readmes. Don't forget to install their dependencies. @@ -68,16 +67,11 @@ make This should create an "wiiupluginloader.elf" which can be loaded with the Homebrew Launcher. ### Plugins + Last but not least you need to build the plugins that should be loaded. Plugins depend on the "WUPS library" installed in build step one, other dependencies are optional. -In the folder "plugins" you can find serveral example plugins. In their READMEs are information about needed dependencies. -You can build them all with the following command in the "plugins" folder (when all dependencies are installed). -``` -make -``` - -You can also check out the travis script for needed dependencies of the library, loader and example plugins. +Example plugins can be found here: (TODO) # Logging For logging (for example of the loader) you need to start the UdpDebugReader on a computer in the same network. diff --git a/ide_templates/codeblocks/Makefile b/ide_templates/codeblocks/Makefile index f52cd9e..aad1090 100644 --- a/ide_templates/codeblocks/Makefile +++ b/ide_templates/codeblocks/Makefile @@ -12,9 +12,6 @@ endif ifeq ($(strip $(DEVKITPRO)),) $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) export PORTLIBS := $(DEVKITPRO)/portlibs/ppc @@ -56,8 +53,7 @@ include $(WUPSDIR)/plugin_makefile.mk # -Os: optimise size # -Wall: generate lots of warnings # -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation +# -D__wiiu__: define the symbol __wiiu__ (used in some headers) # -mcpu=750: enable processor specific compilation # -meabi: enable eabi specific compilation # -mhard-float: enable hardware floating point instructions @@ -66,7 +62,7 @@ include $(WUPSDIR)/plugin_makefile.mk # -memb: enable embedded application specific compilation # -ffunction-sections: split up functions so linker can garbage collect # -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections +COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections # -x c: compile as c code @@ -81,6 +77,40 @@ ifeq ($(DO_LOGGING), 1) CFLAGS += -D__LOGGING__ CXXFLAGS += -D__LOGGING__ endif + +ADD_NO_WHOLE_ARCHIVE := 0 + +ifeq ($(WUT_ENABLE_CPP), 1) + WUT_ENABLE_NEWLIB := 1 + + LD_FLAGS_ELF += -whole-archive -lwutstdc++ + ADD_NO_WHOLE_ARCHIVE := 1 + NEEDS_WUT := 1 +endif + +ifeq ($(WUT_ENABLE_NEWLIB), 1) + LD_FLAGS_ELF += -whole-archive -lwutnewlib + ADD_NO_WHOLE_ARCHIVE := 1 + NEEDS_WUT := 1 +endif + +ifeq ($(WUT_DEFAULT_MALLOC), 1) + LD_FLAGS_ELF += -whole-archive -lwutmalloc + ADD_NO_WHOLE_ARCHIVE := 1 + NEEDS_WUT := 1 +endif + +ifeq ($(ADD_NO_WHOLE_ARCHIVE), 1) + LD_FLAGS_ELF += -no-whole-archive +endif + +ifeq ($(NEEDS_WUT), 1) + ifeq ($(strip $(WUT_ROOT)),) + $(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) + endif + CFLAGS += -D__WUT__ + CXXFLAGS += -D__WUT__ +endif ASFLAGS += @@ -106,7 +136,7 @@ ALL_LIBS := $(LIBS) # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) +LIBDIRS += #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional diff --git a/ide_templates/codeblocks/makefile.mk b/ide_templates/codeblocks/makefile.mk index f2e0000..43ebcb2 100644 --- a/ide_templates/codeblocks/makefile.mk +++ b/ide_templates/codeblocks/makefile.mk @@ -2,7 +2,24 @@ DO_LOGGING := 1 # Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 +WRAP_MALLOC := 0 + +# Sets the "-D__WUT__" compiling flag +USE_WUT := 0 + +# Links against the wut implementation of newlib, this is useful for using any function +# from the C standard library +WUT_ENABLE_NEWLIB := 0 + +# Links against the wut implementation of stdcpp, this is useful for using any function +# from the C++ standard library. This will enable WUT_ENABLE_NEWLIB if you have not already done so. +WUT_ENABLE_CPP := 0 + +# By default newlib will allocate 90% of the default heap for use with sbrk & malloc, +# if this is unacceptable to you then you should use this as it replaces the newlib +# malloc functions which ones which redirect to the CafeOS default heap functions +# such as MEMAllocFromDefaultHeap. +WUT_DEFAULT_MALLOC := 0 # Target filename TARGET := $(notdir $(CURDIR)).mod @@ -39,7 +56,7 @@ LIBDIRS := $(WUPSDIR) $(PORTLIBS) #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs +LIBS := -lwups #--------------------------------------------------------------------------------- # Will be added to the final lib paths @@ -52,4 +69,4 @@ EXTERNAL_LIBPATHS := # Will be added to the final include paths # -IC:/library1/include #--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils +EXTERNAL_INCLUDE := diff --git a/ide_templates/codeblocks/src/main.cpp b/ide_templates/codeblocks/src/main.cpp index b8bda00..c91777e 100644 --- a/ide_templates/codeblocks/src/main.cpp +++ b/ide_templates/codeblocks/src/main.cpp @@ -1,54 +1,65 @@ #include #include #include -#include -#include -#include -#include + +/** + https://github.com/Maschell/WiiUPluginSystem/wiki/How-to-develope-a-new-plugin#meta-information +**/ // Mandatory plugin information. WUPS_PLUGIN_NAME("Plugin template"); WUPS_PLUGIN_DESCRIPTION("Description"); WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("USERNAME"); +WUPS_PLUGIN_AUTHOR("(USER)NAME"); WUPS_PLUGIN_LICENSE("BSD"); -// FS Access +/** + Hooks: + https://github.com/Maschell/WiiUPluginSystem/wiki/Using-hooks +**/ + +// FS Access (replaces open/close/write/read etc. functions) WUPS_FS_ACCESS() // Overlay access -WUPS_ALLOW_OVERLAY() +//WUPS_ALLOW_OVERLAY() -// Gets called once the loader exists. +// Gets called once when the loader exits. INITIALIZE_PLUGIN(){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - - log_init(); - DEBUG_FUNCTION_LINE("INITIALIZE_PLUGIN\n"); } // Called whenever an application was started. ON_APPLICATION_START(){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); +} - log_init(); +// Called whenever functions where patched by the loader +ON_FUNCTIONS_PATCHED(){ +} - DEBUG_FUNCTION_LINE("ON_APPLICATION_START\n"); +// Get called when ever GX2_VSYNC() was called (on each frame) +ON_VYSNC(){ +} + +// Gets called whenever the status of the running application changes. +ON_APP_STATUS_CHANGED(status){ } // Called whenever an application is ending ON_APPLICATION_ENDING(){ - DEBUG_FUNCTION_LINE("ON_APPLICATION_ENDING\n"); } -// Lets replace FSOpenFile -DECL_FUNCTION(int, FSOpenFile, FSClient *pClient, FSCmdBlock *pCmd, const char *path, const char *mode, int *handle, int error) { - int result = real_FSOpenFile(pClient, pCmd, path, mode, handle, error); +// Gets called once when the loader is loaded again at the plugins will be unloaded +DEINITIALIZE_PLUGIN(){ +} - log_printf("FSOpenFile called for folder %s! Result %d\n",path,result); - return result; +/** + Function replacing. + https://github.com/Maschell/WiiUPluginSystem/wiki/Function-replacing +**/ + +// Lets replace OSIsHomeButtonMenuEnabled to allows the home button anywhere. (Not a great idea.) +DECL_FUNCTION(bool, OSIsHomeButtonMenuEnabled) { + return true; } // Replace it. -WUPS_MUST_REPLACE(FSOpenFile, WUPS_LOADER_LIBRARY_COREINIT, FSOpenFile); +WUPS_MUST_REPLACE(OSIsHomeButtonMenuEnabled, WUPS_LOADER_LIBRARY_COREINIT, OSIsHomeButtonMenuEnabled); diff --git a/plugins/Makefile b/plugins/Makefile deleted file mode 100644 index 7ff24c3..0000000 --- a/plugins/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -SUBDIRS = $(shell ls -d */) - -.PHONY: all clean - -all: - for dir in $(SUBDIRS); do \ - $(MAKE) -C $$dir -f Makefile; \ - done - -clean: - for dir in $(SUBDIRS); do \ - $(MAKE) -C $$dir -f Makefile clean; \ - done \ No newline at end of file diff --git a/plugins/example_plugin/Makefile b/plugins/example_plugin/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/example_plugin/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/example_plugin/README.md b/plugins/example_plugin/README.md deleted file mode 100644 index 6d9f374..0000000 --- a/plugins/example_plugin/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Example plugin - -This is just a simple example plugin which can be used as a template. - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/example_plugin/makefile.mk b/plugins/example_plugin/makefile.mk deleted file mode 100644 index 6012d38..0000000 --- a/plugins/example_plugin/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/example_plugin/src/main.cpp b/plugins/example_plugin/src/main.cpp deleted file mode 100644 index 7b2e530..0000000 --- a/plugins/example_plugin/src/main.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include -#include -#include -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "dynamic_libs/fs_functions.h" -#include "utils/logger.h" - -/** - Mandatory plugin information. - If not set correctly, the loader will refuse to use the plugin. -**/ -WUPS_PLUGIN_NAME("Example plugin"); -WUPS_PLUGIN_DESCRIPTION("This is just an example plugin and will log the FSOpenFile function."); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("BSD"); - -/** - Add this to one of your projects file to have access to SD/USB. -**/ -WUPS_FS_ACCESS() -/** - Add this to one of your projects file to be able to create overlays. -**/ -WUPS_ALLOW_OVERLAY() - -/** - All of this defines can be used in ANY file. - It's possible to split it up into multiple files. - -**/ - -/** - Get's called ONCE when the loader exits, but BEFORE the ON_APPLICATION_START gets called or functions are overridden. -**/ -INITIALIZE_PLUGIN(){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - - log_init(); - DEBUG_FUNCTION_LINE("INITIALIZE_PLUGIN of example_plugin!\n"); -} - -/** - Gets called when the plugin loader is re-entered => when the plugin is unloaded. - The overridden functions are restored before this is getting called. -**/ -DEINITIALIZE_PLUGIN(){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - - log_init(); - DEBUG_FUNCTION_LINE("DEINITIALIZE_PLUGIN of example_plugin!\n"); -} - -/** - Gets called when an application starts. - This is called BEFORE the functions are overridden. - Make sure to initialize all functions you're using in the overridden functions! -**/ -ON_APPLICATION_START(){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - - log_init(); - - DEBUG_FUNCTION_LINE("ON_APPLICATION_START of example_plugin!\n"); -} - -/** - Gets called when an application ends. A good place for freeing memory. -**/ -ON_APPLICATION_ENDING(){ - DEBUG_FUNCTION_LINE("ON_APPLICATION_ENDING of example_plugin!\n"); -} - -/** - Gets called on each frame. -**/ -ON_VYSNC(){ - DEBUG_FUNCTION_LINE("ON_VYSNC of example_plugin!\n"); -} - -/** -Gets called whenever the application status changes. - -Possible values of "status": - WUPS_APP_STATUS_FOREGROUND, App is now running in foreground - WUPS_APP_STATUS_BACKGROUND App is now running in background - WUPS_APP_STATUS_CLOSED App is going to be closed -**/ -ON_APP_STATUS_CHANGED(status){ - if(status == WUPS_APP_STATUS_FOREGROUND){ - DEBUG_FUNCTION_LINE("ON_APP_STATUS_CHANGED of example_plugin! App is now in foreground\n"); - } else if(status == WUPS_APP_STATUS_BACKGROUND){ - DEBUG_FUNCTION_LINE("ON_APP_STATUS_CHANGED of example_plugin! App is now in background\n"); - } else if(status == WUPS_APP_STATUS_CLOSED){ - DEBUG_FUNCTION_LINE("ON_APP_STATUS_CHANGED of example_plugin! App is now going to be closed\n"); - } -} - -/** - This defines a function replacement. - It allows to replace the system function with an own function. - So whenever a game / application calles an overridden function, your function gets called instead. - - Currently it's only possible to override functions that are loaded from .rpl files of OSv10 (00050010-1000400A). - - Signature of this macro: - DECL_FUNCTION( RETURN_TYPE, ARBITRARY_NAME_OF_FUNCTION , ARGS_SEPERATED_BY_COMMA){ - //Your code goes here. - } - - Within this macro, two more function get declare you can use. - my_ARBITRARY_NAME_OF_FUNCTION and real_FSOpenFile - - RETURN_TYPE my_ARBITRARY_NAME_OF_FUNCTION(ARGS_SEPERATED_BY_COMMA): - is just name of the function that gets declared in this macro. - It has the same effect as calling the overridden function directly. - - RETURN_TYPE real_ARBITRARY_NAME_OF_FUNCTION(ARGS_SEPERATED_BY_COMMA): - is the name of the function, that leads to function that was overridden. - Use this to call the original function that will be overridden. - CAUTION: Other plugins may already have manipulated the the return value or arguments. - - - Use this macro for each function you want to override - -**/ -DECL_FUNCTION(int, FSOpenFile, FSClient *pClient, FSCmdBlock *pCmd, const char *path, const char *mode, int *handle, int error) { - int result = real_FSOpenFile(pClient, pCmd, path, mode, handle, error); - - log_printf("FSOpenFile called for folder %s! Result %d\n",path,result); - return result; -} - -/** -This tells the loader which functions from which library (.rpl) should be replaced with which function from this file. -The list of possible libraries can be found in the wiki. (In general it's WUPS_LOADER_LIBRARY_ + the name of the RPL in caps lock) - -WUPS_MUST_REPLACE(FUNCTION_NAME_IN_THIS_FILE, NAME_OF_LIB_WHICH_CONTAINS_THIS_FUNCTION, NAME_OF_FUNCTION_TO_OVERRIDE) - -Define this for each function you want to override. -**/ -WUPS_MUST_REPLACE(FSOpenFile, WUPS_LOADER_LIBRARY_COREINIT, FSOpenFile); diff --git a/plugins/example_plugin_wut/Makefile b/plugins/example_plugin_wut/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/example_plugin_wut/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/example_plugin_wut/README.md b/plugins/example_plugin_wut/README.md deleted file mode 100644 index df01f44..0000000 --- a/plugins/example_plugin_wut/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Example plugin - -This is just a simple example plugin which can be used as a template. - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [wut](https://github.com/decaf-emu/wut) - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/example_plugin_wut/makefile.mk b/plugins/example_plugin_wut/makefile.mk deleted file mode 100644 index 3924977..0000000 --- a/plugins/example_plugin_wut/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 0 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 1 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lwhb -lwutstdc++ -lwutnewlib -lwutmalloc -lcoreinit -lnsysnet -lnn_ac - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := diff --git a/plugins/example_plugin_wut/src/main.cpp b/plugins/example_plugin_wut/src/main.cpp deleted file mode 100644 index 808bf55..0000000 --- a/plugins/example_plugin_wut/src/main.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include -#include -#include -#include -/** - Mandatory plugin information. - If not set correctly, the loader will refuse to use the plugin. -**/ -WUPS_PLUGIN_NAME("Example plugin"); -WUPS_PLUGIN_DESCRIPTION("This is just an example plugin and will log the FSOpenFile function."); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("BSD"); - -/** - Add this to one of your projects file to have access to SD/USB. -**/ -WUPS_FS_ACCESS() -/** - Add this to one of your projects file to be able to create overlays. -**/ -WUPS_ALLOW_OVERLAY() - -/** - All of this defines can be used in ANY file. - It's possible to split it up into multiple files. - -**/ - -/** - Get's called ONCE when the loader exits, but BEFORE the ON_APPLICATION_START gets called or functions are overridden. -**/ -INITIALIZE_PLUGIN(){ - WHBLogUdpInit(); - WHBLogPrintf("INITIALIZE_PLUGIN"); - WHBLogUdpDeinit(); -} - - -/** - Gets called when the plugin loader is re-entered => when the plugin is unloaded. - The overridden functions are restored before this is getting called. -**/ -DEINITIALIZE_PLUGIN(){ - WHBLogPrintf("DEINITIALIZE_PLUGIN"); - WHBLogUdpDeinit(); -} - -/** - Gets called when an application starts. - This is called BEFORE the functions are overridden. - Make sure to initialize all functions you're using in the overridden functions! -**/ -ON_APPLICATION_START(){ - WHBLogUdpInit(); - WHBLogPrintf("ON_APPLICATION_START of example_plugin!"); - -} - -/** - Gets called when an application ends. A good place for freeing memory. -**/ -ON_APPLICATION_ENDING(){ - WHBLogPrintf("ON_APPLICATION_ENDING of example_plugin!"); - WHBLogUdpDeinit(); -} - -/** - Gets called on each frame. -**/ -ON_VYSNC(){ - WHBLogPrintf("ON_VYSNC of example_plugin!\n"); -} - -/** -Gets called whenever the application status changes. - -Possible values of "status": - WUPS_APP_STATUS_FOREGROUND, App is now running in foreground - WUPS_APP_STATUS_BACKGROUND App is now running in background - WUPS_APP_STATUS_CLOSED App is going to be closed -**/ -ON_APP_STATUS_CHANGED(status){ - if(status == WUPS_APP_STATUS_FOREGROUND){ - WHBLogPrintf("ON_APP_STATUS_CHANGED of example_plugin! App is now in foreground"); - } else if(status == WUPS_APP_STATUS_BACKGROUND){ - WHBLogPrintf("ON_APP_STATUS_CHANGED of example_plugin! App is now in background"); - } else if(status == WUPS_APP_STATUS_CLOSED){ - WHBLogPrintf("ON_APP_STATUS_CHANGED of example_plugin! App is now going to be closed"); - } -} - -/** - This defines a function replacement. - It allows to replace the system function with an own function. - So whenever a game / application calles an overridden function, your function gets called instead. - - Currently it's only possible to override functions that are loaded from .rpl files of OSv10 (00050010-1000400A). - - Signature of this macro: - DECL_FUNCTION( RETURN_TYPE, ARBITRARY_NAME_OF_FUNCTION , ARGS_SEPERATED_BY_COMMA){ - //Your code goes here. - } - - Within this macro, two more function get declare you can use. - my_ARBITRARY_NAME_OF_FUNCTION and real_FSOpenFile - - RETURN_TYPE my_ARBITRARY_NAME_OF_FUNCTION(ARGS_SEPERATED_BY_COMMA): - is just name of the function that gets declared in this macro. - It has the same effect as calling the overridden function directly. - - RETURN_TYPE real_ARBITRARY_NAME_OF_FUNCTION(ARGS_SEPERATED_BY_COMMA): - is the name of the function, that leads to function that was overridden. - Use this to call the original function that will be overridden. - CAUTION: Other plugins may already have manipulated the the return value or arguments. - - - Use this macro for each function you want to override - -**/ -DECL_FUNCTION(int, FSOpenFile, FSClient *pClient, FSCmdBlock *pCmd, const char *path, const char *mode, int *handle, int error) { - int result = real_FSOpenFile(pClient, pCmd, path, mode, handle, error); - - WHBLogPrintf("FSOpenFile called for folder %s! Result %d",path,result); - return result; -} - -/** -This tells the loader which functions from which library (.rpl) should be replaced with which function from this file. -The list of possible libraries can be found in the wiki. (In general it's WUPS_LOADER_LIBRARY_ + the name of the RPL in caps lock) - -WUPS_MUST_REPLACE(FUNCTION_NAME_IN_THIS_FILE, NAME_OF_LIB_WHICH_CONTAINS_THIS_FUNCTION, NAME_OF_FUNCTION_TO_OVERRIDE) - -Define this for each function you want to override. -**/ -WUPS_MUST_REPLACE(FSOpenFile, WUPS_LOADER_LIBRARY_COREINIT, FSOpenFile); diff --git a/plugins/hid_to_vpad/Makefile b/plugins/hid_to_vpad/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/hid_to_vpad/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/hid_to_vpad/README.md b/plugins/hid_to_vpad/README.md deleted file mode 100644 index 2a8d0b1..0000000 --- a/plugins/hid_to_vpad/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# HIDtoVPAD Plugin for the Wii U Plugin System - -See https://github.com/Maschell/hid_to_vpad for more information. - -# Currently supported - -- Support for Controller with built in support. -- Network Client support -- All attached devices are mapped automatically to the Gamepad -- Loading configuration files (to extend controller support or change configs) - -Whats NOT working: - -- Mapping the controllers individually (No GUI for this) - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. -- [controller_patcher](https://github.com/Maschell/controller_patcher) to emulate the controllers. - - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/hid_to_vpad/makefile.mk b/plugins/hid_to_vpad/makefile.mk deleted file mode 100644 index 33970e8..0000000 --- a/plugins/hid_to_vpad/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lcontrollerpatcher -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/hid_to_vpad/src/main.cpp b/plugins/hid_to_vpad/src/main.cpp deleted file mode 100644 index 6b7b0ba..0000000 --- a/plugins/hid_to_vpad/src/main.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -WUPS_PLUGIN_NAME("HID to VPAD lite"); -WUPS_PLUGIN_DESCRIPTION("Enables HID devices as controllers on your Wii U"); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -// We want access to the SDCard! -WUPS_FS_ACCESS() - -#define SD_PATH "sd:" -#define WIIU_PATH "/wiiu" -#define DEFAULT_HID_TO_VPAD_PATH SD_PATH WIIU_PATH "/apps/hidtovpad" - -DEINITIALIZE_PLUGIN(){ - //CursorDrawer::destroyInstance(); - ControllerPatcher::DeInit(); - ControllerPatcher::stopNetworkServer(); -} - -ON_APPLICATION_START(args){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - InitVPadFunctionPointers(); - InitProcUIFunctionPointers(); - InitPadScoreFunctionPointers(); - - log_init(); - - DEBUG_FUNCTION_LINE("Initializing the controller data\n"); - ControllerPatcher::Init(CONTROLLER_PATCHER_PATH); - ControllerPatcher::disableControllerMapping(); - DEBUG_FUNCTION_LINE("Starting HID to VPAD network server\n"); - ControllerPatcher::startNetworkServer(); -} - -ON_APP_STATUS_CHANGED(status){ - if(status == WUPS_APP_STATUS_CLOSED){ - //CursorDrawer::destroyInstance(); - DEBUG_FUNCTION_LINE("ON_APPLICATION_ENDING\n"); - ControllerPatcher::destroyConfigHelper(); - DEBUG_FUNCTION_LINE("Calling stopNetworkServer\n"); - ControllerPatcher::stopNetworkServer(); - DEBUG_FUNCTION_LINE("Calling resetCallbackData\n"); - ControllerPatcher::resetCallbackData(); - } -} - -DECL_FUNCTION(s32, VPADRead, s32 chan, VPADData *buffer, u32 buffer_size, s32 *error) { - s32 result = real_VPADRead(chan, buffer, buffer_size, error); - //A keyboard only sends data when the state changes. We force it to call the sampling callback on each frame! - ControllerPatcher::sampleKeyboardData(); - - bool do_callback = (result > 0 && (buffer[0].btns_h & VPAD_BUTTON_TV)); - ControllerPatcher::handleCallbackData(do_callback); - - if(ControllerPatcher::areControllersConnected() && buffer_size > 0){ - ControllerPatcher::setRumble(UController_Type_Gamepad,!!VPADBASEGetMotorOnRemainingCount(0)); - - if(ControllerPatcher::setControllerDataFromHID(buffer) == CONTROLLER_PATCHER_ERROR_NONE){ - - if(buffer[0].btns_h & VPAD_BUTTON_HOME){ - //You can open the home menu this way, but not close it. Need a proper way to close it using the same button... - //OSSendAppSwitchRequest(5,0,0); //Open the home menu! - } - - if(error != NULL){ - *error = 0; - } - result = 1; // We want the WiiU to ignore everything else. - } - } - - if(ControllerPatcher::isButtonRemappingDone()){ - ControllerPatcher::buttonRemapping(buffer,result); - //ControllerPatcher::printVPADButtons(buffer); //Leads to random crashes on app transitions. - } - - return result; -} - -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); diff --git a/plugins/memory_info/Makefile b/plugins/memory_info/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/memory_info/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/memory_info/README.md b/plugins/memory_info/README.md deleted file mode 100644 index 5dcdd1d..0000000 --- a/plugins/memory_info/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Memory info for the Wii U Plugin System - -Prints information about the current memory usage when pressing L+R+X+Y+A+B via the UDPReader - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. - - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/memory_info/makefile.mk b/plugins/memory_info/makefile.mk deleted file mode 100644 index 6012d38..0000000 --- a/plugins/memory_info/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/memory_info/src/c_retain_vars.c b/plugins/memory_info/src/c_retain_vars.c deleted file mode 100644 index af87a4c..0000000 --- a/plugins/memory_info/src/c_retain_vars.c +++ /dev/null @@ -1,27 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#include "c_retain_vars.h" - -memHeapInfo expHeapPointer[MAX_EXP_HEAP_INFOS] __attribute__((section(".data"))); -memHeapInfo frmHeapPointer[MAX_FRM_HEAP_INFOS] __attribute__((section(".data"))); -memUnitHeapInfo unitHeapPointer[MAX_UNIT_HEAP_INFOS] __attribute__((section(".data"))); - -baseHeapInfo baseHeaphandles[MAX_BASE_HEAP_INFOS] __attribute__((section(".data"))); -blockHeapInfo blockHeapInfos[MAX_BLOCK_HEAP_INFOS] __attribute__((section(".data"))); -memHeapInfo userHeapInfos[MAX_USER_HEAP_INFOS] __attribute__((section(".data"))); - -u8 gButtonComboCooldown __attribute__((section(".data"))) = 0; diff --git a/plugins/memory_info/src/c_retain_vars.h b/plugins/memory_info/src/c_retain_vars.h deleted file mode 100644 index 13077fe..0000000 --- a/plugins/memory_info/src/c_retain_vars.h +++ /dev/null @@ -1,32 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#ifndef C_RETAINS_VARS_H_ -#define C_RETAINS_VARS_H_ - -#include "memory_defs.h" - -extern memHeapInfo expHeapPointer[MAX_EXP_HEAP_INFOS]; -extern memHeapInfo frmHeapPointer[MAX_FRM_HEAP_INFOS]; -extern memUnitHeapInfo unitHeapPointer[MAX_UNIT_HEAP_INFOS]; - -extern baseHeapInfo baseHeaphandles[MAX_BASE_HEAP_INFOS]; -extern blockHeapInfo blockHeapInfos[MAX_BLOCK_HEAP_INFOS]; -extern memHeapInfo userHeapInfos[MAX_USER_HEAP_INFOS]; - -extern u8 gButtonComboCooldown; - -#endif // C_RETAINS_VARS_H_ diff --git a/plugins/memory_info/src/common_hooks.c b/plugins/memory_info/src/common_hooks.c deleted file mode 100644 index 4704c3c..0000000 --- a/plugins/memory_info/src/common_hooks.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include -#include -#include -#include "main.h" - -DECL_FUNCTION(void, __PPCExit, void) { - // We reset them at ende, in case at application even uses the functions - // BEFORE with have our init hook. - memset(expHeapPointer,0,sizeof(expHeapPointer)); - memset(unitHeapPointer,0,sizeof(unitHeapPointer)); - memset(frmHeapPointer,0,sizeof(frmHeapPointer)); - memset(baseHeaphandles,0,sizeof(baseHeaphandles)); - memset(userHeapInfos,0,sizeof(userHeapInfos)); - real___PPCExit(); -} - -DECL_FUNCTION(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error) { - int result = real_VPADRead(chan, buffer, buffer_size, error); - - int btns = VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_A | VPAD_BUTTON_B | VPAD_BUTTON_X | VPAD_BUTTON_Y; - if(result > 0 && ((buffer[0].btns_h & (btns)) == btns) && gButtonComboCooldown == 0 && OSIsHomeButtonMenuEnabled()) { - print_memory_info(); - gButtonComboCooldown = 0x3C; - } - if(gButtonComboCooldown > 0) { - gButtonComboCooldown--; - } - return result; -} - -WUPS_MUST_REPLACE(__PPCExit, WUPS_LOADER_LIBRARY_COREINIT, __PPCExit); -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); diff --git a/plugins/memory_info/src/main.c b/plugins/memory_info/src/main.c deleted file mode 100644 index 64c5b6d..0000000 --- a/plugins/memory_info/src/main.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -#include -#include -#include -#include "main.h" - -WUPS_PLUGIN_NAME("Memory Info"); -WUPS_PLUGIN_DESCRIPTION("Prints information about the current memory usage when pressing L+R+X+Y+A+B."); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -ON_APPLICATION_START(args) { - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - log_init(); - //InitVPadFunctionPointers(); -} - -void printMemHeapInfo(memHeapInfo * listStart, u32 listLength, const char * listname) { - for(int i = 0; i "); - } else { - log_printf(" parent: 0x%08X ", parent); - } - log_printf(" address 0x%08X handle 0x%08X size %07d kb old size %07d kb flags 0x%04X\n",listStart[i].address,listStart[i].handle,listStart[i].size/1024,listStart[i].oldSize/1024,listStart[i].flags); - } - } -} - -void print_memory_info() { - DEBUG_FUNCTION_LINE("Print expanded heap infos\n"); - printMemHeapInfo(expHeapPointer,MAX_EXP_HEAP_INFOS, "Expanded heap:"); - - DEBUG_FUNCTION_LINE("Print frmHeap\n"); - printMemHeapInfo(frmHeapPointer,MAX_FRM_HEAP_INFOS, "Frame heap:"); - - DEBUG_FUNCTION_LINE("Print unitHeap\n"); - for(int i = 0; i. - ****************************************************************************/ -#ifndef MAIN_H_ -#define MAIN_H_ - -#include "memory_defs.h" -#include "c_retain_vars.h" - -void print_memory_info(); - -#endif // MAIN_H_ diff --git a/plugins/memory_info/src/memory_defs.h b/plugins/memory_info/src/memory_defs.h deleted file mode 100644 index d32a3c1..0000000 --- a/plugins/memory_info/src/memory_defs.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ - -#ifndef _MEMORY_DEFS_H_ -#define _MEMORY_DEFS_H_ - -#include - -#define MAX_USER_HEAP_INFOS 50 -#define MAX_FRM_HEAP_INFOS 50 -#define MAX_EXP_HEAP_INFOS 50 -#define MAX_UNIT_HEAP_INFOS 50 -#define MAX_ALLOCATOR_EXP_INFOS 50 -#define MAX_BASE_HEAP_INFOS 50 -#define MAX_BLOCK_HEAP_INFOS 50 - -typedef struct memHeapInfo_ { - s32 handle; - void * address; - u32 size; - u32 oldSize; - u16 flags; -} memHeapInfo; - -typedef struct memUnitHeapInfo_ { - s32 handle; - void * address; - u32 heapSize; - u32 memSize; - u32 align; - u16 flags; -} memUnitHeapInfo; - -typedef struct baseHeapInfo_ { - s32 oldHandle; - s32 newHandle; - s32 memArena; -} baseHeapInfo; - -typedef struct blockHeapInfo_ { - s32 handle; - void * tracking; - void * startAddress; - void * endAddress; - void * initTrackMem; - u32 initTrackMemBytes; - u16 flags; -} blockHeapInfo; - -#endif diff --git a/plugins/memory_info/src/memory_hooks.c b/plugins/memory_info/src/memory_hooks.c deleted file mode 100644 index a5e7b87..0000000 --- a/plugins/memory_info/src/memory_hooks.c +++ /dev/null @@ -1,244 +0,0 @@ -#include -#include -#include "memory_defs.h" -#include "c_retain_vars.h" - -DECL_FUNCTION(s32, MEMCreateFrmHeapEx, void* address, u32 size, u16 flags) { - s32 result = real_MEMCreateFrmHeapEx(address,size,flags); - for(int i = 0; i 0x3B600000 && (u32) address < 0x11000000){ - //We are pretty sure this the MEM2 default heap. - //Let's try to increase it's capacity. - //u32 maximumSize = 0x50000000 - (u32) address; - u32 maximumSize = 0x80000000; - //u32 maximumSize = size + 0x500000; - maximumSize -= 0x500000; // remove 5MB, just to leave at least _some_ space. - - u32 curSizeTest = maximumSize; - - do{ - if(curSizeTest < oldSize){ - break; - } - result = real_MEMCreateExpHeapEx(address,curSizeTest,flags); - if(result == 0){ // On failure: - maximumSize -= 0x100000; // reduce by 1MB and try again. - }else{ - allocated = true; - break; - } - }while(!allocated); // Until the allocation was successful, or we are below default size. - }*/ - if(!allocated || result == 0) { - result = real_MEMCreateExpHeapEx(address,size,flags); - } - - for(int i = 0; idevkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/nnu_patcher/makefile.mk b/plugins/nnu_patcher/makefile.mk deleted file mode 100644 index 6012d38..0000000 --- a/plugins/nnu_patcher/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/nnu_patcher/src/main.cpp b/plugins/nnu_patcher/src/main.cpp deleted file mode 100644 index f5c675d..0000000 --- a/plugins/nnu_patcher/src/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include - -WUPS_PLUGIN_NAME("NNU Patcher"); -WUPS_PLUGIN_DESCRIPTION("Enables eshop access on lower firmware versions."); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("BSD"); - -DECL_FUNCTION(int, NeedsNetworkUpdate__Q2_2nn3nimFPb, bool * result){ - *result = 0; - return 0; -} - -WUPS_MUST_REPLACE(NeedsNetworkUpdate__Q2_2nn3nimFPb,WUPS_LOADER_LIBRARY_NN_NIM, NeedsNetworkUpdate__Q2_2nn3nimFPb); diff --git a/plugins/overlay/Makefile b/plugins/overlay/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/overlay/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/overlay/makefile.mk b/plugins/overlay/makefile.mk deleted file mode 100644 index 6012d38..0000000 --- a/plugins/overlay/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/overlay/src/function_patcher.cpp b/plugins/overlay/src/function_patcher.cpp deleted file mode 100644 index 88969c5..0000000 --- a/plugins/overlay/src/function_patcher.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#include -#include "main.h" -#include -#include -#include -#include - -void SplashScreen_callback(wups_overlay_options_type_t screen){ - s32 i=0; - - while(i<100){ - WUPS_Overlay_OSScreenClear(screen); - - WUPS_Overlay_PrintTextOnScreen(screen, 0,0,"This could be something cool."); - WUPS_Overlay_PrintTextOnScreen(screen, 0,5,"Testing changing text: %d",i); - - WUPS_Overlay_FlipBuffers(screen); - - i++; - } -} - - -u8 gCallbackCooldown __attribute__((section(".data"))) = 0; - -DECL_FUNCTION(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error) { - int result = real_VPADRead(chan, buffer, buffer_size, error); - u32 btns = VPAD_BUTTON_Y | VPAD_BUTTON_X | VPAD_BUTTON_A | VPAD_BUTTON_B; - if(result > 0 && ((buffer[0].btns_h & (btns)) == btns) && gCallbackCooldown == 0 ){ - gCallbackCooldown = 0x3C; - - //WUPS_OpenOverlay(WUPS_OVERLAY_DRC_ONLY ,SplashScreen_callback); - //WUPS_OpenOverlay(WUPS_OVERLAY_DRC_ONLY ,SplashScreen_callback); - //WUPS_OpenOverlay(WUPS_OVERLAY_TV_ONLY ,SplashScreen_callback); - WUPS_OpenOverlay(WUPS_OVERLAY_DRC_AND_TV ,SplashScreen_callback); - //WUPS_OpenOverlay(WUPS_OVERLAY_DRC_AND_TV_WITH_DRC_PRIO ,SplashScreen_callback); - } - if(gCallbackCooldown > 0){ - gCallbackCooldown--; - } - - return result; -} - -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); \ No newline at end of file diff --git a/plugins/overlay/src/main.cpp b/plugins/overlay/src/main.cpp deleted file mode 100644 index e5bb55c..0000000 --- a/plugins/overlay/src/main.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include "main.h" - -WUPS_PLUGIN_NAME("Overlay test"); -WUPS_PLUGIN_DESCRIPTION("Just an overlay test. Press A,B,X and Y and a text should appear."); -WUPS_PLUGIN_VERSION("v0.1"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -/* - To be able to create overlays -*/ -WUPS_ALLOW_OVERLAY() - -/* Entry point */ -ON_APPLICATION_START(args){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); //For logging - InitVPadFunctionPointers(); - InitFSFunctionPointers(); - - InitGX2FunctionPointers(); - - log_init(); - - DEBUG_FUNCTION_LINE("OVERLAYTEST INIT DONE.\n"); -} \ No newline at end of file diff --git a/plugins/overlay/src/main.h b/plugins/overlay/src/main.h deleted file mode 100644 index 7336311..0000000 --- a/plugins/overlay/src/main.h +++ /dev/null @@ -1,34 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ - -#ifndef _MAIN_H_ -#define _MAIN_H_ - -#include -#include - -/* Main */ -#ifdef __cplusplus -extern "C" { -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/plugins/padcon/Makefile b/plugins/padcon/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/padcon/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/padcon/README.md b/plugins/padcon/README.md deleted file mode 100644 index 796220c..0000000 --- a/plugins/padcon/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Padcon Plugin for the Wii U Plugin System - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. - - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/padcon/makefile.mk b/plugins/padcon/makefile.mk deleted file mode 100644 index 970431d..0000000 --- a/plugins/padcon/makefile.mk +++ /dev/null @@ -1,59 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/padcon/src/main.c b/plugins/padcon/src/main.c deleted file mode 100644 index 9bf1812..0000000 --- a/plugins/padcon/src/main.c +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include "dynamic_libs/os_functions.h" -#include "dynamic_libs/vpad_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "utils/logger.h" - -WUPS_PLUGIN_NAME("Padcon"); -WUPS_PLUGIN_DESCRIPTION("Turns the gamepad screen on/off when pressing the right stick."); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -ON_APPLICATION_START(args){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - InitVPadFunctionPointers(); - - log_init(); - - DEBUG_FUNCTION_LINE("Init of padcon!\n"); -} - -DECL_FUNCTION(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error) { - int result = real_VPADRead(chan, buffer, buffer_size, error); - if(buffer->btns_r&VPAD_BUTTON_STICK_R) { - int mode; - VPADGetLcdMode(0, (s32*)&mode); // Get current display mode - if(mode != 1) { - VPADSetLcdMode(0, 1); // Turn it off - } - else { - VPADSetLcdMode(0, 0xFF); // Turn it on - } - } - return result; -} - -WUPS_MUST_REPLACE(VPADRead ,WUPS_LOADER_LIBRARY_VPAD, VPADRead); diff --git a/plugins/screenshot/Makefile b/plugins/screenshot/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/screenshot/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/screenshot/README.md b/plugins/screenshot/README.md deleted file mode 100644 index 7549fd2..0000000 --- a/plugins/screenshot/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Screenshot tool - -This is just a simple plugin that takes screenshot of the TV and DRC screen. The screenshot will saved on the sd card. - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. - -You also need some other, external libraries. - -All needed dependencies are in the "libs" folder of this plugin. Extract the "portlibs.zip" archive into your devkitPro directory. -The archive includes: - -- gd -- libjpeg \ No newline at end of file diff --git a/plugins/screenshot/libs/portlibs.zip b/plugins/screenshot/libs/portlibs.zip deleted file mode 100644 index 0b155d8cdb3753c41e6dc75c015043ae0b90ea93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293588 zcmZ^~bBr%e@GUqt@9>Uo+qUr;+qP}nw(i)rZQHgzv){Mb?7sZ6um9-oq)&Cy>7=Tw z>l_7XP%s#v|JA1Dbfo|9$^X+q|2Nv(IXYWg7&_4_{J*fN{{e&l-(mLlM*kaBDcM}+ zf8P=9e?l#6jjUaaP5y5a)c+QtfEF8dB*06}93LrwfFPoPfd2lUOw5ew%&W9~oQT+y zemA{ghRdV+L+T0Fr=3pd)YhW9XWm0V*g93*)aV$CfQOljJjAd-C3$zhJG3&{;bPZg zDiguGn>w_rZ}eJ+UYYJh`|$9)Nv2qSR*|TQ7t(Qc@f!HCcca$Q1dD(V4RPGR_wS7k zz1~QS1ohNg6~BGi-<}P=-Zt%d+CAFLx;0m)eM%~|uCWm9!h*)@&Uh+a5qf1tg9 z!^Q*gRUzAIM#r7Ko&2T|ymD+$uZCi*vhf-bBQrwu@onugW{u>tnfc*{sT9i%CPTv4 zX_5-)4?Xy*wmJNfnW)6qW;sYCRECNz8r3tv+4TJmfqEFx8YAEan?HZe{(f4PYb=Ub z_bKxqFk+WX%<>ScRB7S5dP{vhbD8DrtaHKwCeQ;viI$sd@@5Qzn(le=LZibp>(!z3 z-dOh8%bD>SqWX_c8XWqJ@__Y-ObFvn|K`DN8!Uz_S*ODM6tC|cgnCd(wIwkBm1?xb zp()X*BSD*0GRbTL%X7hQG8C92hOhJxvdXQw#QFW?{PcGEH9|b8@R%rqdVdj+&~qo0 z2e)|q*~g<4+mc300&ba4^z4srh%|G`bC~8>glKzEr!b?W84+k(&wOV>%LR6sSc7HW zDj5O(6Dp}`LTL}d8%>PTJ18(olurFQqZz(SLZ)>UhCfj%Zt3;q&1sF6dc<+fm1R~o zD#s&^G`$;3S*q>-?1QPhgD^5^YND z%3JnE2Es%Io&4xj?&zve*RUMfGELHMHaF0uNV$fh4BQA82>h{i#|GQ5mdWy{;%z*} zWl&UN%Z~Zjz=FnTo6oF?7G_n5{co*KWPFVysFs@Z^kAEFjSjEr?`y6j8h+jifbomT z6H^|aAFecLbpFlYBJ>)^$%(yVyI#CDal1#}PTl%*Dm$c=p0cP`XJLA46hRjrA%=;g zkEWWapNLb>zxSxVzp*;R06$bMNWOJ(v@-1T+??Utyt}OIKwzd3us7bU#}!op3|E%d zUzb4VeXLo|2P9S^@bQ>MX?5sWkB_92dW8mBIE$X zoPr012|Rs0x&2JZA0G3l=LE8I>9};3jRo+rlAXCtoCPV94bJQHr1M3u8~oN)pfv2@ z&uSDa^_O0X)X|M6Y;u7w$wIio`!?%l|<>j8HxkG{P5(G2QK^ zJGLlYT%_N=dEw_Mk%=#h<=7S@Fdu~vk<^8Pp?j3v>))rj+<))Baaz^!^EtgHoMS35~swq_vczb zft!vkb00uT6=+4xT*;4M79f0rmh8^P-URATRC>ZNc1h)!dlqUzFj~y~Q%vV>78V5E znc<9J5FQDnuI=9klAtW(*j}3>jn=#_d*!0gTxY^WBZEfvQ&0-dg%8fuJ1U}%Yu%!+*RhS{veFobqk>ID5?L1FGFy@}Gn z_TO+>bVd1o8ls*=Mf7@(C{rTQ^FMenpfAwWWeW#PtIkY^SltdH{!I?{C`l%?XgJL* zV?z2C(7OwB;#^MnK4w|fDq`+R;Ai{FF}B|tEC@tRmJb!VFe(+aBC{-n?)IolkzwNT z>cjgvpKjhR7G+O6-Q<$C@uZn)Zx7z-g@CHWVt zoC)0^igI>xEG#~|&+~BaW&hEB%GVTweGys{c*2Rj-Tp5;STE}$a^Pl=f(4g8Yo@zC zAU%QkXegYu8qGS}P+o{6m@*BO!AcU@GSF0^qu`ha-M0WsN*nCMq9H^mKn~U>D`eOZ z;V3tR8^41O6|o_B`*}}$FM3yTGCLNoZtc2?jn>USFyOtx_V#r8BrNzBg>B!u(FZ11 zJczv?{Bm&wBn|{8&@E-;5)l4o@+g`fkyhPy?VMZ_QZSsU8^xOS_KUx^esNmK{9#qE z=WEcNr^#&!g8%HHrZ!x4^QqGqKL63x*jP!;ev98(T0p?j!vtN{j0F$u1r|iFoU&CQ z|J~>SU7e6uOZAR`a|@1V0dJ4mZB_q|D5+6Qb6Rviy2R%_*d;^>R$WmEUO>=_Dl%SRRRleE?LmA zZlMJmAB0y~bCd+luv8WXwX(|GZfx{3D!r51>Bx~MM5>gW6+!AP>Vfk-fUz(m8!}(+ zK0f_7cr&b2489JgkbYXnAq4Gwai?Q#nBommA8`jlgFetcD>POw#D$I4@@ZX=n(mGE zHH%{!V~pSrUCbkWB&J-Cq`c_O;X*eYJ*^Zj#X_{lG!;M$94VBgfoY4QE@E5sX|<3z zi1}^~nP~wv9h`Jgpi$mL7RY=PS)bBf+7xpr5^|Zf28cyzfy>77+3dQ8YdqA*JRi0K zh4Y_Hq=PSu={_7sP#*s4$0(BJLSZY)!yXkgl29SxAR~M1Rv{F!g%WZfM7SRd@`qPk z>opguFo-l5Nt5e}EER&N?Q5{m-&QA$!dVt+p8*Q~XX`%d z++_*6MCXv2qDw^N^?NoAgx!U790PMKR|yO>uBN5Xu;$-K$~s_XgVa4j!dP8xfLqjy zaVKOp`aTELd-hxXeh3b{EhTI*luyoSHJF{vL3VAlB2o&4kp$u|Qp+DbfKo~6ScR#2 zcWH8stt6*^dHPL#JrAn396A7~a&tvytr%y)Q-&HPtBt9j(ERUT;55!4bPNB_;Q^5^ zJ@kwg#riZ2Vuff6;A%CN)-bpo@B!1bfMy zSVCdnTv)n6G(w}|rDR}^0uoa&3TrIu|5_Zk5dDHsFAc{a($WUUj|`@6Ab?cKuVDB< zyt}gm$d3%J4()k@lb2KRr05eeK{(LUAwg*=36S#DWu=5E8PFMIV3}*XNXvD*JWp1rU7xFP z-frxPNH!?4@x!ky!(qM5${)eb*$|fdYCpHOqU`;s745Y_{ODkFyW)$HZ71RY76WeQ zw~)@9;%Z`yWlSC_Kn$8Z@Im^ zqqOF}Ob0P+qB26R;n7CNLQUTzaarplgNlbp zL#0FFV7qql%y{?P^JEmH|3#^19fzeu-D9t$9s(06Ptt967YHtYA6<#+H!ALj7+r2QZm`FWf+$eP)T#|Zcq(Tcs%l{RHX-z=dzD& z@_1-GKB?GJ3E>QvVUp3ZnWB=8OaoGY`&h9#*5Y7*mb>ltx=prV)vE?cE^AM@Z7Q*- z1XllS8h4-Em;yp!9%|trIZ^a5F}%gg+|yuxT~!pVs1Z@H+ln^^MXoain@a{11b!b= zOh|EqQLV&mJEEH9dPvFB+_5Y$E_et~#A2s<5{8bH+#q+^FzHnvvmhACDXxYX5b>d4 zx>d2C0R(7(;zk14yme?HF{lY?>T{ZXZrKr_3>AEPs-}H9M`{FsiTBDqT%5Rvs1bXY zcdbrJG#GK7fbjK^&b;J7h?8#7-9y;CR2N$1=B_igp{ts>c@5W~l$ykNyu2hmX@hE$ zQB8fbiUsyqC3j^`ABVU9#S4z8>8pOq)xrpg1lAHfv_d^v5uKnJyc~m;`86^~9I+bg z$XQSY^+7lOj_esD6`-2I4=wf5HA2qY_dw|N;-F% z7`PxaG5t-gqCMj~-C^N)%rKcl5!C>{##;&RGu2nX)*@AsqJ@7`jhj1_iky9eC=cA+ zEd8mh@isYWSDHMXshe;Qa!lew%h&+ICo2tOU2IKYLnuVcrlarTQTDXSzy25=0H6}E zV1DWjpk1`q7q~=M-j%8<>!3b7#lG6~W8MA1-;uk+UtYeOja#2)ux>lFg4fn@h5-;s zN^u9s7An5#>oSv02OvN5c#ng%i`(uc>HgLl32EFmK=b!<<@M46UsP&JQlnGX6a$Pr zhn7%-2z}7OyYA@eBu&L;j1JI4-9D#*kqmtme?!qrK@O13rIe#o){8$Eg{d#nUhz_< z%0Cc)H$D%VKV7!@YN7z~h2v-1li5driTXEs1g#LdJ-^aXHm?-^{qP?Snby91&F10- zu<132O)ulT=%=XH(8LF!XPN~Qs+hiDKqzMk5k^Vq(oRI`@qcMNLS0QbrRP~ih7-U1 z)+AV17f&7d!ZZdznuPFfKG@4nupM6~UJxtVE-08bcLS(Sc^$<-3@}<_wTYG4DD1W( zaif~YbO4y^6k0JtjRKe^POasrQ#=R51iU0Gf9u_L+?ImZ?hXi6{%(8`)q0~8Y)@dq zjls02@61rPw)JXZTy>yr_g3b9?o?VmW<~KUp3v&j{@~>GIIeK08uf^Ui|waSxjK|D zU`|H0AVea*XPz;!S^3f;QApmcq7yN&nOF;NbO)n*-md9GVlf@B`Q^Mj=o0);?Xauo zQFu=?99qP%$AN7O816ix^8xRM4*as&UhAct=1jI9y!cjjiQRd!_aCab9r0C1$ye&m zuV8YW)Fdjf%EPMyiwoQC27zY^rmYA95m{dO%6`FJr31g)S8GZ!+z)$O?Y-#7*7RsHe$fj* zf3}ug&N-=f91Oz6DU=TPEv4|-BuER1x;mQ~!hDCxKt$ID4Zwq;Q}M(sv04RT=@sxI zn^gWxB-}T8Hr(n=D(Oj%xU#R2QNF@usp;k}EZTV+1J3~X=V1YBb+&MwUI^>v6B>RgPo?I zoav`7h+7*9mWQ#GwM;{*5%m^XpHj#^m-nu=Q7bM&H~!Oh`(KtH&C$2xujnoF5W6|2 z@+W7W5Poy$Rv=l@JtHU*&@ivp=OIBk_FbTT)S4XyhxaHYl6k}US5(r%XtVbkBAGQ& z($spv-ru2~XeFpVduZyNDozaV@x0O1{9Ty{y*wRZAn)DPNtl9+JIX=YKAF<&hGbE= zx~@J$GxNVA;>%GM0I4AqZaYs02VEY`zE(2kgxW94ROilY3{ve!V?xl!x6A3`oL23z z_fErPsmGImTGNC3#ERJOt}HpKfin=5R)h7SA6tRJ`r!%#J`M%-o`2dP6-yW|1LgnX z-y*IW)BFgqc6!&MufwuS?(HA!KP@~T?e#i${lth|5qH?eHNKeA zcm3^FkdgCKX77ZuR>7Ru_pOh9y7Hk=9QK^HYPwtD^;^EqWtgv2Fwi?ocqWqk3|d&F zKpqnC%o(v7-02Wr9u407f$3Ipo#DcNZ85UcxkZBg3z)BIUK?=rXq5Bv@N)Y79oDgN z+8jatf%}TA{Om85qD(z#Ye}&POC*Rui7=$(Y`OGgAplmwRQ8AQZ%JnP?QW%aYXcPk zQaxBGxrecDjlYl;v!Yw^vuo|8xAkU#9!#%bbialvSb@6`0Sl0e zP*ywt1H}qdY##iQXMJHzDEd^GV;?qWT6w1YFIo=9)BjOG(yeha>h=}st-z3sp=9xl zQ-Q@FH$Takb1i#3aQvZY^rzOIsTD=^!iL#G=Yd9NReuOkztaNhdLhVks zbAmV5b)ssh^{fC=#uU4i>N9xp8?3wN;XX!Q)kyf+wfd7>gp3G^C7Hl^B#<}$dLEy2 z8ED-?D0$&laSWb#`5-0nh>${`AwnH_gKhjYux_aJb(ysf4|t5fTEtQUHkgwJ^CZm# zBX6X8hw`GWb)I@Q`=(I&jFx@{fSh(w33<0u2TuL=r=IL;6?-@JFE`S1Id-V5`z$R( zfH{`AqtcW=+$An1_9RIQo07EYd2P*L2>(@QZ~G(=>Aq$_o_UPUCpL1VU5s7(Z zN`olA#MFswIJA}Kc7TFrIClj;-&!WSjfM7B$UQ!F0-FFnX(J}Vuts>cdVoW2ah|zZ z0bCRQ+z3Yo2@+>mw>s9Yb7qf4)q)rfl(KQo2D~sIg5E;j-}eiVK3|=H{h~z2mNirK zuwmQ)hdAdSoUY3m&HW4&jODX9c`O8n7XXh)`eL{pE}d~nupn)Jy=>7S8dBxs&2ll* z)(2-(+%L3Sv1*-Wwep}{u?3dI$0f(ELr%e%DuaM3(l!(UH25D>D|Jw@=?|A24XA9O z;_Tf?lY~UfbtQfvjD_S2uF~)t*1It>M#1d9Rms2_@Z28WGu=yN-L1Mm5a^Xq*n#y8 z)h1r?zn4+Nyr6zHnz)fzm<0s?4qd1|9hRqzZ{=#k&Hm)|8t&m!=$}KFz-N_i7;srW zhOds?3^zprt`|v|nFx*gtM#UGS#}IA0H?Ekb*?!JUy;$=-3kYo4IWbAfC{6e*9G8z zoWd}k8yNgQP|hy*829w6=g+BcgVN7FE4Q7hh!y4&Rf`K%AwxGDLzIJ1Ky#bhpOxAQ zt$iaKpZj6e)qJ9EbLw}%`!xie-Wm3!We7<%I*(iwTHT8RZ*Q7>J;OUr&sf_#PKOH- z;J6{ai-yLzm=Y+;bS@sauH5n$1?P_K#og9=TVwAopSxE0ttyZ7<7_tM>!)GKvPfXU_A%6pleDV5|t_Q7phgkD=6y4dCWnR$UP8(1t+)NFixjW-=0# zIJwt00r6-&k&L77#@<4L5&1NMo1pm5D9AoTe@u~{-p_Y&xN{{eeNcxN_&!LuVXQ>Ih)SzyWTfaj-j-@Ho|GlwV*r(?Z@P{P1fPjiK(0;h(rm zwb+lt915Fbca`hn*apMZ#|cNqMa7j@pZyNsz$qRNnI+8n!ENn;pL+ zlGS&JCTo{(3!%fTNx>UQaNU1dt!Hu#{A_)4CA){|ljW(A52|w17IkD68 zgtARj&zi0#XZ|3)l*&K@?^#6O;_QjEPaq#8rUB!?4%F)vDD}!A&TJcs6FS-pyWZSt z?Cjo>oLq>}xw1E)Z5+W58K%6|&Dn>>g2M$|s*`)8HF$NEM6F-cv{uYD9CcKnJN=Z` zha@y9CyHSzsyAe|fRo)n+;gItu1;y+$!I=cI~Rx_LsE%%pD-E0=L9hHsJiYcE;Zet zTiZ9IO{2yV(bI`(dj0p11vXT$rqP4H(SqBs#P-25m?MlF3bq$LXDWX4TNmh}ni)d&!!eXV6lR_mPJ(phW{}1&0cOWUm*M~`OaJ3h=v1Ic zSYmxEb?FKYrJI0#%JqWB#`A81HVwEtHN`mqYvIQh!%?A8)%e_d)C`TIwQgh~no{v{ z8v5+tCId@iZxxI$!F9_>YDP35Q*jqU69i`z!2t?zgWs>paFEv?LQht-mSQ8&MXePx zSVPR`KY~sP9A(f(t+`4rTP1J$2H{_oWDjj5`(i~r3*mBzA3=Gtzk3ltGckFcvtWX% zY={!`=z$sk5xedqJd>Wq0tdolODbKZ^L;eiD-?jAzl90Ul?2U43x{LrU8xz5WOD&a za#~wphqc%(Ruo7=h%vNsAk!hh?MBcpEu!d@X7U54i~Qh`Gi*$Wf8q1WuggSQBi)5~ zy`md!8Usb>evn}B-L0)rmheRp?kjZP<8rlFL0m*K%nXCfv{8I@9tgN+ zwAEYW;)yQ$uMprlfs3Ai0%zmsF1I_Actm%3+bV?*Aqcr{Hok>~OZN~34$4%U$o>5e z#US;Sptr_kR9?tUaXc(oJ8k%{x^#MyIPxP0ZCUc;x2J;UgjRMJo_MyZ#+A8DODCc_ zbHftjC#F)$dKrLjZjzbE3Rt1|X<8iO5=2~c0i-bR4IK1HA^TxIqOlb?+FOkssulPM zrDGe&>4x0PiN92qqn}t5^-RFA4yhSq@`V0S4e!^}dgmK$l5t;91vsaW3YlSG%e)sZ z2Z?(sNTAwi*q(0jVzj=uYLcj|g~%42X{A(xXt5-3W_FH%th`IF*iBP^{ZzpI(6d64 ztiT^*eV0@~Ij%tIuthm$|Dh`_B>w>o04VEiz!lD(mCzIyWjW7~n}xAUV(sN#TyvFu z*WLN{XqwHR+V8pmK!S6plQ>p%QHb`?(30MA>f$=J%auLac*&pl0e=PiI6$j~1VgB6 z5nFEO<`PighaADQtpD6k8Y4RV;omB(4_#MybpT0+Tmu6a@lF4`3L?>8*Bpq2?Um)Y z6aWFtE-FIMWU>b?{gyCjN-vzQp!iytE~vxFtp0rfe_J!DvK%r1{SMCX>#R3i9^$4) zCYc|HC@DKH?Xx73ic!?!!$IloNnS~+CHhzg#~=8CihcuSsW69fsAegN5-f6SP8eS& zMkoAg33^Sjh4^`@hU6?3 zL)~$Zo7Bf;Qe5r>3TWmb59E-wk(5@<{ZW8Z^36?1%E~qoX}P-=&on72tjWjU6=zabRBKlf}77E)@_%&F$k%C zuaz~S1jjR1es9?jNQgVU-0e~OkvtPC^+}^HF;Onzg&?TC(i~t+ntj}UQzRoKDK!e9 zD5ChDZ5+dm7|W;FhKKv}{2IG{uAFK!CcT~!ZjqIR)gUe4e$|U5Q6GVBuw7G`w2tx= zluj!j@okUy4JD>=N=KxHseC`Bbo^^ML!I;d`YEoEPPG*@zTR44yP^SeqJSR9ojPiK z(@0vTh!&Y4(68JEA^*-@WMPVAN*X~ZHyC43v|c4MYU^NJ2kTeH#^rJWP+h`RUUzg; zk^KE}F-s$S#vYbw zlb58{eA9VS1+|aJ>y0yn%DU1N@ZGma;74rAZ3BdTi7ewIT5MOPU^L05nZS$OUx}G8 zmjFq1q;EQ*Q+@v0rWVDTqTIXZMqSyJL~;!r5cgZI}r9+=gb?VhV2RGU!sRL2(L zO=KAhUZTc;z$KIx3Tb_|DZ5N=q9!p#>zEZyN(fIPf0+Eg-8yeiRdG&qiu?W0D}1I# z^~5gqf;Jf+8$kvg))ltg4GK9V)P|l>EbyY`DaC`SNy!NQMMpJixjPnzQRmP)SbmYzD_-PgQ%;k zwUaLKN9-v$HqVR*tG_@{ramhA-5;;3rAd*M@6Q8yr)Nw5vNG)jCMmbusx6p2PjldF zyDr(2BG`E!V{0K^ZU^(a&+mpRvk%jOP)J*Av}RPtzZO~3DP?&JhZ2yd5)#b+gr+VwJn<$JQ3O)Yz|}d-P|)3Ks%wDJPl(ji_I=jCXdCmUoEu z^@XxSY_wXUtHgX@o7!-23L$@Yf3kXJi}WP@-e+Xew_mBDceJ4KsGt#|J`1Ok9}iBY z(Axsw!}L{z?_WPQH*|?Nuonk(01stxX!XvbT5A2t8|boW8p|-FQCl4oBSS6bU9gp^ zOmy5iqRN(9Y;-}`7bH{gn1$PvPqQxVPk->zGoBW<+1pIK=Shk@-lU{hNghPr%l(g< zfS>e70cU0xBlBlYQ1&KfB2CjE{<6dKvN`T+!+az;29p296jRK)NZVF{yP+(Z3_5S> zE|{$Te`q`>LQr0esDw)dkxL{VeA|sJrn1>&Ge>KQ0`ga|70jOBh}~g7qln#~Kcg|i zEqq?O<9g@{BEX0JQ-dU(J-gXYK9uL6_i??QNNL`7C{AdWh6ERb#_8;%`xqPn;%iVj z0p&nhMc}yU2gew7^9YxiTpp7glI`E$>LK`rL(cjXZygxJTmLwYQMDSIOa{Jq&VhCr zl5#)~pbO+35&^~Fgh$ZH?;>x`Bp>7*7ldqe!*ARtB9z&>%-!M`A2O^H3>tMt-EN7G zo#LEss&{HBV&0j6E>h3!$lO>rivE)PZ}Ip^*Qqo#lXsCrGgVl1BFFIy(c z8eCdjAT{|YdW)rU5&HY(VRfbf;MG-+cpn=CHRb%$6t_aF(NfcYBg+o@h57F6)Pe;T zwD8WTI`hG1Uqo?v8lV=;hmZKZ#&NDVJsQR(;cytGs))L@g${O}*xaqsq1CSj|4*(x z04+nz+td^(Od&BPHKpGJqL?3vLn)YXC{AfpqlAZtB40V9yg)VTAw21iiRCT&Oz#8s zbLUR9u;dbhFIf0X7TCLaM#p6Mf>v$8b9joOJtrzWAhNjp%u!5S8Q8`0(-s)`EAr=T zn_U!0HK(|Dm*VE(PfyB#j#@wHvst@1it)hgBQfSFFI%Sz^5a*Jb8uzpeo|5Q<=`Uw zVIH0M?~}+q;sO6sX*(Z&Ob*5@J1jo-;zz4l2_|mDL@)WI{%r*9 z+1uBJCzrPs>1K7Yg1UZO$j!Vbh^*XMI?DtB4$x7grC=W08J=TuE23+)P4SuQY|X~y z;Nv)}k{XT~#sD}xWh|u2-n@yRB3qjM47;zBZ_H7ev>D<<>@)mf9b2ukOCtx}6HU1o zT%>*WY3%(&vX2qE^|)K?W5bwmR!lPSX7X|O;Z+aC!(5NCFz3j3|IF)KtXhe5z>3Q{ zLTDI&jtu=ybeu82GZ3mGSmaK+1xwFEso9|LYyvMf6WU3!P}9oM0vL(eZ5T$Z3(A3+ z4}Y`up#1s5+6#5>$p5AP~UGVSL?iT+b-vY>|4UVtIUW-<~ z-SkQLT>N%dzOO^v>!Px5n4zbnjht50`~P4{)~ZbKPk;ddY5&L7#Qr}sB~9Jw%tKUl z>^9j@eOi2nML+UM>d?4pLtQ9gtYtUh%>xRj{ckAqOQ<8DWGzY1MzLRZ-RLN}XH=~P zq7|0DxlZwPFEVVgZO>m?@TM@2)b50h?aq&;p}#eFj5g0&DD=&S@4lZqYg_p-X6sf` z%fvM!0;;Fi7;>Ctm-A4EhdIyTeZHP2;j1$SZi^mx%APUHRZ~4(W{a<41Al_3Kc*a> z*y4#Mwcg5O%hTIaTRI|m;jk|>+*iL`2IbTtjD--0$CMLnJ(Y`Gaq9bJ(~3dW@el$R2r=>^S#|~G+2jYYwOY*18O-P}CuMOte!OVIQfEVELtsSp zDr4ZlM%#yNC8#6LLcq-aMSYc#6}!})9hZrdB(Qs)lk5`16nng>n6Bw^a(P)5K}v_3 z?lMCM(Kg?+=+5$R2?4JFjVa`(fFpxQ_(YRd^CWE=Nkk=0g(QfAz`CUoA18iuBk4AE zEvIo>$y!at@z5@28!kM})R;a~#=qu4P7PK1A!m*5Y;v)EQ0TK~+K#TIF4N3*#7mJg`^yB8 za&xvE?pC*uYxqW|%^sydlG;C!QefO zsh6MO=6Dq__&JH8r~M{K)LCm7yO54xXT6)z>ggiAGU@(SrCyl$$Dfg{eNJ8&py^ap zai6TknHW^0RhDwDe5vP?w>?mjR38Zc{=MxzRynpaZ5k2X13Kcp`dHe+pjpFEjk$Yo zd{$oEQG^9;|88$Z(r#xQ<#@xE6aSzY0~SW8eVyy*N0ZEoOCIG#xs@rg>xC*b>pk-` zv>jUrvw}rV*4Py>vaaisq57JC6sDgVU8uf_;?ux9oO$7|cv0~iY6j-hkq7SP;|2wf zjead2Sn9)9=VMf+Ag#V@^seeGwj!dRH#oU@&K4WowgA2|XF4gbrm+pKuAyYks>i!@ zCV8BREfTnyNlT6Dp3eZ70oF(G6Hqcm?hS8G0B8v;Yue=T))zMB9Yz5LB&_OxFUa#MQnPPh5g?3iBhC= z4QK-_(w2PLYNr3IO=V=p4|waJaUE$n_YIq0Zi_0tfzY<-Bj^_mavqfC`{~ua%CW~u z<#c>iOQVTKFg>KjpBa6eC4>*N_vHO-__2J$|1T=~|3?-tOAcKr2L=La|IZEL{GVN* zo`oHqc}%jR`~U;eXx?=h$9@SN*pr4)AxZ*Rkwalzl!l#=fopLm)yUhnO(!D++_8ZM z{rC56&8pvqtWf}CutC$9vjKmov=C{*q1#@Ti(({;>6HCKU{RL+7t&6B4YX23CFTqb zQIQO6a8#g3=BrtnoT&=^EAScf|-lcomS-*HL%qM&Hu+CU_i0!1BvWXJtvLt&wMH;wG8J@cW!OXr+ z7H>%LG{r1I8j_5UA0`+tNAvvkvOALx){6mEqjM~h);yzokctNOExjh%q+`rF1xrJk@ghwYrgll}F1Kyp7 z2L){uO9DmTgeD1F0!sSl9{1p_O}1su_j4W_E=y`tSb0Tk^s~DaKd~8CPiqqEv*=l* zI}B{jylOdwMyodxCv=SmYnx#zbzo3(B?>+W8`T$SIZJ@U&B#Bj(hwdtxz-(*71^Q2 z`kNQ+%h&v4hYt;#ACUh~ZJ_c$Bm~I+^NRmdC;X3~NIp#4JoXP5Xki^32=o6B{-4Qz z>H&izbuW8mHBbIk^n3-Eiqgzz6dWpgxfKL3>=mSSCb0&1DC&E#OZV!fJi>#2D#WoAZrA^!DD1EKH zx7xflHDFoAek;tQuiU$wr(QX?E&$bA1ea&FsamGfAKJ?D`YP@EhSC*7HZ>HY)86&2 z!j2BH0IpN!k)N!3{*Qlm_FEr*{9r!RD89X7f9Wq84^J1@9jaK(P&J115b+aDA=fG&EmDUwm2Q}W>EKB^UzTZBmDZ@=%KjnJ zOYRgC;M+^Sb#jBALI0&qF<2-Y-6RU(U1)i8@$72z8ns^svx<3v_*(Jm?i9QBja<8Z z>Jla@Z(!}zhd-WR*3C~8>U~3(0{OR*mtutsK=R62y^bp`)5Pql&SmQ)zPTD# zZFOX2nGR|se`k3;5}QA~zO@1fMccax8bg~nv@dOZZ1L$?WQqk%uV+Xs=~dL!{y1HLT2oHAcSHoz=%*g zGP_Yvn66W6J;`rrQzt#9wUaw!rVpz^>0-Vs7Y{-j+A7Pmjd5) zQ(wU|Ptsfnb>2uo_&K9U^!~aZ%ivkY6`^ zb{I|S{~bJ?oqJUx0coQV0A_@{ECE1gw6G$cyL=Vn8VLA7`T!;w>tUI?$72c9?ad;8 zumvbgDyhGo?PNTB-N^dWZ!)LV_qoFq#LZuJP6BUfg)GkJ#=H z-`8$;Lsz2naS822u7ogO!alafG7W>ta9%!2Y`%5#!u;zb_(>R$V&e5}@u&X0JS@x_ z^qyUxoA6ytfDIfP{w93`61D&yyoMtRT{+5beSf7nzC*50o?cN!Dh!1j>N1w@qqw<Ap@O@(_k-HkMg)Sn8WBWj4buqP z9N36k*=?QCm+op{L+Yu%m$F!-D`r^M#2J@crzZoyzl1r(9bi|6Td&tvFphTmf$`#S zh!FP$kbFdgg^RIzq(N0ScJEa|YHDg!zx}T2NAJGJBhe<6dk;xhnrhG@!BXE*(j$In zzrOF`ewXfk(W(Us=xrsx1cidKY|QGI z=X3T;?uFLRE{v-K^u9(IW;7?#@9#;Ne~~<|PjvzPR=p^B8)3#7Z!~xY&tq^M%eJau+E&#u(EcHVve7Y9CRg^1DAp)b;U4p2nz8g`J=bc_ z&qG?17%bqQB$v&(234-S)Lf1c_3Fx5&PUW_BD23DQeTZkUg;;Zbn!IMs>axcIUWTY^!;URqN$?>QE`TnFAVFZluz6oV^j0x!=RAc zRZAP=!9k9O;8Piu4GlB9n=;RVuo21N zuKFx-L9IFJG-vgLd?FryNj0`6d^F|zYX+lB?8T~9QF2d$A!mTJ!S~G(+LrjJ;y`Q5 zcrChYly*RQt@2wLpgh`Y;(ahZhZ2KM48{<#0Rq3IbG?~Q^4Dg&F8u2duAWg>&IP{)v zA5Wu-74OQkLVd2M3`1)Be_G5@9qgl7#pP+qyjnHudz!#nJjeU34}~uGsMhw-ARFbO z*cz0-zB-jwHe_a(yF|J%eks$ijH;J@=ullLbcw@e_B*nPw#- zE|dPPygYiw)Ktal+N*1)MZ460 zz?b$vLl`aV-XMO=*TRY2Fo)F!qLrT(P_ba!w9@|N@4q1kwFeN+Yyv{H*G+rlv zDH_rnbCBxs+~*fsJvfz;>ln?h6;#rSuQtF_>QLt_*Gol_s=foBPs9mk2Wge8FUe5e zm-f6|vwK4xyr0yf5`JA0`W;Q1$T9>N-_LMH!oz$Vb&=|43G!^A4-yX8cE<5Wwy{Iy z`op-QU0%AKDjm|ODMt#7cxM{>Mc00Tj8sdr>s_f%@v4kTx9keUff1SpRoyGOy!CS2D0^>;zqh@e*eU9 zrN=sRd`+@0xGD1#aa(}V_c*2!@j^1fS?lQ=SL;Jdy5dcv5l7&=n?R2u)8<@VOrJxD z72%M3$=7s^Mz`^sokFJit0{FU^of_0@ECSvr9wXl=_mEB_abVAr!nFk}! zPM`+nbknFjdJEUR?tiUf3UsA#qcQr;?4WY4_s3~QvN@`5woyPRjuZ*6;VX2rHXsFw z_u*IF*@H-#eD{@wHj9)9k53b1$sh&5y?W7&59v52-PskgQ zuqPpFA|Z<^6lr%%dU;Hmbxa!lsKoP#6#GGm`5_V1qa4j+JfiEUA-SG*&jv4cKUU%Q zO5Ego;ggx~sF=GTJG;ee1AojHkffvIgl)dV=S_HMc0EX6;T?Of^lUo8=ZW!&AMhRV zd%n(#3VBy>#Pn1a@th(y!5UGGFHQR}EexPx?|!%sf= zy{kd>`^X1`X^L_!_0OP_{-&e+Q2){I{{TUG<9Z*bUIgIds&sn%GdwGJlO)`QFSA*GLqe@IOX+H!`@F7oTU6Tor#!X@3wI3O&yZNdhlJX@7s5=2Qb(HEi@M%za0{a1 zea(uPFByN?TVI@TI?TOL_1okD^`_@iifpubtW_p;mDzRF+f_bOZiBAR=P$p*0ZIi1 z?L+HG)2;Zk#_lN};_h$nCol6N?^1n}cjLTq^tl9?T3YVw&ipCzp)kA65j#&S9^r4> zJNWtV?H*bQV%#f?>E;|QwzGBVXT2N>?>p1&amtU7M8D7npYnU&;Cy{AgT=)_+ycWg znrKfJUys{pAaF&>3nA&P2x%nvN@iQ|RwGJ%$6YpRW0OP>KXtRh*S$I)uT!=q)$tCx z$A~b~hPYj-&sML}C>Mxs{~<+QQg!Jd^mVg%#PgX=e;Mlzt6JNfmm`$1218+}qqbjsb2 zWWwcQw6;1q*ZjWd6CXo7&Xd^On38;x2ZGo4C7j=Z=vM^dc>IZI7n&~@bJ}V8fuE)Z zL68WO0zHHlrU7g&%6Tl}h6WPTm2ht}`1gwHlUB}IE6-W0=e*tfoRuhn9qI!);UnFX z79HKK9GxBIGg_<+K8zNdPj&@wv|y=EI5b8ra6V%1?!>3!o&T-Z-e>on556}))NWi~ zZn4q-vi_wT>kZpfI_e2GHrh_h zF0uh^Qq6UWL#J0|n=h{H8OWPn@hk2g) zEzbBr%YbhbIqXyIS;%(L63>(OJ>c%u;En=k(%|+1SE9j5z?Eun9^lLxoD;Zm4Xz%z z3JtCTxFtEb)3OP+G4LLHe7=s}T!$N&F$vuO7rouU7`Mx**>94h`z{VopJ-tB@*eKg z>}9~F6nt^;8CJpHh*PsufS07;x3K;Pwuw1PUO{|UO%U(dL&tCyJ&V~sQ9Qj0`GDSn zwHr`N9&s#0vdt>-aoPQCBV^tQ*S0PPZd%ZdKmWo!xhnD;0bYVVHnCgleEz zX7BTMd5WfuJ-~fie6wft_%Md z&-xACf!IfV!+}-2R}+#i!xx6l=1Fy%&R1VWPw=nzQ}0`%wh8I5`N#8a+FqT#mDOR+66`UeP8z?P4zp*z ziw?uHOdt3vNxYj^nVYKdwXK3IXDS(^??r*xZkhEJXV9zPDr3vJ%|B-j;1)*BtAB~N zrsIw_XkaDEdvA^d-y--Y#a@M0SMG18XN_51b(hIsp=;51)Ajb{@2P8jN>__UR}1NS zF;~}Cm9DL^n)`zBF=6bfF=JhPOwsj6V_a7Qy;YZ*ls8P(2!Ep{Z4-01jy%JR@%P`9 zo^vqtt*9F-98T*!vP}MLHS?Z%7rp0mWBE4kLHS$$UuOAlH_IND<>;kl#{FlRng5Qn zO7lC;C4(`M_`t+%<+&o!TO#eJiILwBA0v3qqy7^wcXA0TG@en3%GI( zj&!Wh;PwpKSvl-(PM&4@%^Q*nH&@!0#va+ge}9TzTCUhvypnm>aQnVOzm*l$r1GcH zJ}HpTm!$6%w)3cXloycCsFe?A@P7GrCY@&iAIh&&H_Z8U>V_e|PR-2Z*QuE=^6S*h zNBMPXW-7l<%^c6KQ!``vb!sM=SEnXtd}J5Y`jW(MwZ1o+(Puhgw+h?jjH5;7`!qG~ z#+OIWvL&t${@&uc^gkBYg@u*_xG%~lhzmXPi*xaAX0%OwJKZARn98@!^=tXIx&CRM zZBAdm$m?dxe=XBW?L0KgjIsHS>bDmnhdl#1PhCHnt)qzpb0xF9Z~qU5-!-=$wcn*+~3C)F49d0Xny=Z?LnIN4js=FPAx>t%WA z%P?=fv-7qR`tGFTzRh@N-z{ae2c#m)ct3Ms(K7(V8_WNn_|KJawe~fR3#&^Sd z^SLWff9Gettl#3;Gu{=0H@;8!-{Aj@Ld4~49Lqm?1OMJ!@gyNn)YVmae9bLC+1%D8 z%XOYtTH0G0x3+keJYM3d@CW=$NG)9P{Y`)QWBOerXqn8efES*DLzD)j(Y> z-Ce{_BWL_CZrw`!z^;*&`ZqP>7jYI*l%*WQg}7oGXR`5?_LhyEjZK?dGV3}zH`3sV zP8K7Otqv~b%h`8$7OI}L0zcPht;kY(OYpnijLUsG;Qsw;EBL2 z0c-K7AL^R6baY_!xF6Qe-`LglO52M+?rPae{;0nPSUf-;qbvAIE>@t3VcT8WJpzaQ zJG6T=OTRMLPGsj&4#VH#YWN41l03x9@o>Pg+QJX+dZaZAzm*n#A^2C$_~mi@A{Ks= zK)SNdAVlrF#oy_FtzXJcfjGx5u`&SFU z!)%SM{4QqlE3&jzs<-E^Qb-vA2T{K zkLr`~PZ{l5P-YX!aC&)9_ZIi|7N0i5k!2zI9W5PAoj=Wpzt5Tx$K1`?hxkF z+N|Ypn8VE+?&PlR=kPwR%^?mSe#n>~H;27u z8{1kAgRfX@V6f$01Mf5E%?3W|!v+RFccFp7wm!nJ*kkr3?lt*~LmWQB;WH-A70rHg zU8auZf?rZ#;4@~wxf7;rxzi?}JUfR=&1>`aau{^aXW;W@d4AaBpWhDtj)D8R^5Z7| z{80{nY0hE(xVd)ulU(_&pK<$cfq`M&{RZ}O?W?&qvMDp(!yh$p zrzt-HnU@&&0@r5B#DZwH5xgc(A;6V4bM3oK{z8<)LtOh0IXuc;%gG>2nQd}78FE}4 zF6D5L!yyiXo;+sY-x6}K@tpc!fSFCOm2)~A;4tiq3Il^JnrmQ?|IZCPYObjW3;8_* zN6hwOx7l9o=i0vmE+3Oed>=5AM?A{Pffhez<%mK5f55KIU2F2sZ8rJmcANZj_n7>1 z|HkB>`z9gx8|5Iw{YE+L$H&>Vc^=c2=5?C3H}6BPeAJw)yt5p>V9Jv>#p(P8^VEc*0!0<@exH&c9p&}R^e(XaOCn7*&^vhoRNb;Ne5MLB z>_)$sVUKPnDSy~cq?wib@L7^!d}r6raJg$S{(g*NeD9$!{yqA9 z&f0D0yWGI|rOCivqkL1dnJ1NzEA@ExT&aq{l0e`)=SpoqlaVX6o9r4%5HeB+2FFJ1 zT0hN)Xx2b$(?gLY;PYA^;0Qr{QhPm2zvYjV5OTdB?5jOMqT1^bjE72M`Q#kpqjj5G zedi7l@tjEP7zZ{^FEo>&G(e17jz!5A5r#$oRi5qfF&gCK91C0sr=NM86oA|)<-Fn zO-wpuADrt|c*;{(>iHDW2w50v`sQZLLl&+p`H!2?HW$qqz&4l%wYNwM$9n@fXE)Rq zn%6|)JHw=QKe?cQEU~t*th_`>$7Y2LG!o}BsE;WwxjIr;-qEj+WFxU-Tz~A5dKs|P zQKFFHxu|#wIbBQar=cv}M|=ZC#GU?t_@Ip|DG)Ezxza~ky+C`g9%xVcW#UUK5joxe z+%`BD#*{~nCgCoqK8#}t;56od>-dT_G-C%PY?pUM{ zbs-@z#tm%z5$G#S$6Z94u|MD$!8x>!JNX-`KX&zpI8K?=4wA$1oig&@tMuTU%5=QT zNL@Md9uUaBXpc(TB!?S%$v%;rv6NL+wopq2sM3{WxA|zYFBs zOJx&4Py1oa2gxpIn@o2QAGVnxVR?pZt^&hZ7$t^`H=FSqV~u#(s>gNNl9xy~ldY${ zhtdkj7M+!?A&9bdqfF4B($S#H2J&=K*=k8UT+@pEz`2vj)(UMqXJwmf$~BOy=l8%~ z8K?1~jl>cCYZ{X&rc@%KK1T;>tSEjRf@TewV%*DzfsI@iXRxqYfiBE zX!@;r{b{Kx8ei>Cq+wo`*ZcKc4DHLZ17Nwo)--7EU4H@FjQf`kYBP8Z)+N$S_Gf^OBT` z5fQ&nr}h(jtibjT#%=}1L7$en$_JizRX`mXSmv&;T;_1>y#{UVnl`Zd1{qjA4aW>w zL9|Ki8~8;q4*r>+sUPm@S^Y?ZexxP(y&BGLI6SE| z=*KvxA1oh%(+`?+v;G>a{i~oK7v0sd8cshjHbi6kF@tS5{eU`bzf@!T@%iumPxOPW zB|)92BqTy(s=v~-zziHinuhvfg=P*IC;^%A(?hZ zVBMPs9{f&gK4s)j8*u|llOFd2^Au2*6T2RBLwvY5aqr>2j5gK#SxkXliQ~O&3UgPk z(6Pte)qmXe?&{3zB`3SyuG6m43>xI5@#r8c#w)Nmbc`P%nAgX0vqn`Lap3qcHVMat z;{-X*R2DlNONU|ajMIChfO`)2B3$nR|Hlz~;py(!g1YX?1|qBolJ*@1L@Z0_U;Kg} zYm;j44WblG6SZxI#CjrfG?&O~fx{PjDJ;kO8^>b#K{-ltzQuKLUK2%p;15Z{pu;w*D*T6Vyf>ch4?%O_$uM&>!(Bs;1e@?0|+yI3k zPPK3vbB8*0{oPqg}m@6-JZ^i$F$#0&K@)P>Q{fO916X!WHxwfdkuoNgfA^iGN+X*=L| zp>8vr`-ykvdvNyDyV60~l^zPZ&Vio>_f^+9^v@z;mkKoaE3R_~Nd@rk1iJjJK>emJ zz!m4fKRl<>_&q(|tcd2jcEZ^0ti6}D^%-qOVE+!^kG?kD2csk4hiZCE)`{y+%D&-y z!FLWmC24w`mt*7?gkbrIN*vc4a(*$=NL*-FhXvxk{y_xGCG^3s|NYb3CP`}*?3Y8D z0y_O1?2!{UBk>#Gb{p%Yje|eF|7Q5r#LqES=;U_L7nbAOvmJD1JLt@I(3$O^GYQbW z1n67>bPa6JA+SA%!S);hojwM-{oxm&bD-P9sJ|#1>W?AY$ZA4RHk1+N(`AeJP(Ii* z%_s+zOCeOwHCp<3D4`UFKEi$RE4nXWKSVei(1rSn`yKTaWASmX*M356h0OMMJ>B0J zzxb&(r54-(U($p6ctwRh9^d6dd|oY>0bGvw4DR*#t^nd;{5=LeR!Y<8e!a~0Ytya! z)!3(;eBEjjag^<*YZg$89TF=)Qd#GaVr|qWNjv5+`3{ig$`WcTrpk5;^mh>|7lZFm z3^uFnxo*t+jy65z#4#ol;KTh~l#-v@rQ~H-U;z0Quj#&2_!NSK2JHb7cFOl;I9525YQw5G48(MN)N3LSsDYLldR zAI-lDbGaMWbd9FV0q4Wkd0l&ecoz2%?aBQx=RG#edl5oCQdO+D z$d5cZ9jmWgNrc7F2ewt~B&n>Aj>lQqkmp#}0N2z#}5T)+*Rq#bHMz^>F*j8 zH#i4YgYS`$=>15)$9#J}rHU@h;Ytc(X-W|7^!`#L(mb40tth1$MQ7@u=uVA@p427L z3wjVyz3xEt4gLNDv|Je!NM#Wb>AobI_A{7&nC}^N1N~hI+!I4;H4$mfUG1zNp{#!Z zd<)*u1v zlz??ez&a#g9Rfw7kLpLAJB+_q6Yulkdy%z3N9g;49kQ+`tKFe^pU1!(;yttF0lGGz ze`*OKp|?TC5+BT$=co}gO8J+#tFbQBGh6S^c+LP{H2Udc{rLiXQuIGThr;-*5$~lk zT>&~0-+{kXLe2vYMfVrOTzilnRf|z3T6Y3t;FFhF4h;IQmvAm!XfKA;T-NI%D?vuqH%_*`e$*&?PIJ(W~>Fv4%y?z*VAP4n_3ps!p0m zAx`dNoPeFC@RD&}*dd*LtDGus+lvdxoY^R;ASRMK{5^_tN?4RBLoQ0rM1qH4QSG zaX7R|s-k|jRz>q|mA8n5aw?y}e)%=*7tIwg{BOhe*7Kf7;7-3kq`WFgY`k{9F4QDd z#kKiPb%84YW0BP5qO{I7d=Jhe_J{W(oJ+L7>^?t;{0yHtbmg@gqtDQ9V2%F`*7NGB zR}ICwWKO4KOZj_{Do;Zp3(K&Ke7UwzWUR>Vb1f939D;d7WkXMO= ztQ$os)T9)u3qa1c`Ob9>DCbik=L#pv$UmdtShMWEz@7G=(uTV3B0st~u|j|MsomuF z8s1;=y%6Si;nhCC)YsOySIzEGwlC=( zW$y!&CReGkck!7B-xuJXHJ;7r^FRB|0`|P`qk4Xq=iv2UNmaAC;`lBAp84Q@IEwEV zjJyowllryGOW${V=JMU?**2MQRb+dwVZ6^kTSD(ys{R`=#`}%r-$`!Jf&XFeYrvx_ zu7>As7F=y=w|UpMsiqhtwF}aazv|{k*d-AIq;nbb5=bN@F$ucp?%v%bQV`na zuNX04P_(E>Q>!&qumLFze|^(RQwkJAMUB>%=4)viG0FYTnLD#PJ8T5ox8L)A&(l0y z_MEwM&-|S^b7tnunT|k0kRLV#5=b=l+wmCjXEvJSGxxz9W{~o_y#RQv0CLUFy8cCN>2^mlyS(=Ek_ZmT7Uh>G7HdzfL*4`KdT3E!SzyH|95Orjs@nK&4C2eKj|1^DlUQV=f&BuzCvLNX?z#*ZUo+cg6gT!5btuw zX2`;RVuEm!x+NI?c?hrZzY98nkwi1U5=hs8Ym`uD-HF$NEWJXPr|D47_7<{MeLw1% z#Sfb^u+Gy#o`L>)GH`ud7LKjn`L;xy2L=)tJ{|B)q;s)-4fTY>&T?*w;{B zH!m%=@5k_6i*MM^!^ z-fQK7KuFicv-Mntq(j`rD?nzJ7A9gEjy2j^DB~oM!MoD$)!%t07bepAS^^<@zU@2d zUeEOmpHFdX`n^gpKJZaqdW90C4e#yg(+x%{pA&Ks&rM%oFjBpCo)hsT)bkf=2D1?4{yz1H%|rmv=8c8&0jvx_w_Aw+*MImi2nsqv$_HX&;I!X#ZMbA$8lrov80OR*Y@0S-? z7Ef!w(o=GmMIT@E`2+5=34Onh`n)<#(&hlKK>yFm)Tqxmb1Sq_n*#lQDv4`zkodL$ zu_B*?tVr-YPS^TpQonI~ND}H7>DQCXZdgYqIW`+Q_3v)t*D=xGg@ZHT0IBtiL=&d=W+bRF`Ayu)GZws)M|)^#tyTvo*q4 z-MCKo>!I4Nr02EOwO4}f2EVaGPPP1))AP|@i#P7L#lFQ*sCL-UKN}R?uKVZu?Ouz$ znQUWojV#nLxNd=ELj8iS5$C+=Mmgg9`HzEst%SAd(#F@#ad>9V_s(l>b;)rHUn36O z%yco-PhZ#i1zFi)d)sJ2y7}*!GmxfdJi~(Y{lC!tHRTfKi)V|rjh=&hv=3n?@b#`> zySzT$Ew_so_zC8J=i!}SZ@Y1~*gm#iZH%`O`cZ4#0y<_VrBw=Z6eFH*hB=YRbK;JH zz?3)}&X+x73kSUOpdG)0x+c`=vqMhw2}J2+K^d3vGLFXwvUnNCw&gE_vUR3d0&$@8 z6@ea=Wi&4~={ldMPuKSXMJ6-Vm-jESEY!wo{HNmbIA7W~k5vX{#}%sUhKOVL*gk-Z zDZFc}2jF}>{|(_g04}2NuCXqz?>e?9et_+$k5m13Htszre)avK#Da&+8R%crqaLGc z)E@PBAVwKgn{@sfi$nfG-!Z=9 zl)s9Qzc`PC`RKy4*AHA178bZ!uTRetz(FJMl2Gc)J)6bnK{jjteg|yyzO-^f{kk$@J%Z7b~_ZP9RAiag!$J+z53BkJeP9IA2 z9QYl``B9^HI;;BwSl=I?BNP0oO;*0veGFum1^w=|q2ED$ziMWiLj7k(gN!qSOp60~ z77y|;0ou16&y@R1;%sa`p|A1gxWd5Qz&DRM(I;ko;O4lZf(&y8t~oT0#pUb1GD%Uv zxH%)Zc8&T;C&_{Dvb+oW6TJ(D6H$**AE9+I7(5^Q*1a-iD&^D^9Y>!j^=%r=z zGX7v?v+t&U8cU^eIRkSD2`?A)*Jp=!3T5gKmZ|K-g=I<)mZ^u9=^^UB7s_-D! zm&!9@nYbU`Px~G4OfQ}PJBZb@Y1(SwmmJWG;(%Y`fnO4UUuFU?B>~T*0ngZgXR_=8 zgIRqz$&Pbg&+k*+jx7cLbSH160>OGbf(Stw7mFJ;2rlXj~IaP}k62 z3D90Rho1@Ul?3gT2JK~o_R6wNC3ecUKVxOvOv@Hc%hq#2*@}@z!^_nxlxukBgynkr zj}gno%Cv))X*cbcP^KXa+kk%Huq?=XpSC>yhY9gNqx-n~N9sdg!y50w^26^o9RDaU z1Mhnto3=VQ_TjjPau51JnCxp%`f&{ad6w}{UtaW<0;o0V={S1ow(0=ZWdl85F1v%F9qenT|s&94~>8R5)#dA zKlC*xWu{*v(YS_c->g{Em*9Rsp*A?UmsYUfoWb_f%-)-maqLzwKJKldeVSvlb`o`# zAWhwGU>~(Fx?3B~bi?DP^_PHUY}!POSSQFsv>vt$l6H{WbUej60X|bFzY+B5hxL!; z%ni3MnThZJ3Xl_q*q0s+;;4)pWC=xGJ#TmJ)TJw(!QZdvfq?|e|VMyS^s z?i;byMe==RHYfT*^fe_peUFUS_$tP0&|jjr=t-QPd%QPqa)YksRAG*#b`DXVhW2Q$ zevbP1ipF&>^r6W7!&7&v+)bPm|}ZR5!}X z>UDl{;xx4dDQXE2XXCWkG)Je>+u|T`8C}$8BlTT}>&s~O(T8gaFgFK1!3uEvsC|U4 zGvh;jj9pHM7NG4svpU_6{_3remzn8PNgl+vYJ(%z(K)6Bz9!wUmE`%Z?Ir~;nX=Sf zL(WVn7w-Szc%pW8ISY21vS8kl&k`ocr<8;){4=g&Lbkns` zoHrxypss(hZ~1p>=aUxu7P|J?9)P-Mb{6^QzmoYm1-@%WzC#;g)^gQ+h~28?@c#!SJ@*-Qg_gylC6e@zI;c z+m0Ojgtnt`XSLIH(^C77#t)-!SKnKD`+09-ZHIH7-G8uLqz!c6vs-#_ouUc-J7%6@ zZMS<9?lT1R zw+kbAo{#1a1iUcb+%w|zuGnkw{4vAgz16u>U$fGV(t2ooTjz`5Je8P4I_OIq{k`M* znD=VP_u3u|^P~K3V0&_xDz}5W7LK)UD9_uOZobCg`5laNFy?x%&erFlpdp~%g>{U& z7ajLt49?WoV`uVtfjvOdJfkB!X?ub`plLfO6sJr`3)4 zI*I3lOdNa7m`BV5T{k(A>fZVl>YJF_a-dGg^+lR@)GJxu)8nZO$lLZDF`%BL`>fQ? zWxl74FP?77Qs*qNY}1H=mZkA+y)4U4(6Z=!*=MKs6`WdxA<3y;HWm0bm#DFK4gmjk;@F5~$NECPMSahE&vh1c3#CyR z#<#Ptv#|XxC-N(_m)X1E&H?ZAy%z8EKfnWgyH4QSk`p@L&U-U>*8#OP@e&iK1$^4$ zy`j&U@prWG)_tZqI{yW{`_mgfnRid6elqXw7kKx}6Y%bVVdwui@4j}!#d-HsYB=v6 zWW2j(0^Z#(@NQWI-aR<%{ItA_>ka&lBwSPQj9poy?tXs&*Bm^*y|M;$Ju~Q8mc%bW z{y}$AjjvjKul#fXbst=hKzk|gWZE`KxE_H%#MM{cAHa19+@rzu3*6Ug-9utk;~Q8{ zR`sSnC$3}Q-VV(_uJ0!tqW=HYciFjz$3d@!G3lExo3aXiV#;#-h?M8zw)b@5(>Z8L1>zl3% zeRL)2+(~p@5$Jj2vfZ@4^*dy8eA;Vn(AA@P+hM!0`o_D!62jI{!{!e#@7=7OQPU3$ zB>pGV!?)gar^jpKIM?=V{Lw%`D)8cs2L`^`4sG%^Qx??MHhwRX8vCS$uCd$tc)L{6 zJ&i3SAM=hjT$ry3)80bYZO??oDLWA{4x~F1)5WzZXrr~hA8&VN3}_nW8OKtpkEB0` zZRBTdWMX=1G`17dQ!W2MJN2`ElHmD$>S`+I_Yf1xdX)1M%6PxxL0_cU&l}#3v*Y~Q z(=pABeZ})}rW<|mw@iz(XWF6OcHzA#3cU{i=kw{ap)AM$Lf7=XvlqJQeEs3KgL8F# zO=F1Auw^G`IPQ1M+Jv@}3JJ_1#>`__ce%u|izM(nPS74JeKv$2gYR)KeY3LtQ_$~a zcfFicH=(T|>Bu+<`MmQ@H@g$drZz&`uhG{Zus_nh$7i5TmkaAHy?UQgJNoE;MKB&q z8_Vy3w2`L$b*&qJ9nWa}^c&yRZv0L?MbZjR{mw`CE9MXry?d$?{U?*cRxQp>$0KHU z^=an8A}u=S#&Yh4JaiHzVi|MZ)axx$8L?k<^y4|lnqa((l#!N?l@0H2Kpt4AjnBk- z$2N0p9$yRL{2r+elpif1*FDu#22=w76(WBHvg7dVK@qMCqiza3S=@qS5b#{9LaePY z&uxV{7s!h=kQX+P7g@m5cHrq8;OSi8={(?Rl-K#d%cUSg(EiAbcI)aRNyq~`W^L9! z#`#0zpW^H-x5e3^>?3%$2Hf^qGe4gHjV8~ahO+1K_b z$_tf&fWD>~fI0|3eNkBe_0RzI&;a!SG9nFRgbn0F7VwQ7cqRvUCKq@n4|v82Jd+PR zQ`iV~3OrK`JX30$O3EqE+-8o~_qDb5#vc-6!+$|}xBZdc1(O@{6YCCqj^5*F#{7HM z-ag=I`p+6qlhQ84$>(*4<)b=SH8Ej)JY(o7xqX1@Idya$%!>5z9ko@+23jRbdwxm$ zjWo`ExHdRBO>B>wfAyJKnpUT#rT?;P;wC`){-BAD5^dhLYjr5#q96bxz0(|o; zV$Apv$hcn-Q_Jlnn%--+Zo3`gB(Zk0s-4}ad&XlQ!E=Re-v@d8GJNwJ?HoKKEsM2L zwPm~AH%9t1alGxERN1gtJC|{lHXK;24bN&NB=9wDw8cU183cW1fu-U5+K2<kksrXt>8^hLk}ZGW)9_ZHM2atZYntUUfjLf3q~ z`|4!o@lCOWhv8ilYHJNa z8cLSX>&I~ zJhk}|3yh($yzN70ZVmQJte?YbE9xr-bLJH62fYM+4dfC-Zf2~GJ30+ns5^4m!{rR! zTc1ML&C@O=EogsBaGm&Zy613MZG%3wTU+ZbdgLmHpG52Xy#`DAH_@(t7{{VYde_u0 ztyF!?kG`dgY~z~d{XFUC{SErrx#qt@on57kqThnd@4~mOgV>*Q^nUBN)AKygiW zBr{omPoQ@jbU*Kg{yOZPPx|rh)3)zx=UTp|_uuqi1Fg+97v=En`=?)j^lcxeWE^?{!3Q&?+y`l^$EB7&B!jF=Zlf21Wz8@2EH zc$;3vk2|qVkss2h;Fvc|u-)6PB1YQwS7{@yU&HugIXW+mWkEXqzLLjj{rRS?r@y)k z7#YSha{@kyvUH*Lv5m)P;eC9ri+To~mv4$6!MUz_*LaO*Q$OB48I5;A;$91#uV0f5 z?UYOS9v{8;74?qa>vLY5i{Ra=-i(EA&+FC^wAoTm0j<}EZK$i#cc_nUru!>qbw21# zuR_1M8N#;o(R(xKJz294xxMKN-M*`bP-n2JOWt(zwKuxfvn*u)t8Uik51FTe_p0{e zTsaU3pYx+ma0&B%-G=$&%rN`&z_i#jYR~MYbAE-}G2>hx_bJtflL+3;jAtNmKLgir z@SbFTmr7WE*?i|x?2IvvH{r?}T+g9rHumM>{b+HXra`Cri@)HxFSA;H0?#D#dx4{E z`!x-}$MXlDs!XTpIz}v(BUq+Wso`bfbGV29$ufNz%XFPyrgxxBxQ>8!XHO5(^3gH{ zh&foM_d;btUY)g8`-qhd&+fE)zm$!9*umB&cAPj(xn7m$wNNh`pgx+R?42zEQrZl>(G0wS_bxQ+b~{J?Z^z}^K)(z`#TD7M(lfKM zwml>vG8>N`nJZ~8&E`oVaOI=%09?~?Ow+;em^81nV=J5l@8$IvFrP^kX((CQ4Ft29I% z_Qmy(g1?xu)Q?7-YI=vW;G8MT(QL5bc{AVWYq(b&=ZniFxDSzm`%i_>S=0w#w9r1f z>6pH6`i_2|E9L!XgnKEUI7as}*}X4u=#RuZzvZ{~K-3v~_xLWH|D#TXwoP3&Bgr-%FgYC7HT=s{bA#<%10aP1D-+XC&4_xwaddz&0vlz7(OX4c-(c>lMJ z-D{xR9*tXA+n8C~SRkGW;zWnqW^5SRBpS+T!F!aUUCiDY&>oX)POov{YDa^yP+yxh zmgCt_$0noOJ8itiYXn(Yyuj^QKiBOkAx=+Iq0`eCPwWpzZF6)Qo2h;14{mTT{+55r zVv~Q0>RD5hKL)=|gG4ng9B}L!bNfa}zxwLXi2BntH3dJ|KbzJOu93bQx?>l^3U1YH zByB$>3cj23kY0yWmjJrz?!6YAC#!e8YO!y|yEMk))FFL-3$PjZAR)s}_wni4n(xeO zZuJL$Wba3Zt3U9QIsWXVYV?8QAUSwG9{2X}zHq$9nC%1F4{XIdu12h*U!QOfFs=F_ zKYmB&t5DyC@Qriyv+xZuCFs6ozOobgSmCUV*dL=d;Qdg@&(J^O3erqj&_@!~Iekv` z+Ab%qcOj44Ta^AFPlId;@ieY^MBq7gN3r_wgghM&br&1rX{FiT{qfMOjv!Cx(KU|P zO_qOzKJv7Fr^(0dxGsn52cB&=&~NCv{+hRi`v15_s{ff#|7ooLt+>v}>fZ`=nRJo* ze~Hz<4ey4B`Y(cSY!T|eNUwhbU4OwgK-rYhOY^hC-hKY0(7*HOn(IH&zxBE}zn1mu zUTDKult;jiIYRqW`3ULHg!GHT+d|X+`L;N3;%(vRAcs9?GHL(J{}}JG();J)yIKFd zJRADwN5{neiS%h7O_2KM!$SXj?1KJjirhax@?d;#&K;DNZIEa>FML$$c{kG?eD@yj z!yn~w{_)-t7M=$D679X-=>)lG@m^+if^0NnT#%I}&%snY8y?T&AWe*iacJCNoR5oq zzqyj#4^H~=?y_)vyfo+sYAd}LbT!pa@N8dzn7NK+50JcBn_&+6#5A}6XT<1l($9O+ z{oNC(bZxTfE&Z-~)Ek&x6rr~)jH&N~TiyQNZ`SX9E=L63>()^v#&+4OX7M@+gy&v)ZQas0m zI?l!JS><=kGn-Po=hYildhAPnb4LG`P>A3eSjDpTMYdL^J8tkgFnW$8OAln#nXqzasQ3p z&pm@gr!Ro|p91~n@mxG>NarKa=S|+sh3>gT8w{ky71Fs%r~VG`V)cO&ZuN0Ce}OTA z?tOGBhf%)b9Ytt2YxC=S0qT@v1nq9|9x$B8dH!Zg^b8~=q8~u?1pzdUdY&70dVZ1Q z^!z+|0DY_>f1%$QT;r;IkIGteWuKq)#uD^56P>@-oY9Ot+C-ECF5pGb2dR%b)Isvi zma*q49E<*6Mn6NWV_oI3|GlF;VGqdLu@{PGjDD8PpmO?(TX#}l9(GcL`iJd(OB@f(c={(P7VkGREP+YH7+8Szk#<~@$g=O&4x`Tz?-ki@TBZRgQ#tVWJ9z(^ zHq*XI+d<2Q^LEG&<`?toIq1N%aLvF+3ffor&zUXhxYjw8>3+DJ7`^MFp7E|JaeFV% zc0W8{8&%iSeeRdvSi~Ij}tu=SQA(&O~)PmEVSpmvtRZZKM0#{dB(gD9#thbM38TxyZZtJ@PNw z{viM2eirgD(xHGR9?pZoWI|kf%E&ur{eNJ4sOT3<*$c&YLfYRw3qX; zean~)`4`V0+0MiKhuTGs7eU`&dvozmKI2+Z{0fs(mFlyF8{78KJB>Zw`0<*y)1=;e zE$IDyg&Wn~3oPpHc{Qz&SG8-%*$Vju`H<)NRjOM(HP>?OZlzp31@9rx>RZE3lq=Vs zg0S7WPLLn@p8KysTfRcH=~GYHoh?v)l&dXJ{#KMd9n)}MGRHHV=?2-8>s@>Y?t>SB zTq*{cQwqFV4svED`Ujo0Rw+lDsafmjZ$3SH+DW2sg7h4IZ4~L^8bBuIY0D6mGiaxI zv;8NZQ4fsQxE2(@;=RYY(YxT!7ViS|f8ca}X}VJGoj#0y2CTS_0QI~B>ErsTW4G1? z_=ngpGrN>>+_$+IpFwtK?k|D2{zQncDmT%0TW%uSSNQIGYyfmQTyyd-UU1p?S091* z&XxgR-90tFIvBg^_F6DMzD0m9QrZ_!*T#K|UbXn{Y;*e_eBABIFMcKQa^2??wk=%) z+obPzs!t3N^^edl*V4VyPVbzqjr!R}D9a7GtSlo=%$xe%+(fk+o|e-CYR&Hk)XsZq z)J~;c?SygvA%GtO_@P%Vj!jCZeW%um`w=KFsjiQ@;PMl0-}dL-_7^n|zC%Axwk{Io zd**rEuh-A11endXLSkE)pFOBACzjpuU2^!o>BQh@P;egOzYpYr<4KZ5(=omgv?W2C zcT5Mr72o-mJ?{41+7|ZCR|;Xbv|aEW^gR#syP0ecCn*5DwT4 zFXp11CiFok^uK)Qe}&NhilF}$L;ov<{#OqDuM+xS4fMZy=zsK#>f*G^JhR%#WIU7h zkLDlu<>YzG>9Q8s-kJ9vf`&*6HsOtjB1(=)d&x;7Wx7!{ia z{BqL1*^uP>0Lnl8kb71K@a5k@_k8SaH~RhYW-Y{hwpjH)L09`*k5j#|XTe*C~* zi|>nr#P=4!4}zX`m!_p>pbVvBr5*3rbo@yBFsM7<@@AOsoIVHi?RA4_Pc$fg3wWPz zq}xeppMTAb`>N>~7`OY<>2^~4`9bkpO80krEoisk`(iiI^UU5qO2_g`%yT!(bLd<2 z6QITpI(>1ybZ;^}Q=ob68*WFpK(p+`#Q7DzMVkNYS!DZ`aVxebuHoStAK>U0B@1nN zkS@}sv_A!1>SLt?@A)1Z#(ojB#Q_=Pdk^sK`kXUUg)#Z>g00Rwy3IV!D|j6Kj?%gQ z5S3B<9WOh^!F=M}5A%m{F^@VGur~jq_#aq zTT8%bg0ZRJevRKh##Lvm4=VKa?d9Ffv;hV{`-LUDvsdmIlaw z1LVIE^4|#gZ-g>8LKzyN42@71jZlt8D7$T{k)8EX&=;c7QxWxyZBWzN&*;9Md~4B; zwF~#D+SSW{ZSj5)$`;#CeC0__-+8MuV=FQF-aKfrwL+XmNISp6oI%?G(nkL~Qd=aU->$&rpnK0Zn)Bc7y%N{r z0@Lx#_*~r&&;CUgJU=e9S*OruO`yl+shdaa-X(va=kjrW4s_%E2Tf-GBgE`~&S>_3 zz|Qg^PyFU|BA&6Q>qn1u;hppCfTNGQq@azNLYjRhY$rePFzJNx;wb278$jP{hcT)H zbh9qd`?kTDupP#f9Wah`!#MI1j1N69KJ0?Aq!-4KeK3af!T52w1$`{K$T53ol-u`% z1s1eT^<8BnC|5lHC)15*JG@YrzHeKd)bA$fRoC4?O40A8I%_ZRLR6Y>HttI)o~nEO zq~QHEvsdbCQE`w?EIl`J6Sbc-?O8|20hrsO&!9aIz?|jTVr$@AakjDILh3&g+jHy% zk}$R+supd!z?(@*o}0 z0SCz)dj#TbD9q4(jswlD!~-5$*X!C*_3=SF`mPXZ>G9%h)F02Q<2mVbh!NY|y?0oX&GIlTMX3_1fFP0H zn@I0P=}iShI*5q$9$KOjK%`5T-bAT_0@5LL5UEl`O6b*u5D1Wve0iR8p7VR(>pEX~ z|NX8jJ3BiwJNNAD?49H;JMewjL|B`MOq{17ope9X-{S}tF>NqFLO(&i1DdOJ*Y?l)ELF85tS<|S4` zhH`he!}nyNUy^I47g?qXa|&wMFx51ME5mDB)29}10z40+4{6-_p1!zt;q@wJH(|B8 z|6uWfUPbnYFHs+u+(akWO9&E(W@l;d>+v>#DH((`Se#$`>7 zjS1^$q~e)taAE!YDc@DHQKy=R=Rbd_tr>*c)UWKr9@!0vxi_ zJRfd%J+FrdzTilwxGUu91?~r<<6XA!p{aml(OI*?Ft%&{-3gKLBk%ja0^Se29i4KG9cE|j)3 zaxR8kCtc#)6U5%FcL6RPzv--C@D=({f9Cv^sj(&x5W1*;oEhDDW$;6mU=i^i5uM$# zR8BSp;&>8xJ0i`dWhFT@NQ>YT+bTk8fACzJ&~3$BT1R-cn)AE<~*iGkpl1kORLeBVUxisI>}R)KW_^;jdl1lJ7r0%uLfH zz6D&ImD5{n;aqIG9w|FG9cWme?~YwvVwm{xDzu2#)~75q8YEj?v(H^CxTJ~6Uz#V7 z&EQtdXD6W7cRE`{Vpq=8@dwcwcCILunzsRkWa)1Iuj*hFn-cHh8cq{JgD_(Fe z?DQ$B)()<}_aAk4u@&8c6#$o3y|1dy2S`jWy*+-tQr2pt$$APV*`6HGvc*P+YBKzY zbLuqv^*VrLqSQt+*8A$MR+hkRxmfAuG1u==q4&VV?_R1rIm?*YUVY)6t@5H=8?--% z3p_H<-kW#G&qa%Df;2x;VCO);sIKBwr#D%oY8Auim2-+nRaW$g%EVlLV#UDyPiAzN$bStyMLcTtGZpWp zg5R>^a{)-J=4mB#&K1l>o_Py&oFYWk#nyadvf z4K93C<=c@}NPeo8s`MKFrLt~vyJR~1M}Xjvxa7rP;5x=w%2cmcwx{TjA$N59j=Ih( z9hE}awKBDHrN*?qvqA4AL37Ebd#<;mCr(HZYc3}3+LT*oEhPQVry||Vff3jl3&9=m zO=I=^a)3Y6Hr3vz<8RIL;+foRKA~ov1%3Vv4V#-*+BSr~d<74g6J<{;W$Z-o;$FwG zCe2A)&o(QCagXBtb!)B9coj^YNgw(MoGaDklITOR{g{n)-7#Xq`dXCSbMr*+ABds- z^lbvg`K@hK_Kge2XgpUH_MvPTlJi~2ur8U`!^HCEGS?#Oxwd(4Q@kaS3%!45X?b*t zqT%JBX`US2TIibmGTCEk@3}Xh7Ch{pzQSK}k1VfCly$$P0=UuI>U%dv-T`XkSAW-_PIDR&fF+ibPP46B386;$Svs>RKJI49zwL4>5 zN6yrO#VbK7hD+gBBaShsgrn9}T68nZw^;1H+=j`F+n_0(O`~0}%-2Nijixk+`)40> zvG;W$*ZxGi560BY#2Wp!j}ODQ^D}LMer39daVg4m`b|_`r<3<^PkS-ADA=VC=2a&f zSt$*v-X}hKDT)3*fq3$|#iTpCF8IO9=-3OUix6%P-MYOIJ*$Kt=2OK8_f(sZi{{q} zD>{+CGOGZk;x~o2?ntEwUvOEjk>&Js`YRAf0%Eo?suB4-Ug-%&uOjAOf$3_s;olSu zT2Jnh-d8TuK1>epqI8`ZqCGrf@Lxm_rdD5qW1QB>_#Ol4pT*#j+{lnru=mtsS`~Y0 z6?-}rdny%sG8KD(%Aado7*6tKWlEI*dJy6^a!hlzL%X{)_9cXlgmBBBJsdy+;3CB< zljA~mzWUK$^wTGiotIBojTY5OOkV;5lu0eQIMM}a26rf38#Hqo{1?Jx;|pnyj(PgV zqQ8aWA3poS1&Nr+Jr_BNHj2y%=-NWi?B7@}Tx;!5%3OFRvz%KrE<3RM{+{TLdBGFg z_=ib&?__7fk~=@?AK0OlzQES#@I=gpU*3lwV5JvdkLEy>cFw^~msLArVSpZq7E#KrBVxuryG=l6)XWI(OgK-+NT?4F!5J%+Y6?yC@=(`LtAd)#BI z%%2Bla!=V=YR@dewE?jUt zMh>}=_5Bzgc~`G+d2oxz`+59_qu}*;WMbhmD<-G$F~0Fh07Wf-WAf!Ek87)A>yeUf z8sJ&2jx%`MmNfRs{=C)P6J74k;Qn!$ft8hf>De|BGA|X4TIZJF&!~eUwd+kOdFE?_ z$U}{~YhK_}ZzosFq2TYV8|7S6AK5V>){UohGlpvzZ_-Pl*k%6WWb1G}#btK+EzX8h z6K?Voks(vXfzn`_Pvm=)sKo-ByAw%}2;bkyn7c{9X_H&I#X)PGyP)eoXc`gbx5n?N zt(veA+LSfpg9H;Ur}8JlS-7n`ZWqWiasr$O-?mAwEVlOt9(vl~!G!eXs=$t)u2XML zh2pmnJ;8rqvRpzB=bY12QwP3~)zIA>yfgb#nSbe?Qiq-4XK$r&_2iJcg=Je8NwXZp6hhv+T5brmF>|JnudT^{Qjn96f}`|3oTZIXjUIMfB1X3ZRZjs zxT~riuE)L1ao2LDV(#Zy?B`l)%yRi$Mlki>3xNQy=P)4GmvQ>A!wkl!Nqbi&K@e`xWbjD-8_{PhHm^ z@fQ;--l36!m+xjMQS}TP&b&kYWVf3EFMq3j6#5ZG#FWz4qKGGx+e3#@HY^y;ltl_n zZy;$)B<02_cgkX{#{b?}{2&r&N9{^C?m;u;{N5quRkl?Df*>9mgUj!WD7F8kW>I?a zam=*UkqZ)2Ti1CkeR6fKIt5_U{LZc>T+e6Uy`j#SJJRdnFkFse*C!yg)Qg1Fh3-{- z3~kI-QVb{V#?EAD&vzk84=KI{gEu_U{Z4GRd?EwwS;so}VQ6i1dI0Ox!)uad6`TW7 zJrxVJR6Aa!;h~H3oy+MM3P*6qlf-m8H`#jH^OUw%o6LCgA7rief)IecD zkU!}Xr}ZYT0)K!{VG5e#^8-wG22H#ak7yNCF$tJD@=T4ccG9PtjZoq%w96c^SV4DC z6Khc0jW=$w=h*~Jy8&bn?NA8az&)iM4y^=$dtJuv8kUZAm#&{1ShCWEKBuQxtBsPT z+pFNfHhPIJ9L+yMl^TZ+#k1EjJzU0bTvIYVD8WP>bjvnOaNZe?!I!S?9v z)wlBthob&*t=`J2tV#IUquj6|%3MKrzMh1|KhTNQ2(5suwL5m-@)6 zBkg-F8{!WIF>+T3vLa=53}^rO00tV<61yQ%Tlw{`B%&hCYn9vONm0)5!y$JUB?4un z3I{a6Wy`dC}CHe(+F@gg=j`i^#@q$c-+Z@{mrZ>LU zW1kqwWv_tf1QI8Zmuv-PvA~ze?dr3{xX$pKE7m6==Y>4N>6*F_Sg>Jj^>}I_WJo3I@`A+Y($WF3b zVVxkli(j#wjudJH_U@32IBA=!?N%7&gwyB%>?-@*(E(praUjy?2k^q)K=Q6+{_$4O zC4yObc5Fd)e^1c9i_o2y*}UbYN?6|RIuO{%{Pk<^SHf9&Rpy}8qkc)r{I03ScCogm z?-mYnbxmQe@TrW4b+b8^%F-y-BrHvNKp=%QDjsYc_R@*(EC*pkheKOkJ%Q zum5v!=)K{$l?}dffQ|y2w#r%+R2A+mYa%4LbOChYo(f2&X(2Bte=*x z1`^NfGv*)lXpGPw9P24E<$i3ssf;3*s8}%a&PS^ zS(-#pMm2qDM(f_lr~%^5kccAM&ijEtGK%1o>KCD<{l7t$fGkyNjJ zs)VcjEv;(p?d@3LhkZV1TKj{J(k4Dw+fZ@gqsMlc_h|89)`zGD)3A_z9Z%aYH~W10 zqg>0GI%;Yuj%<{Unrky;Gh7)~;)y#o+@(ALkIXpH?ocP)c&9gXZL3uy-GPl#diP~R zW#{XrI0+Sly}fCjz8gA@MkXfE5dNQ{R#U~~j}mmORMAo8RePg*Llx(3G4z%BM$bU+ z(e_SV57{|`Qb9#M4AcC5hMiJ&{bGH@4We>LX(8jmy%2BEY`t$piTNf?Ma4!pgop-MUto!81_1sB!9O z@o%<*KS^}OoK{r3%iNQ_cM1|T#>M-wzOMuK%L1FJb_b|;oAl8|W6W;kVRg_!nQfz# zKk*M*m$X{vD0lG&C0P^%Yu*WE(f+Df0<~m<+gUp^;OyRRJiX+TkrfGU$XpD{Et|na z@QC_K6a3Agm4uuxQdT|l;mJ|WX7els@|K5478V`-puFTKzPM* zp;kI6(I)!n6wEuejvUgCWY}(GvD%##-F}0k&uX!}eOQ3-lGZFxdda#tu=GLiZoj38 zhNO9k74L-Mjh)SyX{<9tyx_EG#+p;8IKx^^+FDJ1kv$*y+&N&wPs(5|%frm%RQF8? zpNc)_P`FDODDpvvBcAR{SUuIroxUA*H0Yrh)6D21938yImOZ-T3f*BBjNbOCl+ja4 zC`i>qD@6y7GVbt0r*mV_4LlQVmL-^X-Q!=bhK0h>owTTKUj@<*8~!jia#fhbL={zq z+f}e!x^7W3Pu?9pWtCUUL_g|xTN#v{&a;}-Vaslt23!q`f}`IZwG|MZq=$}yq9o{d^id-HOxAez z@#twR0|P3HwM2fH(L|DEkQW<`7Kk({VHKai#%Lg_;OHq_>ZtOt$Year$UgIqzW<>| z)6iyqy7;6aBdS@i$Vy<6jLVECAuH`If0*@al_A!hPjIyNYm~?$??kv+$sAvT&kFNj zQ7n0DZ+L?1)v`d`a&U1M3pLsvP?1G-ks_=`$VX56hDp9hD>9acWN9Ge;b{LNT7y9H zuuC`^Y|HyqH&p|HAZpcrt74jic8e>}UCj#DLJL47@|IOxo`$8>rR+4)px<5%b4cCk zX*kS*gz8xG|s$N_o&E<*#sfSk&7KhQ}cz% z6}OL)hhYrS8nyQl?-zv>>WmA2A15wPj^5oRk`q=IO)ewv)ScpXpJ(VlEIS=+CUr%M zsCH)*4bj2}LNgBK8g-^66ru5NiwaG^+9g&Z-`A_i!`z6WI7)sg4^#0$*)Vp1iwU!o zXf?Wu5cvuDUpy078-)(5&p@&nkyb@AsVR3YLa+Y54dlbcCDU-^v=zBU+3usG~@@*}>;-b-#n z(z$HTbG+to3aMS-I360m;3^f7F!N}G*AXYWT`l_1OtC06Th)W32dtLjr0uo?LyJ| z8g{t)_gR+Xgx`^BZMgl|=eto!@d(K*_#-Nz4ui9x&)|A+ZQ8O+mw_ANm{v)mv&$YDElbJIIBqB2cKS~C`i z!9Ot;2*4fEkR1Ft0jg$wPz=;f|ICxB+3?JkYTT(+Vb(2GbFd$C%%@@nW7Pu{Kq1<& ze8x^a*fBpYm(gAb9-DG+aQ5s{SCO@JbULdHQzwmno*>}>xP!ALRx8gGwg$hS>Pj`g=~dq}IPK(( z8L`?N)rv@|qee^%x_peV@Mc|(im+e<2>)OcabU3kL9Q=`bgO&NX4H)Y&`Ks0qbwFi zI}!23`uuu0B8gas#=?!IAE}9auZ(9SYPgG(=9i2a(Iv~8B&q;jcc812B+JUdI)7}x z`&18cOAD_FzIj6?LLp|vR6FNo6z;BXK~iEdY8pw|D=z&Ae6xUM=N0a5y9knE$h4Q_ zv{RiZ*!wc+Cf4O6kvzJV#wH?peVe_2MSIhAh81=U>>pt6g|msMmwIO|yBVHo-RM$@ z8JQFMu+An*?2_S)!21MHmP#u*6M_sxw9^2X1&3-)~;H?X_Izj}e74+^gN;X&?xy&+J?+ zZk&qgFCv;IX0X2~!omLiV=eOI;UYL+b7o$5f=NR@P0syj_9LkEA81ZW${u#~MV5u7 zdI~9gVTOnPWnF-yy_Yq6PB&$M>%vH@nbz+s0b0|el#)ErPH;h~y7t@IMxMs(yVr9j zKzCp?cV5+O=vcmEFyhtDy!*9>+_vFa`T?8dSI3#L8@rH(9-gmS`a(5Q@%I*t%o~go zJTpKH;e9k>4E!8@Qv1F1HJ|<8o<^p^v`(W&4c*V?>`wSMpK8&-uzQuo&Y80rEiZU= zX>KyuKj+)246!IrX?-ig^NTWu;~J@pRi;HWg}{ms`13ab++j3GNKJkt{`nH?aG5D3 z4MFJX_`qxTID^W4J@RSg8+^s^`@y5H_*~J*x#z~Q;^tWZ^^ix8HYwPfWe%prVe71u08CQBHjpHb8pA zdurSC>iui#ynPUpHv|!y!60~t7$^Lp80S%l^*8esiVyH-k>kZLYmS73i+wk9i+!W$ zSEOtxf%LHCSeUtF2bMZhzU@j>X8<5plhqmq_vYqAmpaoW$2j&2b-QbER%xgkzRV}J z6)U@{)c=4k9Ew!q1~|9gAW33cRpAB%ll)+H?7GrSgOnoy>%YWaWgD>>fn%*zOC@$( zP7-{pCXzVV6FiJ^$-(nH$f-2ifuM2#G`K6NM*;F0XSC+3BG3(?Jj%GkwWi;jL3{0e zOd%BIJ}AqVLjsUT09;p}}Q8u#dZ^Qr)*|uf??$xJG5& z3+LpnxmoOx3|(VegDS=1$U#q(p*~~WEyd~7Qs`0vIt(=$tMyrPRXa+ELz(>Ie(^ya zO?!vcs@G1%J`{|mj4d9&f$9XHx>8Q8uWn@sYpGJe@${ZjRLH2;c^E2Gmuh-#F>iXU zlcA7ZZyNCjsTlWr^I($Y+ugtz$Bl93V%wgumq>&!+r?xUojes%u#ZqcuTF`LK0728 zL-MgRuLfvwaNk5kA}2*Gq#M3?Cks}-WISAo5yow`C{;sFoYWoRb?Xi!|>Fk`bwL&A8kH28+KBbQ-aZPbz4_4p~6^EY$)YpRB9b{5i@yr6L{Dj9%joDNY071Hm(8A} zk#iLs+*s`~3l&U`Ssi^w?Q8P!Ad4j$b^oo_iFO_-?a3)ytURU5SS+c^%{Beaw%0$t zpGbcsyEjosE5pWFhe>s8>sDxp>z$xbRvc?7YC4Mi5eil5f%|AEaLh4hvl7u;-0u~* z)PKO~xN-a>e^^mwLft2%?czEVgGXbWY9d2vIizBHQi8ofERZr4PA1}vw1#Tgc+%_& zmUuoQe{axydpbrdEZ*tEZ9!Enu3)Ox>ppGdnvl%FSrU@10HLoex!m2nTCLBxYxuYU z(WDWO9h=^et7@SSUSeX`$b-(vo#>v=1{G-0A)fkH*AkfTsL_rRR><=S)U#dmo$q_< z!&;~l6JkB0BL-pvLE4#S_cg8Lt63cD#m1wj?%*^j)qw`0BlIKMGj_#+iLl>2&##Z& zN(hBTXzo-{GdRXinAUJBRNMJ$sXY70Fw$sB$vW`nW3`!$ZU)U~skwN@?a%Vmhq6}B z>yBv8dd$2>Q!eX?sF8=dqSw>MUVp){># z=~Ap_we(MyGKw3Z!`+EmXH{BYx&~iAi8y4NSdxXh_QURx+5{Ss77+Jx+l!TwK>1upX9ouK$vL5$m17Q{E<|w6R#*aDw(61rr*U;3y zUGxyWH-L3LhB}*9%`C)o;`gq!Ik;*Hd8|`)d)gfLcT9*c+pqnr%d-<%!T$3S$kR)1 zr5FnK$kN)y0Hv5~_g6lSB7rC$3aEl$^jD2KQMk%+qFLU@2rjo!_qeLEcCq>}OO;DQ z6T>e{XN?@wQ(f15A3S)6BpAytF#`#W96nRL1FR0k%kSh(r75?xsNtu}I3F_npqN^9 zH$$34Pe*@+zgrKW3J>v>3lfNGQGN2{sm+~*`w7e`z8pDJo_)TZ8eXyzF0Q%V_h|oy0GCu-Y*IPC=&>WKa+v%NB1@Qt|>vms22*9!KV$RC9XTkVj z(Ck5BK7mtZr9efQurU0k?YKMXyW{YDs`gc!~V=B0MEZFk|B7G@7lW^rGNiSZV|5%cW!P(caiM-){)jKLI`C&vbz63xp>e}fy8p2MpVKVZ z#_w&tyKUMfU0$LcQFm*^HP$!^c|al7XyZ278e=C+siK}|Zv3)LatQBtPfx!4v4zax za>fDcOV0{iK6#Jp=71_hJJcnQ#fiK84L*BUo&<3;|FRNT^(#ZR^21lwb|9p*LPp;F zMC>!A+T8I${xA6VLihLJtfJs~z_}*S^?JpEYE??s{UJl%jq=HR2zutZ-{PHz3H#=FThy*TxYr6XE&zbn@q}~_)e0l?byKYg%zD`e1v( zb6Q>HkLs}A1Bd5lg{z7^zAC2p%uc)>AxTR8$`Y-EX<)dzcfd#KFkQB!U|abek8ZS2 zoLX|(WrCCg34{d|6^uuG4y5{m#kOc5=<)&Xtpl_<t3v-29`R}79zRHiw0v3KfMFEZ=#livl$ewnlDv~`Z|kEB$x zeqJ|a-9MK*U0o?nP?H=FVT-gc`1u#cbKip}>c$)m?bhWzm(Xzi?kaMe*z{F!H&HQN&jF456L!9*$B{aP z5DKpm+0)Ao(hkN`hi*$1eH-0G$cVO!@5-2=pY;QXH7;VU8a{<^U72A}hsSG?6Kd4+Rd&Sllf z7{`C5ET%znhee+OjR()wDG%!tGZLEzLmr=l!W|vL^gbd4ESqsy3bd*qYMxvHqwa6O zMlhjSK{$K$Ob@n(TkCZh7!)2)t&%Hji%S$L`uK(RgvQTF0!QZ+m6R;G81|A0N4WNp zrzG34nx~0FD~5b{d%h!#u~z7>$C3V*2cZL_dCN?m32W%Hb0-soH^`f12fk1Y?Cm|M zb6?6ZT<;B?t)t>lhwvv5x*WkdXE{ld4Y3%(+C@L`)V$)vG}CJKA0H?_7`kgHDHEZ3 zyl|3&yc8}b3@J=uB|+ah&KNB1%?Xc<%VacPN8EIAT}Am^oi;zmea$K#9=E;BE+5{! z6o_*WDLXPsLyNMj8^XqYZgIo6dsAk!%Fnb()l0ya^{Z(fOolGg$8j0xpHn-y zFP}TCVBf`V1V&z5Qm?b7cBK~Lqu|@wwA*gK8Kb3NeGZ<5Uf{18#_!iGh=~)(SB{U? zlNo;;BU~b5w!0pz7}9P*NY*I|2;mFAW4d(hN}d$OqWoGk0Q-MTxbZbc1Abw$Vu-vI zjN$sCY5CD1m3u_h(*`%5FzDn1brN-~@RsfIW5_D*A#CfjO4q#$u&Gp6bA8j=c}MD) zZYUVLkUf4p>dLAvIq1q-DC57-zm2gCJ~~c^uy8SIF57u_Xu2YjOkS>xqrO63AD!OF z6zt@_BR0&-4ou&e=F(U5v&)!cl_Wmh-u_FTW0X*=5{!YSinA{E25t4a*+=m9e%)GH=Etlm^ zyiz~72c52RQF>T*!eb#)m9Qe25t;Mo)CStX^ug^BedMyp=}+=cbtV}XdszZ0b-3_~ zmviqX*tfnIeNem_w!(OU4VwkJ8Gr69ug3@aljbE8+P~`t=CYu8U*Vq&%a;xm#38>t z$mdGk3+#AQp#xKQzdUs40Dqur5SzOASz!lhoxhk=Z^LVsoxC?~!=repjtez<)1a#J zUpxshSOo_fRq2z%G;)l(Adwx z^ouU7NO}S6xpp?b9|-$p?TOHbX=newv5859X`^MRdSazoBu5Cj(XpTXv^XWVsENG~ zZ)kQdiKsw#!*Sf)5ZRuSlR6rJ)1|?ILp(HA>QdGryN;O>;MB?up`0%4JLw3AQV?v3 zTJij~7&~qiXyWzJd8SWYwe(!Dz)(E>2h&-~<8384ceP|S;|0_PM44s-phk^~s*vBh zOH}NVA+l3(9i~0sj(2hb6TINuMnE{gsUbM(c0iZlSn?C%K||*yhWd#X&v$;`hF<0j z5=n(tIBp}Wd7d2`n`jC`0V5Y|iwnoyIu?fH_T;)~mjXs=f+%wV!8BMWX=2B)D-cSX zL6G(1@f`*(*lhfn_B?112pfnYPC#>bbgYzWU|~@*UW;g5BL#Vm2T^FCzZXVKtwijs za4PDgqAa4K)67Auc7{=gb9;6|v>taU@e{qY9R<7iy$FkfI1mRsJG{a$I~q&0&+Z}_ z7J=^i%duXM*;epkDts{976PUXJ#p&nloe6IB`04`Jr&)+Y&_igv$3*1*ELuNNp>J` zb>UUPm*Kbz)>cb@IDCJFGt5L zJW)lAzX#*_<_pIgFt%!(P9BN2_BC$%EWcxy+71-ed+?Y2r|X-S==j6f!i>`|1QzV% z8vdyNG>WirX=~rqLv{LaoW|?^3%V($+&$V)(?HM9SDaApVVq4o#E zQ*J*P_@ZKokb&_bG#_+zimg_Z$+Gbvw=0%_Kgk#0#hohmW89(}7%h`ay1GyJey^;F^GAt*pdGLvLJMlSujy|n>4zT3i+1}5o zF}vXZQ}?2}D=+_w`e-1Dgk-Xm{aMakuA`%(__14^A`>3;TY_#2c*VkTPA3$<-5OzE zaK0-8hUrk#3B-6q>#t!X@4>A?LbY2sK0@si6(Fvt@CB?* z4?9diE~l3^l$3dTZ;IUA&{*-q)QE@*>5f17>q5FPV}S_#qssT1K#Pp@tPCX)D@&^k zp3cgHT$Z01t|!o^Z3d%z)~%Wf)-NBDD_FdI3e2BTF;S0?hW$n248@*ekNSDo;BtezF9qsQ#!>baj>e z@m6GJ<+X3al?qDV$}1JpXGtto?!x2>InXY{ROBP73c+xH5liPkCk{hFCPBNX+XM>u zQxX$~)kh>IyvHI{9(EaF@`YA*HkMX(@=GL!1{Nt|(()^1Qk-y#ARb83B^{qBf57Ypy&;wOMABF)Q`CS_mC2Ja! zsC(Q*+amvuQ+&mq+xMgVMRIliasM=1UgBYolO5>lKW1$OzJ?hL{No8@7&|XA!rX)w z_Vs}xC#|jo{eR>(9beyjnHJ@~4|)r&FaSNFbbHPJ<_n!Le3-F-hj>GU%QHmNEZVo@ zwNAU(o4KqEi?>IL|2VTc@$odJ)Qx+65BXFqVAggu8`@0gVb<>bl^ID`%NEPl7n92F zQnb^XQb0}E(Niko4V_0+rZj6mEEG52~*410ibv`b$m?U!CL z_*`d|ZfOB+Ra~_=+361CkKW(2lB}#1W%|eXnD5};psxMp7j`?;Qa5b=WyUlc*T&(Z zh~e?XL&=}){x9qdsi=DX9WAuXL6IbelK%t`?MjKEt0w2JLe>85f8r~_@}n!CiZ$%- zA+dLujT-#Vgvi$Zlz2{&eWEyO%fI=a{W7)$?4PoH)D^<(!ni_D? zTgv|g6L8#w{U2_Uhw`waN6i}IWF$F1`*D(btnHR3}Sj|9mmUL&r zb@BygT(17l^nM=@Hn(Cv(J|L$KG8OpXD)|c*>|P<*D?(Y)ha2ZbS|XiDWqI0pe!kP zgA+kj4ps0Zzs2eE_uUe$veJOH4$Y0O!&)4058iWUsfENtUK-H=kmknl}D#E=TDwkzM5uj_*(L()4~<^4?XvOre%q;uU2M5sB61n;bV!PRq6PF zl{(QshU}%{u0~Di((?}nYz?hfo{U`ld@x&)*?|9=eo|gu^+ME2-OSkaG5vpB(L}yo zT@5xIv1>eObgkNht^Tv7$iB6f-3)z~LjTXKWK-BR&Op)@e5kR;u3cd&auu^O2_U?7mQ%^tbOUnZdU#8|+C*Dip8xj4zQM} zZbtgA`!HgSx4QIk^7;hhXQ01_pJ0NTn@1!bU<6J*T)K8Ie5gwcVLKI4t-=Z3)TOzw zoe%#T`YFL%q%?PA=fj=W|AtDpx+i$wEX^I*!8`2z5SOc6S6h$$y}67CKLsoEWnm2a zunkQt!j_&^W;f?7idEQBEZliS_#0_b-Su?tetJSls{^=EMj;=>%;9TR>V94QtQc_L zy!8GAY3PtP7wrr{Hf8ojm5MCjK8NPzvn_0zt^qBDkXaGwn{&iH!f~$8R<4X&Fy=eY zvBVwXm8t&)NFx}JCH_0Ob1Wf)`0t=r3PFAR-+@nTsPgwkr)9e1;Oyq!_FG$rQvZ-F zw(MM&|0_tFdq11L{G&$}d+*0%3I7lNsWR#Dc{xMbC8NAz+hr;|n+!HTj*e7DuV#LC ziTto5bFWbN!f4X%t=dC$PRTg)|4&Hlg*8EvRrxd{Aj3692Ngs-Ys67WT=T{wgzcUE z{NN_PUDH;pV9v|{v2AOK&pMI;KVR%Y+hvAAhUIWzW~!u(+Qd! zuxeczeek0`&#k4~e{w-;-=u(mGAxkEPH1a58yHmmau#%UW_EWa09?GG7!Wtoj8a?? zJ6Vkk{xA}EbZrhs=Wo}VQ0v6nD~JA-8PYEn;}tkws9q7`KIH(F^{~iO`8BBgz%ebXtDu;OpCO+4^tX&C)ExZD!7xjz!& zx$(K)^!o99h0b_2c1P(XufTrrDC`-$qM|k%arAaP95+!m2rvr6eI`~0Vf!n;eINg8 zC{yj@)d1_pvYv2T{zJc@uY(qoTvpn$+bmxmtnU2n_i6dbC(2xsZ|Zg$Z_5pRu%>xu z#i^UuGR%K&EYa`dPX$ghMC67oy&;UPFfjPk_Shv!7995d4EqQv)>I_tv@n5W_}WCa# z{9ln$e+gMi46v~i-hTY!i>+hJ&Y5xBrVYmuswUq1d{(D9V!ybZHV7v`n0>F*y!koL zMRDB!)n>{1n_}Z#ulM%^*fqUEKQ7Rz7tF&48I^Gg&bn$bXSnbTybr?om-5d;{E>Wk zgxB=%QuHp9TOn@mQ=MAKspw##Dz>pju@h8|<#15NZmuX_{zib$0d(GeZ+pkbB)FD0 z(1d+eW9+X&i0QPt%0M`tAJ|f{YsIy-kA075=E6setGq*`OF9f?Avgdlv0o9H`Y<uENvH)9&+w@J|IM z$Z!K;{47@HPkGoyfqg6C`Z>N1Q9gnl0&5D!tDr7QlUV?<)#%5nWG@=k`7asbC>RmwYdX~oiQ%+vNI=crSY=A z4>*s=dVf~Y6l#o1UD_V$!yKqR5x}!JqcHpjk^9EBb69tof~Ms=euIA+UDue-c)P$p zz;kRtGv>4W(fg&9-oC|Ppg2>PC#LewQ5BKBJpC~l7Y57+qcD+4Ni>HSkw{NoasOe2ib>NM`soz>#@Z&QI{#Bt*5+uQvcihyN>> z!@Q(>=Kz$^BleOef;~27FsHf@4!96mX&f>4$HC2cMqUpbAi@oiD#m0zO9-ZYr~VPc z!42{Kg-1{J-D*R8jWeBBO)81Z^m~cZoQZsi3nNsLpeULTxO4?(v8rhfh{C%X_}hVO zx4V{2!~d4iI3tkMBljcOqk$*4=)p4~FL7j=s=uZ0V`GNYUn>0t0{q|L$Ua)V!M#`2 z0e4tE{CDebQY#lXikO3en>eC6ZK6;7qlfDDnRy7^;lV&brqU#CIALP>$ztC}m&a%7 z_l)rLKLAds*oh=3)V@;mFc9|mrT~O8AWG_78|j#hYXuXTQnfKekH4o*Qzus^V*7td ztiQ;{6?bVF;U~gR(XMNSw~4e!SsomQo<@COit@a7r;q^^yZ?sRvGHw+dP3N}A>e=_ zj~2LN&;p8cn&H>NBQ5$i0HujM8-OTvExgnj?*^dDt%6qIew)rP@P7cFng5)Zn5rAc zfbI}F=Uo>fso zkEa|MVEc>XvXR`aERE9b0rEnaFGcR-h0cg1XQMZ%>eP6)^Pmo5t3=#+BN_IWlzA50 zdE+%AGATg>4qv7@m`d%|h!TGThyG#Uy|%t+;Q1OXS?vZZ_^WvyPC5bLhw|_u3Ke$| z`Pz}|M66?NV@~O>)=GSudQ6L79UheI#SussK8xesV5dD!{e2eLS04zD! zh*JHRG&k<~Ao=h^<>`f06W2gXVR7=Z%^F zM%F)Cy~Fv{b0j1^|<=G#(2Jgsk`TCAH(0{ z^uPWEX5@*qy<7nZ?lF=l>}sICp%m>QU;d% z`|o0O$@Stch;%Z+qb9*6{p)BNoXHyymng?=3F9J=J+ z($)HUbc??ajZM=EP=#xGQSguRtVC9blRI zAaX&KMtBt!iyPqQ_BZexr`rbtF-U8M3e=B5hRt&K?^O-LXXVNCTNB*Cd{m86ghnIL+ z6f0wJ=rqw56Fg}_bz0Yz%l!>v;w7bXn!icty8joF&6~f}1i@p8rOV03&fR%ug&zD@ z>8SWdv?}Jmmi^1QXyAK!=)cR519a;;inTa23U_aAxn!nqqFo=)bJyox7v)&)hNRZ9 zz72{P^f>%{p zUsct9Rh9FJWi~Ji`teX)2^M4PsBHcE#OVXysvi249W(lm{7-ag{K%M*cyZf= zIcA3Q^|D&S{~?*q*C*c70#7H_|HLtuK(CC z#tuEK*&Rr9(SN*HOI%WpJD?Av6jDku0w&VG_9TY~b}YhCN&+AzswM%h1Wd2_o$>`F zVJIW>=-2#3z&B5%myfT6NReR-BmpX*3PcVld?jW_uR{LQrFZlr+CmC26bQ8J)$j^C zkrAl_I9Lqfl%sk00oDRcPyyKgtU#SCyDWt(y?gZr6?R4iIGLcYw;Trzy|xYzHOi$4 z#Pd-}2B3>pj)7zX|GQj!y^QYV{{o{Q0Ww|l7vJDN-Q_vNK$We9UuBRT{HNU6S0}?K z;6Dg&-fIi9{j|&7o>xzU|DFYlegvNTIu8r5LC3h*paQ7M7~+tv=GXQ5)zNs`=6%w8 zKLlQO9kjV_bD9%Xetph)^nnX(OeX<$@g#=o? znk}6N>{zTilLQEFvX*_E!?6mZjN^Iz;jd-)|0+-aS9x&t>WT=`LLW}q8kI1CGbtcx z%G^(YNN2kYD23ZAS5WvW3w8MOs?J}XYu{O?45-hRkYWH1$$!|uR|KjN@PBh0uiSsw zhx(I-WBsFh^OJkv=7N`VfDNn-)Fpa9BkfCKl}Go$+v|H`rk@5k_Igeis|+~7VsLhE zYwZc#R5-m5OxC-|9iHl~;aKuWfHTok;gDHfOv6`tms~=~7a?ne`SPeO-5yH{hYx48 zqgx>O!M&oR6Nf1jo|y#TIZV5w=ohhc^aK&-cb?xiNImI=&JZN{KQDc@q8#-l9$o8o z-&pN+pXqp4aI)Rye3P@V;L8NyJ(Y35&H=oEaX-2yg3u`h?_Z2bpO8i`ZiN{`N6+7E zV(TjMkkkujXf4;dzVstcTNl9f7+l;NTJ5)%VJlk%J!fr zX6Ptj`C-X$_q#!F?=s`bwPyEy|5jnINla&&Yt6u1IwcRDbNOS@0;KMOs`-)#m zPBrjlRL)cN-<@hq4?{OY;%UTXpeljyN#UvRY$U~*^^$O6xC=G;n%?KFYs1ybs4?l}@ zUp>CO5KaJMO8xxn{NQgZYajl>hq0`#2?NiRwqk`-y?UaTbBH!_yPnM)cLi*_8pL1j zv)c-Mu72^{-#dT-8=GsH8~$X0aIAv?*t3_Yx;qH2IO=pR3voEf%lVjBS>RM45^_!K zBv#XcI>_@7*ld{)$Z@1}ysPhC5a0_pJJ8vr?=(efVMm5`$chk@%z3bp0l_ei;MCu>#o=Qlt0aO zf6d&!X6_LfqC+OB>sAg|lB^3&;_AoUElZb{l0w(hv7uv>Vj=T&V$BnXVHmSJjU)e~ zSY*BTwx+8jXzh$ZQ#YWfuK6Eokz3}EqXC@7ukVk4Frsx%20*Pf>-cn~EP)*lejwL# z(St2v&pfw+$C>A?o2!6=2I6N+l7qHFiN+T_FS2fV7aT$d-}jTkbJp8jYs%*5e(2c7 z*|aHBlI%BIMkE#vzU^~Ff^S6?h1DJg*sSC(wnBp94nFz4*CXuh1xW3sE9lH(XKwmq zwC?h2-}4Z@`mi+3-e8NvcWznGXW)(aYL_D+x9Fl=MNO>LF%I7$URjz5#K z9OJ*EFWQZk2QqL%pvLRM5g8%gIu$2<#~%v*^pgY~Ja88PF=7>aCcRWRcD)mpBP%c0 zoJbn5fIBTF;k8(jN(xGb9k(bB%RP-R{vT4YKcprDq+EyK{_%>1N&1TbUxFPE;ma4^ ztHc$a>#t_UMx|WjON9(~7fCK3P&dy1U9az5_l_J8u5?N)v3bXBcN#5Uc?ezq8}5Z1 z6ed4EoS)nC%40gi`NutL&7S=4-qKv$EK@>FydV1mS#W>=e?<$}U|l*Y!{lIWVDQAG zrbYoE?BKZg`f|QN-TP?LU@x5XyqXo>s8L_|sBZDZZ?HF9qt*dif=$fRvDExX< z10Bz+SPNwL!owq36d%$jZtgfVG9XS*|1y~|p6|5?90ptio)Qyg5(kfO1qwi2TyXqa z_KlDO;7emCcLd6~kHo%M!fM~`_pEc7uJPA z%app0h7y$2uKv|)Jk5_helNbj*@0a>me@$nM0XB5qWbL)IBvmn;;F4Z>-(;;00}$l zXT&YSnWUGZrm(ZO&Cf>SQqu7^1}t8IkN+?f`yY;QW|l*HiXXzc+<3M~9fqHW5w=Ku zYJCSM$rsGefdIdSJYG0upX=Sinbo8Ii~CEy)A_PE%+BFCa!0>s#n;55x6?b})U!;4 z2+p4;*Z*({*zi&{z!Ul!@p(tI_5e!(XnW^5aMve?W5BRK{>UJ9X#1s6C9kO#Pkb0s z@We*r650VZX;g7rzg5q7Bw0$3o>+4p`Rze;SA39i%XBh6TA00*x~V7tbQ67|F;w+A z@^RrYRE1pnxUd+iqFnlLKeAKsOMBU+e*U7%GVx53i7jtCj8-toGOz0_Tl+EI!G?{5 ztM&`3HoG>o>GX>!tq$${3R4{q3rJVy({*9QmMcMr2tX3H<+}h*-t9NJIQ~!;P_TOf z-sv=WeDjlW%e$M;tXjzFP}}`}cIx&`9S-FVQDL0|j?=B#Gi3B9#923zK7DdmEMbt`sZ|0nzXJ{Ic72^LhVu9)V!~6$aa5qyMrA|eKD_L8tGc+ z#eqBkHQ$0=x^y`}VlcFheEy6@0q8$_Ah;B0>|J2yUNQGbsn!kSDbcr$ECKrK{|SZx zMtp?76+X9nP(k(lnwel7iSdbFK~0n3tl858F~7o_q>HZd3$EI^1F@9{p~j+n+lSkZ zB=^nbNXW(VG3CWUVqIC&)s#b6uN8oet~9>r1@e9Gl!{}_(O31>W&B!A7Sq{Obf^-+v+aQ9NE;GPxx6BE6t z`ctX}RaZZ&lMQnM+XSpxw`GBN6cH)49bPfeVJgDR1 zFmy0R4(@LE;}N4gmyOCJJTU68sqfv(R254E5&{D$-NoT}8UZj`4R6G6s!sKER?04| zL%z2&-<_&p|8#i80k4DojFzLHR#AAx*GF4NBznSV@Pax5&hJOrbo+U+m_4~@J z2mBQW=KI}UJUz?PBzDUUzJSoyUbY_&jvZgHjYRvOcOZ`!z-iT;KTCRmszne4@Rcfa zOfYyouiddZ04cNZvGU#AFwmrdmjKycW;xKU_v>1qS(6*>&OzbIl)c#=H~{u&X}JHB zN9-a#g~z%Rcc11(#cR|r#o-JTW7@E#ENM_@LgeX#27I% zJE1VBmzNOyuWkf{D;xm~>sU!>fN%nbpTSCmkF!tb9X>$d)yI(=@O77oh_BOzPk<&m zl*I)8BQW3`eC%J!pcSYl*a5*wPYr}2Qvj2-E`7I28w*z|)-QhwU3)lX_*Vr$2GEv1 z$DEx6T#8Q)(urZ{$v&R|{bHVZ#ddx-)k13EAIC5zF1;aO)j+bLw6yoDG6V?+q(hb4 ztj|-ZbiK4g7dx(Wy$z|)xe9()tJl8z5otyxvE6X2Ted*5#blQhJwF19e%B*^?#dA0 zv6xgFN@1obNw*y7&;?7^k6y}N(12@AV!#igHR#T3_EIY^mx57u(OWX{sGB9iyu_wj zYN%K`IN_*q+~^7YSFK-~vK&ugICkqV$An#4hr5*?*Lxvf<;I3`Kd?7jezNfDgEH+i zvA2IV%m}ubVO3DwJySUrIGF*Rx`C)3Js^45T7eamw<-y|Q8m4n-4w6EJl82c_iUou z_pGiqvXCu)bMb|ggZv;-+n%j}inE+n5z?NendaNB8zH%)>^qdRsSf2X_%9DQ!`e&0 zS%6fR)s1CHfp=yLWMNJ8`8)&NB`X!1d6$v9e7GaM&~*^`^t7po7Oz`WcxfX1VTw$g zo9lVHY4lg?0*4;?&+n1Wxj)Yi7vFHR;V?pBS+?4zg=mGZX$D7U^mZN^Z+Nb}qv3S| zl*lPwA_e?k4@8zIetd#`5Ia!oA@{1aGqnPx%&v3Mn0v@uT_t>>2JHG%|JlVG=M%Ya zFoPBe$fb1jZgot9hs=27ex}X~qS8X-x#DOPek=Aid7VL=-s zv&vx;8vpE~6=ga?=w)a}Jbq}R*`43$jAuV;Q=6adVGFjXC)jv3GnINOS?Zr5R?zSX zW)z!{zEc|kdhyVfM{u(R&&9bZ$>P2wC*zf9%ktBbb0=cG?O+(LGG!~WU!lw~=}^_K z{zVlbJes|fJqJlP<_%qU5#(+{ds&EDBurT$Q!$F3FlC*djw8yVi%rd*L1>KS*6D*F zYm=EbBr|td@s0gzk3>_5b4W9?r$vTvZGt=Tp^7Trvf^Wuc0WU~mZs0x zLeM+&KVOuPTjKQ@KNIjVr;t$df?B?zltu(tDl|NG8tTV#vf|B?u`o4W3MvtuZW|FDi{X{oG z5?caO>k9I+^U|#jnm>dH|K1sz5tSF?rp;l>X6NxLP3)LqA=TWMSDz-edO}Q7u;)nr zYRrkg=>IPN)ER!AiyIy7@;1{dZMf}xg-Yg{cwT=*wpJ8DFt<3q3T;>M?Jl|^ZyYus z8wmxowl4mtD-SI;4LD@7vWd`-&I)vhxKU-C*Fjc1O+U)a;q`n#CaB8k_!!$RZFo#$ z(2Xl>60AWI7^f)Wuh8Knuu{rH{cp_+aY}Fp2{C0oi_}+YS<=F~#zLetu8P+~!1s8d zED=S~rF-&sHQFc6qf*4AQewuBx3zTDoT|8Vlk#|2;3UsarU`MBUPGd04i@V1SZj%Y zdgG|`ZQ{O#qF*C1f6;cqrxtyr%1z;BLg?Tjjoh3;;OPoq*UzF=rUim{lBQYH#|1y16p1u|)4N zhjtg+K|)q`JPtsvl2RIH63jtEa$kshO%tcC{edt{KsB|}o7z%<>)cqfMd(b{f_^%z z{N>xvM79Vj@hI$+ED;uR>erBFyTq7FKV}sA!aWb)AsVUY<=SG#Pvjup$aYgrL=C5A z%+gQn%pzaWVw)eyfB(f*qTF|YCQ8D^N84edE6jSW<7HF3ThhNi#^x$D1uKukN|WPt zvshEWLzm47=6V|c{9%L5hJYweBO>weQ)EKs(60&Gio-aL(>bMI(F;? zb)DKznQC-czb(Phc@N&>LwF5hnR`K5O4R zCrkSOB~V0ZznqUQ+qa5&2+sCW+3(p<{uTvztWBu)P8A*=_1Y9(D^Ti?c3MG|w4-qt zJ*cL+_d+4OCX1(;U#e}Cr-x)i6UCiglryZy*M?U5x+;}p#3Tm@ebXnXbgY!p>v`te zC5E)yWmD#rcm#sWti$rdaMKue#lA~i@eZ`BXD7eif5$FZ`mUh+hg_&uZByCUZVE~s zx|yc!TT}Te*t^0G7Q4eR%{lAhicZTgJI8m-Yg`<~M7Ysp?K6ww;~{Yow~d8PZ;xWk#v*Qr$x4{chFmXAY-~#)U zCIb0+Wj3tCiAyHZ+W(axy0Gh6q5Q_i3fjn?l^{Kh2>Wsxz7(41VgK*3mh?-OWVK%d zVGAS4e%YnQ$Z-nW7sgZu)}cB-HsUy#czidqz+^Bam{C;Eo65!c?WlJK0~ zXkrP-k1O^kWj^MuQ27KuVM==9rbo9X*EgnvR+2WFm_Nh9{x+x1Q2n8HX++euj1VOm z;QX{T=4m(NMN(R0VOgbRJGE`EYa4+P)Z^kCPQg`HR<2^h&^b!wP%-OGv0J@J9}utR zqk|>6sMkTa*3+S&VA%WZW;%%!sd)mkaVE{QGTuzJVpeL|@9Q1QEdk z^N34*{Zf`Siz$;$^j{8srzutOBoDz;*83{0(7xQ{cb{~BcbqPvOLY)D(M->Nh^tcX zQNx&uDnYl@Uc&02ql_Rq#75w0k)<6$q2tH&-HVvAj6zt|lp$@QCs9!_`A9X**z^`Z z13zsTvqNZ$J1VS(Jxgp@^s9O|}~ENWIa&cVY>j4&6?A6J$LMApTYmxg& zKX@_dIocdyC#$P;-k|)Q)MYerH8Jhi4Te4?=ziJZ7afcxJ|o7ZWm}9J%2p2}HhE3o zygecRj!JE>D{U-pF*ijfLZ@7iz$$DWAmLrXyP7x_uc9*i6J%1DM zWLrmGN?!7~Y6EqlFe1Hj$NH;R!6$#+`+^YAu}r0k%E3`QasiG}sZ*^qm2(1BZ)P?> zyRW_cU3>943qXFy5psSa?QK-_P<}E1GpcwZMch5_gzBuZkx$D=@1{ z+HW24@V~itNB%>(fR*C7$;vKpzKr5m<3(1k>IsT|3Jyj*a$j$? z@9FW}aDJHmHhVp1d;B2Qh$>X}O_~!{7E&I=i}!qay!7(dFpQuQ7cxR~oSx$m&S${4 zz5Whl6{0LBs4|aa0dii`4T6~|%{`3Y+Yq{c2fQi6A}iKDMxxMkPE7JERLmqg9N_&a zU?~rg=+TG0Sd) zA8eg$1Cu0~NN+| zg-7oy|MH@k;NAC1oxP=3InLn{#rB!4DE@7T|dV_v~uotwZXl zRsmyezDdYqFr)$v>qXkQ!09Vtwe19Y{|~~+;Szn`uRiw}htAkE_f#mqrFZ z>>+zuVB$cF4eP~*tOfm%!gH-ZP|x|oZD$D=5V`)c`?5#x`5?>XEPd#f*@-p&N z7-FddH@j;yeQ_<>@j<;+hoV|Xz-t*@n9_Tr7AP<2XNveI??=PIk}rK4R^>J?l?_6l z#79`>`EucWFU4=2c{_zFep8Xi^^ru$ zGeV~bvRPHl7DX1+B_KJ%zD89^cXcQn>iVw?^e4#qk|^*ZWnJLwqrYmc7^Se=dTa>n zIke>i9D0YW&d6{qno8U^%l7$>6fPAQx95?v3`vcey4I=J-50O1cZVXH9_;D{^KlHO zY=7p4TMKGSX*5Tw-8nEZveo|(@!T_){TodJM5y2Ps@_FCg9a7S-&B&(5YAFGls&f!;e>&yi!^CDb5!n8% zv?1@_V_V&gA^tbW3q#<`2Iet)BdJ8)9jFsFbd-K3jee$1S40e<^)5oXB_cc)U!ME@ zs8>nZf>Dggt0r2P;V&6}+%_s+^xJ-0PBLXT_RWily9z`ZIcO3wo@Um%EDGQb-X&BY z0x-Tb=Py8VL+BYKFkP+VVcV4!kUO#P=L=No%vB8I30lX@uqZO!JTRcj>Pxa>wHrm? zPLE^WpCNIN7s=@*jt?kxvkebSx&T3#gc0#4@rjQwd92Ys)FQ1;4A(_I!KDT%A0rf3 zP0Lo$CP*Se^3p=0FNK6Ig1dPcAkL6G_iVW+ABN|`>nDzSEp$8Q*EiJz)jxN(+$DD% zC;Uo*PhzCu_|F_!XrVSn%{HiWV*F*x!0DnZm9dy8<2jh`DCJ5Bc}r>1W7pC0OLUuJ z#^yV?|8-$QfMWZ69R}>C@Wi72=*qDmK)LmZzxUgAAb>`M@rQU8S_9rXR!NM$wc#!R z?Zp|UcTgB!VFb74U%o@#t0=txpwgbDTiOsGS#2nIgNjq|>=FWhwvi%ufF zp;ym?tz3cJUeI^pF42K~2iI`%s{CO$frZ*0nD8^^C24STU>)?G7mB-OlHMyRg=jL}995C!{6)f@jvkwHWB+L2$Qw zZYF612M-lw)3)^dT|+h-rLSp@XfFFKc?COG)8(nrDwf~f49@u&%I#sAU$JejM}$@resFN?I*uo4HHuxA|vwG}a<2 zy#CDtNJO^D21?!P)Jzhq&7AQ|6JHLNb70y?gmLo^shoD3)SM&-Ud3PM_lai?Ygr!0 zCxQqoO>5P1s|K|@WkOVEXZ+Jioe(j1n zGq5>$ZfDayuNPfWJ`T~DP0=YQmWhsAw-KL>%XXPIR}!C1Qu*`b1X#p8eA;rz%}xLm zvvzyU4RRFy zs^4^3>58rFnN!>IPnO!bV6vEafqbKWuLMfCSZMb*{_ zxTy{9NXJtT9ih&X$u4bik(1x(WyT}QH0e6O{5}+_QBq1Ql?WENwaeklRun_#iLROwI!8YY*SAxRwQpL z40Xt#iqG0-)cMK34NPeL!^Hl(*EAl;eh=T1M+2sDobc;mEh z^2^;@&!z>2XsWYM)ax}ns%z1l)%bXMlMe!{^8|f9N>g9_dUE~I(ZY@frg9BV+I%FB zt!El+xj)V&`ihc`dVO4c#w4;<(vSLqmJqa5efb}3TH^0s{U%{iN;ia@ zml6il^1|dNc$1^a%OyyRSHGiW|GTWzLY2_xzAC|YLGS-b zMn{a`?j_y$R;!bjd^fSy7i!7CE5P^uHH9YG6!zDN#S(K&&QJe*M=~<4^e#-8j#l9- zgXppPTk`p)&)<5v->rtoveSPxDpg|M+qW}X-!UNJ(m4H6tfutwhfq;B0pHIMCpomW zbU{Mmr#n|>P?@w;8Zt>H2?B*=?UCv`xpcCRvA7SW;n+OtvO2?Cc#`bTIe*uRQpo;Y z)jOs9dfheJszX!Mk463mz?Zbgnt@SAg~nuHt1LA>TW>REFf1EY*MiKt4aEHzF;Y%8 z2~4kP@sxCVTwtMIqE(i_K>UhJvPk9z)?H?G>sz)qm)%>)8Pj1WU)#lH;`kM#Ox#~B zi7Q@DxYiTF$QcrW*E5LwVJ}I&$Us-x&`4T{ibm>dsO1HEu!;>*v9vih!_bMmt+Cw% zE}g`}3PUgpwF8LW7~6V)+T$|)O`S?r>L*EC<2*5*$f|7GpF$#<^jCWWJR)dy3J)gh z0nVNweioY$uuEdJ&Mf(sJMK3D!AdR+!^sxzVlJyyT~~)ce;AwBySfu<!DZwS&Ja1xe?bb72AYY5*u9-1JO{D$@Tpq!ti4!m0Le!Vzljm;A)MMHF_?$Epn=~ z<40m@r0*sy7Z7H~tiz$Kk)SYKYUIfX4;!r2S==)mt||@dVZQgXe5!)8@36F>S!zk; zVQ9{k=4kkF_IyG-CQRSoHRpVgnh0Ow5;uyZQql+qQ}KOXi)fU7mnk`GsSu*H19X71 z7Qo@@`NH=iofoS27n?g?i{fHOrz#YD4liCoLcjuLSoouIkRvSrfFF^M7;@)RumhOu zd$s~PBAxPGIv}@eB}fs;x%K)w-arZZ8>t`s={%WJp0yy3NE@V2xd;!xL2tZg4{5K~dk zBnIFke5y>Zs~2(GcewOK0y`pagD~Ya1*rn)sh&NN2-uF#6JYs4UBbTu86Y3eL)A=Gh8EDlbkytPz>hb2y^;$4I6LUOTB*dhFgx z!=~M4T+kAuSv$_BI6$1^2zaE^JS=vaKK*Ji1rnTe__F_B?1uw>k zec0+M>4{wXdK@k^j`MqLw(oRDIFC2YY@1W&#=K;;TqYkG^A6FUmWn%zob}V zD=PRA<56$ic=Qrxzl}!uy~u^m9E{&>xoYv<`*=Kx+l@BIp{&ti;A?*>ziRxMo&&)7 ze2iO0hhnli*DUR?&NqIb_{Y~EL1Z~}q9m$@yreu^>Z2-u7ZSRys}Xm&kucY{t=|yo z)6rRG5_dXRj_Ev~GMTaSN-JvOHW))b=T!X_K`Tm^!PF24swdPjp7ZT!|13jF3lGRG z*=t*@$!)=lU6@{>iQ>Gq(5HKEz+Wo2EF#J-P+2uaGbH(S9bhrAlgV+bFO4s(o4(5$ zZK zsvKH6`{rXM=VFGCz($S6H0)lx@#scocJk3H(U-N>k|8~p=Y0l&^!M;Oz0|;9?)_#k zz+XGfENyw-w6pvyx^a=RraTG1U?lWFFS(3S(uFUpH;E~rN1Um9EsLE!Jd347O90@I zZJXbOf935QBH`2O_T4pk{>M*>j-_F}<8nsc?{C?1)UhTXBbM5hlKpfz+?cPrxNQky zj_J2^WL+O)p0zo=1J|T@NM%z0?LIgLH%%9z_cXaomy}x&XXyUHHIkjG?!j@+Ox7u+ zWV2z0BcxU2@+>IBWuB*tpw=>&Z|plUN~nKBm+*5Kq`*<%j*t{F)ZgVSsJ}-hwvf5~ z75#zZT<&C8kmsiPGC!cTe7eZOvIh`XxIjOv{&!LWuk!0Wn~Z6iQ)G|}gi_)_N!YLR zeYgB0=M^h1?!`a`$@_V-9KlK^D;-xM=ZxduXzi1@M>YOR(H0%sn7-tqM_kl~_?3T4 zLh+jxItnh6A@vci5x5=5^2F8&-j1^TA%gEUY(>=6cRbuGa8j5Tkf89pQ=0Q13GliOLChBY zY^|XEhv}>ZV4pfxq=amvackOmf&BY$p)$%UB4wy6_r+?P{e|HuEw?jZb-JL_%AG!O z^I1v+@5WY66gad&^rST9j<0A-hhH+IHCS%jBepBPt{tG|!f0anfB9Sk7@H=*4iPDg7M#9PnwpHWG7T8_qTj#k-sIvL z*303$FvZTNr<94Nh|Z>`RZ*fPofct*LMKD#fB^kw>+$*FS0-g%!0*w{?poJBZOO##}k9KL;!ZT`TDoyo_cuB-dlCrijoTJ{@k(43HeVdV$ z6&#h%4M$Sb3d2zg=yO4D>S+0Kdcc`--SLjFG8T9yiHg8J?{zi4XSI81YQZ-Zb7N#I zrVpDe3o10jzz*B0a$Ch5qS#sB`wPT$iN#o@mdz5lF5CZf=@Tts19r*6rfi%xRb%JM zFHN!l=%a7MIu59+vwx;UuM~AAiT!CR_A#IMeDF^Y@<6{Ocjqd&61`aX%DHnnlT%^& ztv9W!%Agw#RYF^6uy*)(wK;#;#w85G+89QN{3ze8{nAEK3>-9U(ka=NY2XVDoh z>d2d2BOY%RH2s#)3`E@s%y(jtv4$h9hA5Gg*WUXfNWOq)ru%L>hAuG-|J)7i5#^5_ zW!{DzE{Bmoyx$qHb5mQR9(=$5HPB3`l$Q1Mmti)BA#O`<%V7)r^R)S2Q?A=@ z57)IXD*B32&mzb;;7{LJp&z0S?bb$#{lyyE-jL| ze2Ps~^^O+~6=2QK&ce|H?!9UDETBvFI;0x2668yWo5eey2%9Bi4ppwAHaLjMWc?cN zf>K1A^XESQ$>1OTYcAnE67aw8GpY9x_rvW+AXOJpT6#|G#KM_%4^ShcI_ z{H~NCV8j!?B4%O2>C;v+)qVRN4qZ$|5>4!vKk?u}yw{|h@wmVTCw77@-cFt?`DT3! z)FzQb{f0hEk4a@){VWq^iI(Wkk8dc@#2k`g{zTE>!FyfECx4ii$8~u;t5}&Nk?IE_ zYB}pld-2rf-(^feN&3@)tM?I4X()nV`pPq^H2iijUi`9KbQ~J>7+Fezak(_}xrAbp z8?q%Wv0ufLiCBSI;MhkW7-by=segNJzdY!;pl3ZKUH+7Z+6VEtn4Lv z5CaCTxnA6$NCOOkJrixDUL0QM{=J~Sn&0cP)38$-EiXrrR=jed$W`{{kn&0 zsjs5R{u}wL`AL0|TNC^dgnbJ0HL9_-e$HMYb`?#rVmd* z5(y4l-*j3W2dSXOSW19$&oe1qtt$3(Pc#jOlCI*B=)_K+!Vd7_*I&zZ3`^|#$~+dI zH~TlfV(BXLyi_n8A>CpUd*7%9z4$WD*ku7+m^Lv*Q4Qj^9%OrAn_q!nC*as7XP#Xo zpvS73E5cNxQpgmEE|xtDsRSReu9n2>8ZW|i9hQi?y5bSD;Ov36Mhb@+YL#B8EkD*# z!ubCbUn#vMv0|pRP2k@mx$yTi@4iWWzZ7_Xz#DBNgN+IQ#V6+b(ETS++MRL@%QhkP zPP(Qj-gIV-pMUOxg#O|5+gim-KKz;4Z4M^LVmUZ)wVFy{1Kmwqo|%VTO%|V=G9kq9 zTS0ZRc(!ypJjk}!d=56nE4merogNZV3qwDJN;f7Qak_y%Z%WrR=xA>K-5T_JxHHo7 zfmHT(6^U&vsBJ>d7XC&C1ax-Z08}14?R6XXbp+aUrZt4`^^ZKw@(j)lu=FO8nBA@Q?`r?l?QVuc|MCr5{c&wB~5`UZC6 zRy25>_x?g##Chbz#AvnZg|YvITA@_>m7Semr-jqIW}a;6uC=x7seVe$wG$^z(00Af z<_nI&-%+<}fR`raQhD#ouip6hk^Vp8%23Y4f6%m5S!W~Tc9zx{q9EF-`)QokhuWg1 zxxmqiw=8_TBLM!yYmFdI->{y)ZS)Tsg@w?~<8^?5f&Ud@<%y%3H}JbK$1Ds-2b4{G zhapNn74XYS_2q()L2O0j!ANBp9=|4LB`pWXA{7eY#0fg$yfo)%>2Z!*?fpkhg{*3C za@K?F2y|H|76?7o_4l)gufy8pW$09$&Dme<8-))pMS7AjSjNu^1Qf#> z`2XC2kqlH-5kf2u@{^pj|7gpB#+w|sz3?f0HVq-d{QqSX^=CbyLIQ|HoQegj&Fb-rI&l= zyLE-*w(pCMR#l)a!BMEh>u!*Hu^ZAqxvPDC{ij4;NBo~HF>d<%QUSlz$UCb}RhT^q z($`hovsLf1r1y-Z_dGd!97!s!?(NJL`VOhcI?ZaAe94$2E3lVQDhh(O%x)jY500)T zkFJaW>L>mYOIq_cr3_Sp6y*nUMk#_!5uXLJSF34;vF^LNf1v4MP`NEP5A>EkEC&f_<{D>>u)y|6Bj zgXxvxfrsM*)h4uO#kx_uDo|h--u_H-S&_gp*O9_%UiyhyO+r~CDK=+fdky=lHN`?A zW>bc5t6s|7={w&_i}LAEkl9py%2o}fT@@DZ3FUmskU#}BlL8YZhw}3wL6nXDPm*3S z!%6j=*&%#&c_|XZ$@LG7{vbiugX08tkD}+#7xt8(18d9ksqAbXs~JJpnQVnWUMedj zwqCly#Fd<`W(@&_`@2^4vV@an?;VAwF3=UZE-MyS(I;Yu6$uAd7|ufb2LhV>b;WnT zc$^~JsGKo08lKyFN1_GanFpR?HrIVDKmoHD-xXWui)_ z*He>;5I1F!(!KvYk%^=_K=2|m7DQfyVwssssPZ@ZiIG`8CV^y=Rn-bcP7Y z1uL2xBJgmgtl1B7N%68(`UwSf{{aZ$8JF4^DO{0rCKtZhtzsTcZ%UE;$gl>Li~Z}2 ziVBtl33+dbtAwr86HljnSvl6DpA5*7>n>&1*Li2ghh&st_hr)D0=m++c$v;PRM*a7n-g%N_00BU&tA;X?anM9Syu?*KI@a9;uN- z>xU*&F=_wkaNenjZ^T}u>t;1I6yS4O<+;~xvEn`9{wqB4gBT{zI=sUD!{D>6T_1E_ zyTm6$1M614qFEw0D(!Jp)C`n+JyLMr#+|%l56|oqN#Z z2+tf?eFYg=gHSucEnW!!azNe`wK_z!M+ElI*UjH4fO88W!SnCN8-;$16!koofdRn* zG9-CWG@Oc_%$5JxBT`#GE-vq zV??tu0b>+t_g94TUo}x?t`Og5#OK(-ZplcSK9@zTr=AD^qn6qXyPl61^+W&@Z~T1f zt&WBMUY^j{)w2)HN zLaqnbJ;LH*z|ec2;oj?vRE^1sjsv#gtG4J~md7~;)mEB#nnS-DYjXVRI+{B?xF_LS z=tvM~i0eU4e>G+@`w{y!l{iN~sIA(suZbCw)QvZ4*i7IaVxOg2q!Q%*ErUHnyjj+8 zrJeJ7b|jn%`0#aa&toy1u)T`H&Pal>XO$+GkDV+G4=X^JMxuA;QfkPiY^fX9#?+4R zO2+U_&%WTz0Iei=TCqwj^lp^zz3PJNrSR-_5T8TUMT{HS>lF* z6x8FMP3^d@$U;P~U=L%8gi_6v4c+B2aUD_#O%f|yKdB2IjI6y*2lUs?B$lzk4`$K7 z*zIToOJlC#O^6w)%ui}snuPyGP@iwUAycDqtf1~HXwWKaZi^v3{ZP{>$og{9FM#b% z)%~-4O9FWbgE}5bG=kX`$y*y|89d9b>B!)**yfMK^wHqqRADhmeZw;eC+f|0r9xk> z@<6g{=t7xq#!7jI1YvyJn%bzbRjt2z$Obkf9oelU#&GfZK%l3{_ahQKj)pBHVc&n3 zS5$FT^1>x}W)H=G61h`@{W|lUuBnAM7-xz)!x+$?3`)4QZB%e@VGSguZug88OS9xo|wX2mEzme-xlS(!Xp(63akpAoI6Oz9IG;5rtXIY`-UrZ)o6uk17nC>Y4ve0rVff7yn{{W>xTEFH*aj&NO zUU^%puD_3ssc#TrdGntn#P5)0iU$WF>ikd^$2XjbYV#wbbbdnsXM=8jJKt00x8cl< z&2Na!Z-Z`r+s@PZ#b>>$d>guf`E6kH8`95jn9dLM=87cH3Dui{jzB+lNQtBibYv&! z$S%;4-5^IiAQy7mfTlo4E(D#}`H=H}j#U?F1p7?Ttm;!*OMG57sjc4wX zxMEo-8CDE`_;1mN*;ht4lgCu6L*SE29)7Pz^55~+u36VqM{UTpE%i06^{$nTEo)m{ zjc8@T`qzAKsb5>Os=2AYPObBQ-LU+~x|){y$eNPImfEKJk1!xlUSZu=?`x=OX|7*A z(Z|#m#mZc}wzZJYc>jO5KO2XyZ-1V-kJ&}1>+H`<(%~6_El-&U-an+nb3~z8g2ChM z&ui1+O&x;l@d@CqPKWo&%gh!$U1xvpN{9D%z^M%rjc;>0yjwv+2`&aNi-Y$ZgEw8N zXRGG?ScJpPOS*ah58t*){j;#YSJLg?wp}`3pKAC1MY`SF_Rb`B?_a0ey+2{SF}wFC zobaD>*SCA$0&^A6UwSk1TTWv4o`Gw2b^>_+mF?aW*}3`rG+q8CUEZeI#f`(vENBV3(`st2OSaZw)s_>zl~L{90G4=1c2=->!Ky z)yR40 zYf{?+Pc*4*A)T>ATZ@dZYIw_7$;x3o87-_F(=k>KdpBbfE64QXtQ_W)@f0hEwAll^ ziH*U$pGyP3nx>{lv~ilxYw0N92C-4{_z2xbhyYoW!{CtmnqFk(E0YzL05R>3$8j-@w&LaCLTbb-2ES5f1*S*4ALx+8PSDJrd&TRI7C! ztXuJ5-F(f1oJID3xZ85GWuc2T-5Dj7@Au5W?!rB!_W zPPFOU#H;=&oG~3@-<&9%NuA=sd1$+LqfdaIFWSzNU_Y_Z^UF?leraQ8mbb66{6%_Z zhI+Yh4spYI!-D6KHt44f&#urvoH-nD=5Ttmi3`sf^qf@phI0Nntk^=ZtyoJ6_3b0I zzllu*gPpId@O<4PkOr}t`Z0IIeEY=hbE3%-r?>kMsYY8-_i0kslTDg>f~2{phP3u1 zNwjAN5ql1i1f09u;e6f!XY(z9pDw`9R=~|Rz{>#OWG9@zmvZ`aM?rH2ucPi`8_n$9OCmB!z%OQ?TDS&jX#AUSKJGJYTMu>Ok=O0ZqPC*gsqaU906TdRaP_apXx;cf0zLlgNfPW4BEiRn zaC|zP&0}vwg9nHQ##@yva2EUDL|b4-p4ixxSG0tf=o<7#k?y_l-HUUhw#9?;@g#5q z%ws*J&BZ;~UTp*Gb_~z(MRyPrJHxlCeHZ;1>U`x_ir=GO&V_l0Vn6(D6!1`tbP?|i zqn|t!=pVlbZH5s)`JK2v!v5eUVoljggQNm+6mNIPSS5 z?3X0$6{#)hS`T{)@Yb{*_RM%Nuupe-v&k;pr_$AEIBo%aKJ-RZddK)Y;54vUmQ9I^&SLQ#;0FE5Z{Hn@oZYxk zeBqHlMBYBU(Dw^s+SW;gZ7&dmDBrOM=k2o)(_Mk_qtMQaJ{#{Zh%x``6yN(0--u@^ zC%i{m^vE7)FF+qh0S8`hl2~y5$giZsYoi!j5Mus2SUbD=1}K&-mdD%U&!+Z_Cjo8I zo>e*5;e~vzl)1z%Hr|`p)j>=toC2*PEVgGo!R_M#gy~HHZW|T*TCxoC1LUT}&xw`w z<3t)nnuN3k`$XFmU5_LwrFN!gQ+ve&IL*!9M8{i@h$*y%^y7b1nM)!jk8*q66YmQl z?VLmy$Y+&4$Igna|LX*cuWv%U&&*KLLzfm$W?eyF8vlnni{hp|G+g^ERUW~ z=hegw-wggix<-YIU@?;IMa=yn>6>OL2d%$FV84J}2x$wDY0d^}s&Ng?(56 z`>+sb#tZwf*b93e_n|7c8SM+u=iX#7^qB)Vg1r{pE)Sr+k*fprCU>D9Mpq`HA5aIY zA^8OgYj9rYO@jcdipu!(I;F{?RDVXOQy4eCs;}dU&v{K>X2o{E;|#c86<$ZI{t>#5 zF1A%EdoAgMeQ|%;iDe}YN|UgM9u0nb{Fwj8AZO9e`_u^WO7bYe_V-bmp!^T>*bm)< z2Z$wbaJ*0L8|Hcx`q+a00qn20k=jH>ppPih3F;oWX0VrlL6AbUy?b|%0`DQ>_MRp# zpFo`OE!PKY12oeFbkHt7O7)a2ptFQ}vPlK#Bw^4=BA}C0fljg<=&l;*tqy3d0qCn4 zXsZ?I3Ta9NdP;ykQrcZZ9O@Wx-v#vmVL!>h?OT6OUBR*Gdj~ouK89qb`ie(va> zVC@wd2zv_KCsBSPZ-o7|p85enmw`P7I!pv~m@3d=mIME+2KuW5-q`@Wvk7=-Gw{w< z;GI$6og(ng1n|yw;GG>*hsnJ6*PwHjR$3h11n^#;MZSz{UTHZ$jxq;h%Ot?JWG=V+ za)>1fx=MUgK#5PuDv91jU%;S??&FP%Dp_4sVyK= zdq_c2k!ibB`2jd4{JswKkLEIe&8Svqd>GSM&hjHnwp|21WCb2%?>(g8j>#CxHUgdlc;+_bx#A^1 zp6B|2)||jI_liH5hv(WsJm-r2bE1?d1Aj)o3_RJ9;>k7SWfRT}0qut0~Vcmf@ zcL0rU=>gpqc=J}^$pgTXcLGn|1$=xr@Z){JkM{#F7Q1Uwv`l$1(4z?SN#hE1^m!EL zoP;(^*G_=0-OhCF4xrU7K&M?mr(1zew*j5@0i6y2o$drW-34^I8|ZW|(CN!Sr~80T z_qV|u0arubY%+|v!hMJPCD#6I6y<;-155*S4ORoKJPzYIDA$1uaMC!3p|z990K-X) zKTDjZdZ!^NfL_~gYE{mGrY7|q2)M7pz1tlm%b~tI{=hHou_wN5mx}H?As)Q%M7-0B zbt=Svhx|^@WwCv{S$x6eg|a3o0%gA}xExyoWkgMGy6JqJwdH1J%=<37SN z*mH8XK&o-vMasnj)QvHgBn14g4r7&**|belJTuJBq=R@CZ4UMsMI0a2O$wwy%DMMM z?A>xZo=@Z73MjH;W(mrUW;n+#lw8>^XuB}D&6u0SIx|B=x+N5*@kc6LfrOzw%DE=^ z4PZSfXCIa|;5iHWDU4^{dm?^$i9P-d>tl9F6!}N~MwCwmd;Uf$Kdp&hIK5Kn-V@NS z0m_JYvJBH9aZ}j|v3J-EH>mu#8BAmb2zJ%kS29zNYe%yg4$;H^4gJGbVFwjb= zG<%RNJz*;fbduqGCn2$0Mu@a^gv9>m_oLDX%;$qaGoE?1v5~XN*vP5%t3eOw#eM`g z$Uc{Po?!BBSG>OqIH`8@>Jt~A&Udiys>F?=hCZydpI1(hGT z7D^+Za8-UVvJmRH5C=GS>>JX>;`76KP~Ro~v=h(U%2~PRGRn;5^z7rqvokv*BfjB$ z0lZg0I>7Y^_6g0n=D_z_yI|alWw}avbuHtKqt#r0bu|8SFENT66MrbO5mQ%^xFYR= zypEMbz;j6|f0!6>J=DDTThAUf5B*%mwNdqZ7}u5_+Ar|k-zN3|T%qd_%^yqrf)Lch z#Ervw;+tJzapxTMe)8W8-A%KHMXV<+1ZfH+q^0^p73Ga~;O)CCin#J(N4ZyQivWR25hG+X?Qg zs=Q1lkJ%Y5_|jF>H>(tUUbW%aaX)fv5DN5-Zo&G}TWeLhUB!OwO1mo;RNe$I>eLuQ zCgT#)JwZk8hCuF~CUz=!1B%@Bk8pB#$`ZS;oXOp1nB1Msb=bYehRNCmSR2pZ!U*i9Y{c^g6QAjrLKLBa_)!ncO^?vIAq^ z2j|gv9volF{tIm-X9*n>i``Bi*U+Don4Xm|wy&T0YmVzY8?hS)h1$M@I5AI9Yb10?O=qKo&w zw_(=4B@fokCtqx7S<~WL*|KJpt9H$*=9c=kYa3TTh<*syzqB;A*1PJlLKeBNzW!k~ zt+Z*Wuc?EoO0zZ4uD;Gy+puo+!yn^ac=U}dfqqM9Kj|M72Ws7Xef@jtTSL&Kz9p}A z&FZzSFxKY0!U+Ox6i4yhfC&In(i**9mFs;Ex3*ljN=-}a4fKT7Zlun{Jx)B-v;qFb zp+$eQcUeccdXvNweWruOvAA@xMCIx51Un?FuK#YpXZ8_durYXiEKyB5yeUmkPams; z|CXo2`z*!>?PBowSfY*T@G`sL)4mDdCDY+~nprH2OBYM@LOQ%@AvP90yq)Rraw5#n z>*DU7;_ne1yq)YGtsdTx4qg)nZyE>hLOQ&gpxnH30(j?i@YYb-V6?2 zYdXA{O^mMe@Yd+yd00%Di@{aleIq@l%wgBXcCo!Abm-t!aO1m`gZGpUo`=!9E=EoG zPI`=*qk!Gx=KIB$Uw)V#qvq(ivG+0@--Y5=boJCeSX^n z@ILO?Gc_h+#4vFznnTH%s|*vzrZL`Ra2x*eST%iYnoXCVuFKnX`5C&rLzll*mv`#& zpVH+q?rouxOAY3Wx_pH$U#ZJi>+%ok@{j29F;>flfoUe{Wp{4873Qb$%OB^VjVzLtR^ z_Fx^puR>DIn%A|muLy5N%LU~FLyUK)nC&Yr&!ZUrH`(zS=Cqz z^}ZM-AEjSUs#JfJCe1CRmYkq($d`t{7;SB-sclWY>=RJqxs>;y)Hp9vN607D^lmL) zj2r}ggNxt1Mdi=uL48*1jB05CNYKf}vZc}42*6<_LY4|bNGzQx4Ko3y=?(W>>8u|*qy#x^cJ$fbw5^f4}dQp0V=@7Wl0Er%7RVk~o4rq#EOd(&KW7J-NW?O$ITBAdLCTXe&$roMcjo7gFy7qECFH zJAvM8;-xmmI%3tu{Ot2eHd|WRL3w9#fz6iRDG0%S!GwLIP2Rtq#Ygm$^M1)>^Z%2@ z=3hW#a%}m}7)Sjw^(*z!`;p=mdq|7HA>!Ar*a2=uTG?Z?%**wg8|;zyiH}~f^W$N6 z`_;bPUP(8HgX5Qy3y2lQOM(Z+&+F#{?E~nWQR>h;qMpheTao{O)#@vgN2$NR{Nh23 z^OMSq&p)w%nC>F-sJEKh{`-6`S?&gWpdSd<^BA*jdvGnWAB-D;H7$g-bi!J?V7=Y2 zp1B&1g%MZ-+k!>1?8_kr#diy9QKMfAVISf-M1-vfQ}?ZJg8Ch6-jU_}PI)}gFQC7} zhOtbEB#SSTZj0t`r}e6-ZGGo^sn~ATK7ebBIDvKB3iM@VZ|_{hcS-!(+dIdXiMAqT zY{ZrPCugygHIkR4chSr8u&(mH64}Mm?y`4mMc5DeX&myW@+yi`z%7qgpoLxPd~hx}r|Zq-3{< zM}eQBCovIM_93i^)juE*_C1&F<3M|ynD9HkbAaDE;wGa?I~{Qgmv+ok(_c6M>$qMX zroNsX%%7t3^CaThKEd@)`R>qH2YeWPI=zP!Jm8&uoFn>#a9rpELcb64xawM2rt2Hy zV((*G?7h0D=)4|K-ZKkqCtK*dW1t;z^xD8^)s1mzNTUk9hV%IMB%od~#-d@27Z-DW z3}dk{ue7;LX`F8dw0cy1mkVRl82xtKh|dY;IL`3oMEYU8&64ulFgjE9ED|b%Z^I^n`vm8rPGcbZpo82*dvgzuTmA!f1QsWA%M$ zC+&~+23_B$be+#SPg0ugVM4DPU;5F76!hP^A4xdH)tkhRWJCL56K8W*{T5~E@KFCZ z6i)!JR0nULa^4~{bbh3V)8UyaCh^m(Oo#W0VrKK5q4Ohc(!tv`iJxYJ4qk+Vm&L)` zoenR9yVsir?>jnpO^R+#X6XD#LppdvirwQHc(3T-4RY{!Kho>z@XY8}YMubzzo)~S zZs+F9`H{#6>F}oDT69bR?_C|dTxMgRq4Ogd()|`w&fb{c!ZHPlr(WN0VLcAn0P|Vg zG`Zj6CbXG)CxG{H`z`qVM1BcApLGL%2=*4Z;4%E?{1VJJA)I1&=(Cl4s`0$*+^J`N z2SYKtGq3k6H0knR)8*Ie@?9*uoZXq(<&^_I+b%RFckaky}?Bvq>xO@8+?moYhOBZly4vx^kwe8^UQRiyqgnJi& zG;`^8F1<^;V^4;(JNANyyDuHk?x+hdYj@oZgu5?oErr6uE7*sTzw}uFIbl>HSN)C z;n;5$*YBJxb?Y>)T+z6i*`uy!i~9V0Z{dyGqHY>UvqgQ9%m5wxB-OD`6E~jQK-YHS z8NC;&qXPl1)i}xl7!y7!*|IfLT<0L$m89!6dMeC(=``#YbVpK zU7%aLLAUnMJ893R+Zq6#wKGU8pl=U*t7RGED=|iwKNE}3%!#V!R_Nnm(k;-q#$>7B z6pzfc$2W#C{<8t!E2VcMwv*BL5##gXJIdR&(%f0}&1q?Ncu!@y!z-1C!cx}K0%=Mp zTvn(M}A~qH=p@nLPgF3PL(_ zWckTO%2_PZXkN(bTYWAfbT1NI$rXYV%M-HTK)Vl=xy5(AVZ3wdJx6Ta@Lhbf$PTzD z#Brb<3de$TQODB_IDkJV{JG)Jr8}1g7%q!(jrg_pzb(tS*6~+9ZKrFk*d24(z31hf z*~GFP#ty%kcu(=kMFN3z){~12cy=$QcNG)Fi0`hcYl!DeTywOGO}6grJDKczZptn? zKHPg+C{)&5DDD*mM{l;^>1bo$b_*XIU8`(F^G5K zLU49;#XB)=xRCq`z}SR$@(s;UZl&ehjV7pX_su1yZs@NYc5-qBaZnh_9fsm~Unmeb zh&B*|7uptJ3^J^_Nm{YQj^C150e5$%Jen*gZraWQwEU!e(pPS?U|p=2%pxXV8T0{T z=!X9Aol~f5&F{EL4sItEiMNQOa*C};l#A>bAKmpc;)XJN*Uti2-+L6(^2(r-Q(+J=iaw{7d`s0UTUs zX-Yu>?hm{d?z;z&yb=`K@4&u0YbowtL9AVG0k2v?T+ok6e8>1a%-7lV3gn-GedZSe z@K*|d74R48o~^tG9oR06JOMcGo*N*@8-OQVVt6aWw;g<+B^I<3yPmTNxbKk{iZ2+S z4{jG;exgjV5!3e#76sfmFP}f*Mtr9BFU<2s=Ggl*q3v-m|0TGgeU{0iNH5qX(I}7J zXrE|PQudL;tMM+qZm(Ym_K#kIF^%K>a->(yv{8^+;}xuCoh@A<;-kYp~2 z;ycP1vybcGb1CoXZhcpW-wujjkIzFa*%li?{9+pwzujd46T|Igpesw{h^5$j7VdqE!c zJ|u*DE9CRy$vdOHyX8xw?2q;yl`l&(N}^p>`MBg;%*jHbYEclBwbzBJc^iop=qcoL z2_(Mh47FY19XS6h0`b3PAU?cPIJ*kpNicO~fsFiA)t;^_lU1ArWe>xC-ek3QWm&9% zuT$M3@T=N4=-6@I@z1`dt!E!Oi}$(k&LG+%^JY+`#2W7(M47r5$HKKGYFlw7@=MZ{ zzfoZKu09x-a>z09aL5}u0&7=XZcmn3ZR`yLtFnex8;#>{Q{MPg?UnIo=$)RfU=Qib z-%jr$4Fg~6qdtm0V!<~La6G|2S|;G#Q>e2W(nk2*i)HZJG1*v?pkgPc5>s-se4O4B zeN8^O{yq5=^@&ZDN80AeXWJIb=i45ZFSKozFSdPGzSQ=be7WsCc~q+TN)-16zU6`V z!8;$=Z{VQZOy9IdJnfg8*tg^OE(}W#!gmwM;1HAwq}30H+8=e-#VH&}hgI zz;^|(J-#Ubcrd2E^&8ym+f@BGe8Xn4Zy-}IP=rM%+z`KyXpuH3Kimv@uXz!fYN&M)ug5PX>(*%BV@x2t*XQr-A z_2wPszgyN9$b+_-@%}$WI|Z|K*#XE0%@%yqH-4Zb+Hu-ERm!<93S~D*Iq%w`PFB1> z1iFlQ8vTDdln3%Q3uc@6`;w@%d~r0`Cs>yG0(s)$-`V3uzlz46DnNR>q{=T!^D$~` z9$A}75&+LuY56tiy$;kvhR~)A^gBrD8}H6+1etf*Xz{6Q^E7?`!G`tJ`*g`!D8ni4 z+yCAJ-xI>HFJv^L+!x2gdC~(*>?qgpE67PZ9qG1Ks#+fJ8eKaZ9s3{Y;zdtn}44gVX1Hs2DYbg zt^;GjH9jEk#We<*@*#cS{mfNmf9~LD_Q2TLiONCN90z_qT$wW^25=2nM{Exjcy}1N z_guyXV2@Ss?Loh#-%*!+WG?WA^~AEdhD@ELj|^#)SnJ- zW`PnLNM`E%B8RVin|MOM(xG&Cj^*6?@_v!u>)>6Q#IJN(2d|Zb$NNQ0>GwXSMU?V1 zcmj8?hxt#YRo|HZWLleIGfk_f{&Iecn>$$6q1Y%V^Pk*;Z#HNCKk%QZ?*#Wva_@uP zMG-1K`rZfGHOak?JCvNM-7vBLMfGZp!aDIaX zmmb#QT*-2-T-0JWh4Wh4IH1)xE$8Apx%Y(e{@_%#t%pl2CS)*53++ynXp#*|q9F-{!OoAN8^j3#tqev&?WiFpIAIKsm2~??yVKoi z)*%?J&X2Qz;cuaoQHo*|tJoS4P}a@3)Gp;_ET)FRSh%}!Wvfy%xEseLz31GYe&;>9 zk(tqTHdQZu?z{J$`*-gDx!+N3<*|hAM8;Z(-oIalafrJ=Jd8t}EhO#(^vW>l0`qo; zL(+Rln4=`#F@lX;Na%yc83LBW^@<)h?iko&#yN@YJi$z6M8`Ul(3OTBv;AT6K0xUG zB+OYOUgjd_CppI14$CCx9<$YZ*#tKFq;=!OImX>7FmFp2%rCj-bBx=Ln9eauSqa*% zj4WY%ABp2+f_ueVEC=3a@;!$oEM4lIEr{fCEIHgOX!Y#m7@D}(umyhYD|Yd3GWdQx z{5}v)xHaWQJ}MmA%|zTM8E3}*1AK1_!{UCuLw$3Vuo#akNjQfkoL%xvq{F0-wM*z? z;l2Ut%PF0#`it*YDP1=;*T=cNb-qv6C{lmV6>jqN%d?sM@NQpN>EQw0A3os=yF#fR*Cy;{{fxyy}s^;@}1>aetf@Us;3C!3{I@&{ACzoc5rO?nnd63Kp!y`kM-I#vpC2kww04uIJg{i#=5Eb``wuE~|-;6>nuz zdm4C{YVhkXo5nQUM~AicL{GM_fBT)jZJwR+GYK6r2pb{aDqhF~)`us-zlEO#Y~`49 zt08Qw+#_9$d)X)>;Lhj)8ug+Jr2~gm*a*eoLrp6lJh3)w)aZ^dgq*B42>> zsHrYNo*a9r26_1~&s%yL@LXaP_soufJEn9ABMrPfAU*N1hicyD=T4A^ZdqQ{5y-oH z1o&nz#(jl}SRBftnwP~{LthTc0=_{W_&xGbJg_XNP9Lpv9Jpg4UpLzOEX#2+%r~qf z(@mHklNCSWI(-u31NHb|o!VV@!dV`y8Y@D5Wr-=B6?msc=h)B|9X-T`R(g7Yrr)~) zTl4hrK8G_LWzO(B>CW)QOgElEO1aMptV3MYTXf`s{DM`V7a@;iI3PUyzWHAoFSHFC z@JQ?sf;c>x}2~QS0Iq=MeCm)_dcuL?|0FN7< z%Ec^xtjzwiA>{YsGPI-TL0r-?(l4CD{qeFT@i?9xLVGR2v%vASZzs^eZ4!ZSd$Q*U&E8 zV1d|P54`dYAmfi`s(@xj8oSvsCqA(mzMgw(lydR9W$liNuWN)TE& zA^=HgmJ-t-o3}ajqi&$vh?0Y|H0mf|8Q{T z61{h?|487o3cdG~|7hTYQoS$Ne;UtI`n>+ZzDEC-~tOgZyWpEj<{=M(fX| zRh3Wjz13V*4?urTXh%YKxnOYYp@Qj?=&`yq}ej3jk6M5O|ALn?*;C9PBQBJRsc-tTkogfeVEC}QYO`nd<&&@h;*1kqi^3bwAAO z-Wy}hylokAd`@Twp|xb`p!BMXX;mr06e=2jl`K&@Ozt>^$(^i7E>k)~-IOP`!$kPK z{*O^sv7KHeo(d_y=OYm*zfj*Gw}(0AEyxMT?op`wV<5XHL3U4r><)tLo&niC3$i-| zvU^U-u7})((G6R^lNseFnZ0}u%J9S}y(5#j9|LO+Y11-G*|d!A%PfI5-zG2xHAc=M z`tjZky2}>9{A@RK1X^a{_?^zrA>vLaV!Ck~w+#-wW0O%P$7Fs_Wp84>nTh#TcT{j3 z3OD^}d^tbMy_Y|iyC?tGcW%^tPu)?)Ia}b@e4bv2b2hoo6uN>qzr%T*oYVE7y#=TX z=sS3QL>rg`%MN8Kx?AXv@H6cuLzWfBGsUR)^lIG|$K!Ey*YC?&7-;%5(f(;$F!doX z@%h#oj7!GjG{qzFIdRStiHP=za~z(3$b-BW>q4HX<~!ljma>1f}Y>OP(9PtS5a z1w6-vbl{j~wJU^ufT>O3U9z9wC9p5ge{=YVf3EnFqHTS#joU41bSwzGkv|sG9IYLj zCfj-=4tL;Bd>_WbpKQT2=9kZl$Adt7y6r2F_p0xR{UqRBSP>?14q%*!H*9xZ8Rr2R z=K+Xw7~&i@#R>AxLa~dm#F=^z3N|_&18*Yu7-sJE_*ddHoDPjSD{0YiIKs?QFc_*92}dvo|VEWP+y zX`g+_S&nrXd4xISo!Q#Rt&G+G7}mB`9Iu##M%+cgf;~lD*^stR4jc*=yy^=5*n{g8 z9q;I)90b0Vb0`?fITQ-7=6BrPo4JnRC2oJIANs>*hf(iifTsa%3|#yIUlDAN1@$Ep*=^T-AAF#yK@~a*w0{_LAw&69<(Ph-ikJ)&`yW2wJ?4Z+fezN@p1I` z>>5Aa@jX~m9>%-u6IopTVrZv&q8r@j%HIS&FQWa53DlWf6WVzZ!i`_Xc7fk`j*X8% zpL>b-nTQj-@6&{hYOGVEoF^B+c(SdGV^dEaqw_`=NS5LO^yh=24A#y?A)i% z1(}&UlYi5O@=m|wb`qX~Z(g4~f_cWietG}FH9_; z^{(Q>z02aCa9QPT0^0-Rc@)}OI@%Qq^>B=h4Eg>X%5iYsa@{j9e#V^UiG!kC$73Bg zMe#QW%CZ)DN*iGK{k8;V#9lUAj;r}}TVMTyHbYzgsBw5fr<_YhAw4h;a=|<(6R{0a z;Tp(sc`$MR0OyfvT*fsh&clw1J;K1RN_9Tx{Cx%HCo?!}3BQxV$2Z)2eB?ns7bSUX z#&lsn!~3HtkjFb9kKctnwm=?VHI3tid>q&0I4om>3-TNX*Sc!0AaVO$oc9v3FWJ+;Sh8~)v_mh~nZ_xcI9Qx2@04aUVGhR~@#`K~TKC`*Z|&0gMJ0CaD_1V# zDq4$u>)XVUIn~=*_qe*KN8Uc(>f6-P(A3gsx+TBS*WTtc0W~8mU*nT&pIX=6vL5x% zi57uo+$uJQjCFewl)ZX6a=Bq{k{#RuW{;55eZn(PVRXH!+AX6rE z`PMgXdScU8qS^P&>Gl;SiT5%Ir}Q1X=5YLOZ!(>|O0!Pa+lpjghl%KInD`x(X`UzbxD>yTnV)?~-0Qr8-_sU;Bl3IX zcOBu^p9E_mnGWE~=5SLmukA^~{evZ3H{`cDNw|}i^j((N67vWKK!(JCr8gkgQi4P7^wARM&UbXV<3dn+0`Y+inTR%xS~F zI}QpgQ8u5HOA=k*yE0JU^&8OjRr<7-lj!iSNx_)jHeg&6QtE&iBCiP>#S zw+T1(zm8y?4B3R6`d?4#7IlHIxA@;6usiu*dlGDx=>k6)|7^`R;impK%JClkFWH2f z`p-15RBT6W!cF~evbeu(ao=ol&-xOK`D}|j*W%8zxNo<(=UChY7WZ8i_gwgq80hR? zO}MFlk;Pq{1Y>@e#r=xK{g%c3&ldMDrE_$KD9?*#e{G7z?IKt)P~O^KTKwl*+=~g; z4Ah5qzr|l-#@n)H@cPmInqa!$Ds4|NiTMuoqsjX!X_+&4{b&{peeHzBZPD%4E?C?O zD`#W|uV0&;xS@V+O2z^+c>UVun7_A`THNE?=rQHnn?O+gchE@Ha|vef`?? zo7T27^Lo{!PhQ*Dy0%@Ym0tzqM}2-Rs5(aIq-yNe#cqlfZn9-<(zR?-rF)sHB^%ok zsi(A6vERJiKW#ZuK|6`-ME(^HT69&dQ^%5Z|+{mNQEk_E5O?M`5U7ZN(3&~Ac_ z4fBTE)tVCC-LA%{1BM>Cc7)KQ1WQ{d_~QEw{A_lZ+zmKJFo*_;?*1hbe#{83g^e&& z*WZ>&=t_g9t&Z^AY+#wQF(bbk!AIAegeGO8Eg-aq&?^YNn$XRJZX3N+gzhIa zNt-Q;(4@X>Bn`GYLbn)rO15_Lo?yDOc2W+9pj%V-8D0n4A?ag82F{TC80QInEoDg3 ztW^@ame4JPCTZ5fgeKVP+BQP(C-h-LA0zZ2p@&F04-@*5x%?GvbEc?^5>n12U$$yO zlXTktPL?y$FUxXfqOB>+byjWQZZVzQO94J5irz!QoF!pER_80alHjjb6P$HO|92E! zVh)qwxr)fc<3t`>h&;3t83+@4fXLVZLLVXY+mgRi%thv?`S@AFpU9Y&X_lD;F4?0- zI<*Z(I<+=~k4Dm_#Rz?n@H|TB(}W%&^kq_yjO4{l${gC@LPf73WnM_iyxIt(<&!%< z0|sq#5?Uwp5d-Jm25Z&|MUO*uOWK}c$ccSFp${A7W*;~1N;%SvFb8g%?(A=`NwQcQ_o30UWZQk8?&%buOHCu`4p3)39y+3zS>Xm63Lf=z!;(4aftI~wM zQK{n`(=@K1(p4qS+))=<>aS-8y)~}qXESa4G;y!VvnxJYyqo)-?ph>tF@SCl=GM5n z3RD04G@P zPich`=l5pIUPq2}IwX#7fyKXs_+$KK7Jm=%pC<7ysQ*ghpCNH741Z%VYGSlYN-UdY zchn?)5?#@H@ndvDPp%cevJZM3|Ect6kaD_#&`v_nAhb)4lMU-O{sA^}N=xrvck-p4UJ-FslN+{n^VX9V>&w|m*QBC}bBTk2$@ehTVeqOK*5J6wmM zD^IU$POFM6gD`o^xn3CRbKrZ_Z@A)p60Fg>=69=SYS>I;$ZRT`~ngZFM>KZn(#>|q`P z9lz62=NIFC<2R!0lrAvU?f(+pf4qw^{701K9#NJjZ%9^_;2%c)$-1WSZNY+DxZGg* z;Ww6Wt3^0Z(bd9zZFPe>)PdA>gLP-Ap99J2hwH5FV%s_cE$?mm3; zKK{*PyaRrHTg0JK^Y96U*WC!-E{EfU@l2OFQTBp(wd z3(I&?9&;sSey~-m&7T#m3%e z4&Fao@upM=vZ#o6MZ#O}fcJ%j7q{o1LL@u~J}Wbe3&h#XH zCVFj_@&3#JctD50WqAQP?LL8dY8tUWfR^EK1-(IqK^19a4YZhJWei8ur zAdrgW#sNYZbLbPpM=k|=0E-VC0C~!9#Hb;@Z2TX?j+|XnU1bdY9tAlM7n6zd1g1I+ zxm>VSFH2t{9=p%f3A?Ce2!~HBVmN@F+*q5yB3hTs5~_0Lh7 zJ{&X18;tp!>|p$9B|hv=8b9Epb$;wu8rFT$%?%hfKu>%9eYw5Qk_l4=ti~hPv>hFR1hP~9k_YLYN z8xZqh3O+a2D%%)r#KL}`>A{E7`-z%9O$f#*gKH1QpQdv{E%BkRN>wTJ>$Aj<^96^| zw-@IO4rBXp?lAE$kpRG64zsz%q=$aN0Q*fC-Ur}9J0D?an~Hv6>C?o^#{uff!PA-M z(Ps@FV>$PO!nReS&YI8n_#jc_`AwYL@SDVOEzBuR!r0x7<7((F$|pL8`J9UWS&SbZ zjVDCX`3iQZ?G!FouJ~88&gbd%oOxJDEA47)q4qg0m zPEZ8X9=jtKc3Zs1$k8P=w-}b(P5qtrH)Qvp_P)MwPsq87=6(lST!OH)SPqZreA9Z% zYR~jP(n$Y5>7#af+zJUV=%B~dTF*`H`k2{p-z)i?v`X|2GQSL&-uJEad@9p%?v;E_ zo{{v&3Wt1`+a!7wOkciN@;P})qIcciCY=1aM6ZcGf3M_o@^eXV?KW&Ya_Id`qPIby zH$$K&`JA{=pC8ZfbK(mL{UQ3CNH+TJ!z^#7Oi!}W_l*ec6MatpQ=)f68iSn1? z1$v^-$xKO4FSCzRu6QMS2boTOujF%5F6q??Vtg+$y;3W^nZrW+M4yv2HhQ{E9B@U- zFFSKo7=NPANvl<#FPLQf?1CY7Mk?ajHFMk29c{!}1GkE!r;hLBK1cr1$cD=ism;VwzHD3N#aLvo#hEJTA zpMz^&{!fHV<>ep1HJ@XNkn>Z>Q>thJKLJ?Pm*_AQ*J zyH(2`Pa*jeK{vUPd|_@P`TWg3%zp+tiWhZ6rXzSU<}K<6EY7Wm>H@}nl6nX9!66!x zLa~K^N&@R&EU4Az5sw-BU>=KoFwe00!o4Pa4aPAh%Geqf`(O&jKA?FL%Qzm=(&uGk zAK)I07%u^Jz4gNdwLI>D92X%q1kV=})oe#GjnP?%=ZhFKbqrR@kw})7L;QptsGDQ_ z4AhNFJO4)pxi%TcVTx46d$!ysldM+JN)^M<;o7TnT6YdY{luM_Q z{pHD}Gc7LAD{#)GL-)`<`E%(^O9}KuTe_%3FF~wl51htUiQX=Oo@h%qBGDUhpf@DZ z+au5uZRz$)^bl{C4ZT++dWYFL=xiyM&R;4o!Cum9_)u8rZFD%J z{97x%={|NIIop~`hg`DC_{xpR$@s2sO8(9cGJe6kOmDqs;xjwX31jWep?AAwe10yb zI^@XVKK7LkIdZt~rpF;i4)?wEIpoNx67JjCBJwk@T`v2aIn6@*CX++Q%;Ut6J0v(F z!Mzf^O@fnoa_GDy!F;UlWjS$hmbjfJUd6V zk-MK2a9$8_Mg*L40cVMTQz6Ls0YUCw0H3sgKa=BE3-WcXAYVTs$kC009KBAEm!A~m zWmq?+@$yY@&C9n4@^VjBUMAZF`T9p(zBYzKEM`c*lgJNK_0X;OU7WGVzdka9%f2Y@ zav2n4K9$)^6*0N4us%inC!8=*Wz|9914erX7RwWyFMi0IM8E85dv=hpQS5`8oX#(V*OG%Dy&dTes!RA=cX; z?cg(uR3w;K}>(8-#lk?8g`Im`!&wJ~-{iZ^Ta_|9*S{kFj(o3Su^S8@cRt zJ)i7l{Bz-6+%XBy&Tk{g;tSoyXgK+8q?pZ}Oz(EfUR>U3cGzF#dx#rc_V!dfhC+>v zY&JC;Glm3R_V!k_g6uaLKaoaOLqP>dr8&e zib=28a{`t%yM)YRx!Z7`s2JA)(LTwD1M4$$9%Ih5p-)Jm4m~NXm43`Yg*pFmO+h;% zdfqLpEv5|%rAHpd^ZL3obYCohHt^g&C3S&#d2R%5qr~mX_0p^lie5|CYa{+W<`!aS z=*&LChv)BXzf3_~O4F!&Io82r!i#iZ4er2SbA8AB?D+1`R%|EtWf*#g6k>ZZ=SJ#T zW4{W2wF5qqI!ywYCyUx^%_YjhoiKsyBP$0pbNq`A+?5IL%Y10aBeZTBmpFZssA!MC z>^F+->;$OK>8Z?lc&3=yGQ{;|R4#bNcvs9(Mcd@UJVyebG|V@J_2GUWT>l!&;99|Y zQwINOJFs3$J1!Hy=ug4wTZr{xU3zKOPho8)6X$(Q`|`lt9U{+=hsd{}PHLb&b?^YS z)e6wKxS!r=W__U!?z}NmQeqz1&T@8Io)VUcSS#*H* zS-?s5f-zW#adlHijW!Mr-7s>~u{Pp!Vmn2fHtvTc_#Iv4_As;$*tdo4;Wl5GlW`eg zHZUGTz8ssDl^dz;$~5BTaQXrX0PN#19V^p_--KCzKv^Nnkw(mMGnc5ww?s-r9_uV$ z1I`;dvp3@3oPbj}IzV&Vt>0ZV9!#>FJ~&24+ua8#KF!^uTpcTNCr1_cyYQPB)7?kX z?e1e~-F-ZL$bBMx)_pR4+5IN+mbGQLvfXu^!tA%INVz`RZuqK=74fk`d9_go+Kg}B zRJ%J#$1Bt$l$p69QqTq+>Zg4KZ5V`D6>D0F|Ql3 zT?)=S&B#B~HcEFNB6In;qL9x}A2828$1Ft&Rs&>W_*;uW0dn$A7+ z9Hn`Plq`B4b9uOT!*wycKAzG^N%E%)X`~+Tt5jRb`Dw=WxVNhs%aML2)kPlv%@@zr z?|1JV2L-#TG!ROX$6o{5<&5@jMtfAEJ$ehYHAcG&Y3oG<^F@xc`T07{4_ZVja4d0N zntW_yeC#mSkVkM0F~$I?SZL%mO~J1UJZS=c4g)_`w9}LOLF@zg3+jqHaqzNIhHX7m zuau8o4TQ$l1iH|E(V_17yl&pswVAI%tWG!d&9RB<1iJ6he5ufGxb_cSR%(oR21*Lo zB5A$-Jk!K0oF$LcDj^HU+&jyK4u=PBT^p}22b28Df znT&kn12&$L+3(0*sn?SV3crZ$amS&qH=!(9rDb!KVY~w12S`0C_1 z=_;wJckjV(BuSon4fwogS!0SAV{!a_c7LyMe=oZqg8LhgPlm1f%`0_hQmOL$aji7+ z17JUPe3a5B?87Z`ACeo`hm~(+#xX|>n`e(yo}>LocDBNA9dV67Ki0oQ{6!v;DQbkj zQj*brYy4r^fT!vMUXHoU23CLXg8}tsU($2^#{(;F_6;JgNHz zw!pmy0B0xsu3hIJXoPz!nwwi1VVo2<`Ue`ItQ5)~XlO?N%a`X7727)aLIaMOHsl4( zi?SES%+616%y@vu?^(u)F-FR9yzp@Xd|bRN$oi>~_0twhpZjcRG+SwWdCg89X~^0X zS2j$XcfeLYVP~UPOgZZyA-9u0&$UeHvpq7DU)VTUiFEjRZu$bv!Afaj8Pdmcq>p)8 z&2!&1RF?HgGD$#|`w*YzeQhMBPJ{H91&z8W?X$!q(q?t}vii=Kqxdd{oT4_+I5WE1 zjCGD4Qk!5MKR#BZ21gY&o^Dq+rggO~eMk+Z&#GPN%WAh(PH~^4F#82L<)nk0QlkUS ztW2T?=^Oxc3_%@+UA5Xa1oaF-Jws4WWs%xvD~Es#LfdGOL(~SUhZPf#zLKsXB{W}l z5h|u^z00^5azI;3Rk!l6i)_(x(P$T2}k2kypqk$~)l8fTyw?aDpv&yihw3 zHu%*tv@w~hWiKZ7wkHItz{%kt{@*TAdhTwaa034ANGncE)~=XT+_#kRTEKqsTR z-l>Ih&b1md=h~|_`PL2@IwaTOaGtQ_T6563^X6_u{~(qJPHN8vn#btYbK>Ol>BlwX z;?pUj;)eO-xN)g|@AK#HJGpLi=t105tJWHuSFP5%Bb%b_(H&Ye+}9h8$F%;QXt)FI z1=}}uhqZ7t+8eFbi22N_4eQsfdURFO(^_YHyuF(vY}wkkslU_u@KP-vj&6PL`ObaLa!X5E&2!QD}&(g+6Fq){= z6^?A~ifbkF`b)J)OxsN3phmTLS9_1P=CSpykJfL1o1s#zq`fBu#r+b_=8)C_KX4i9 z4wp_`*Y-##-t~1=Wxf|@Bi!rhjcar}79P@Ayi_d~kM?)Oop~6Gw@2fxp)e1tYxZWW zKZaJMz(qWa(v00=kq)bvz99|TtNpOQy(b>|5%gMb577Bxe>fJ0-&lV)c1EN}Ga~-B zVqLvG;U1`E*)r%Pt;FoHhqX>1v~Kls8u0G+)>T34TJh-9Yq7HWQ17O&O`ZKc<^x7( z;=XoUKJ@p{VIS|!_Cd6FJFS8?I|e<}9q9>IYdkWNIc6VgX==jP&7qkc<^1VbcA)nQ z1O1`tPW{^%>50U;ZlQxG@m}Dj$~`CX|Qg)OVJ2OqRB>$V)y z0;l7x1{+xk&SKUQiW7pdN+-8oOSU08Ez%cjrM#Ey4ZB+-JvgFaw(JaBZpMBP>0>vI zHf3*xxAw(%w6bp@_et77hvv|Rz%=ssig=i@x`0GYM#uK4@IC&8;=(AHJ zu%R{toa=U|FHecD9JM65dLObLnOYufgGby<5WDBb^U(yv^2n zO0F>9tof23n`Bdo{z6J+ew)hD!^|gUzU0UDs+FEA>EOq9P@>1=Z1AxaFJ<*SCsg<5r70<2(df&0qTjUY?SM+0(;%$1{?ENwoDcXN;KcIrN^9=vA_~FY_fowtZH5Ge%f07n$B3iQajZLudd&XwZdPugr!spJ5zi;tc6(SX z?5`Lev!}Ql-a)-!lY_@=wP(5K^5pDU3RNLL2FK&Sf*pwl<7|qL&Bt?`?OEml|J>Vb z=-qC6mRpVg!+rXWIrs;Pu$}*(2;2GhiSYk*&YN%L$$?WW*joEoJRv^EsVtrlUw4~X zJfT$%_Bb5gAi=E?+%3Uz31;zulu8zl=+E-lHuG4zNfw{z=K_rVCFPVc=d@ic9?`EE ze38W;`pk;2urWEcWESmDWsY=TibJa`mf-J7@FNmzwO^v~@GbD51plc7OF4v;6B7KM z1ivrAzmed7x58%r#*K!*r|UlHKF^EPX83=)R!aAuWZ-!thmec;D64Ho&LG!z318}O z*FFh;O@iN+;J=gLf0SS;N0RG?6?V^%;JFgKl!3!WjwAPKYmOuLlM;TX1?GlY9VABq z`fuj01~!T#OIP>w41+Ub=W?^eCc`oYgABHeLmV=L4W7YC);1_RA;7YPU^}+K24hda zArp3*8DoBILO6p-jwINDy$woMkrnNs2<0%Fzhz0t-C36?^6s%LNl5s)XoV2kage^pO@qmtjHZhMQ8LGvb>o<|yDTv{E);%RDW zUcF{rgw;nITiNZeRLPTz>7c9h_o|Uzrjo~F-S#SV+xru}&2M{cTUKKxTA2KnoAzpZ zCtI^|57tEUc>sLaMDy990G@@+{8{3;i2wPeeH)9U^2?@uL zk+^qp`9+9dmE^x7l|Pue-+QvOH#^7V!N*QD`4YITn>^gRb4@-h@$x>E+0s6h`A}EF zq)svO7s2DLgh`!d=0C+)o`gfqGxOJjD>w7u8Sq{+{~@W*izR-A6vHSY#j@EY#nU+` z#VCPyK&L7HE8tD}R~fsH$|y{V9pkoQnkZf?j)_uW*?=;O<|QiLxlH{lb7+pD0&Y`e z)@`z4peVlrb28#}ud^N+8 zua2|itK%*C>I6%^I@yx1PP62z1(N&*E0&GA(b9>!N$3RQFR79Zt6PLlcz%~{%=TihpFy45g*5F*XCjDL6e_h$+6K| zR-uklHFl zhV~1q587cNpXVR3#-bgw#-e>>*}ry4lKE${Rj8+3k!0QwGBMxow8mw>+p23HPjd?I z{q_k~UHfEFm**Esb>~TS=hIl=z1{wZRJW4GQZ3H8P1ZeY>BsSbCC71s`T#m}d}7IQ zd?DoU{L_|B9N$WHFIjzX{8_4d#p;7&$m+uwhgEk>2Gs@I88gnRJ7xma#e84tIT~{% zOn)+l9lU#&ntYCw5BBDj?j2squbT0~Sfvy%41DQyGk-boX8v|b&TdIguOvr~JN9cy z&O4HvpyXr262DCHw@s42?U4NKJCct*F8SC2DNYmUxy?I!NPI*bp1<&s#9`oVe_lQ{+*2s@do@`006FxIjBYsdSe@-e7&-dk~ z&zV4VJA`jc`kxsj2lL-%timk+f#iz@B;WNNOsmPmJ!pZ+4_WQnRB8*}Z*2~ekNjkb zf7I%aZMo#fR$BeBowoX8lkDFn*}Rr%^+)qr{lT-c7MlEQ$)C)jbpd+P=1Km!xagSY`d*DqF&nVF=fqzJxPa?2qw=Vb(D%ZNdR6Qa# ziRwihQ1|<)8!Lj6V;w#mO=4&=1)T8W! zxxY8ms|@nkbH|O7Gq-b0_k~#h^}axrs0%XGj`L!Vfd9Oah~0XO%R-qHFYXA*L)>K% z_D7$4y-)0K;Fug=JB$f*lM8yu_rv_5UQiEwf5KMAk{HF~hG(RF+|PvZ_XLhl$>f-? zgwO$wy||i>Jx8A_#*FydnUidWKJRRwz#SXap_kb&f!_=^UzL}^=HXli`;CFXB&NW% zg>jwNRrR@{K0H?$u~vvbLX4GZ2RJ?)6Cc|s^d1JBd$pah;Ae62Lq4 ziK4y0bR(h9eGJ=Nh;5G49%7-eJ+wh=leaImiytma4_f+IU<^n77jfSGeK5y4xSt7V zE}l6ZyI34uVBGr7v=89V;@U);3J9#(0H)ElVrRhzzby;ft4>xtL6k5O=c60YY^4;!NW0}*|0xDTFA6x~r~ z;=>1Kc5-_!@xN)r^R_Wput)I$|1|J!;PD*b-B9i<LmK36h@ z$|ry(z!tv)`U3dNPhpIXPAY@=SH1jk97AcSpSjGmo>3M>9pLzbJ%+0bb+Lmvq0gW5 zbGgpD=ioWadWF9Lap-3389ts2rusiN-pkvLV_;rb6A7>nAKeqsR=lAet;3&S4(toI z1@^hmtUI$4ZAwKPF4&YB2D%{FYeb;D2IVy>Uk7@0=WRossmp-(0sjLSU-@l)=r{H! z`_OOf0^XLl6UU|c_aKAuF(EP zSdZp%m1gUzU7Zf_Mz8QKr8d+Z{q2tR1e|#kHZUxGvK2&Z6#2zgm32@~x;x)TzMC4j&oGrl7sI zM#494vtc>HE7 z_+>lV0qzqpZP*_(bvP8J`5FW5jiL6?r@V&w!Ty_DA?>C0k3NFd|4p$6JfWrBD@9C$ zTlwktP;UD)&s4^VYbIWL3hiS*w!Of(@m6|0QFiDw>J_fvDMqSI{3gKZGekEM4H12q zuswT;28qrm`Vi4ah?WyI|F;p{LG&q-`vj#!M9YYp?fsZ&1<^{P3yD5TG)#06(ZxiU z5?w}gInfnFR}!rzT1&K^=xU;kMAr~qOSFmTI-<=)pC;N$^jV^ti0VW)6HO3pBf5p? zR-)U9b`b3(x|8VhM0XK=f#^RF?IzikL>J(1ty4G5;qiBBnxC6h|4i+gNbYo2S@Agk zCcLI`1A812$Tv1`tZ8aQ&~074Z$qTMwsBQsE&sAM$2WQE2L2sie2VjlPjNo;s9Il5 ztFNx5s}MH(737I*Rskdea6dZ zgo+I<&otHfo~rjXA%K>{v8UD*fI*a1g%&R4v~2Ou!W;*%F!U(@{<)^6sxn+4MkDxj z8*nVvwQ$)2&ND{fZR)Y_(TB@?3-}KM-#f=vrHF zh!V&Wv@>f{eF~KHHaM#_Jq3*$*4Gpi7C>@CYh-;(q+pf_mBkWOEs^?WIV0s_ZBxsJ zdRcDLs3?mvMPTfzPQ2WN}X6+GKe(~8psd4+|^Vvu^^zP|}7^#2nk zv`#8#{nURvz#END~lAd`j(?M#(tKRC*{qOYWtdt;PxhttZvJxaO$v~ou&u6BC4qp9PV z@SXS#lVzoy@A)4jkMLox{WKrx^8Phd-lR;rpJWjn!<2U}P2Mq@yL5TqrP|-PBPrso zghBG8aw!FgSN=Xt-qDfeDcPx5KrE*`n^sOC?2&{8bkDpqETDT4ZV^o@$5M5Ie?R<4 zeE(w;zCU(A=3?m_cvH?ue}8K%po!P38|7>(!rv*Q#SSp>b%Uc|14)3hUCe(^`0TbGu8E-l@bmfo3` z?n+DlV_Mq8vN;LM_okF~NwEl=gzftmk#wA;ScAV!lb42lW1pp@%?}c_%(}Ik_j7R* z|Nc97>K!%pUYfj(Qe=S?%oagtHk!;Tc!sG(L=D1;kU$0Lfj~S8$PWS5EuLUFtLt0q zn>QvQNldKKyUqI=JU`xTu7@J&{L-b;cgK~|cSm@4$TIU+5$_bw=2>Q$oy0rEeKQ#= zpjVRfmh^4)*HZp53FC4%$@hppbD18|&m^|yQ48O|R!R7Y2~^h${A8-@73V$sGAx`2 zFXI!~jx3G%5~<8m37_$lB>!Ein+yC0R2TV^W~=~#DX^P-0hNcRWOWvmN8T@$ud{GM z>KX~RvEFJIpEstNV_zi2SXe5>SZJ2`jTWzLk@(%#d9%t()_JpPv!!!&qos3olhhx0 zBfrb+=N1W5vfYZ|pzf8*_ey1cVa0Z^(RX;xyDeSWR$6s!(wy3wEdAKlTW#4kNiw%e zWp-J*vb|y1wx(Ko(C)T$s7;XaU$Oe2^$MLR9)a7)(uhB7^-X)rnn&%Z)d%eZ%MP_q zEIZWxO_D!g=~MfIWs}-hmQ8BkO64y|<*!hA@Mqdzs66sR@JLK$>@JD_5tY9na2{D2 z@zT1mo9p5#@aDQeURoFSO4141_#)DYCNLk#GUO`|b7d$0!1;)UKeJ1*LF_L{{9&pK z&nxyms*C&)OV9TAEIr#zy?qY+8Bw0|=cKWlx`O9RyQwSWC0#i(tUfpUZr>e$ZNF!is#e0|2+Q}iT&Yz@jE1}?(Vp+tNS&kbyx9tuP%&H>i>M+K?|8?d`7|f-Y6@L-m5o9ku!nCgK zLwIh(NsLX|9-?yxpx>j#rc8XuT>h^$7q*MvSr_&&AD-(JyHw22G1xW(%EX9oT-XqhXa9$q z&%f0${NkIr7TY-`s*klDj(vQ8blX^Cs3(IdpyO*;$A2Dd;snDpU9@Y_)b3y2-|d`?(iIMx13+&RhvS{qv;wa8B&UbvLk4?;hIiIe%bz7wezuU*!%L@|U zfK7f~QP8yw^fQ%di3?z-xnPgqFb!k=K-vjuC#0Q_c0t+&X&0njkapuaFpzdb+8y6s z&A&MW^5Lb>h2t$`vEfA?JToSCeq1EhKHn4jI#dAt^DaIKd7YrQN%K7~R$$p6&hs^W z<>S%Vr}sxuKl+*{_*y~TgboZ3flLKtYco5T5m?C#Jl{*N92d!UDoih{D8M<;r&M}C zuSTecxlk^QeJDL1Gx~?XG^X+Tpo4(Vb^(1udpmPIu+T8jUldmZg>@I-b(Z^!{8#y$ zc)_L)h7w8xJhgiKPSmC9X={LWwze=FzpI=D_bdMPH<+ex9*)FMEss7>X&CX>FNEV~ zmWAWLfxKInqHzP#!#6zfNl^Z%@pk)3=8FIBayWi!IHGU964loNZ!9;jcg1Y1Af~Z! z>@K)ot-^ICUyrmmfbK8ej0TSx4HI2y{aOX>c5=IUOYT=-7gI*z0LMb{1~GXk3eVVZ1*FogD^!oxc{29|!&=H5y;L zJQ_cX*FdKS-VVqAcqyu{{mK(Rb0Hj?bOZP+o*26p*4L_@`12>lI{hiE-{+o)Zgqkm zf%iGR8tOhjAg(QgYn$L2tR?>K{;s8w*j+5VWNmmx7u=Z>cy=mV?&$*BRtt0WJU>6E zeCdC?=WM|<&1&EEfY0=_m3iH5Q!?EkBe(^0G#7mG9?07Rd2!o^QShgk?Fw^$AHK%a z4b00gy|5Gd!^qpqmrfU&Ky8|4u0T(B|~o=>-^4m^U`SVczys|I0Iy2k_Wn-Oi&ABw9{||fL107Xy?>~2UlkCQ5SJ>7l zD{e}#8;D6nN;e^f4Mf-kYFF53q#VhTED(%IP6&3PyV+e5G>O!+`J*pd2w;_h^?7Lf z+GnjIR7#Qh-s814Kde+krShl#UQ_j_sV=#{?{{YI-r1WCiN5-to>R^la%Xn#cV@ox zo$t)t`Of!agtUEjcNE?Yv_qbDh#x6%M}ZF3MVX^QkK1pu)7!X23JDb4oKSpX|WM^FT5M9c(^H8A@v2)i8~5( zuwF2x>mBI^GuBI~10B0q4`{=s>JnNq?56d>vamimP?wdEccs)v>$DQ;atqLXb!=S} znt|!8E~P&keH(cJ{a=ss@I-U){M~dchxwXfU-6;JO7x`*{Zv+cwDNXXU##kl5Z8k6 zZGVPwY^>R_?K;r;hRXS9X9B!m_u634KH3C*>1lh@7KQO$5V&_5`kh)9dZEbDeVSN$ zB$C;aMXWug#Ma{_**y_r@7Y6gK@ZFYJ>US@Cyp z@|r?jL$?L(E;o$x>1d!1*LJ>(_p2gJvop#C1cK(LgGV&RGwo z)4ApCJkVRt9^ILnownZv&W|>EEAB3w?@W6+xWxT%uwq_Qu-xswwnBP0bibS8+28D3 z_#FKHl(*vfmsp+>CC{HRPw9YkB>%f;XJQ~|Pqct^bQJ9-wjvnpMX=te$?WLtx{i?6 z7k}*UT0nGNtBL-0vu$2ih)B2JXq$KYa@)LCL!1BhjqrEo1OC>V5mx2CrFkw)-O-}bkD1@gHdU!9sS{~>CBK|=CxETNqvPMA+KBlFPLH#rfKD`=W? zr#w>h0jzVs_9l$!(}SUZa$y^5As-2P4n5r30lY3*IvA{Y%o41)9%S3;ZtYucX?%Ol$?2K>x>EK`yp}TxOI2V}SkWf=L>`uGnRk5b!`@(E;o2L8Ei`*ROl_XOGHnOEPciNrUk@|is$uFUdzE5WioS?@53_YI z+WukQLph31Vq(O$$81LXArm3ke%f~60iaat6^o*n0)<^jmKtAgF(0_Vp?Q8z<3&e=~ zU9^D-JOTWE!dxWUK%u=)TqaJznmeZMQK9|e|IQxuS|iNMG1z+@CTWg+23z2{Sr)qg zI(`$|f1RJ7u>XR+mj(7-hS2?X+*_Q?o37fsIbN4#XSc5Sj^i-j*wC-497DONtQbC6 zC>e~@hhw>ZFXXiZ_Lb)$Z;;Omoy6`q4Ru~pVd<NrSrurD`s0KYm$<%>$+qOCrT zwV?ePOC-lYf`zX>O?^;OnW8=@4`JE!GqL{;VSGD&Us2?Q$_MCy2#k5OsiOOO&-A4a2imS*Dt{DRFvRuS0;b=P zW`d8+1uAw2=y(Up%2IjMivAyq;Jr1zb#)EsWX*PCnXTTZI9$Uk_;ucTTeG*eZqvq_ zsjD`^t~2{;6SG1pWc1cIt@qwMbFD2ao!H>@7GEwGPkB&5_e_}6TztFKj~8-YDF>v_DU5!kU&Dacz7yg~nX^*%AB0ew}9 zWm66(ac_33Z_{n~O)|NEGp+GT9`Gs8+tSipw`LPmf_zS~YR?Gy#=)w!W^&txOrCDw z@dZh6ygW(hX>D2R*4?CBe z$d)A)&jf24{3ToZpu6F;Ge{~u-ST}kA3h;ZmuLzF3+yY5lvXwAf&9937GsN++# zIyo!TvN$0NQ!$%=6^j+^mFC_A@o+&XN>-gicf5?srC~FyYO5uJU^?p#c+_f#l!3#l(ra-^0r|5D}rsr z?}a==${GB++SN^Uept)3_~>Esgm{Ht`#2cG`oy#3bePPuyu{iQA-0~w#NKn7H6`HEUmk~hkGS6-c1Yb8giBnkS4`H zf8u>3d5EUJ_^#@^|1PV;Q)e#ntX-$_?gFVUZxbeKH^@Sh!=U*esrO%U0sAmgpmyB&1!u@)6=qDrYknc76 ztwrglQ0yZ=@2gj6y6?64Z;m%)8F{AUr@y7W=tr7yzI6^!JPyXMV7C`(3A5+uW#$muliG6XN0|QA4zX$KwkdH#O95 zT;W|CPg&w?p_$?<5M1;u_ib#fzt>la3lHUo#dY=dzS`x!nielz?XZ6^HyV}sHm2HH zNg(0r%5zk(johy0*XImVgm<~qJMZ_;z!^!kLk?s_squmL)! z;H)5)ih}P+@m^kFc#Swu;Ck#y-{BC43-jPN zHwE8xyl-)u`?48v9Nq;9IJ}DzaCjGti^I#Xzz)t9KXiQ zaP~)=6dW$JWr%vE0F-ZZcqMapsbmfBkpfXk>g(Mjwf7#DI(kn_+q<*iw=5|Wf`YA; zhQ0&v9gfK*oP&^9aW(flg4lm(&&Kej;&*$Y%vGfW##2JP3gYiMyu_?v;yAaa4u>Hh z)(z9}IUJD!ly_ z_&3bjBPn&m^kns;{N7E%$V;_9^_j@C*_|Y{bSLRR94oX*LQJ&aELUEze7S|=UeouL zesSz3W|2_NmB+>=96DaPQe3Jb`f z73n1F|9Cp|E9!-K8xD@*Z;*ENpo+Pa(t>GtUZ=KIXT-Gl`CKdJON~Lj+}vM6ZlxXC zewQ38G|Dlw8>%!8AEb7aCjH)rX5rcM1q+_*U|nz=&fl%ds)OI9k4Ta~Vps6c$PSQ) zxsfa;6Z7|Hm=XI6)>a;r6a3HwzvUv{R^bxR55LOD=wNnqdMp>un>)_SqtOcnLeE+* z7)jq=VnCW`w+ZW}SMu+du%oqfB9aQO4?W5RXo>26M<{w zOYahRxSsZXHPsu~HV;oP4jj43kG7}S?%-Vod5G~AtZ+RYIA_bNbV0qBP;4?O@O)_= z)WZ|%ayhYmNE^n3M9FmSOfv)rpwBQuU=UdsVz%gB!6% zsZ4x@;Q<3(7tpKcbk}R>uAdxT{VM`piUo|gnvQC{sIPOO{9+uZ6c@jg@;0q>r!*2Q zcNG*mC3+4Bb(re_8Kgd%W)NM_HGh!Hsm#xFFG7ex_z2HVlj@0qSauRUVb|yhJLm+X zbKs-*Dsz5Of;s_xJ<$Anq+I&`VQH?YBd{E`jE@e{JVU&UJ(3ObbDT!00LP*8`Hyzs zm_++kkbfKcf+{S}q;gN~KhC+H_M9DQwVfp)9D^9A?+p+O^C?9#uwH?^v;8Qu(B2bJ zN0*|bmdYPmg=h0bI)17Ax4!roI(RXg&byGmusUH3xv|cXa%*w0#FiIKhp^$Be$-VR z`zbD`)N!7k5$ii%l4Z{m;pxctZEPaSWY^kE{0hxatSl*yk9M zfCmx@oM(Nm^f&sRL)zHSsGEeoKBw4_Xxf-_sd-EpZw$w7WS`ppShmu32T5puE!7<* znR$^Vz=QP6yg<61wZD_-dHV^qMQ9&s#j|Q#I|+Ht0w3BBU4duTfip!G&l70RGbK-`s3)30U;1xG?C@ELUp!L4^Rx(gT7*2c z(2mEG)Nl4=`b*K5tiJCLPecduJVP$=@AHq}`~G@rS16fa&2HM!n`H__^u!REVK$@P z1KNOgXPMAe*w|ZY3d3_1>X=@ysl7L1>ge5L+TMHE6zx52>g$e}TB2T)yIV4Oq7hSd zbdRaFyVSG_-m!xGo5OodRr%Yf9x4t)SrN$3>Qd$J0hlRCIhl34Dn*B_f6Hs zhuAvbaa379ne32W%hpdOH^yNNRSRj^(Du1(4m1@c&Vi-^aqf%HhucXu+M>lW$Sidp z)Sbk!;MikY79jag10R<~N=@zvj2EC=%;`Hc^c|C@pF*+33nfz-j<@h(Q<-B(!T5#t z9EbJbeRK_4AHF~`3ez)So-^4(_q*^rTQ)vZ9k+wn@R{BVu)FdUY~w2T~u$wInn3U z7)3kH$^~g#5Qm)cID>Z z95f(iyK@A7KNQ`7W0%^&A7XmmT>(WpjM}4$9k^)-qmak05KV$V{`@ zaftDnt;tN;mG=8eDrX%nahx`pD|1pyekhry{4mS(r5~1>ELy&o9vt1y$8NSVj`1%a zTMjP2Z^LsL=u89TtIC71)AppbSkWaR(4BYe*flz12l7Inov1fHveLTkNi$;^oR10g zfhS?5Phgx!S^X3_AXPY)9EYK=V7*dkC+37cU(EXa+H|7Feha2AL_2(I7;PZ;8%U(w zNcuYrq<^15dcPyTHzgJbxFc+zIc>4FC zEmiES#gKvWJ-6yaMAim2 zz#P{3rr+63ijh{}IlCKm1)f1f79*xM@CIliCUnr~dYWQsU+09iB-?xOv0sJv;6ejV ztaB9G8Y=s(fBsN{uBQFdz8S{8%=H|+7urSNc^mEEI8WwIv<`x`uVdo167W0jtL|^c zxL$yC&njelaq~)Z=haw79Yj&@nJ31FIlGbahZna@G+|c-m8zo zoF6*-k)PAok3%2jj?Pu#&au3KG3Y?OK%(s9tEeTe*NBUnRr2kFWAHbf$*+W)AKk9MJpq#Vw zKfH$^2dG?S|2nx``Nxqf?h6ulf9jD%M33uqybqK_er6=f*hf!|vu?j0^UPP)KfCC6 zyB)NA?(;G5th@DGP*E~&Ki8AKK%2aHh!nd)% zjh^|8;G_@pIvC@1;A?N8Y==^|W49~|Wm}YQ+q7)q`!+8(>3V!ZZ1%C3>>e!l6JfHC z({8>e82YT@#B)BAJHyP7QgOJm;8ESCnTyl+F86tBZMQJ{-j?P~4TvDkAg3wbbrV_$ zb42+1x-}40jDcrvI$o6*hfx@6#w#B9Sm~p?xu#xL%DxE`g10v-|XFNYx36nT3UP)=drXK8aetpLc5Ps*W?K7tJNw@D*wh$2_1Z0t-E2}Vzl)t(_nPdUvQWt z{ecc07e)PV9`oZJXyrEcH4RLfyFtLm=4RlR&NMEaiGJ6>ck?Wa_AUP8KaH23Jaya> z;D_-jv4(xBVBeo5zmB3Eg7Umrlh48Z{%P}-Ccb~e5Vu{=*7$W?t)ch$I9Syy6Y1qy zx&21A#uh%1NRRsMD@#J}TN-+&xE*)4#;@bU8hU7}kOa$^bZh9n$Ncn=Yz@};&k}7> zGBVIGJqbOHU&Fbz+)gH2gZ2G-V*N7g$+54=s~URG2<;VZ;YT&}+LL2nlfP-`oe=1W zSl?M1dS`%t(XsR-tA^e=j`f|b!TK&vq<2-zI9SzROQcuWFVs)O`qtdVxN3y?0UAS3 za~GrVfIv^g`reR8FS9 zN{=McD>8HW$kt$e|0waU!`1!cU~|8q$+vGDZ0?s6??hY;eAfL~Ll5sdyq0JmX04f= zeVFw=hGCVEPx&j@Wo08aH}YoYrTuZ{0H5{mC876e+lMK3REBZc5xjQuRYE68DCVsCb-l~ajo4`NkE=_!|CjJ9WoMTa^ z_w&0LT7R4;HSxbB#-&tET!YOlY3vK7d`T-xw@zpC;a{iEq`!l{G*+!#>w5 z{oTT_&h^UOpY06WT>n$e`$skLK_2aA*ysAUc-)A9or@}g;0ps1wSTGbn|s<;yGHD-?}26fo{g@y*0ko>#?)y8rG@x-qcj9G(P?^ zY{^+`lU%4$8;liGqrQgP`1?(+J2%E7?q!}^;x%dV*4(WWPZ`_NT-UVv#(7D*Z~`Q9 zcf&Y9#L9d5^wTGrTdjgyeAm7 zIHNa;yy3rLwS_qHG-1y!Y}D1q$zYFbx9o}gbX>#<{+Q>g_p-=c8XwGxZd@<;TE0T{ zJB#-$rz`oVt3GIP-7sBwcdp=fxkyNN3ci+I!acMq0e}21A;01u+R3oLX<1Ixi^5&C zEkgdVK)*x4rL_uecM6#1PJs_q%AGO67j-*Z+nAL0Ht;&Mvo(%MDK{Wspu^miqdf0c zvBGhUGFy561;Y=f|Bj+F1^#?Y!2Eqhz|xJWSh|u;#nP4X)V@&sPfOVhXI$Zlw2=FP z&1N{`3g4tE757{U2>9mv1bp+K3iP>;YRSWJ#^dz4A7Yw*LZCk+&_5^Oqz?zai8Q2}TCn2K|)dqu_9)(xq6!Me9q{AfK<@wN39 zA>A&dw-8dSJcm_WT7$qt!-(3h6e2tqsCiNxLb_9JdkXBYN|fjORDZxJU8+Celm~gb zf%!JR%D|r=RqsruJf_}(Oxerx8=22zn%~I$8OQ1WQK0{pK>xo4`tJzzKNRSXs`OJ+ zRr;y9D&JE3)jmpnM(v~2w^f|$1WawKnkTJY#d=PQsyM%CkE$}6#(im{Kk2l`RGCcU zKAvg%zo;^4Y*pViZsqa}duro->bu4s_AX8D7v9~c_M`ED+IOZ^YM+|cs`O18RG-bJ z29>_4S@qv+3aj)@4+`)0@OKZv^TWcs++R3N-zU8Lj9RyJK_{duI^h&N3pycP(FvF? z=!A4Zp3|$0>hQ}HIxughD9#>R6U~RGlC_s_F#kHv;`Zf&T9W`fmyJ zF9`JiOQ8RbK>tIPzD~dv*ZT!*ap3va6+H=Za;x%eQFTR1v8uyUR;j#AX;I%zHL4im zso84&REMCu{KE6Ff-TPU)oqF{GOFVu%_=-!FX*UQsvbzo6LeIOst3}Xsyw7s2=Csi z>VdT7!n=2=dLXS?YT*@6z7C+NT;P6uQyy+qJ~6`T&Hy9GMcD&NxURlcPM zg!B$Ion#C84P<+<@@y5-=L+d|^eE4tokIFDLT*={3xqr_A&*DMV^Gr9!A{m!vkCSq znY zp-vkq-AOEAiQ1P?y9%_U7{~VKZpChg=C39aw^uP<;+^J8y|b>?_ASLDTVsRI*5qyW z-s6M4I6VNj-Q&Bbv3av{5{`BQ_iUZSgfX=GxYJ z>u?8eYi#m0vux{{VQas3Q+@qrdfu*<+0@)v3;S7wSDdh{Z&AEOpTEZEtF@Ki>RJ8u z(y9py`_%6Ds~;Zz4kyK*C7)?eO?=NEFK}kS#r*?Z zo%nr}%uI-j3a&=@B9`#^l76q@Xa4auV+Gs$&@<9og*7A0)u{%aUaj8eCtHMfTlu?$ zVZ_GYy^p_(|N4}7v5FhjtNjz};5j#b3``WspP+*?h)HV~h&orfQg_hoUc5{?2l%>!^`id>#r|*BHVV$ROMP0+)6WQpjXx!9X$9c5Jd@C0 zQGVW^uF+p#*U;-2hn`DAZ=XOfRiM|9sOQM3$>}+Yi}|fd=(#HH7wxhM^qif26Z}l+ zIU`ZeqCH&CU2{o2N61Y={#2&3gx{HxsUc%TpMHB@v0_n+_OtRO2EuqJHuRrWz?I4s z^kb%w4y&;YuKQZhq%f}jCenR3&AZ7ldEIx}+gcx9{D&*KtbLXH-?@|f_``1w53+B& z1kWK~WZ!DZTg=y`WMX)M(rjj*Bf*%EV813cpouW^=_2iB-V_ecRNHurp4?!P8G;{^;~K zvU5y5%wKvp^DU=`y`%mf2tZd4b<=mSvqAQT@9R-iLs7f&G;p_Rac>5MY0$msv0n^_iw$p9=djE}kz z&etK%=U;KY|1y3l*Ker9ud zGI3w3Z*h5hk;~t1E{_2&pLcS3{VJDVYHuRT@?RkQ0m82#{0zePAv^@39YQmNY6#ze za5IEl2-iR`$@1t25Z;3DI|xT0{20Px5PBd)AT&XMcSqe2oDd2i*dUl8K)DzH3gM3s zehUHKzxWdfQ1-=s2we~Y5E>wOA*_I~7(yWgsKZ5|bI}69D9f=JgkcDOg7A9?{{aE$ z#h!(50K#4fJ0SEz0J<@#Tg(pu>K9uN0qPjL6T)%`OCj6>p#*{h!c7ovfMAC(1HyF> zra`z0!c+**me}PG(jj17QXv>1=ppDJNIVeXS;v1j@cc&p{^gwBR8D^yFK-4f{{~(k z2e02PyuQnM{i}I@v?<;seH1K}u z;{Eh}-fu^EKmL*R>nP#!_=n#3hu--3dgCAKy8n@N-QRmpuH3DGy@*GME^6H9`JCP> z(W&`TcE@w6d%pRJ`BGjPCtpS4{`j(%$?cCXLwnm5ntWvJ{`m3$9}lKW?~kvrihIxh zrTwwit~*t=y-(SFCCfimh^MF<%NoLkiwhNOgj?2mmHp<#JI=X|f{(G|G$rmhzeuJa z;vN6m=EkpIh+^mP5+iz(4E^$5yoovm5%4Hl-Cdd$`Bn7(eC)o@GG4=rH)RC zWOines~zX$kq06qqccLTn0-IV?2yQnb=MPHr)Jyu^VGoK!{l;LJN!LO%z4}me50gv~-pdWANcMmIq3S zDR7m}@_?752mLE859}dd2yDK_Qkiph)N}NW(eBlR^sXj`-VibN?jjl8yNJ2>1!9R_ zM>4xZ#2O6|TXYx6?!J!Lqc4!$?ggYE`UaU>x|8&w_l{tWqo8<5lB&;2Qt*05Vd+*9 zKyM7_Jq7YQ=I=%?*~A`Pv?6{(9%wos?eQ?^RR=sHKly3SD!jdm2xs_J@#CVsX%WtX zDU1AwVkmkZh3R+4IHyWe=`D12%NO&tFa$)oo_{4BLiAYde?*r?l}kupR3vj*GVAa+EdMO0d)-J#c~GnB{Y|2pU#AP2(0TfCthSwONA5z$B= z@*&atA_?E|oViFrUgCT#MvsAroK`t2?cV$@%IhlTRZuzxf72n}0)O@J*I74%Tvkvc z%YmA!&67o`j(f?3{0^AUC-aU{$H2FzZ7zLGK7?&ik;tSl^=^F&yPcoE6J+I^a;&ge zmP7l|%MOWt$3!HK&Nz|}^D}ztpq}LrnY$Bs@J&}<;M*0JjTIye^5ze`{Ep?0veZ^Y zP(x(Rz-x0X=>5$32+55sAjO_1(IclELvNgcx@ms&78B|$aAFzG0r|ba6Yp5iYgwqh zia2-3F9)~3V+rj<6g9a|@$8_q332vZ)^lIXG6vo1|io|jeneL@I z)SD!F4hk-2-XlYu4n#8>R>}<;i!7lBY!o3abk~0l1_#zyg4=&%0oe=0c}ICU+M?wh z@XLl}A@6{Xa$$}f`%XIW&&2qr)SuP+;;<4|y`Z9uUwkiqx`1EwL(|Ypz6E%@3}n>7 zJyuaUR>n1?7bi(Cj-NPaJnLe5;^_lJf#o;-t^B4x%A1p;XJ>N+bHUq~&er<|DW)jz zZxDxa(!uH>9TRW_P<*m0H^0#DlW0$l}p zfxTBW1)j`ou&pH_PkVT}r{>TV;p1`)z32rOec2MMm<3^urQ1aaEjI^vX#^Q*r=G2v zfS%p)eWFK{J}4v8@k=@8SS!c!(}@k_r9BM%fZuiaJN5o~{3gF+n;Z*t*&3i8`oLa$ z9@3*_b~*FVt6}h#<-ANehGk+|=)DkmK*vF66~>JapUe0|QP>OkbBF5jlNc$gJN6&y z1TBg?yn}i8d)&*9d<4@JZ#4W_V!w?B;q_5uDQniL=EP(zpQQcjY%7G z-r!m1o#^VlXJQg)djI#h%KlkGBGBGQC1X$c%(&{`A>1}rPUMy)($hI1BtwZ?l1T5$ zVtz|+s^)}mZ6dvt?Bq9&iC05!Shx*s6zFZy(1RVXt||$=O^NiTSh(fqRDKGn(A$|v zFKu|78|D2Pdddy!sho~N@A*V}#%1H&D1Syn?|?w>3W45hi54S9v_8qv(8J#^B<>WA zznk1n(TF#!-__(xwo{zTZwXp3GX75S3wTRlX%c$>+b5}FJbePRGcCHASrflfy^*ZT z80Tbmh9;h?i90lLrzXCH{n4G_C%Lyza6@;UaHA00%Wt6SsyLci#{@TUf2@fg)5KrB z^bK2jB2V}Y&kTmBCH^icw~(tDI+|3N@H^j-*AVS=5x;a8zrB|9&LK12(M%|+p^pL@ zrc5j2%_ZaBt0R`kAg+}Tf(~+1dH|<=r_S))sn8>K#M;Igy*PGXQHCINppqtGU2&O zZI@2SuQLkIVKu+5Pso2r$a6w?J}IEdWed;6!t*NO*{;$@4=k4}&rr9i%5y!ac%{zI z5%MMFd00iC!}?zn*DdO;HeIHgUnksZ)47COd=}wW9_Z?;l;=$0CSJCZjzg|)?b`T9 zunEy*ZgR{im^_-yxrA?E*(57m1N)^Jh}ysqEW~v+LxCq2o+m?D<08s9>{&=~MujER z>84(9yBE;Cp&{8GP@$Q>jYx`Rn~2b|(?T$2wiu0alqYG2NJ8gcOO(8+o1A zoemJt-GZPFVhD)@mvt}2`K+jH){uix!Q z_sFg_H8pD$=6;@g?z!ild+)oq&(GO&8u*k*_O=}2-sUHsZ4D%MTa4sw8=&XbV(3H3 z))-KrH}^)m_IrxjJ5y0VovWzV%9Y5}YNg|!%3Qv`C(q-Vvh0sUdTy<*`+7*0 zw(i9E(sh}Y+Dr5-*rH9n>?((Iyf%3#0B7W=_IPaoJ(I#2G@yNOq7=VT7~TlcE3L1S zxM)0n)<}~~kBUc#HhqXh$}YQ>o*M6fv*bZ+2hM%b@^>MBCq;W}0a;eWxOcox=zAyh z8@*(ALf_-i_jnF*$D!|W=zARc4rjIkkbN=8y#(a$HDrj$cwB}fATwvgyHEjnxz%-W z?vFtkcQt-L%T;&I#P0xk>O?u}K?%q>3*_qp`DTMW3s9c^K51P2kGYD!R|@7cz37F% zb~s}$(B#k2r~2?)Ey|#ge!!duV285Y3C96gDm zXW(sTiM+KM)`@E3fPY!3)`~RW?e9%Sj?j;!DVJ+0*AM({NB$`Kz zw+$}22lT0Ovnzfpad!Tz!`XR{%#cxrC~60(fO)VrhsgJPSp0rM<5`GGW!#NWM73e+ zL7kM!tX$~=c3;x*;5G&2RXClZSxVlhMAs{{KgRtDq)8oney((!eaB2gG=!*Ruiq1W zOH9Wwq`MKF$w>3}NMAzS&hs+M`$?veSG0@BUV2|-zX*9Ykyhe6csspAs7S=yXuKd1 zUrpog=qZv#5d(IT{V2o8g>{N{qYm<&fsBIF8CDG8FW+z_tX@sjgPu$TkVg~Z?m*bXlvg_eWHr!y<9fFj`h2hjuo#c z$a}fRlp*BZrrr6Wbqp|lYLd*VKT-@&$NU>P{wk{l?4AebRSfjH6ZD#{=b+o2p!c1i z-<_b}u+~?=TJP%w{RZ1u3wCi4*u?gyRc**;43)4N>tDXn>Uo@A}Rd>i#CweVZHm3FRDE2m0?w^c6hR=^t-t)=1sm4_6dTCKI4%I_%5jx>=c(m=}C9lOpa0n>SQy+iS7B>hB?2 zRQ2;WsaNlJkGlAp*^j(yAy_ZgpH(_C<9z(+9`_s~@@lWJy&0Ah@1{Dcx6!};wj z@!c$~@fG?va&{g4yHKAX+Dp_Mc$c=-OFfB~`k;?Jx)MF*u3;z}u&+PlbgC!6a22g* zdut58JdfD7pC`7LGl5>k=Wl`ytu39InMKhyDi^rG-pV<56RqxUxdPg`8f<3i(a&XP zY_h`%`A(?gDD&ug*^sW66TEx6;w$gBQgdx17bK_jl%1CZZO?<(jyL-ZUS zh5AvTNzWEQCwiKrE=qK7kd1RG>Hd?~MP2;A)aU!;Ex0bhI#UBYx5HXf3v10HSZe~X z)&ya#Sq5v(a#(BXVXX;4znh@XEwJWLBu6!jc2G_rXVLW`n!G+#46*g0Vw9~Fn0~*H zubEw`*NIx=F0xb3#`OVYooCE5eow8WS$}7;`*lXcxQ9f$4P@HECi(aoqXz6wE$+oS zp}$~z0$_WBap*7Dp5cRGeKyFPSvlft9E6NP%;o1cJ8 z18_dc-vsBgoy6G;x~Y9YMwXtsWrEtB0dgPKGs!xRBXKAfI0cE6L_{p4nM9SOg zQ1Un78OJdQcF0kN`v%sY8`>)t+cS_=U_Vhzz3KPa3Ze}pFB)UIuSV#8#2NoFao`># zzLUtE|LJCWv*Yw}19d}POV`p-YzMvRQ+ss&9RrO;D(ab#?F*1SsGU)J62D9l+vblmUOEjVy9Ki`OFh#_o8 zD}CQZY4_=ahTZEp{7Xu=>^-(`;_~=z$FF~>BOQY))t+tFK7!AM}mM+lsx&@9(98a)~ zGUwHfwklayNbUga154-Y6IdSGg|QDjJxkY%Hb?ECD>Z4_EH-Q;ANvyM$Mb2*W*cRV zeG|@0u%j&lIrPpJQHjuQ<@)=$hy4hB%W<+iMzYJ_qeukHV852(@6*o-`3G_B+zn@c zkX1IKLHPRYL(rxUZR*}3qGNrdU1R@?-zqrGgk3a^Vu7fs_-mhNvlTPvCjKi=BA0Eg}gd363YP@MCqFbcj0YpKk0k- zT31n&&W9-KJj z>C-n;6}16vlb6tQTGL|+<^z3M{k&Z9?~oKpiZ~1(tD?--0xre>;w2igDI~ zXLtTCw1?6;Ll=1+A06XiI9Huco>O3RQ=#nLZrN9KYv*CCW`4-f_cMN_XdBtS3f3Cj zH@jipzL1oUT4{mzGfS17V2TLy}G&x^_S<9>+D${Ic(?>%vEOs zkr&?|yn3~GAcyX2B>YZh>|qw_m(Ove$aDyd3kCZ@nEm+gMM-lsdG4BXn$KO(wRE;= zYVz58JQbp6wgttd3G7G#^u?|10$qOhN;h3ca6X-9>q#wJ!`%!O2fvZ(qo{LytuGYk zF_bGrPZ2Q*_FIj$#V}7?C`*_#PH!CAe_fyOeh&YR=o9KD`)mGQ=}482L6-0h_9gMz!8p!<3yg3U*uKozFdfXS6{zesD5y{km|%PX#!+m zgSGJljPnrK7nyz&1v}$EG(n19q-)?f)OT@&)Gy1263Cezpzk!$daw+&i+!~|-@$8# zDZeU!&<*lYaie_TT;#m$$G1VK zTR5JGr1jVQF6ahPfl7??>0ba5DDdY%1FB|NE6kIqr@^x-yw-!4U>@pJHC*6%y1A_l zouyQ_E1rfmPd>w+0nKY@ZV88yFi)$YiG?9gm4~Kw}w~I zWCjjH2n|zjxdk3x2Jf>ucFfx5P?oA(bCX}zn~!vc&Y7agbuF?w|Lrr z+8U+=Lg5w7tCCt`1)JMwHZWp%stJdP*thnkFaxOZJl%i~79j5j?Vc6k_QobAo2GE{ zlT8%7=lVP<66Ot*dNKAuzgohSFtX6r*s!Vv*z(-jOn$Vc83vMhzqyljnhjdW^V4v9 z&YuUm26clv)@@z0x=~D{j}@$mZQ<}!*0jc!)os@oY<~8-G?1P(>6ulD#N-!uLCCFI zTiD#TrlGJnRi^ie=605SkC+YWPA`lfXOa`MFqyiIPK7apB){>U-VK)d#saBfZqigW zEBrr0vJu}a8E>O}mU1;|Ja^Pt%56`LI6|6}%SrCk$Qq=>QZ6@5xgJZof;8p!SjweC z?)eu>IWK!Na$UK%lj|20^LKYMEJ!vdlj+%1_6xb|=>5BeUIl-vHN%2rb0wKxW;_2S zmX+RrS?Klh@tBc}WFt*YrZ>q&NXD`2=}EUH)0+)DEL%6HCnDKc^eStVdCI(w-Vc)L z747B7M>8x)HWnnM@4NxxP4RA1vLGoHor8Y7!Rg(W9(m?=N9uQ*R^*v`4bL_+EJ!xb zS?JZLezz%Yu+ZBp&=Zkt{@Frr$b6HRMDKMAy&-{~h-5RIOmAAT_@+;w_nw8`3I2|D zh6TyS@~(8+0rtiyiJrvXaf$Cr-6J=MJaY+>Z{S^NF7(0C&uQkQe^+{U9z-+#0`E!< z^cUwhAkPGCsehrE$D>`g)Sk@l<54*UG7Z|l2Zem=JJ!jIZelz(Zu{#%zIl;G%tdgICH}T0{vnU{Gh`C-i6#G>C4SKo|0Da8af~6C zNVepB=~heJg0v#dw#0vEi9ckC|JV|L(h^_AqsJIhiWITrbL5qqmN6s}$s!-=Elb?; z4p{os5+Ad~FDJ)s7J1k#@~~NucWfn=xaD26?QbmcM=kNEEOC`bmoualTaP8*cn4k2 zkXLL6Ecr)yw3Q*P*bL;AZi=)*Y@b=m{~;-EJhE&g$)^F!IUxB2VA=a8@A{MW`<9*l z_1pVYdwS!Ma=1Ovtb}j$C9`$=pZYyEdxtHY2h7H*Tbf(xAr}I$yZ%vYcomI8*1YC$ zODO5NHm&rK!66o-^d4N*xH=RLJ<`4=K?|g0L0T~m6DAefblO7)(s{^WLX6aeS2V!6 zH5^L+F1(t_0Ba$x&fzb%L#9B3FrkHF|B8o>l6 zIex-T$~6*G_xGD#mGcu(T0j;~BN4t4;1c%V$HE)rK{G4`h44i)Y*U2r2@^fUHfDNS zwtLMoc9FhYKmb`x$X&*|y9AaDBMf%qE@M6a38Wk076B#XS)pzRuj^&rJQH;{@VZ{+ z%`;IqB%qVLAb6FBecUYu&7-CVc=B6FH)#HwfFANYSXPYiDF_>7&Iq1HVUPA5Bm8^w zJwEx0^BiL5i0PSpKXBRfFi$2-bP~yCdMTAMh4=fw`*)1+&Ah)McIKerdUpOxpo$cm zNGMW`5MC~XTZQoRLU^wb-e-=ZG$e#a%&<*BU9lYz!Y76Bn2EY#7uvOV31NYbeMAVK z6T)AcbR1bG4-TJ+V*--M$3j>@QE`k3;fn&Q$V;XkX6)eO*aYD| zQx7v<=VO8C`vg5KFuj_SWde##tDuwHh4g(wx=+yIhXuV|Ea=h_L2n=B=~0I4lhE50 zg5ItabbgJX=YJ>Y^Rt2ucL=)OY3f^I-eFst1%3Vp0d1#8@Vfhwsn2AGsn4W08NsJS zK=4V-{bAm(UN&bFbN{!ThhFBzIU(~g0l}xnq$!0=bQ@`l5Z)`4IU=Cmc!ltC0Rcx5 z>|vLHhBIiQ;n*F5ZOk=w$zEdCwbz>T?JLaw+E=pvB6^Q~mDykW8rEN$u9|2&_BVyP zZ}GZ5hGLhf`!=tO>Bmf2*}pb1tgs;AuNpJq$Q>tCh_?wbumN<4!OkSUk(VUI!~Cq$t(Dr0=q7+GL7%FFVwxvWp$7puZ_Bs^GqHl2h6!V zrNB&|qL}iWvfV^Dnj-K#h4U-{UsD90r*NKW`U!Kc-6Z_J?Iw>&(~6QaHw{Y8+*Ifi z#U?r!$uki~NQIDIYar3!k!E#kLyPglv2Xg_n0LqB6ac*k>+A)%iK19%e zNOX|Mu^N&UJxrXjT;lTg+KIZMmS`CP;@>WfYtxqzUl+Mrr#j2j&3UA}SHBv3r+AJQ zKjTu5%~kx{$#QMSS^CzdZl_$aej0H^aSazbGu~rtg|As(bVCe$&}M z3099NO*>gC6Ulpl_}Du>eT@DlV%J6VD{}z-#b}%AG2Dx7V|$Uxg=U+P$CRZ*Vw*PJ zrp;(`Fwy332w`t^?OPIUZuTMVG5Y(hU1PM(@>9C5^|3Z18yXe$vp^tn(|90w!C6*E zJomXT5PKxEHc%&LdsQMGS1*(vkI4Sx>S&oOGO5b7)j_iT+wHCQ6HO2H=an?bx?cBC zUWrPoTuiNvd1<)5-23oqcZxWE9LwoKbz6;zR z2R(>`4#YtR;-CZQFU0T@0(`p-Um?gNj(e#LV|@t5x*B+YBVP%glq-OTp!V2DRQBt? zhjRZ4`3^9gWEE}!{41tRwP9~Gd>Q240((}{#;FnyvxZ<&J z>V?l;(m(mkUIQQANbqn*XzcPB4rwWCXW-}9L6rSE?L#_2hwEj8C| zUaU)c{xUBOd`at!j#BINsde6!u5*R-@PDQ2+`A0w+(hpO2i3VCQzw1@19B?;{+saq zQ#NcvvYGncUBPx>{n!q~R_ZuRSj;DV@HyoD@}ksA^K!le1BdnFHCrACNE_)ho9{qs zKh9a?b)fGD8dmIU={Tj)qn}?m-=t%ohjEVKT+`1pD97iTYrf7@C(fH&Y@~U+A@A;0gmN%sG zFZhm1%iGc-6Q8_b*(@y>-q=3YvPF1ye7JpyrAzWaI%e4|+2MDOrMvy0rKkOZ=Eq?#Ir(=GWNL@5fcO(UQ76$^OuMu-$D=|l|{p_^RJodC${0=W{ z8pp@{9Fca=yg_jtr8Drssh%q&HE}uBg+F}!lO*(fzkeJBXMvVqJ zUHmb9f5~$uAXZhKF8c$tqnL0Zud}p9c1%NF^1j0nw`?Mk=h$g+;>@IpUX!kMrJh zq^;~+L0jbF&%==uuZPipNXk1D7B-C!OMPF``6j$HDcpP;^m$bE+nx;@&EV9Z;{I1vorh+ zc^pzF=q^x>@+;C*=*^e5(fc!z=aJu$*OAXr?n~S0vvScF2w*=^nv`DZr1)4C9hq9w-1b8$B@c)=7hVJ z@S2~l5K(N_@EzfPG+6<14*e%96#LV*2+;m9jex^d?lLWO*Jkup;m3b)C17_Zdi!0d zyH0^^hHtxkHd8+-g!)d3ht_H~x^{|>H=Yp0AfS41L%&P4<)!uEeVs0RQKe%=TuDj; z;afpu*-`rA{^RXx_4*n+-VzNtdd8l zU3@pTgSG+M@~3PE#c9|{IL$|e;$W_#{Sb(`RIIrJ1JvFyZ9fb5rH%b~pFmkwD_heC z@+VS-W5^`_9mcc5?^1kpA(|g7JkiEzrL<&vqeVb$lD9+l?~S<;YD&XG%J5#>%D|seuOYv zdgPQ?Je7ws7hz0K0?oJ4Csr&VC*5^s-`0tQ-D;Loh#?8@!Xp1c9i}mTBu|gAi0!U? z_d3P%L)+~1`&GbPjVOEpe8WX|DSa6e>Dt;H6${JJZ*cM^v=f(8g1MSsKLehvC$-T7 zHXGVdL%Z227AP}OPT_UPxoSY#=p>#BKpR!aRrs;kA}r>!+tu>bff%_?oj7%7qQZ)l)IRP;)BOui7YmXr4CsmBswgji`^oSd0N#DX!sdLozVrC4|AgAYGdEl3F;2(Dk^3RqB z98+494`ev@)IYdO4r{U=_D)gFFT~@Z=@K0O*koeGyvPIF$_YUp_}9gRz`qIpS@_SB z=@c0u0Ra{v4o`j$9|8T1||(T93Zs+Z1@^UB6x=}cCN27SJ!e_ywB~x)W9273Z~3aEQfpGmYO~ysebh|-Q=WzL z1qqbFl)uD2#DO-QidB(9dZx9L*rRF9*N2EXbxad+S13IK|*-!WFQQVu~W)I-L zJxCnWqTR3$i@J$uDWUs!Xj`)s#d8SelsExoNb&GSv6$IHc@gVeOlrV(9uL1ttQcL2$BG$x6VvGNj z@UYjsSRR#R^dqlrhCNiZvsAQ?`? z^BMK{(}eN9Ntnv@pm*I*$h;kPciB4N#|0f>$pib+ZJ@vP_XKJdf{p~^0lZ<7obQLF zVTZzdox~J+*zU%C7U~wNe&dk(etjDKc!h!suy^@_7y3M~|2BcF_M)C~0{N-T1N*Y= zuTq=??-ppoTEgNxLOQJa;&-8pOPa5;NpnB^r&!Tx+J|ywE9eK_YYIlP^sJwVPV>IX zodc(mzawm&bx<5n^x%UB55Xl!_~Py^2?=h&U4y&(5<+lU2*KTgySqzpUwnbZZGlA= zSm5~8U0vNDS2fb}=Jm|gsXikZwH^bPf$qtUseeg-n(2Porgy$;cMd_ENYtNe;-8jh6YTpKaKGAn!5QI_cRO+qQ z9%I}%EG=CN%n>S6|RwRt9)DE|#L0yOExhnY3yA-SXw8hT0}g zmSyQVyqBE1>uZxwOWB>iz*9m9wY;&CIi7z^J`Mqu(==jOHC zhUjk&ZH)1GI)U@L_qunJSK(tTAL=QKIoibZ8YU|Y*u!37Yt-J9bFh_^4(1D;5Z9yfxX^p2t6Hkbzbos6? z48^03=cDMcUd9wzP>yRPofrlr|3}WDWUge1A+>~-9yMyV`UI>){cZ@_d)`$~mGQRy z40}r21KWK5lJ8c;xHXmZ7Tw56;uo#)M9e)mz9i{V@JN`~7GGJi#oz7_aP==zVhNm{ zq~0!Tf1P`}?Z4txjY=_%)D>*(BUcNIJA_s)2LQE{p@QGiupWYx9XqEh%PfMPkwi(; zJ#L_D>wmO?yFRmeLbbXiHmR+H_B~30rDF_%<%6mDPLJ=__6NMPT!m!T9vYiPE=)2v zyOAGx{Fy(LSfb_l%mS$JpWbS)3Ci>#-rg>EF4tHzP4AJTpH)@wUs7F@Gc`$>3DTtQ zO%?uf%#?pSgqy?N`D$8t+!3GifueNw-3U5I=UQFb4y*GtKs*2aDTzjP-8SmW4f<#;_;rrGm3us4v?;jArb zouG2O;)2ax{}J8)_l_#$j=2w!X(|W%}7bEdW4?N45eBAdeYL?ZDFFq95 zrpk@>OH z{D|*=a)k!eZVPXmoMUNC2A)5)%M;oKYqt}D+Vt{ibge|^di@j7m%=>XB{7q7IEKpN zUv9cNh86onj5{ngpXb{!?+Nt>zT#X$ZB~sMk$lbQw|SSNl-sDK{;AcC`~U(xg`WN@ z_QBcl4kd$!5R6QGe<-hn0p z34Iou{4iUiPE?j+ia!&_pYyO<*$26${D`PmNpyi|?HUU?`VN|%9l z$ya}R-s?2vbTijOD$(KPLVMc!#x9diqCa6D_sHd#`;)L&&+p+T^(Z?qkDh?{nnd`)@d}@Z zY}}%bwXfuOLbv{D3%bk$i;TgLv|0ONgDJi2aCK%D0}X%C3!m5$W!raOz~Z};Gs=}| za$H!xA8OZ-vc`Niz3mI1iOlnHj8n--E*C>)B_wI3wFm~e%hcFyJq$fe;nlb(%Z7)3jfi>>>hC}SQp}oPiK2~bOQdfB*&h27=WPR= z#>(oJNq_n7RHw7WqzpZIwuim(KR+qTV zwI?4wSJEOZrlo`Nx|l=OI39K-%nrKI@d1~4Z)Z05Q`$&V9T2omaW&8OOJ=h-y{WT_4*(?Y ziTFRkgJbQaNQ7_jMl8tCMuf38KRwQl%1NdhdS?5DCFFn6&G9wuU$~DslQ@N6l-bHcxe6@mkC;t1- zv-Tc+Xq)a2a4{?^_qaW#)Jplv$tWh7wi7!;RpV~l3-hQj0f<9`~AW3dG zwsE>@xCOQoZGIwaaCEK$OxxA)Ju0f*e|dsJ)E06w&;aaNK!~ z8Pe+l637!?e4@Xj8Cb7duF(5|DX2*K&XF!C6G12<@jrcNf=5Kp@kDE)vE;^T!H(JU zccmPm8af#3g&y($PLZ>NjXte8&^UJU61rVvQvPWFoSk2dDI%B0zFev(p^ho}Q^Wae zG|&Qf%ry-Ev{FdFfCcucqc*@aw);$1GINRCryFK)BU*yz`ICz6fY6LGD8EeybxWTk z>HJqi$ds(?rQ=|D_b&idPth>VwM|)2I;6t=i$GildVs%xYXLf6;U1HG1QIpXPoCKJ zlaobwjw?+yk{sD?e%z-XTUFk4{0ni1@z-~er>bRUsv3ntD|bBkgW53t$yav9>1BoY z;78B5%$R4a+orYA@le2IB0NLu%hXzAq*I&`g@W8_;cKc{*LD3}4oU{jEzxiJd!a@v z)+I}TNdL-JO}tg&z!kZJ{0Y^WOkc*@(0z;}rI}nb-+E=qovn?jo1U3q`wuB;=nE0oss544MO<&yms94dQX z?H(%{_nFFB+iFWhmCfDm9{vKmpZ#W7jTG#ESEZzr((Gb<)yabweQHQ^ z%ouQ-u$n}?)*?xz<#v9aaHn=|NZPQ%b5=arIv=(p&qX3+0D(u?npTcyF;V7O{edzn zXHN+P77SZXXRpagS?vmu3@?ul+iN|Ue)P+9c-{TosiV+-p=PBi6rK(8X*yVX)1)z8 zl#tGPOFPT8ZZ{RHGcDp}^d@V{!7v`#ajiL^)#mWVsY6RUgACx{=hko3o|=3gV&19q z++Oo@Mfi?q?I4IfDE8mcZM$EDbC>x@TbQbY9NP}_5EvX*au!pK9Gol5{eB?lxatwK$k^DTim#T9-M1&Gw1yD&=GoQR+;=J zUu}4GO?2&x3zYYbFRs~rP5Bvi3lh$2y4TT|H+(+E?Lh}Ni?_Ni$es77y#d*8dfG@W zbbB!CqC-5K_9^+w6Cb7jm6L+fhSn0;K!RTwQN3 zpF6&+-Al}#OJH3lqP&xG=Nilnq}b_!C)$!$hh?l{Z+nkR>8^EU<}s2+P#o}-rUz2k zci*Pj24{z5q}D#2q4dnB*e;_+EeO%hZrpY_O$VVz2?aO!KCUq8xi7+Mch!23lmuxy z5#9$Hdb|imcJiZN45ryX8Nh+xodfbQQxH$f{b&7ddJjwi=5{W~Db4{FxsnFzMgkbk z)wbj#i#UX`jsuHjF3CpB%;7AO)Xc{NBhb3xl6Qm3vsT-Pb9e=(!!HsCWs!0hyrq*BWTm9SU-f}#}siMi`TNg644NshL&;K|F`M2oXn0BRT za;6RKt%DVKjLl`qCj?USGX#Cg|Jo#LY)+oy`+f4^`|dEr__K5SVF!V9k32iD_)oF` zYir3XI+}ujFl^q4hICXAYp64aWp#;rg-k`W4u_&k7}T91U?GY{5VjNBnIoVjBZM+l zu02>QR}^w=6CGVefj{KiM2s{(lc83u{BPzzO3~jjBeau>6l22*3ktXx-YBGh`N$frc~sZ>X|Oeq zv?#GxwAtY6Rfy|sfk^4mEIYsL;o&ShPFbNr^ZALmPz*A?oQ#!oG!~mk;ol55j^jkX z{&WYWO^-h)pYoI3zrJC%*7l5Gu(=nfct5ouH+YP#SobmRpzBlz33O&|JpLy-nf4B( z(U|48#5`H?rFY#(+Q-Ust+~AWt4Mqy&WXF*XaNfEN@sEF-0~=^s_p4+6@lIQo|i(Q zYKO%MfBNR*N1c!|YrWm2KPHx~9U_0cLPh2v<>KP_*j>A<;?+Cn2 zXg~RU+!S`LfJQ+^&_nsZ7rGwG|L^jD75<+B2E;S1la0NKuQF?b?Sp}vjqT7`K5 zHY6%1$KY+&<}EYpM_Hr>BfeUFK}14i!Y}d~fp0$7mbEfa;$yr{hwpKsUT*g@JA?I# z?uU3yp`2u3>~qEGp67oi@Rf5+UflSJ5)oG^&Q5}DQSUkCk>}3Yi@(O)PWxf`!f~sB zDeFzRR@!1U+2hg}E9=9*M6_*ck=PMT&~Oq~P8zmnTK}0rQ3s&IJ+^5A+7ljIjD{Q#{ipQ#|syQ27T~a`ek{5c9Yb@CPv8v7&hc%c-uTQGt z#{i-tJ6N!nrgss)3xDQH;748X$<2eB^rbxV2tJZo@brW3oA$>yj3yY%(XbKV^(Qdq za^PWj-+^KL8!Cf_Y}*Gs2K3xJJBs1wCY!H!PVWK^Q{SyUjaR7BL-oK>SCkuZy^-B7 zU+$Itxq7EC%?1My+vu&31E@2_8n)1x&Uh|CAPP#Fj?O%P~mavNf+I^Q3{#(A<)wcdh znZ2)Q#1fOjUqf~09~RJ@GqAcxyW1t@0pd;0a$mIx1sPdvQaCoH@^A?N*DdEdf4yw{ zcT@K0fzXSpnu=gTJaZ5LT+9q5@q4=8_Po5J+mhiMq}x8;NC2O(dycXs_@W|0IoGs8 z>Jr6KNFHGU=#Z`d5K=u1OdRdp5;H*qb^fA(T090h_8g2GpWiV6qAa_s3J?Xs#JqiFyJ<9&RfG27uwB(Pky6h9n<1yCUfH0TGRqp5@` zI$QCUix~`J9j>OwB2F~Xb7zzU<$eW6y$?41yomhd(hsN=Z2V;WW(3;)b=$tR)1Ti)zH zl{kN%7@>lC-k!(AY%Lizi(d~sB=zsV`gcra9pmAbG=aNl@bTd=D{uCK>E4g6aj#m& z`CTB+pO5_?TW`O*8tXcPvpA~IY#bTQ`D3*2b5*`)s)|EWq-wWbuLjp zj(C}H?R()5YvAuYarFlffa9L17pm@zjWEuUH-KAkGC>SVl7H0eA<*vD&I5HQ#y|SC zi_RNv{=3{r27~x3zJ-4&JzHQ9u;(`MZmTV|OGe67y#DJrf1l-n0d>vJ2w~0FOB;jk zp-VQA=i%T4x9KKvogoR|eV6a+^c-MRQSeji9%d8(rnW26hS~TCf6VnwvW3*GX4o*z z(rDVAur%Hft@>j*NrW}$d^S|euPT{Ynzuc%YrNrK^`~%>h?C5e4NxoW`8&IRQ+EkD z$bb1aowH){e9ADFYulVUUPXw-PbFIU9^5+NgOn4|VY=JYPt*f9in${nvmkY$ND{xnitD`_s(5!AafETT3%ARJo`6BR5E?}) zEZZj^3LSHqOoS0tCV1iQ=2xawx`2i+rb&3088nLKhM%wNi`w$tNyfTtr~Gu@M3 zk?;aLqz(x!{l~JahfU1{+U()(hfi}Yrpg9ha+$1 zOc8%hveR-1Wv~xVH)HR`qP~W`#=5Ew(C#4~FfS)QJq|wT{^IQ1hnOS+KA1_a{l**g zunyIuOl=@|T%(nn{=x^3dpO&E*nr=R&*A50^Up=t&dG63Q>P6a$*-HJP8_h9mXgRF zjKP{yr6iu)o;)5b*j5=i5wN3I^qzo+MgO#eX)at`w6bWmy$caVxktPh=FV6&PUK5e zSPGPLd#Lhnt%fd?0H>0q#^-DLy+T|HALu4?=$~9a3`4J;TKc$Z!=b&)Wseq?lNf0< z<3|BkYze(VMVL1e9HmUdFP+}l2SXjBkm0w$@u;&sfJxSdNw@1cY|ipDJ8G#1EpVvZ z@8zF$J;T1{&)aW*GJBA_PW)AW2Xi&b+L0y%2WdZt@%XL-Om@r(!pkD}Fo8co6Tsez(U2Z=VAb1l{ z`Md-1oXXbT=@{t_3KbF~@3C=oOcr{y59E@-m!ya}usMOWOy7=R*yKh-(}TFG3BdnM z>TD(*iyHJ_)72AMzS14o>Y%`lKmn;2Gu#j2f_P0wNp+-$r?T9unirjD{5fSn%b>sQ z#4b?lC}Mc_{!KfzfgR^0xfG&XsJiE@*p$HL?)+x&3Vy9~C`BD{31PdOAPxutt;tk$ zX4>^opuMvhZlzofhu~LJoaILM5Fq}J+^rK{8kCc6#O?8#;@>8^#NU43S?t1f@{;NW z1;6c`E}BNHN+qR?H=d^u5_Qxy1gY)Z-=aG9Jr}|ymVG|n&YN{z8%YOT!qb7`KPN4! zBp38xr&Cd1g1ARaO=D{WessMk?BOT}twT$&_t1-KfxP8Q4W}!F?EqP<;4Gq)zVD0Z36kS zf-hU8UMMo8e9ni20r|JJ$n7nGNOx$yx4lWY!(@rW$dvS%+uL>1sfTY%9fT)mS)#C`fwtWsU!@?_zZa>ZicOBeR0>u zn2qt~?$z9O6mi+~{ub{$R^&CTp}VZ~%PW~SONjpm04E)Q+pIKgKTb77SAXNi!)iW_ zH*0MAGf6^}bSY$98Pb!!;G_x~3|HhV)Ll@n;w+g>HEc8Xl&%>|4k5U=P!TimcE9g{ zk22@6EzdBIuSOsLu6hR^yxwL^v9}}iL^yr33R)YL%VHyU6&jfxXCJb{Wx&AArm_0F z$Eyhv@SNdY0SW_IR*{CZyy6^P#6n)++SxzPDOmr(>kIiX3k)*M@wf{85ZX*@M_EslpkhB+ah~@T9xe>FelevujT-FmfPU<>E8-8kF!e@%Z<}`H=+dCMCLK z~ViMH=4^M^(ch~@BGGn(;^9Y#QW*=_b;iJCjHm8UXEsM)@rxq zH*pzc8^FRFi(S~3nnP@{XoidC#D4RV7A20}&^O9ZY8mIeM1s<&vnhSFA#=mur`|(@ z$Zf^nZAm)D#||Pq%ikBN75{*Bn;co@hb#V=Gq_r{Pc~V-$CPXQlvsWHVV3k0mPSz6 zR)480XYccv6`C88nlL_XLXUw19Sq3_FX&OjF9dg!bXL41LZ5Nz+jU*82l30Y3~~*t z7Reza7NnW-6FgO={mgNtm8V`s3|-$;}inOA2B>I%43SyyR~o{y~}t!pq_5dT*lh#i_OtWaj#pHV0MVDD-Q7jVX?`ozg&N|)QdMjq9V|sM<}rT9XFLqRdHmKjn)0W9~uQ2OQF@=*-s47^#$8Ue${_l zEn@wg*BID8d#Ze_lz@AG^N2q4_`}4{GoXux?$jlH2lV`#Nx?!_1yvpTj}l$oGZ7^; zRE*OOl${c#1agw8DwX~I-%1M`o*{b6X@b+ZEjwxqkMVZGk7QvAsw|hyJbtw)8@HKg zYfk~SZ+mlDN8JQNTN)L(*9A!xd2dI8lBI{SvZyZ2SCRU;tLuZm^OsW?t|ZL$6`Yrz z!zE+KKJ2;UDe30$7TRO38#&69xMMMh4|T9Qhsl?^J+8Fd<7TEQXGAu=o8I5IUPbm$ zoHZ}hiOSV`ns;8lU7`wl^L%%Xc3DDCPJ3RArlzRSo(tU()KYF9Yw%5HBThmz=l@tE z!IY0SBuK27{ZGJ7_*t7xA9Y-B6b*a4QBr*t3IL%PX(w+^cR{;TrO+oVs402+WkPV@5pY}lc#ApCOVF@E z1W~k;MgGOlP51qcKt0m$A0$-A2~x$el9co4R)X!E&=9QjX$!g8E`=_}UIdv{DY-Obw%irI=j-u6eOek3oGsVy@JWZ3bD>I9YPJ)djzU z-GlNF?s*8N5O>48P9b$kBIaDIKQA2W-4x6(K7lLbM9em5V{IW<16o+wvjMw*l4yiq zo}};7rTz5tIvLeXD4B&Y#@3Mcf@7nQE$AG9~4aj>m zL&>QZDW5Y^9@ArzR2!agPSmOum^4Hp#s(YXeQ?AkMR}we7mTYZbYd zj}8oBMOXXV?o4_X^;G?@gAX;B#O=C!&(D!B^H$Kt--vXHY~}CyYkCHY>P)43-g(PT z*$WWXv;Tf-U#@OC&^L3-g%klw17iknT1f7+puPOq>KPB5AZAJr&Ty}oehJ$O9z-}a za*ke;`CvXD{Cq*X%wG8s5DA_5d$f3w9l0lVG!gOa8qP!G7QclJ7O_mjzdKMim)t?_ zBklHB_E8l=n1k(%IN{i+FZ%Hq^5&`^E(NMd5eI0&9I)+&DYgl@PVI{|)L=1KU(P_c zN1y3brV%L+YPGI#XKgV@0PtJ}a!z1Qx$Vd~u zHgz}^?S-%JCF}m(+Bxn%eYe#;9q3AiU?+l(G%WnRDa5glhVwOKvFH5->OTDxY2aZ^ zfQssy%)3bOQ|P5B!|k)o3)s>XdktFTRXE(b=@)kSX(}QTIJ^1{0{eq6ARB~n=hQmC zFXVI}GmOE~V;2|;%N+5Z;z1X~tGo+OcSCw|&+SVXcgG2T>;aqkl6-JRAiD|noB49a zlN+(b!z5(eojUE-S%jI=VZqShXN31E_ed%~iH&y9VD}#7lR#yRW##(UK-j5Z~Cd@nj)^|OOj@0kOsnd@N zpCD3h`kENt2kD+e2=-?*Wb?S+u4L_Zu~i2wHgil|(jevj!tgL2 zay7$|GUGmgabN5El3oe`S~b%=E<3j1rX6ohwX1L+H&Jg%CHYtfQNjN^=GcJU@^> zcsGjRd7O}i=8}rmHhsoGzr2@Oouiixd z`4``H?vav62*ZwVakh-{tsT~~M=I>edfwmK)okPUPY2?7o;aZuNw>Aru8y^@8=xQ-uuXlJ*5N&ZnS7~|C> zg4w<*q=jxDxFyM#bR_Ui*Wo&%73}};_;lj%I185aj(C_@2TVy&`<$ybm9>c7HM~4{ z-BjN(HNsRKZ+)D%GWO)4>ZXRS5vyw>!H^8&x&C-Ag@yhceNfS`v@)>2>$X(j$MUoT zK)r0qIvLBd_%H78e7l>(D~Wo{NT|8;HBHZ$zyIlm#MuyQz-Nls(66i|UHU_-QnV^o zknl$eSJQjGuCIip;_MC&C0!CjP6;TRK6noSH>MgAholR6$6cFJCvo{e!9eeZJ~-wJ zogKQpX{Igo`MO|JDiiZg;DdFk-3v;?cNZ5Ix1`nYw{@1AERr(;UI^zvEtV0pp9j7eZyf^n~hdJ%^1Ul#J{<{tt77j*^pR8-A&LB8LmDZ<^4*J1DG_Q0xamV<>pDfLBou7V@-#6BN}}j`rYAe`~4f z;YfcCkv$xUn+c}Oe-ZqNPaCoK`FSjKU4Xy?1Xu0E*Ip7gzWdZ(hb_WJ49qtng;1_B z-TjkVS@S6N6K%pc#;w2cpUV3Hf7F8EYu$!(SYe$vP(cZyYS&>F96YzCX!drO6f;~{ z$If5ZPNag=PDs_6LV3`=+29mS1`)2ahgJcs*TM*3Cayb9|K&GzDdUSP5k?=%An!GK z0sHc~hvsr}o(~Sihrw0ToH`7xTr?Ifoo)xArSntHPkMWeBCJa~mF{aKWu48|0(ED& z$>7@%)*r&0zsNX$!n1KN4bU$|X)L-5ZX}Bhn8@RrJxCxEgBv)bFurK{iVffIfijRb zISO?);h^%kKD%J-;Qd5uO0SLS>+hH_bb&ZpDLPn^T5Kcq7Gdv&$GmCUzo@1z!48Mri=Y1|n$ zj@wC}fts7jJH0Z>Q9H72Nd@-joM)>yTW&5Tr0}VsGb1)Fk0X@21=d9^-)L;AYHdy9 z+JFVw$4l2rl^D*a@$)ErLKQdRtbJ~uSEq6qcNLscx2P8$%Irp=A~lb7^dTPlMjb5w zniza4mc&#vVSSs{yLOqFPS;prlbyewB`X<8jMVQ7roY8h3z!9Mj?Zp#b_;GQ$%5}r z)g2E70UL`xl-g+3<{36{|NWmKhv~)P{r}9z_AmYqyW}$)h3JWxDhe6zU;jFIAK-dwP|&ha&LmvQjGYwnc4E& zxTa1ORCRNcC)PyG-*EU;-Fl_By}=56YD^+OpP@EALI(>~oKsWG@Vr%R0!tg5VL| z%fBkgvuopNkaQKl?kOCw^K6kT7{4iwEGXWb2*$@B2~P7P|3KeUJ!>!{v|c4F*UaTE zw2fGKu3HN^X>^KTTalb|a^&*PT+Q5=Jfmq{n@PC`d^+*WX8T35@QK6L2ZEE2W?a*h zr)w>knB(qWqM!~l5Vj5ojq!qGNJR6vdrn>2)b`Jr`Ltf%lTzjIv@h1YGyYQCMbI?s# z-7mx?=_w!UrB=r$gV&A$=j_GZTEk`F; zyjfx|N5M;M!W*-{Xf(lA^s8G<=7PHmKidmLZNKNwDuULJ#7ZmQl*Rlf`*Jmk++8xn zcI-57p~g{V-2SVG!EvyZK388yx9JM)&qS9VUN@ktN2A)-rPnD5`pEL+D ztBJ1`-$8pUd!qB-5=ZD*v6>X|xRt`dvaiy=#zg-X%^AG2XSGVPH@Jtr0vSEwoG?6r z^#4L)wQFuqCj1V|$Ub~!hz0XqBHEL^lpy?B&BOKW!n3A<5>J>L#oC?>np+-iY$-Y% z0nT3?y`JWZwf$t*PEWW_EIo3VpO9|G@ktjUwL708MCm)(@#a|ZoJ@5E)i+pz(>D&? zwx2H`L;W^M)N>d+sBvwJ*1co<&$;t4fZRcBze<;wxaz98I(;J@!FE>H#)8jf(X)g! z`cat>odvdI%iC4(}Sj z&6hh0&-3ls$<+xyW>ycA`f!jM7ZyNgE0E~~593$-)oQDt! zxxxs!l0qMQdCzS6_794v(oJrNyR=VPcRZJvb&vV|yE85(4p&Jr^_+Lisin~yY{-9m8Yg`){+dpa}?MN6@-jBsf(KDJE&0Lm;YKrRMEfqeTiHl7@fd zyoYtjuaV!7`CvbL_4V`x2}FD5d;_|L(m1==vf9OMtm?gfh4uI>p@bDs`RX|qfA zp>GfC_pzR#JTL4=;sP)1XODOH{XTe)Qm*3*Psp!%{DJ6tXucn7D05#$meJbng;-1`D^d1x-R`(89IY6zwNDEhy)M|iOr z{K4`5{M|ljLJr?C4>bcEf*OnrJ5iV}yT2)lf!%wc26Mu|bP})kG@^sYp!HncpY zHb&^}vwxopT{kJc@t4=lgxr;puvUIdxXbC z#DUly;eIZyQ}r~odG)il^UeEm#jU1~G|`XRHNT%+S&#lJq=sw=QY+(Oj>yYYyWt%T z%aLV9ggq5HG7aAkT0WD{Qb$%0Fb>as?NlM~&1pJfe>cKbWj(jT6;Jbi1Q-K3`05z^ zG2RFJY)^gmfDe_E^vQ_9Gui7j)tOS4B1U}6xhXI!v|i;UmH7W#TXSEQP=A}? zK?Lkq&y@nC+>P!L&kb`LJMy5RN3WwoSh6V_B^GwpnRiBIZS)Z#44%T?_8%*j4L(HZ z+4h4XA%C6riY!6iV+w3mo)%MfebD#tlp*Jo-mJ9&?xhVo$A+KoVbl5(S&Gz;l``HA zXa~fS@qX5s!ri$if-`Ax{;|Nfc)*cSojGGUiQ$4Lx>OPFYMG;nBiggZw!0bT3L0!T zJe+|}l8gyZRetBu8iL1zw)=C|9e*`ZR?|et?JtA0hGb6_NsOIcXV^13!d>W*vk?^E zlt2!Fud@&99=@T$=n31j3QTO&creH=0?xttj|vN@Jyh4+2t=8xAJNwOp4+AZ2S1{B zdY)*yMBbF8atKem=h`Gz3m@~40D$xOnLJIH7Zr{kgnJgb)0cTS1624FF}@ed;y+*oR!({P*TX)z(ltd^v-wMi_EULK?*?A;ofusQ+?58j( zVzLr=L06FOk_0aP#)d&Y)v%eqenc|kejfjTUG1uF)8;WuJ7)1;g@g`a1s+zQVp#`H zw_{WNu?Npxkon_^IQAFS*%q^FiJSsmTgLrt_WY_iOed%At`xq>sS-D^ce=yPzbWyG zZBJhnvXy}oKcHLo8C!%0%kbZUHZ6!sfs>O(P`&X2@rjI0%?HvcLvJHtXr#bDI?9)+ zZ|1PpT0f0tM1oVd3fOg45R6yp!Ksmj<~2GckS{YuEV?^%+wR;oLn-ujvdW0brQv>L zgEJmVI0B4vG0CcLH@YiW+-uhjir+;@G z&e|2T1pnAY3WDQwSyS-GcAFN~zZC_$m7VJ zJ-Bd%FQW^pVmVg`yQg-!icI_#vu9g@xK|sWkNsl|S>L~tXIOW>jUW4Yuz7MsK(EiP zdR*V3g}bDD*Li;T&;>G8^XVZeXvm#P6IPhux7sjI%M#(2CEBDG!N4hV~}&QnWG z=m%YHr{^@$h5_!|YP9t9c~UERuoo7WJ_)uJpV7ryy0b6C2nt5!P_35^i@59E`-@!z zI;nuA)jOM>t%@{yVwKhrv6miL%H+Sg)IIi$fEVMD1CCsasXG<_tIeyZN!XJQqT0;r zR$!#OG8_#*ma^lbkLRU*)ZBNvZN~K=2%C?RlxwV2?{K2jV}r@agNx)L1}iL%I+eR) z8TUm~1NBAYIE03SB?M}yw4`#|-8@#yzcp!ktG=zSZ`H?iC*{axVv_uLz-Di4a%0vFcjoxa%hbC7+PkF_IjJuqx;>`NGByl%ffoY(|qp;@Jz4GWqj(` z#^)SM9KH;3Pyq&;1l>*j70{*bY4;vJ-*^GTt^*}AgT54dpi)rZ%MvaHpWfR$aZZ#C z(vI zwr>>vREreK&YbkY&*E@Z*1Vn9ibcxS?n}SMKn;ccX#_Z>{>iDJ)R}Ri!U3~t>pEUi zfWy;H+OrMayXGHZx5q69Kl|1&@K)zfQ)st_q`d^um5(%0;i8nJMqe$EZ&I*heJ6O09?<6&0w_u1$ID*zv7p`s6QXA6Q6hDGwqxy zwx30UtoC{#NP9~nSXbIxg7+bOzJ$d!s23uX=C;D7bK}|jS$LW8s={kEUUhhF#A_2? zLA+Y=3gLASuLxdkcL=v$f`z4@WqV&jbT1#cO8a7(*!~vG&+BZC(jNCWz<_O^70ynS z)8>kBy6=HN`&{&~Dx^N;6zK*#8}3B%J`=4hZ?Do#^=12l?U1GCL94&FPbtIuE}qAz zi(6sl&rFH);ZT0mmh_z3lXOUHQ)=@1|)=7Js(e9$Tf&tso61udA$*waBCTdG;gJ#~A8Qxyl8ZAM7p1%^L{otPW6a~u= z6S6x(XXgrC@%>^wbel?x;;!82*Gvw74k8&QdF37JLd9}D^ftAJlSPww& zCh1Cvsw-{LoBT%bH}ch#P8W$E;)C;`>0<_+!%RMaWS2yL$xZrg$8NS&1bNEco>HF-oR-_#5Zk36oA6s$|3rH=GWop&GkW@_kQU6MKrtWI&K zd9KZ4r%9pR4kJoZ6BE_o>kRiaJHHXi`ja|$L8wdQx`{DT&Rv*rfpU`>m zd@rVyo3ATZzb^2n$@DU5{h$84NR7sO$@vTsKKGuQ?^<#`HvgtyN2PuDnUa#vtd3hp zE+6x;J_i1+aryZ3>RcR5)zvQz zE;qi+Wspkm4~fgij^dn#ud}``-MI_;`*iE+^!MK(!Em7`Yv61mijF??YRw9{&;o$3H=jZR@bY+D?EK@vdaG({JwRv%Ky6>xydU3 zU-0|mlUWghkW^k`z|)vE0RGNLckX$#nJ*ktcShCk+``vO?V{Zp4Lj=D=C4}>qt`!$ zbbZ*(XOOldOWS*m?6=bOSR?zYksTE0j1f^&w3zqk3npp$cLr5O`~5TB+`!Lu^8p{} z;&*}lRK+VSTCx63j5@u#6FY5Zw~>;yKWcz1od z44Y{_c+WuC{EIVvwV?L~>79WqF zL(Rsdh=oI(uOY9}^|U zdMGa^-RsZX#%Fbj@dU;FIx{aZwhi?rWGHeOZlKN9wQH`TSvSzU)-uSiHc}Xy^aVC#vmhRgD zmzg>JIoC>C8hP!wot(8YsZO^l_gfx+q?|M|0=3^5NC6pBu0B`-9rN`}Rh5qOsQP-!|T@+g12AzB^CvO6vD# zz;vyDq*MKN5M?}X#AgreyLCR0DY7FZ88m>i4M6)Ax7j%9aL{R{1*i5x@LR&~p^PV}*rO z=Xjl9Q|k;qjTih~9G?#2yl%MD+lzgT*;FLY{3kIIgbE&aP9m(~Itr3cjZH>zlWcf7 zk;V=#8%KOCnCBfP8X(oKMH(A^E=K+W4)Swh(s&(yS+wR>QjzW93+m31S&(HuMP8If3=tMx=AlDR-XFpbU~Wf zLRpErWTQ^lVMHA;&&3pak(B$Ula2=gaRGF1XR-GTZoi@s z4#2t@D$XXpzh4c-RqRUNms7uuYOxdvR}x+%onw8xO^vBc&*^=Q-_-Adw~h@h^dm1O z)MX>ZTn*bR#cDguln?kQ7NW7lj=Euw0H#|aGFTDoIsRRI-0}gcEqr+Qf#jWGm9~Z_tkTS zZCIWY)65)4N!7W#N;Nu2*I2b}S1Hm`kXBvQw#;o(4BjEx5bh?K=<)XL>PdA$9Xra$ z1ZIl8N@@68|)QXLIr zwf!XH9p5(*&y>da#j-U1iFf+2H<~uWGP+XoQQWOf`ezZDJ?qwRcJXC({?GNX8nc^p zj4(D~Zql{=sITF?(x&RUQ@#qX2+WsT^8nl16khRkQ+WCErtml^(4Ip$TsR{?BT;NQ zF>(oYR>3@Dmx}E<#3wkyet+;#8IWEQKS8Q5)5jig-jtV+e+xYeV3|g|x6u1Y-&{K| zwltz(J%57s_)(FF<(XX+cO0KpXJxjy?JTCb5#?hkI3O$NQ*HEqwLhzvXp#I-M@>|2 zbyilfmRCBfTnx|XYbxkPog7do_OVZ^E4JtLKeS#EpHyGsQ{x}o**Y41U}LyO5cIN? z`i4*I-$h+GUeGEl(f~AR^I)WRsbd7xYw_#)3|$#R)K;it0<{m`ZzNqoe*nOU20^Yc&VFnE+FwD>ZqBgFMHwyg;+`usdm#adt_So+h7}S0z`sQ8; z$TzTW4*inNZ&JTZ^O5oOf(`pb1GisOociZO3EZ)R`bw=2BUc;{5ZgU$TzUuowYaUQbL+r_zpbOe6wx9uYyGv`4pxez820!@il@hYN(A$W8ZN** zrqn#0#bCqBiFwPoERR#%@{R_SXD92w>JWRmu>buGWf~y+XYGjX-;V9yA%MAK7FasG zVC{%PUdJ)W?|2Oy9q)q^5ej8I$u+Z?+(2x=G=hH=zKWH;wTb?LNh>kwLw?i3X`HnC=lZa{Aa{ljvQoGQk@mkoU zC`cy*`_&#TuBDbH_YR`}RVqjpaxePso(yZW6x-y-G;e&IVkU=Buj_amcIFqNs25Sx z3yQ-YL*0m>Zp2VGVyI6s)Q=eIN9;9l#85vFJG)TNi&4)d)bldbb06w?1?qVK^}Gu8 zd^PF0u3n6f+WpsLZ%nDuVr6R2!=)V*fBv+5Wa{qdn{bfu>VxlGUK+N-oNBu=9Ja$? z*xu?wJ9sPnreE~NGN1^@gyHjh5_D=zS;dTZW#Vr4n;=Lr}muMSTFP7IXIJjQ07@aIO zZ6P=d+pwLm|8k=*!nQi6*V&d09W2i1{z~Ykn8e|^0Y}(Bu}S`30Hhu$W_|~06dYl6 zCwkA`uxa%s8tLnO1CZWv!iQly(elxFTZ{LtS25>@_hoTD=J?Is_YxSQ+|>xOLtt;nOG&r|*8%{K82@HV+Lu?b~) zozh!Os%+g>wO*Jflg12@ZtyXmz8c3-r8u_plZ}jPXM|N_nA5f9|_pkpzfppv!egAq5sS4B)xy0 z`@Q=#zn2kUeh=>>?+QDjB{=qb8u8r>ArzO(qA$T( z^zU$i{ASBkB~-x?K`F-Pmgk4?*30|J9Bt$%>ts!hD7n-RqBu}kAQjcy@m$9~aWswgw;kQw;_>6xGD8TzGS@=G!8difqH^ZUz`NAIukSs?NQuJhHX^Cdc+uO^+p(M>vof3GIi8#OSUwy||b z>NoVy*t(;Z?)_wIuAdIAO0|v{x((?bd|0Eu!t3(RM9pyH>Q@Jd{m7^6x;|IODmT ze|N%e`x*au9~nlwEk(P12JLnxx7!oUZqK+^U_EDYyZw~g?N^?Wb~}gJ?IzR(qh`19 zvuLxu%w`8`UNIFFy#*Iq4!tURZYWCB2?xnuYtN{@mTZ>vfb@ZEmgJML+eOT7#f04s z=Gw>sQGG!pTn^)|bB53M1C!BiZeQMvX z*|Ln7$6dm0`B0KAmoZ!Ra$CkWL%TMiO^Y#Xvl!{8z%a87Z8{J2Cm(gk5kJP}=Uk{e z#i%{jcx_gA;V z9S0+axSgy?v6D5-7nG%=ul9dRKj|puiEvvw&Bg>Yrur*3Ca6F=v2kA^X}$u-0YxT@@zm%Ejyo@8zN21dIMd zxxUYZ{sl2iQ3SGzj;iA;(jOlP`6ICVI&d<7O4~E!w5KolTc^pD>&2H=$3lE6l@&_F8m!P7h&KE#m4;xR%x0b^yetS3tza3`y?I<5N>hPOly&Znj z%K&{Vt%I&eIxh*^D&|$sOG0}R(Vom`PZqQ%E83F{?I{oKDIe|0f%fD?dvc*Y6{9^# zXisHmPd>7z{SWIf;$emn>!Kcx5j_keR;0yyFD3BaR*#g7_iERU#Cvi*!+RH4pI@os zJ;He%&run}{gG$6uGgmMdM(rSQ*!+;f>aKj8>4+Y<==V-Q`UeQ^xuB9@5F7g(C-E? zwdVqxN1*W^J!juCb0N!}3;##m(*Q?NrTKNwL?+1y1GX}nsEI@?Kz1^+5$7iyJ-~S( zX7>UH#C1HTGc%clO<2xKGRT1@F&?!Ev$M;%c7K69 z``evU;3Vnoc)!l;YfsgTMJyPwR5EYzMSFMu!7+> zm9v`FYigfPUs@fSi;rPrD@M6L?;7{<`IQYDp4vG2<0Ecs<}rRG8~)sF!(#8XZNvHf zdd$Ndi*0z0#pZijJ6ksb-^1p56mvkVNmFm3x!t>#XlL&r#}fB(tr;Kr9g1oE7@@&} z@2Ykt5OOSWA2*xvIVe6*MH+l@GrlQdJ@#de#lN%1j4!iK_qDX*+iAhqr{#r*9828C zJ~O`YCv{p|@%_Y%ui%j8XT|VM;P9O`+@F5D!gve5tK4{R=J3rh<8ycEeh5~4-!kL7r$+Zv z$RQ^-4qt`YhvC-TvH39EIva}@S?U?TobSM$6c6g0cJBA<;!WlaYQA|R@Lg{o2HhuB z?A7B<-lAWh7B#w0)2=hzqBf83(;q)8YBVX=u~mo~-yh?ixB9OV&y0A2TgCJ~6N>(P z%_#9Jb-xjD&nWRLw`*5Ig*di&mi+a^Ys90p#+RIIxu)2gyDUB&do9;L(=TI_=y}6& zq87Lha=I@U_X$n=T}<~eO#6XNedqa)yXlK=`ivVcwA?Ynbe~T4?{O}+!%FT9{(AtD zQT{%{#yg7JupGmmbZZJ0$8-6@CviE#ac)gE%CW7Q&&;4>Wj1xJ5ps-HF= z*Z+N7A2|LBT)RR&2XpnsN)G1uF7DvqeH`69$TQD&!kf#Zk zkz?NKOTgia{Q=Jujrp0c>Fa~4dWi1Rz2u1z_Y56#KiPI7n{vX2T?l!eN46j8%dq`N zxBZZ_S%=kqFm zvrzKqgF|Wl^?*`Z<{_P$FH0RP#@$)u#4n^srYN=CLw@FuOY%Lq+cU^W3nyj`M7nxs*mz;Qx5I;6sSnpgm#)gO|J{Nlv_LS1@<)`<^={+ zm2z_j^?cot7p7=Ax;N#Rb9CoJfi+LJDKB>%q{J?$lDh?OJP39gPYmhgJIBu3=fw_c zzKYHN0QTWI<^xCjavb~iGC9!=&JeC?NaH*u>%w-$aeg53QRRYA6F4G+!EoX?klVBj z9F2D*w>P>v1{z&gD#`Cc?!Yovdu1_xjpL69y$|1qbD?~%)U<{1rZpY{2i1G{9iMmc zc%L`;u{s#Qv9_psAHRY^(i2Ahd5=f=a8o$)nSa2K3vTqpe}^0ObL`lLSNZe>=JTRl z*c4XYe2V#1{HR!s(VD3gKjiV3LoE7SCC#g=fqQYzbetpq)ULQs8y~GZNS6wlKf%MW zMAM-Tong7g={-gIMd!T}=5vlK@p#@JBkwqiCol`=?5WSC#>V9KXjd7?ht!RW7x}zI zpNHFAfxxRcmZ|EX2PK(rbt1h^`@D_Q%BA4HL+tyX;Tl3YY+H7P$)B}pqGk&UbwX+6 z%3g`+^`pN+Ui>}tI|8NpK@ZO5ShVd5qX)j1LR9@+ini{MBNsm>AG6ccAF@fXe52iJ zFXj9+e1*sli1`TR;~Me0&`y3s2@kG69_FK67Ts9}O|?QvA|cTCs3P!`s*>LjeV530 zDA=W{qxugC;2ZWII)?N2JkHrJ@j%ma;PihNX}<%%XGoK1vR4lL4#;M`FFwog-xAhG zU;QK;z;%x1P~!JO0o98y6MEx!f}O2H<#VLOlQj3laN@Tt_CRT(8s^bD7guqvRpHw9 zzt0XJE-9cLpr-FkX~2c=`Dej!v@HgBU8sCoF5&#WjAM2nzv%oA`NCBwm2XMR@3u?u zB5u3?Ua&JCqKlitv|cKnatYUX2eadz(CkT(gO#3W**oEA!|*vZU$mzTBA;O!U21dV zg3qPMk+MqvB#qBBj;dFDUS<3oDORtoN5(VQZmxeJuDhR+FA>)J2;2PbLP?oCN5Xf& z;V-9ei#izHBFnM20A9v#+)wXezS%Z*!XU zxht>@1fsv(HB>`$!>~;-+lB|6NWU|I7|Zi36P;o|2OrUjy~ju=8e^;>H9p-(uhhSQ z8{dc8_#*!?LyGNX<8!oRf&JyXagEsGm48~u#&!kUD5YocwYfooX;`#JhSiJY*J-a~D-_SochNV@x&49{jE0^E+A!u(Y?Bwue2Q_O{j!tL3AXHHH7J-MC@h>eYXs z_2W+~@0F2T1~}dC1D1NbHQ9Vby^vX7Jh4@afd~^Vd9Rk6@li}_k@ffK*z`1KVCHB8z+sTzu#`gH_6H2%O2fckyWF~<=3)T zO!DeF^@$ey$J=Iodv^cW^zGT7;D7I0>KVVBo_oSkJrC3*9mgp8cBbmxoCe?Z*0&pH z0N0O_-$~CoC9K!;JL&nFY=%DDuU(5rb^Z5u^lLedzC4}&oWCB6etelle_f~j2=#jW zhKT9@u=1o9EX$pBjWaJ#>DDsq(r0L*M_Im}+_3KHwRP1`>o0c^mtSBnr{~$v#Wr{k zhrsEjZ#4AMI5ekmM)nqj4L!3Xg;Q9aimzbO_j2W=H=fApsU~uIu;IRyBb$sqEJWDo zTRXr_Mx9;*Ci1Rcw_(iZEK9yU!#8%_ROV%qZc2iQX8(sgFwT(0=Yl$|K72DtXR+K7W4;jdJ)ZqB2(wynze8vCrdIr* zW3C-2R$Yf}+@QaD`vdJ4vIqT++l$*@pD^gVc=}iEyKWlv9slvS+Y^%qefwh2QJXX9 zYu@&2|Ef=l@jKs_&WD2bOI62Rf%p_*2kn^>38wF&b02P!FKN$2`$gI-Mdx`dX|EKl zQwK{fs%j_(Z?vG?8*2fGy@~scN8Xm=8CdTF+AxGpE$ zif>wEWlp#)6GZlfh&Of6kEgrYn9bYC1sU} zf1B4U(FObC%}$8j;DmU+6CzG5uUV?yYs7nX62vy+U%v!O_Fa3AYp;X*##~09xxx;Ao#vCNG&Xs_Jyu*fJgWZMY&Sj-^thzsBRg zK~*EiMG41#F4FIN}2OuXP0ozpq(@$dhhQsvwk1d`@K!)-I-zD(fO8I$TiO96u+pQ{iX9fjDPtk3l|{& zLf{I{8|L4cmH_s91@f;2`M2~f3Hj*2aX6!&AphRLzaP?Bv|&D;j5aVnLZpuIkH%wf zJ)x@kt3YkdREP2%f*LuyU_bGbcuaCt9*C;ayksr$Q&}l9-d+cuuGVSe9n+Z~ov*Q4 zC@}aMLB9G<4D(cGJpD`LX*u>IE6?LEQ&no0c&cQ{m9(cu8h|qOHmN&{_2H`Chkn*Z zLTiKYN9^9p;;jHW?neoC>`k5S4~p!)i5#!=M4IuhKK0%xZCV>NZ~BLFD|Ys) zDz@RVpVQmjr_YNk@mh99$az1O(^zSa-o9BKEcyY;Er_q`b>v0!xuZB!+f4xt=Dk~W5Ka#+PE*LZ(()o zrZap)2RVFT!R?G!Lt(V7lFk^?`N#_5A?cYyM}|Hyc#u9u%+MQ_bMHq-Z)a%t*W7D` zZ~E_g$le>Cc)a@A+S+Qi3$>Kt9`buDOr?})+)`Y-=Gj$LdzGbpI45};H0F}EPp@8` zu4v7QjrHs5(g^6Z(=#3zPO+^Aq#UKnpJ5#EYvrw$E%m<8a(|4dx7Z?=yLEpR zZ>a|(<@_6+dJNK=$O&+CIe&bY?we`FcfIBO>}%w4*7GzAd1>-E6Hlk=mtCXy$p!T1 zOU3lDh76rgoj5WsWoF7x55j5u=(4oDr0gH%k~9l}QWmt6g!RDIhGDP0BSvKzzi-W{f_NAd`i!gbDJKU z%c;X*?LB4iNj*=FQQxh>V!NIvhhU$cCx`Oze4*(m8GK03lXIJ{k1Wz*oJw`I8`nIs zVXXc;GfVE9`3?McwwiP#lVF0j=N~#%b)8B)MG3Re}#b8?VFtXEXEj z>GiKdnYs?7MRl$K$;FW^DCd>mCUu?{oJm1&1wK@VlKFxZq{QWMAy2t=ZaDd}P!N43 zASI6pg~{_mQSdzOkDF2cdkgo&O|Xab4o3XI=-s~zGkb^(a^t1f!lZAZ{XN+uiIAb4 zxUa5wXh4z2mGosIaW8^>jtmt_)aOwi^LdIG#uUA1OJs;h& z1VV?^er44|1N3Yp8%{+)!-cZap`aUtcmN8bJI=^~|A82t(?dC_CWiEA!ZEV_H;yxb zV@x2e5=f&2jx&K{OyKwuI6hy#;7!R=L;X5k^K`nFb{-R4%FGdTbt7H#($G~xy1E7=uEv&nXpGdCREtPYX=i)bD6S2hysv3CGCJUSa={UT&mUF48Lx=~aOADnxn} zA-%jvuM(se?@)PNN848Tp7@g;#C@Fw9@(i=9yE^kh>Rb-F zoyXYuyOLxGe97fdnv8>-e3{wP%TRu;XhJ$CY|IyA{cMz@iB>^eS!Uz7XX7q~;?K{f zGir;IVWL?OSH$2Zc3zOqqCuch{UW{u3gSMLW6DtWEG(Cb+s2Ix^@s;iHeFrZW*0*} z8J9!d;-TU;k>Hb|Zd82%YsOmb22HV_h5 zz#$(IisB2PN{io-(TeYxT#7WIbG!a>b&zzMzTW$L zLs0^Gnn3;~kbeo}Ujq4;K>nfJTZS@kg)bi}X`U3fWoIM(Dv^&{i`&K{{p~)44;Hsg zn1J++$=$Y^;x?B9`LYLpT_|JjNd63pXfE+I3>_Xix;WDnQ0_065|_Y1x)GEs_YsYV zendOGK8x3)+#{Zhb--4N*N5$SY1~0o9Xd8ulNXQ8*MA$3Zq4eTuMvEWD_#tj9-Zq& z+B$yK0uG{Wq;*QT@yQp%(M$gq-hBx_6r^84dH#feb@qZ|&{0-62(}scw_y;(e;Uk& z0(}46ryY#mr=l%xIjDlm*9>_SXO7w=niCI*?!EiQ^O)v^+YT4j?ZW5!5Vj*6!C!nH zPGNihPu{f(8G7t<=iUljH zQKIw4^k+I?vQXL|t^?!)Qc_OPDav(R*9F4IiVnKg7OOK`E{u^-)*4uAhncc8K*-y3 z?t3@=`sJZa&G^T5Rad`z`riBQ$GPX;d+t5wcRQpLbkemK_n6HP7smB%x4}D%5T4;Z zJ~5^f7v4W(2E-YIUr572J!WJ<++#X%^NM@2vd||R{6ZS?YZ!Y__KEoPxHqm8_vB*z z>fsmaj`hyTfw-G>;+}?f9a~6s9fs4sK7&AY7z2hqN?d~ycQg7Q&`IB=Lu*UDEb}Hj z>%CK_pKes@&DI&FS~q{lt?4vu>q?{wVb+%dNn??@Te@>Z8J#;>Ty_)2Lauej%S z=+Embrsq9zF!d~}%Y;t-Cv@sR(WXOd(xLfvXyrOIn-0x9opyaZwT_kb`d6vNQ_mN4 z;(nwPi%d(@x33N zaL%-b*6iOt@pryQ>(}h}{qjNIowHXi+xqCE^^KvG%RKgiBf`7d^rbaFI^p}J$6i|V zKfB~_-{RdG#Kier6OT;Sx!utO$?BB! zvv00*oBaz&_P9=dKeWz`VV^YKMCYd1ZF5c?om+O=)-}7!@WR?H!s7|?9EK`L_Gg7)mw<;vpTOC(j{zYO&am&OKb-pD| zvBaqgmubpSQmT$DY8oc9{LYLwm5F7UmCML#amIVfGum)bW|3SORd;2!Z;7bRwKOAC zo)Ox%z4ghTsKZ-Ywzre%iyHcQHhm|K{C)aP9C;$GyCzSA>}Su>n^fuBUryVOlYJ^X?*SFge`i_;&LvfM`rc0Kw7DZH9r$6TUJy3C zt<(#jk0^AQTMfq*IzIoaLI?S7cweEzbJk*&ZoDe38_#+=ZL^;BT-s(m>$SA4eAb(3 zTluVuu&!YA%kZqwjUY?zW@m?g3D1mPk;cO}E=yzJ8@HtG%Z*Q@?aPhOCigHpwBbFB z4t2bj(V<@VGWy4a%w_a*@XYA{O^A)r{}-MWI<~Q0p_`!0c1FLOka>&_^TIqvcfb;b z(V-3JGdk2IpV47wl+Wnv2)U2ZVSc!e(f6hM*EEpsUlX+L{frKMdOxE>y&hn6sMiCG z4)rQvbf{MWqhBMWP@&I&?7@eA-?e}y90$l9@SiQ(ly%ZGB3)@XGg{R!l3j&&{3zxF(6Nl@TM)|!<*LJXLm8}^GUWRD z$wv(%w#8_Ji0{Pm1S`iKv>cUJ9n_cP%VT(kB`P-SmS`o_EpZ9>jRHTRZP_8z-#|M> z7jcz}{pP_xryt4aBAE1Ed0k9ins&$PB>JvhDM^htk0YUP0On`Dh}yZKZ|59o!d)Rv ztmUs9M>|Z#$DA<^>CvYg+DNaIZcty03wMw#nQyPXksLJ@;ki$WGda;FGIh%24~&$F zsZrCazzM`iGu0=fCR=jQl%G6hDoEK)(z#_8CCRr<&@DJeCVPO%&o!m6}+o?h1#C>RS3Wz z7RoCF(pzq{fm?8q`a#%RV>Isa8O_W`FXY)C-uQ_~{Vk&X=Sjj^v-~!8%8rxgBm|q~pVL)zQ1rh<91via=jSp)VHh>e+>FR20Rl3esS4N^gM~Zce?L`N&i%tdZzvN z71UY6JBq*`HZ6a62X1_!=wHie-j@^})12us9)kEMGxfTrOua6|L)&*eS5Rd5SsWWU zo2CY-@85Ee$3^lTU5*EtZAsZ>Ob(Fm)>I3TBPk|}yr&TKKCvR*H5qwFmZQ&l01>UlVp^Vow<}&J*I$FVpd< zj7A-NDr07xtg(zZLDG%>Q(v-wJA`8;HOkj}MtMuBg6F@~d12h&^?RuS45> z^cBPKOXD2hl;U_-%Fb7&e7rXm<*Bb#SBufC<`ocy@|*=S&h3>X^oP2P&~tOnbyS*2 zc#OoOU`@Jh99Mb4vyb{R8CocA`tn0+Kjb+p^YVu6~2D>Cw-SaTqA57fhWsox1>rpfOJ=G6*;IerJO`+^-#M`X-s zM4Jx8rwMk{IN}fvbd)$CUH;mdbQ+9@X()~jJbU}3F9Llvj$l)%5Y2@=DxD6T*C`)E z*mrDlV(kK4-_${z)ie(Nhj9|Qa(cwZ@z{B@$7kd{gcLwK=Y<33gdPviG{_<4D*3Y=ah z^b|;w)VAbXV@lR_xOQvzmz8TjM1^l?S-(rhHzMqU}de)eVON>9SnQm zx2J}u{*Cs+Z#Trp_rP3rAlzMmJ}0_+e7p^K#DaP2y$kbW>8X#Bxrj+i%sth_5*g$X z@5va4oo?b@!Y3Xf=Dk(K5+5N(v`?pCwC%_S9rM286I9K`i6-W>KKQ02d=GFVH}uSM2OSYaBOFlXG9ur z81_1_uW&!qOK}oOy9%GF9ewXGEM&|F>yPQD(&Xr-*)x>}-U;(W+;dL43j2Ui>I5;T zJ|~tX9q1okav~NI;wI8|yak&lU5qD42W!&^wi%W|jR{HHZh%DOJ%(Wn=UTeY7*X~a z1LSsJzoEY2L)&6(U*M;JGT(@}hgw^!?4RZ?6QVrqMaSwK$OnP3haJTOvK^9lfTI}6 zk^Q6_+9VP=LAreV467)QRFf`RN4spZ_cD-h#>rJ$^ z32*!u*SuVC#p-k0s>VZ(GC_KLZ6F2p(uKH_qQN0y6FkFUeQ^XS(b*WAJs&-c?henji|Td3nO z)N$lbDYt)y%>wjz;d98N?{p;kV^S$u~ZMTl>5VjSJBXcT@ z7;iVa6kdy<4-w==iYxZu{tO|+Pc2at~GXo zSfH+9lzG_ip3g}3{9!T+We$!Bl??3uL1kdgt;s-|M#j4|yK`t-3$Be4b4lA?y*!S~ zYgeUT+B_Z7+3y~klXYocnPeDl?;ySc#c4np^wb;?by?B*GR`K&2(6*(R3lVsyz444?r;$!`X&My>qor}m4ALBpdKq&__j0f`wAhH>wh@*bKtQ8*at-n zpZYqp_)tzv)RFBoLALi%xxR4_{Rw1lfv z{K(;6XLIynXtxr%-69fc1NqY)zXWZcL+uu=={g%CRL2KlhPBYiWnwM-DL4yIe!k&D zSs&Pma|G6-5M*J_AB1pEonzO~)Esdpv@t1!hGBk4%JT!x4ffT<%GL>?rj)1}C%b>h zxnbX>Tbmo!txnGi$!1)uPhvS*aZaGTb9{0u&I_UA@|@rqfqIQZT=or0y+&aDGqMur zgqLtm(3ua!Kj(b#z4hvs>xFV#C9@9#FOksvT{^mx8+Ab^Ia^_oBzP{uxdP{jQB^qlR@gIs({J?Xq!Z{A_tmDzH*ncJMt}8N!R=RWZdJH zCOokB!}Tx3Y29%bq5CCV^Bm&od~*iZwn6@FC(6&YeD>u0Be1>&*%`bCW&0ZBS;X($ zqbJ+3Z&1Et|DcS=entNMA=kH<4(q61=XyFoemwsvp}x}Ygtl#fw(X|!qdfs_8^5fT z9mKDa9pzMZD0a=Aqr`lxdK9z^4(2Qu-L+~SkcQMefaL|gVSI1^{Yj#qFY14?g{(q7 z8Tz9vmTd|u(I+MPo}~UG2T48iA&GckATQsF&Vl+KAYtSm&l!>(xlYVbGaBf3hR+?JYwWLv4w{{V)Sw9+mr;iWxX07C6)w7gm??F#-k)JK1giw zQzYNpZ-{tg-+Ou3SJs;S!*v#7;$qtYAGQH+wnH9f#MHf2ADnD%XYCcN zUWxaHiYsUGqZUBEB%ijfcL4uMK56 z{N{UF2%oT1Jpl*5X82m*i#{gLP#tmql#aMjr6XR|IYESV*YG^xW8^i9LN5<}{;?2w znTWET2KjBpx5R?-0P!Eg8$K37SC0she^&5-?!M9+HJ-$TQC$nVGSt|M|@;W?v@DgE*Al>XRDZC{|xu%G@I8<+6>e`D+1V@#gm zJ@NQYP`4=sGHA~d=r_r#*qaTdM!EVp$2Fx+adoKMyxDp>A{FKQsX=a4yoEFCuZc}(qa0`M z3=z`V&9%n1a$6&3xc2Z%pOQ{L7x49QjqZAwzn-;JpkHP5w-nq^R~K6SrV#$y^J3_O zH-!Yp$$Bi=_RowuiDh0=8C;G2m-))zn$?Gc{>ipr?rJgUud55zE_R~-@!+}|JU=zU zxH%gi<#?KoNFQ}dq#M`fP{u9~QO?Q`U+ddifsXUVXB`T*b(?&~YluYc9A8l-T?sAS zC5C(b(4U6Zskvn?$d76g_&@5dKPsv#zuz|uI8tIpGtH8ODio6{Qoxw#;2;^4?ipOO z%Nks4y=71wPuTALPe>pH55e8t2?TeyAb}7pgkZsg!{YAlvbejuyDjdp_~OfA3oLSY z>Urz^aOzZDeNS~y*L>)js_DMF=XY&r%e?)=)hnOqv~rHlgEj5HicunBwd4CIMnNHZ zc(uwWmDE(>x@Gl%wqSoRHfl7!0wP_XJ?0`};6wT9F5v~AY`=2L|3k7?1=(6hY2g|O_P?f{3Df?+)vCQCW|!RO<*x;ANYP5x-3$p|ukKp0|kw`ivHT3nUE zn+Os_+?^NNpM{~IwAp*5pN`&DYgC&cXCJ#_v)Yi?o^JS77lvD~Ws=+G6E9>j^r0rJ z_#yz&{6;WabF0Sk^Y`h9M*NXN0dTt${p|N7HPVZx-Mjg(jrIr&7u z(-_=Exb~4VYNf<3^})>j{=01iN4KZ&_;?pSGur3C4G71Qv8T_BPcvUl1y$3QR zZo20z6reA6RrkGF$lyZ9E|Wei^Lut`*gB&a$Dj79HV1ZZ181*jV+4{^*qv|EHJCEX zDSt<3P&1ss{9pFR0qYO5mXE9)E0?{MVO~5nByJPPKhd0K1SwsrQWoEQMTxxXt`Yg| z5;7?Oe%Cg#cBwflp~mRU29L#jKu8p^fAeSCf|T^vdo+4-fitd!Y%1&nCvCd!ip*<) zOsN!W_(uqz^pIqVA<^7;ayc3i$CCSiv-gwGmj(s>wf_Vv*U(-wt4*$mc09YUF(*)c zQGzJC{qYer0S%8`K0HT$iy;0_Ffv zJmteg{io$rw$*6C!(`Vur$9k>iZ`nmVsBP4jouiz#z(T)iVB?x#49LTS0^4p6xohc z6?eO~B@H%%&|Wm}+7s9NNJr#1j6PrCC1s7yJvEwNadxePWK5tj(U6ZKG2Y>XZFnAy z1q@75UjBEEy#;_@>Xu}BxhHB~WaXb;b~>(f92SXgZt;knyA@7!E9Wm#oD7r?IgauL z+`8_O_)4yh-wn-*o$qxu+|+SYZe++S*@s3MI=?ZpD(2OJHVZ5XxUl>ARP49_G-t)8zzV#}}v_HkN)Zu+}(fBN_vD=AkF zD{28Fg7v5;fHlQY*)p&$wyVlRS zY&x%haRNf%SuYlYi%PAduB56@d?bQ?n<7F!BzK-;se%SfJ8ji#GkRZ*n0|J|?{x#K z6(UO54S$kMoH1{6X?@tHu7H*EOgskr9bSVndhI|Bl9hpgc4szvl%K@_j; zv5DdF#_w&NL$RCMoIflQoN-USF#P=+wudXx!I?ENh%#x3(!A7X42|RDmM8m-*)z4u zoHm9X$EFyrLuTXlBDlus&hg%Lw6qQ=PlTMcXf#V`0XTC;2c1KUJ=vm_rw4_^39kLp zfG;K^rF%n%`~=GUDW4wT#D1&JtOnYyOi4i1fUpf2M&=DfnJvIC%w&@V(XaDJjO0$goW=oz)_>)Mp6^{^*LS_CS zQKFp>7c0p>gc`~sGcEL&xl*VZh0x#%mm|sFXN$x(Tk+L|^m=E~AP#(3>#{|mSzNE= z>8;AW?RcR!6#;H=$E0hn06`%ApH74;K7?GwJ` z~ z|5ha0@4uo4vO|j;puEE(bbZ4jZs|i$8}9+@3U+xNPc6V{%u9!t=CeVL$`}gxhtcgV z-B!chluK6zVpsD1@Zm(Y^(vT@S$o5;J>UR;ypFtKhvdZlPiv5dt%A9R`q%wGniss2 zo z)4l`+dhu^XgbUz)fhb#C^AN9v3N#%dJ!HCU_z7(I%w@T$*86T`-X5jmeBnxu(FGhn znG8?D$i))wHcUL}x-R542>`G%(d>e`x3WfMAAgtXgS3j#g#O!Qe?-l)tHnd!7|~m1 zakm**!c_jlCx5h?J8q}pL(YTXF_DIXTzr%{u+JU>pWJsm?)MN^L*m}oKHNIC(zai8 z1i#~pdj?deokf)hPbu5lr(!(J!n_<#6Q|jDRdqrDUVo5ee-JilCr7AY$vwTVq($`2 zystq*48T*A0brS@mJNb^u<=-s%5pGY#irVsT~mWk-?9eC&Bh{V%gHMPyIGIEAA=0RMt=jk>Xm!FF#zVePU>@q59-d| zkN0SIdT8S#o1?!~-Hp&5iyEdJu2P@B=J!5Hy*Nj}I{AJ_gBDDVow!83U|no&Iw>t) zOEo@zb03V9J(7l65AjV&XuU@oe6Bc`8WvZpl~rd!w*=qS^ZZ zIbi)wEK_TYr}rfs>?JWw?69bwg`|PiGtLL-hfTT3s|;dhAmF*Q_;0h;Vz`xt{2uiC zm&Jvle)lcf)1or-zbxe}R)3qVA5T`($A%bAaJT%n2G#*!Wvt9$=5*k0p2se)07EJ6eSo$QR$RjT-2wbPSl z6zoOz^pD_!!X3w0KdEsPO2kwP`)y*eUHb-cG9R{n8YW3^i#hzVF1k5AtNAvDhNOq# zQztI$`aI8-sgUnFTK6z3;c&EN2sk*G(d2(@9wKs88?=e{P%S^5U>~*8=;kpOkVsaa z>q?isS@$+9d##{&9ajxXzJphc(bdR3DOqip$1jx!w-@fLKAYQJRL+4z@IAb!pEaAJ zM~U;BxwALDI&Ytfg>7@;(b7=Eu+4hdH8(Po=S1+PELx{}Y3I?WP6ODr+3Xm*X$nSX zcT}-XI*Wa|1k^ihGuO=nOT&m3Sf2~W!uROWE+x3;ru8V^J=*^!q_Jjm=tXRFu0Dd^ z?vfed12vk6yYo)IHbesHMJ`A}_G*0b<1-y;H^|W}M)5?v1t@k=a82IalN`-_B=K-1 zMjPp=ux~GJdbN7wjS-9=cBISKX-rVi_hCJo_mEeb)s?_ah6s>>+Q{ z8J_Oxo_84o&BItPI80NdAj3ZMSC}bMz?iorV)vO+5RO(+i<6p>FUwobQnm(*j*6xI z_&~ih<^>RPwcfo6>@hU}vU?7y*%L{A>`Vr<(fM@K+1Y@VmAsSb)CBd@YH7e=PQcOGUn@DtxK0|l1-|_FgG`(tC7GZ$*ya(65 zx1!YjZq(hHuJi3%1J_(hi~_%~#l;Q)GBt1K-6_P9zaPHz|%@Ord?MpiE%@tn&+gH-H)LWl|g zcUUarj-HjW(JLxZlzq^HBxz^3QOUA2GT%@Uu6R_=8-*@d&^{Ywt|RY6t?`hU*hM{K z89y5`;iS=;Xv;IFnqCekahjz~_hu3?OLl0PY!eVHbXB-9hA2oAg7D>!TuKc*i9AQ- z;R;8Br4y-Xs_{EdbT+ZGo|E26ZGVzoF*8i#3ti|a5@$8i5_uC;$B;|a3b--DqOWk6 z3>XTBX&>HewDnc!T@odDU&gv;?WegtS?BsKy*Pb2*pWU>l6Hf)h`D!o(vd?&lT`db z|8*f{LXy0Ye}gV^ew++NGb+g82C!uy@hBVQi0r+)x5{aYep^iGpWbLlgPnXrJSjGlRLy|vj%T`zKJUMJ$ zK#NURHk(!^BvPWId^-R9ejt&Y$QtL@4e#1$4T=bmeAlJic^Y7s?~b=gO{Dt0q5M8n z{Wr;iF72X~wukGgY|<4|{G^9%u(wzf=4a$3YNf7;_~xO%UYqeRLQ2o3O3#Nj7gV6Z z{h+N+caD+sf5>%I;v|*C1=e-xBFC_T}vToufvS6UL|+&Bm{x;6c(BmZZT4kMub5 zU#GS-Ds^C+f{@76S~Z>g-i4@yC`)c|`2!!Go9X|3bDU9GZr@XyR*TanU+ z@)gD4w(K`FgLs=bJ!vt#nU%?)?}&Ws4=_Pr0-Q&C3EU*LtD71pu=2y%{$&#;Nb)&& z&HMejZvgGE(0=M``oOW@ZgN-p_CEsPi-#7l$371%@-(5cuOG(=mZ~`IO&eMC?T)Cr zZ`T!=QO0sjL_BS*8a8TdUyA8JK!t-*rr3fg9+v0_&OfxP@)0>$tLr>xmXI9l&gL%w zR_YHQGbFliF|(zzoLT=n=yR16j(I?W`X3)>OS6I`oYQ78(^))1`E)G|1SVvBEUzKw z>%GD~QlZ;Hdz{5?m`^ExRv^DK6S}v~OudOs_gkVC=bou}Xils~ke$z^ zk}zZ%J6vJCc+wBEN`^sqZthX;>_~PH&C&HAVH*W~OJl->t~9|ud*;@BhviAENM8-^ z7LVqZiJg=A2m$+R6w^Wmq}97lqbP2WO-e_9vzFbrQ}0P*7$2<@MDexwk2&~nQbHbB zvYOj}*zu2TdpW@9j#{;6vhN_7t_MQW{mGLHvN6M02J*!=}l#eZVxrYNNO(Eaa%-f`-rxihKr>AlHF4 zR)yAtdfoW0!fLDCF{1AH%2K8DCa8LbjpWrQe1+>{j`=G>(bAzPZ`0$t)ssifvFYQ275Q& zVU6?Gcn%(X5t9x5wF6yZrzh;nbQ|I#4R#^X`=Rw@kLW+rx>6R;g~|k%{5@Clvv3^@ zq4iOXR$=v46=!ZvWqOK>izfX>{k(CS*c>GgWmRs)O@O@Cb&-0aMYn?sYkC|eS_E1-*g5Md z);a)B>KIvM+O@mS4bepi)Ah1nKiS*a`|fn@jS^33%@MH3jjQJp7sX#Dj20xTBQUO# zGYc9!qql&_a6TQJMk*ptyQt+$4x1w-P-x6{|F zX8uTrmQ-gsagO)DAo+cUEw2>u^#h0GCw3v zc}w~ISJ6Lr1B$<*^|wviS419LulUnrQJ!fpdk+`-kyTKoE;@X}fsf zspvWqR)6#yB+NzHOIaxV1kdKxP+4T>fh#S#<_P&KR!7Bn{X4IrGI?bDcxAZ>{^@T^ z5sm@^4sNFJkySZ3T?J&J#TD`cMig%iIgZ&(U`^UAo=+lUlr`FZmLc^9c{bje`GcY~ znT3NZTCc-tlUYosyI__XaC1T!o3`_KOteK_CYs!fXbZtJK4tAHjwx)=gi^RDT)G7O4pSTTP&nWV<=L?Oi!;@` z-4WUcvdP2RV(Is~M!LPij&d^5cNg&}$x^RO*)(7n9rs|`_|MwlyxddS@}1FtVmc#x z`qOp&GeL$-d!8qavKUt0nLj zf=M$Ub)+eYAlU8ECHOfRr07^g5M4cOF(#y4NGpLN&XS_F)4+GHk3ZoK-*uB|&1@?e zAI(7GGkH%5Zy>gBVr~OU>#~8MR?x}5Hjn{`qWc3{E^<`vVz<_XiuO2 zn0QzKJ*_lr7SfVtV3ZZ?f6qK+MzZTj=a8OUeF9VE}9vZjfQyQp# z34ZDpv26%DAzm4ld>T8c57<2*{UjRkQT>^XE9Iett%t&1J*!ovuxfW#XRLPV;F9OS zwu|GRfL{H4^?LYeb}@8E8v^ zw^X-wUr&wMvrynG>)ut8q@V6WWA^c4zpujh!1}mvrFCN*R~4V*gIK{eFOvavp;f`P z8PiiiVwK9bY~496_@#RR2R47acY+`MR|U>D^TdQDf-zv3}F1oy?Q5O+mchoso$$lc8~Q)-WIbV7+@t9+U##uxc+C94zg%mhn$dLY9kf61F5BAd`7V7e zm+;t4tIc9{i*p$&LRGM-wyb9!D}2N896sC*cLj~YY!SwGRYr1E;B6`TAFLv?7NYB`|7u$E zI}0m28Q}ZC>jq(PHk@s3sb$GZxjt%ds_N1IXnZp}d5XQg`7_(Umiy`6Dw-Xo_TBUs z1R`y~R*c6QH3X67;vm)}F z35TfVHi19)vUWAiP{A1!0UR#pZ_N)k?{>alJw~=jFTTVtz zYV&Dra!YK2)Ax;MO=ptxsCF^xJH8M}VYMs$Tf1#B;s#=^ULLMZpljh` z96>b7Y|8K$1!p&opgDLay838mH_TIGtpcsH8v15*8pM+&!-~Ry%?7w9VQ$f~Jvn>ITSn{|@bX;R1Dv4r7# z2e|w9ZwJH^%jO$s3hQ>HkumV8*YKQm-vP1$g&P|He$hbT4Pdp)GdRieRJt(YX&t$M zH(|Jle%MlxtgbUkMf6#bN?_^Wpsr$4MXoy2N)wmmrG0{~oZB%1T051!JJm9=zVkZP zWI_*+#56rX%#*)Kt10k*8mmnmI%z3+n(xTh&Ws!(WNEE~a4XjHkSz$?dFGEWC=UvL zC2jj>oF$4h89B4UI9vU4*g1u%AvF+3~ddS#|1Rvk&%LIEHU|-!koRdRmwWrku>|oLCVlS7s7|irkH@Hf_{Z{XNrS!eSGqs( zFR9V?nS9b!0;CwF>uu`n?B^OuG`Dk~|vrS8O%;HgDyp>Ji zMQxxjkg#Yjy5-pVsnDFpFGYd3_rV!v>drCpO61J6dh4ZRK{DvRDjP&ZqHhtRhJVT4 zxNoVmO1+vI%W;H3#h$BLsN}x-O8UM1=nhA98l-->VbAR(Be*cM`*2N%=#m|)=aU%S z)y>GUP=kr~`v^@3zfhp^X#??3%g)DFKhl9rZGz$hUhfw$SmDn94f$fCb3@mQc@k@^ zb0f|ob*>BQyIOHV*9IijUo6ZO)nA~DK3TtPiP30rOktSDo{=#QYud5=eI(;fYRjF^ z*$gsPC?)fjwj{)4X%E&*9NG??E1@=-I9(Znzs&=?nb7RVftDKN&x zX@>J%Hhof~ONwO|L(T#E~+j`d?-M^sV6#i?zL-R_t#Zz z!FfP=JIlS_4Cij%7x^a$CjUz+m_&MX$6mNeB7KO-B4%tg^g1VA=8|9h;sD6~5fZZ@| znw8_au)K*%r8|*AN->lm+0K96PoXEB+f=1O57IX7;3goa@O??epe*FW@u8fsxOLrT zxgn(+ew~q5R7+p~%D*}#wB(r&Y(N3lxhM|N!Eq80fp-3r=#&2g|APz{>77Bj@Ehmn zv3JQ#$JH5NJh}F5%fRiF0kDf+5ej=IrJBgmTxV zKZ}H1wYrm-hD`)KP)K62cCw?TUgX6y%pOcXe|h6YE9m=Rnz-tHNb@u;_mCTN&5&61 z|5wn(DTsVUx&QO}^WVeBf7fwu4r!34<&blr@5$ApHJ&WBLVEiKiarbB7C4Kr+jQuV z%?W1dx0p6q<+GWP1Bq_5WPx{tmj#5L$#~1>zkP0NU0Z%gka3uIvjW`oyZ=?YbZ9Pt zh>e3`kx$%c3F&l$O_pSczIsjI5?`kzXoMO*23CEF2$l&v3Ken1%xk$V^rsL zrEz4IAfd1IFKUJ-Bx5wZ??8HE%xvMAs-JU)eKiFNI|u0M`F5!8+L?8vKkBb(hPL_P znQzh0jW4)4o~!&#vEUQ3&7D&4j`nXO>u@W|E}0Thi!ox*6uJRnlW^Od!hW|6JQ)yH zSJ9Rg_TJfO`~)Q2!%o@mIGNgpeI;W3Ou0kKl4niI~df?UfeDH0yGvbohv^N23D{b6Re zSD_XGU%oTk!_XsvHJg)c%-^D|+}lN~Ya z7?J`&U%`J2i)awH10hcKb|KDS$I7Y*<25dD!d6vc54 zQMgsWJ4Av0ZSk>;H3pV$1k8&vN#7(H=9|+6uEuSsCELA!k(R$?2&W|b27>99#K6mp zqJdQ2CGFz>k^`~VNQKCht)SQN=fa0n#@ zCQ~dxuFThk%$FhYr`j3LJbj3~%C)+@U0k{XM^nv}F92m!OOx-#-qdd!X)4*!-(`Z1)|1a9^&u5N1hW^;5LAx{K;IyeUwz?;9qIt_ zdgol1z|s-3)zOa#ja=?pimI1)6ibO;H{!duGl3(EACTT!=8KU)byp;OY=T{GI2+2} z7g>GzQFO9u?M2%bt#zsk2YI;_|A$~qY$dro9CgK<9DcDoIPRTih;-Dt>J&w_8BopX zrW4}@y2XI@x??_*xNqnSZ;VMC3{w$?fZr z#b3-7U{W^nyIx-RH_71BNU4_vNBm~<#T%%hb%OqsKyG%y;Cw15=DTN%yXc zI}(w3P@BugXKCRzGxHUr%*KB7VLb&06G(IUy!U93$x-%=e8RnSSfEuJc0-DILj`-3 ztM0tIhp(!Ycf~!V|7C#qatbnRVT} zPc^Ui{jXdV8V0K{Dx-2LIY|R%Hh=tjyXe3_GW0L#Skh(Z2mi!k*}Jm{;};oE6Cxp# z^&!Gdike@_$TE>(MU`Qpgt!AK_7$NF!pgkz-2`1+04EH|ZvN$Ff-0gKvcknHJCP4k zOBmk;9NP(&QeuZkf~o4>c2oSa`9?^dz;dxk>MgdF)moC5OtYB)7W!P{@4H;jnZ)xlHe9oe$&74l z0G9-9D_a-$&S+4maESlyd@o5~bC+dS;5O$}%T(9e0C!03PRn4W?z#a!+%STqTMSJ` zj1j`@{4ZCsLe3dLHE`m)L*aNj$d^DITlo9FmOH_t)TR^lj{TTMm37XIqA@`PcZtsK zk!>{U%y-r3TNq1I;Hq?W=whYfTsz-;u#%jWYq81u_76KiSXa1^FE=FhnrVvj)j7j*0w$_IPINWG&%w4e{44b-lMM z%q3gXGmIb4-);!IlSCUfQNZ$N-IcgiJRD(nfe?>qz*)XyufQ?-h<(%7_io;ls3A9@ zWq4pWdsUFCz*WOespk50pKyo0?O^D-#_66DBehDp&$>Fc$P(vBqE!pRIJTy=|3FF3 zOkhJmU$)##mP`jAK}5n(AXhi} zPfT4mx;w=tQ!;|*u@)Cn4Y(&!7zP8iIMDO^*r9d{8kqq(=m0>PwyU~ZfX_Q3@mf9W zp(~ydw(I4TdD1{bp}~5%Nb${U&F&W|jh(uXEqiJPWVG|yo8WGUqS48@sqtH?xSDx$ zZub?ZyzQCkwBI>?Alh{koRIbUH+^URy(B;UQ=?(66dexw^2TPrG?{HNYhOmT3pO}< zm738px@}=GxoXi&vC&x+?0sPm$qhIVzZGQs5t=QPy4GR*OkzLqBJ*S5Ey)D#if!+# z!5i}wl@>F{7Re-&%8G3d)@@ZzfP`vGfj}nOP9l6Y5D`X{a3h~-GSq>emG5JkT&(QZ zfy;O4Z5!trZ-U?X+K5jUHBM=XkAS=FT#nW6ifZf^eEH+12I++GZjx^%mN{Dz7mUzAt28-3}G7xr5t> z3Q=sSkt^$2ez?JT1{tq@q`&;N+VU(>$`WHc!nVF*kxx<=Yn*%t{!TKH5nJv-QTS?jk9cb_#vhg%Ryrh(gse;Qj6Y-;F-)#OL#j!&K04>k(Sk368w-D5?bK>r%Hk%Ese~VT>ps^%)C~w0`6w)>a9NAz zPag3JyEd+^9Uvw(@5sA_?z0_(TEKvq77=XMG#rkUkf!xaWqjCb=Go>TPeRYT#-xL$ zO*$kZ+eh|-#|2u1r%~_B0Vd&vt!`bsiP;x*g zI(rsEC!( zLvhA-^N|5E-OK8-dkEwV-pPl*;bLVpW7FL9<=nzTKcuks*6PRT9+4^0&(Xc_AI~L! zqbF8MAF>sB#}|j}scUX1>V!p*y9UJAxdULk=SZq^E$!I=kpLM9GCB2V843N5t8vx2 zCdOP#CibE*#{LM}kD)@()DA;pxet$rhBEh7?CoUpB-|A_hvA~pT+T$+{2IeRyr(WcMAWii{-jZz#?dm?VLC}2v&D6+d_H1 z%Vq|jV_d5}(+$)n-%+wX&;RsdzmFD;ai9`g#qZ5bT!z0<5Q;Sz?vP(qEy1w9? zJtWH$!c-RmFRsE+4(|is)6^M9X7lKKn9XVud0sW~lhdiJcWr;)QkNodefc{_j4x{c zX6%jF2-vIk&joH1wCbqWX^Y-nxXt8he04JD+``M<)oHkDBO~~CTYAoe682nvun`SI zzE$}Qa%)G{A16_qf&S@-x?jI@gm-1LBs}N(tJOP_$+PDqaasP1Xqn9Hz!hr$_ zY7B9P)`w>blA^sBRzazl-DE=miuA23k-7K#Q5%2ULV7^CSshY>6&?dS6mjf{VSrGz z-V370kDD|oq9+C(9x>hkwmDSTBJvoCCtQsBw|?F^4!I83Eh@SawD#&ExCQeCCY0cW^^nmrOtS3rqF(82PCQOv`N(!gYZFyjg>BVt74vQfPBAE0 z@aVAm468`9Cn5(_W1J6M{ipHKxCN7d`gb%Zkox??8ta&z)*30p`(;_#ssw|Ys)x^u zmbAhLIglI>AkfWnUV=v_+T|D{lClDcB)3{1p@ly>VGq4jHA(&*f@B)(2d2OCO8&iN zHmaNBS`_{(lR2;LtMIbz#Us`_V%rj_4Jn)5t*zIKJR42iC=l{VSaVbt)r}5IxF-Zs z`YD>f@cu&4sk3DEDq)Dy*aWXY0#lz>^#_HZ#$@c`Nx>WU(kfrUbX5Xj+lI+t$eW8h zPKpa#pR%dUp*^C1_}-x6W7eY%RzLJnB&-W5!3fGM84XK%gQZ+C(V`PV{>VX@Z7$1? zbDsn!GYX0RlQKl+-%ohKiv)NKqH2KL`>Ri%1?yvW8KLM*1V{(~s$ zA5zQmgz~-obxo2>Iy1CIR44BGd>DpeM-Nkd&Au?2_mlY=tyX({KS|I{7JOPB$@asQ zR0_MtJu=x84^`a5rH|vcu)&3%)#2d-$8nV?V;RjFoD7)^eMTMHRzXdzIw8*}lbUKw zh?htxZix3OYA99aoz|yMVeuPbtxIXfvOH4q;aCa2Z&dPVt3Vz}r$cZ6y>S%rK!s0B zySwmW$;_5)6e7fSo#2KFo;BCZajkEr&)itLDz~uj?F2eHpDS)xa|Mcuow{a)q`jmX z49Fl>R3-ZY-=BY?mq8D(!!|Ux)9Dvao@h9mWU!ld6e?5eIb39sw(xVAiI@9S3a$Pf zKYjpYnCZqjx9W5LSjA!Q^QGLTXR1|h&D@4b+iSk(NqZdduid!om>=a2Tv*uX&(-oc z#$mgSXzQ&6*HJ(@5FS^$O<3YMSHhg#d}CYZR6E;kG-oi)M?cVX|F-cvUdHmWzo2r! zD`(k5q1XP{_TclhE^&}%y$gL)T+y}d1IXV`E5CS zLy~VBY2m$H6%_l{$|VwZHozV0nu8>`Jz9i0o3z0Aj?$ZIjPoJ4mZAtkG!4eSc|GpB zQDJ}t!LqLiYoaK+0wDd?HESgL`NgZ6%Iq6BK=exX33VFoU3ly%NKE591W3;|_f?I~ z#++`^_VGW8>aB4)Si{146uq^*w+L1D;ZW04emc*YSX-#qKU52$#87eZy#*x7ZFv%` zQmT7um2i|H*xwoODYm|WXWVo$tCXd9N;wO+8Hvu{wsPVghg>%2gPR^PZy5gmCs0=> ztp04}F1aa1u`l;P7;X8hiwh$iKLs;cMhVSSryd~%Omo6|WaAdYb(;j7M_L>gcEtP@ zR2=^EW>co%4HWim3M&JkXsTJQ@gDxS1(D&x;#ZWfNG810-$+(v)^ghif4X?`a(l+E z3b=T5=;z(11&F-|8TCLtw-7{bqF8XNizj42J1S_No$zXAk49Fx+miqAwlfEpoG#41 zxyLkU921;n5Auf!*n@&R->mEO!WZm00^m0m%>hqb*AR+&1cnPo|2<*gTG+2pZrK<@ z%WxuRwGke!59;d3CR$DnGb5P_J#0U7d;l@l*yyq*i4L?wxai#lGwA9jQ8Sw6F@!0d zfBuX*?k3E3&^t)E4@z;V7RWH2f=D5XRyR5j!t;~>9qUaz2 zEDjG^evX%!!f|rFt{qrXq3QlBR=wKoujb8F_g&#h(Bv1J>TZWMzuZ3`RIc$x41DGDSf5{6p&8;}B1*f?Og*r1TjRCqMFBn+9Kx4akF59> z2O`sbi8^8qrujNppL0kJ2}gFE*<%8wQCBI3FKS!1#&1*1d%u^p57l;#hgpO5DaeQW zPL2B%i6-Bl-UDIWj#l5yw8>f4)-uO$%o zu>_)xeQOmf@?Ge=1CI460JTW}Bl;6sh~*vjnwml0xk(&k>*rvNMcsV;OyapKzr&Bn13`iGgNObS0?g+ZBwx)Kdxh0kD3_+Dv6>$}F!DxQomLSu_5 zs3Ohpf@wgFg>iUwTX6Mii!oUrNXyzS+2YzqU2?^+&3iZ4oH?7#y{Q3U*0y0g7osBy z3M#?~q*gU_2xGtNo&NPyZH{%{$PNpU{6s-)yA%=<3*@17-T=*^P+OO=?;?Fc)zc*U zlz(~8xh-ZPwGI4`5Dq;+S!{4l)e7_3eqf_9Z_mGyqm#ZoDXNeA6fJX+(WGI{Q&4EK zaBu7wGMnG>$<+AJW^sn6zH6%Ns=rA|t~&e1&%;B==~~kH`R-OyR`<9WTDFc2C-r!ijyei`%ZM@ykj}Cui zzQ(_uh-9Qm{T!H4w=u~mA?6jqYmO$QN5UchBT{@G)s{k zbL2|-Od!a!$q{7r6){@;6`??yKf?!=5_Fn2ml9@{KW$ZB;E;8^_0DG~>)H$*@y-aB z{tC3geJ!!Tm7nC+>-7nqQ`^~SE#}I$)F-c2s;%OaBwniDuVjHXglQ2R|6qPPrNom_ z0Zr+Lb53u~X$0f0koYA$4*<|O9h5Ukg+;=zxJi?EBEAf;z9ZOujT*coa3M`_lM2ih{ZP2A>l z2CIgj8-D@7AKRU;TB+7Dd<=VB#HbC$6ipp`$Bn*MU=KV5qVuOWI31<-oDwBhdr#Nc=D(=Y z)uN)vYtiiBdxnwyp)Rg{w}&Fj6kGlE2sx=-nqCKgn2cFRTfmlT?0a}-E#W@%cfqXa zf2R5WZkR^qI*fwNqRJ~xfg%zRQpuiQBpI# z@uQ?EE>F%tyxu)+@U%zx*P3{ysWpclxh3(y5AXPbylR@@2<_sgG}%?Nnu!sXqoq;m zWF^&cw%0cx)`j^JZ9H`&cYr3Qe(eGL_MW*Ut?ZWJ%QxVcZ!wg14wP0fN~!V9)C2(6xn=+QJjRj=yAK08l(QxBItQ7D8t3DdCSkspm|ohfHvB?g zJyYHSGq%aR^D2I9nz+z9#g@D~Br)%+;Linyj)R6)Ho9njn+4A{KkDyfDsLHS)Xx^f zMy_yni7q}Os^1ujNN_c&csyI*pYpR?&e1L<*YO+J8gVq5O#G!}x?_(KqaJIjmJxtl zDu+uQgT^Ggqc=$l)u!4-alK~D%&<)~(YVx4n+Zlgj-4z@<$0nE9+pe5cTntSB87k= zh&4YnM3tBAt<>#&At@{87uM7_Y-0aYjq;n|s-!!v?_!-y#hvr(r(Z8G)t!;{<}`iA zS;Bb{%{mK9Ap?5YZOEQb0_#bqNKDNl;Y9K&EA(y7zuG5{&#CQhD2ZC}g>thfSo z9qHS?Ks@dKUEg&^HcK8w`F;(yCuFe;o+Ys{vpW5so@BXJnMDWNl@95m{ywjhhz6nN zCc=!o-&oi@A$YiEQCEhU`8F6*&|$;f`Nhd{sP}W)JL+E^6B=N20US<|<@8+R7-Ki9 z9Hg%I%l?p`x1KR=$g)j=fmq4|ieX*lsB_)uM_PS1v}#GVB_6qMny3bZD=ph88S({~ zL6sO7cb63TlPql8Pt#Y9YEn190CiFQbk+OzqptrTf?y)yC8l}I?32%iuPd7{^OvEz z`_lB6?I|^ihC&e0^P`h8VC2yWFmm6KO+TMTSJqtM%N{>+Ah>&=g?fG#42T) zhXBUuV{=1RNElz9Le49cy!m$H<51N^qdikuwBPfccntSLcOdL+*_HhsM)%cl=m86d zCOYJ+c3w19BLz<36gAEbx}dg@6laho;B9?ju(0puuUiRnal6nfV^PZL9R44tnqhe3 z0j4m0TKsAp$f9I9e+c1z+{#9(xv-M2X@dFZT#+tQ`BvYe;*jOzLh+A%eT^8h%IoRkQm=&`(xB;XSzAs zG82^ZX+^P{ls+u46m4MTOk(9+8KIm+Eho@rv^=vCK!&~nI_TdR|HgsD<#uY0yqr!UcKgTp(7MNR-q$p{n&bP5UIK znNdd!P=1p;uo}zXtY4o3Uc8UIfH{$+W)HN}QWC%A0PsS9dC&z?&;aopApTF{%bAUGGIG`xLLrS0L5HSVrfXtjFf^Rb+!H1zu98VL2_fcKm;M;*~ zFGXT-lF~1A=8M4>A%CsFYbU&SrHOTI#DKhh*@>9dX<}fKqEOi`$M2tufmTJ4O$JfU zcZjknUqoMDa{fwqhIW^q2KQUtTjvmCCT;WAyU|bKT#(g_d=HWHw^g;|LElkB&P&04 zqI>%9TvAJ7q4eGZF6=Mdd#}3OwY@HP#h0$&dXSAykO`A2`?c$sY`laEw7^HQLkw0Z zcWNt88B7v`pDTCpdmx}F81_m4@=G>~!EXtvje)ZH*I;}I+bq`JuP952$yuAP^vhK% z#aGusTz{8gc@xWz5UOh>KR~EzXN9GpR z?L`>}`i~VsI#{pCAn!$@Jbf{Y?bo|eE}WOJ?*v)Aw5_W3BIU(Fls}Zk;AARyf^@mC z5Zj}CKgdX4kx1pks*{gQO+HTH*`sSUP-mKdz2W%QLtmfLiF7;*TBpb0t{2obE_&|r zT)NBCE1117&T5$4(r#$?pQXFBGY{S;L4M|vcwDEJlVL0_2Hocv9iNzgQIbQ);RF~r z_rcW(^3aj28=ul5j89fNK52NwRIk%vrfX|yZ2hYW*UE4`O9og%s(;quuhNCFnOB{dm;N_b=>5|C%Z`5%DzsuhNr=0CQ)^sum|%i+N(c30J__ zA)w9-brbL=P@kq2T(?3$pPmlTGZKi^^OX?iQ3SJ`zZmpzAy$sgrfJEh^zPRt5hK(~ zHKvullbl*MUCkGKtAuX9G znXMERenuk+n?w^gKqdrjHJ$EGqmpcDwv&h(F^Ra9wa}qzGc&9ecSyt?YYULk6veWX zvVyCtVb)ry9e0XF$lLSXdtdkM*RS(KjWat-Rp|F~-+A|*`}58@_nhyT_^IamdUBW> z?@Y8!#^m-;xI}z2fnlH9%YP5UKG^0>TSjv%9tsKv{gIXj|p}i^SIPf&MR{MC6#;FVh?l*o5oc5 zk7-ARy(6jIUW+}jPhf^6m9zMkIu26VEjHzTmRJrfO0%Q)abmeS8N$CHsoc3lez_Z^ zjck6R-B4o|dL(J2+r9T|3%wTk-uW>4+4v$$JLKH6)3Za)CHmUpsqK)r!2c_X110CO zjUDpVLE&GKMDMp{hjgT{Lz@14V<~VL?-gg-@DwN_-tH!v=?OwzPNSY>SN@ z6E?Re#93N~4Nl`t3LenWw5feRVJCjoVh5FTE2P@33g9qJ+mynmSxwv;98g3 z6pQR6%d6d*n#z)@F0K3@X{L9WJbOg3h3-&np-)k_nb%wC*u4I#Vk3Q>SfltC#eBVf zqTt}Ypm_O6p{%!j@Z zsn!;fEZ$Hw+c4<8d$51qt+CRgrwyZfFP5{<=tVng=F{&lHsemKV~%~_cxO4 z?kCy3h3XxOe4<5RZ-yPWD9n~2b~${%mK9v`u0Om$02K&XqH-70Zztx-9I`|`h@TChn@^gmE*?Raf z1fM~jSZRTeGkdx+anV;?t{^efOVN1apmfkx1K{wauatvdW(^VL#+`#jW1@8Qgd(%CxLhr{I zgDeC3Ys)|BWzWoEj(xL-+;2zCrXZ-O5~18i-`-2}dn z&YRy&{nkx=MdP)zjm8$2&uMItj9%8Zjg^ypzJ=uTiZ&WsB%jxid|pTLc>~GkjS(8R zB%k|9K5vO&oY5GivCT1oNIrL>zA|qe&o$$%0=B%-Yo}+MIyJ|4cw68*Ob62edPO{k zfHX%;})adrG?E7xJ1z>d>o`b6GKm)PbYWdC?aMI&iDdfl*%2 zxPkrksHlTkUtBZsnSfmaTM8fl5Az(5p?zCL4n?J14p|S6;?MHDwQjHtfR1S&=qk~G zwe=|M1QK5|W-BP=IkgOr>2Jt=2_NVCSjF%?>fLiiQJrx3o0 z@JobWA;;ESP3?~?@h9|GmIXg$lcpB|Yh#7B8aYx!kF$lr^S|NzUT=Y*w=MOFKBW zQC(yOI~%#1m2;c*0R~@}KMof##(l~Pn3H~;^qWDy8IdQMYw1fYz36M=lb^Y0O&Z^P zk=BP5Yu%A{=HR)F2iWPzo2(3eZ@K;aTn{{aWjWdsD88~>`ib!ze>~r+4L(`!%dC~^ zoheN9e?Y^mF&tZo3yM~R%rM9 zcq_a5T`?%}RTeT5_pQ>Fe;%fEI+DFt| zq-8fE3ZZi6?&ikb%}LSSPc+px*Yc+xsjsfD-C+{|&Lz%jDpy~1^^}BiK8r6*D&L=N7G2*V@UxTXRaod)aVGfu+t|N*uGD@6QmG z`_}J3=Qj1w#uPfY86#Mg!uLmF_orP>yS{iwiTA2?ig-7+!J_j%YB_JUoOfBydoAaO zEa%eRlXgk^5`AR3e<|@?b6C!AN;o%_y=rDz?W{|jbzMufn2Ct2-HoEK86uV<&j7#7 zW6^4NRPU5{|GR3N<(=)@n*O4;NxY>=UfV_|b+O`;ua~Lf#S){`t9{Qrt3$Q|Lqy+^Vtdd`~r46$z)}wF2M0RA%l)C z^_#kYiDe4kWaN*Mx^@}K26NS%?a_|p9L7rrv~eHLhl^*laeC%tf-1Ij{e+TLB5d96&-(mWDhyI2o z#@-QN?$O^-fw!mSmnwN~r3`;8F2nN}A(usVXNvt`+{&+Ty3nBtvJLOjcH|IbXLo^pvO$6Gf|z6i=5}$F{|D|^0WrM2iVT2Kjf}ddz83ebd+h6 zl|g+_4)3s*kr2Fzhk#;babFPHv!Of$;e1JwBb#j>%dD~Y5{}I@vU6mYvww!(|XbghR-mVg!W1x=y z8i>}3vx|5<+7>EP1^!}hjd;9J#>*fEC|k9UX7bvDf(=`!4n%O&uP(GicL0e-ORM7E<44;+>ZFq~kqQ|7B6uPySF^~=&3zMw@tkEI zoDyq?;g#RW2Ws}2Mx zggT1~Rqtxf|9^lh=2gn2z!h^jq;6^Mx0-tA28*8EkYbPidlq{6^7%XDvnIXW7J7{- z=vl72bcLRpQ}G20y=D>no7cYq=$s`gxT8P;tc` zkn|+x´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 z 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�d5E(-!~A%cNW1b-w+yD#(X$F`D5F` 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

G>hPawD=&&#E5+Bv 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%0DFnM=(;l}7jQ9LLt;& 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 W{^YU9NSKe$G*l!ca?oRZkp2${;cguO diff --git a/plugins/screenshot/makefile.mk b/plugins/screenshot/makefile.mk deleted file mode 100644 index ef43c0e..0000000 --- a/plugins/screenshot/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs -lgd -ljpeg - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils \ No newline at end of file diff --git a/plugins/screenshot/src/common.h b/plugins/screenshot/src/common.h deleted file mode 100644 index 726f130..0000000 --- a/plugins/screenshot/src/common.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef COMMON_H_ -#define COMMON_H_ - -#define WIIU_SCREENSHOT_PATH "sd:/wiiu/screenshots/" - -#endif // COMMON_H_ diff --git a/plugins/screenshot/src/function_patcher.cpp b/plugins/screenshot/src/function_patcher.cpp deleted file mode 100644 index 4f6475f..0000000 --- a/plugins/screenshot/src/function_patcher.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "common.h" -#include "function_patcher.h" -#include "screenshot_utils.h" -#include "retain_vars.hpp" - -static bool takeScreenshotTV __attribute__((section(".data"))) = false; -static bool takeScreenshotDRC __attribute__((section(".data"))) = false; -static u8 screenshotCooldown __attribute__((section(".data"))) = 0; -static u32 counter __attribute__((section(".data"))) = 0; - -DECL_FUNCTION(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error) { - int result = real_VPADRead(chan, buffer, buffer_size, error); - - if(result > 0 && (buffer[0].btns_h == gButtonCombo) && screenshotCooldown == 0 && OSIsHomeButtonMenuEnabled()) { - counter++; - takeScreenshotTV = true; - takeScreenshotDRC = true; - - screenshotCooldown = 0x3C; - } - if(screenshotCooldown > 0) { - screenshotCooldown--; - } - - return result; -} - -DECL_FUNCTION(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 scan_target) { - if((takeScreenshotTV || takeScreenshotDRC) && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { - OSCalendarTime output; - OSTicksToCalendarTime(OSGetTime(), &output); - char buffer[255] = {0}; - snprintf(buffer,254,"%s%04i-%02i-%02i/",WIIU_SCREENSHOT_PATH,output.year,output.mon,output.mday); - - FSUtils::CreateSubfolder(buffer); - - snprintf(buffer,254,"%s%04i-%02i-%02i/%04i-%02i-%02i_%02i.%02i.%02i_", - WIIU_SCREENSHOT_PATH,output.year,output.mon,output.mday,output.year,output.mon,output.mday,output.hour,output.min,output.sec); - - if(scan_target == 1 && colorBuffer != NULL && takeScreenshotTV && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { - DEBUG_FUNCTION_LINE("Lets take a screenshot from TV. Source format: %d \n",colorBuffer->surface.format); - takeScreenshot((GX2ColorBuffer *)colorBuffer, StringTools::strfmt("%sTV.jpg",buffer).c_str()); - takeScreenshotTV = false; - } - if(scan_target == 4 && colorBuffer != NULL && takeScreenshotDRC && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { - DEBUG_FUNCTION_LINE("Lets take a screenshot from DRC. Source format: %d \n",colorBuffer->surface.format); - takeScreenshot((GX2ColorBuffer *)colorBuffer, StringTools::strfmt("%sDRC.jpg",buffer).c_str()); - takeScreenshotDRC = false; - } - } - real_GX2CopyColorBufferToScanBuffer(colorBuffer,scan_target); -} - -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); -WUPS_MUST_REPLACE(GX2CopyColorBufferToScanBuffer, WUPS_LOADER_LIBRARY_GX2, GX2CopyColorBufferToScanBuffer); diff --git a/plugins/screenshot/src/function_patcher.h b/plugins/screenshot/src/function_patcher.h deleted file mode 100644 index e69de29..0000000 diff --git a/plugins/screenshot/src/main.cpp b/plugins/screenshot/src/main.cpp deleted file mode 100644 index f3eda13..0000000 --- a/plugins/screenshot/src/main.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "retain_vars.hpp" - -// Mandatory plugin information. -WUPS_PLUGIN_NAME("Screenshot tool"); -WUPS_PLUGIN_DESCRIPTION("This plugin allows you to make screenshots that will be saved to the sd card"); -WUPS_PLUGIN_VERSION("v0.1"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -// FS Access -WUPS_FS_ACCESS() - -u32 SplashScreen(s32 time,s32 combotime); - -// Gets called once the loader exists. -INITIALIZE_PLUGIN() { - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - InitVPadFunctionPointers(); - InitGX2FunctionPointers(); - - log_init(); - - InitOSFunctionPointers(); - InitVPadFunctionPointers(); - u32 res = SplashScreen(10,2); - - gButtonCombo = res; - ICInvalidateRange((void*)(&gButtonCombo), 4); - DCFlushRange((void*)(&gButtonCombo), 4); -} - -// Called whenever an application was started. -ON_APPLICATION_START(my_args) { - InitOSFunctionPointers(); - InitSocketFunctionPointers(); - InitFSFunctionPointers(); - - gAppStatus = WUPS_APP_STATUS_FOREGROUND; - - log_init(); -} - -ON_APP_STATUS_CHANGED(status) { - gAppStatus = status; -} - - -#define FPS 60 -u32 SplashScreen(s32 time,s32 combotime) { - u32 result = VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_ZR | VPAD_BUTTON_ZL; - - // Init screen - OSScreenInit(); - - u32 screen_buf0_size = OSScreenGetBufferSizeEx(0); - u32 screen_buf1_size = OSScreenGetBufferSizeEx(1); - - u32 * screenbuffer0 = (u32*)memalign(0x100, screen_buf0_size); - u32 * screenbuffer1 = (u32*)memalign(0x100, screen_buf1_size); - - if(screenbuffer0 == NULL || screenbuffer1 == NULL) { - if(screenbuffer0 != NULL) { - free(screenbuffer0); - } - if(screenbuffer1 != NULL) { - free(screenbuffer1); - } - return result; - } - - OSScreenSetBufferEx(0, (void *)screenbuffer0); - OSScreenSetBufferEx(1, (void *)screenbuffer1); - - OSScreenEnableEx(0, 1); - OSScreenEnableEx(1, 1); - - // Clear screens - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - std::vector strings; - strings.push_back("Screenshot tool 0.1 - by Maschell."); - strings.push_back(""); - strings.push_back(""); - strings.push_back("Press the combo you want to use for making screenshots now"); - strings.push_back("for 2 seconds."); - strings.push_back(" "); - strings.push_back("Otherwise the default combo (L+R+ZR+ZL button) will be used"); - strings.push_back("in 10 seconds."); - strings.push_back(" "); - strings.push_back("Press the TV buttons to exit with the default combo."); - - u8 pos = 0; - for (std::vector::iterator it = strings.begin() ; it != strings.end(); ++it) { - OSScreenPutFontEx(0, 0, pos, (*it).c_str()); - OSScreenPutFontEx(1, 0, pos, (*it).c_str()); - pos++; - } - - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - s32 tickswait = time * FPS * 16; - - s32 sleepingtime = 16; - s32 times = tickswait/16; - s32 i=0; - - VPADData vpad_data; - s32 error; - u32 last = 0xFFFFFFFF; - s32 timer = 0; - while(i= combotime*FPS) { - result = vpad_data.btns_h; - break; - } - i++; - os_usleep(sleepingtime*1000); - } - - if(screenbuffer0 != NULL) { - free(screenbuffer0); - } - if(screenbuffer1 != NULL) { - free(screenbuffer1); - } - - return result; -} diff --git a/plugins/screenshot/src/retain_vars.cpp b/plugins/screenshot/src/retain_vars.cpp deleted file mode 100644 index b36469d..0000000 --- a/plugins/screenshot/src/retain_vars.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "retain_vars.hpp" -wups_loader_app_status_t gAppStatus __attribute__((section(".data"))) = WUPS_APP_STATUS_UNKNOWN; -u32 gButtonCombo __attribute__((section(".data"))) = 0; diff --git a/plugins/screenshot/src/retain_vars.hpp b/plugins/screenshot/src/retain_vars.hpp deleted file mode 100644 index 8fad116..0000000 --- a/plugins/screenshot/src/retain_vars.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _RETAINS_VARS_H_ -#define _RETAINS_VARS_H_ - -#include -#include - -extern wups_loader_app_status_t gAppStatus; -extern u32 gButtonCombo; - -#endif // _RETAINS_VARS_H_ diff --git a/plugins/screenshot/src/screenshot_utils.cpp b/plugins/screenshot/src/screenshot_utils.cpp deleted file mode 100644 index f2cad17..0000000 --- a/plugins/screenshot/src/screenshot_utils.cpp +++ /dev/null @@ -1,224 +0,0 @@ -#include "screenshot_utils.h" -#include -#include -#include - -bool UnormR8G8B8A8TogdImage(gdImagePtr *gdImgTmp, void *image_data, u32 width, u32 rows, u32 pitch) { - *gdImgTmp = gdImageCreateTrueColor(width , rows ); - if(*gdImgTmp != NULL){ - R8G8B8A8_COLOR *buffer = (R8G8B8A8_COLOR *) image_data; - R8G8B8A8_COLOR val; - for (u32 row = 0; row < rows; ++row) { - for (u32 x = 0; x < width; ++x) { - val = buffer[row * pitch + x]; - gdImageSetPixel(*gdImgTmp, x , row , gdTrueColor(val.R, val.G, val.B)); - } - } - return true; - } - return false; -} - -bool saveAsJPEG(const char * path, u8 * sourceBuffer, u32 width, u32 height, u32 pitch, u32 format) { - if(path == NULL || sourceBuffer == NULL) { - DEBUG_FUNCTION_LINE("path or buffer NULL\n"); - return false; - } - - if(( format != GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_SRGB && - format != GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM)) { - DEBUG_FUNCTION_LINE("Format not supported\n"); - return false; - } - - gdImagePtr gdImagePtr = 0; - bool result = false; - - if(!UnormR8G8B8A8TogdImage(&gdImagePtr, sourceBuffer, width, height, pitch)){ - DEBUG_FUNCTION_LINE("Setting up the GD buffer failed\n"); - if(gdImagePtr != NULL){ - gdImageDestroy(gdImagePtr); - } - return false; - } - - int imd_size = 0; - void *data = gdImageJpegPtr(gdImagePtr, &imd_size, 95); - if (data) { - DEBUG_FUNCTION_LINE("Encoded file as JPEG. size = %d.\n",imd_size); - DCFlushRange(data,imd_size); - //FSUtils::CreateSubfolder("sd:/screenshots); - result = FSUtils::saveBufferToFile(path,data,imd_size); - if(!result){ - DEBUG_FUNCTION_LINE("Failed to save buffer to %s \n",path); - } - } - gdFree(data); - gdImageDestroy(gdImagePtr); - return result; -} - -bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, u32 targetWidth, u32 targetHeight) { - // Making sure the buffers are not NULL - if (sourceBuffer != NULL && targetBuffer != NULL) { - GX2InitColorBuffer(targetBuffer, GX2_SURFACE_DIM_2D, targetWidth, targetHeight, 1, GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM, GX2_AA_MODE_1X); - - // We need to override some values. - targetBuffer->surface.tile = GX2_TILE_MODE_LINEAR_ALIGNED; - targetBuffer->surface.use = GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE; - targetBuffer->view_mip = 0; - targetBuffer->view_first_slice = 0; - targetBuffer->view_slices_count = 1; - GX2CalcSurfaceSizeAndAlignment(&targetBuffer->surface); - GX2InitColorBufferRegs(targetBuffer); - - // Let's allocate the memory. - targetBuffer->surface.image_data = memalign(targetBuffer->surface.align,targetBuffer->surface.image_size); - if(targetBuffer->surface.image_data == NULL) { - DEBUG_FUNCTION_LINE("failed to allocate memory.\n"); - return false; - } - DEBUG_FUNCTION_LINE("Allocated image data buffer. data %08X size %08X \n",targetBuffer->surface.image_data,targetBuffer->surface.image_size); - - GX2Invalidate(GX2_INVALIDATE_CPU, targetBuffer->surface.image_data, targetBuffer->surface.image_size); - if (sourceBuffer->surface.aa == GX2_AA_MODE_1X) { - // If AA is disabled, we can simply use GX2CopySurface. - GX2CopySurface(&sourceBuffer->surface, - sourceBuffer->view_mip, - sourceBuffer->view_first_slice, - &targetBuffer->surface, 0, 0); - } else { - // If AA is enabled, we need to resolve the AA buffer. - GX2Surface tempSurface; - tempSurface = sourceBuffer->surface; - tempSurface.aa = GX2_AA_MODE_1X; - GX2CalcSurfaceSizeAndAlignment(&tempSurface); - - tempSurface.image_data = memalign(tempSurface.align,tempSurface.image_size); - if(tempSurface.image_data == NULL) { - DEBUG_FUNCTION_LINE("failed to allocate data AA.\n"); - if(targetBuffer->surface.image_data != NULL) { - free(targetBuffer->surface.image_data); - targetBuffer->surface.image_data = NULL; - } - return false; - } - GX2ResolveAAColorBuffer(sourceBuffer,&tempSurface, 0, 0); - GX2CopySurface(&tempSurface, 0, 0,&targetBuffer->surface, 0, 0); - - // Sync CPU and GPU - GX2DrawDone(); - - if(tempSurface.image_data != NULL) { - free(tempSurface.image_data); - tempSurface.image_data = NULL; - } - } - return true; - } else { - DEBUG_FUNCTION_LINE("Couldn't copy buffer, pointer was NULL\n"); - return false; - } -} - - -bool takeScreenshot(GX2ColorBuffer *srcBuffer,const char * path) { - if(srcBuffer == NULL) { - return false; - } - DEBUG_FUNCTION_LINE("Taking screenshot. %s\n",path); - - GX2ColorBuffer colorBuffer; - GX2ColorBuffer * saveBuffer = NULL; - - // keep dimensions - u32 width = srcBuffer->surface.width; - u32 height = srcBuffer->surface.height; - - bool valid = false; - bool cancel = false; - bool low_memory = false; - do { - // At first we need to copy the buffer to fit our resolution. - if(saveBuffer == NULL) { - do { - valid = copyBuffer(srcBuffer,&colorBuffer,width,height); - // If the copying failed, we don't have enough memory. Let's decrease the resolution. - if(!valid) { - low_memory = true; - - if(height >= 1080) { - width = 1280; - height = 720; - DEBUG_FUNCTION_LINE("Switching to 720p.\n"); - } else if(height >= 720) { - width = 854; - height = 480; - DEBUG_FUNCTION_LINE("Switching to 480p.\n"); - } else if(height >= 480) { - width = 640; - height = 360; - DEBUG_FUNCTION_LINE("Switching to 360p.\n"); - } else { - // Cancel the screenshot if the resolution would be too low. - cancel = true; - break; - } - } else { - // On success save the pointer. - saveBuffer = &colorBuffer; - } - } while(!valid); - } - - // Check if we should proceed - if(cancel) { - // Free the memory on error. - if(colorBuffer.surface.image_data != NULL) { - free(colorBuffer.surface.image_data); - colorBuffer.surface.image_data = NULL; - } - return false; - } - - // Flush out destinations caches - GX2Invalidate(GX2_INVALIDATE_COLOR_BUFFER, colorBuffer.surface.image_data,colorBuffer.surface.image_size); - - // Wait for GPU to finish - GX2DrawDone(); - - DEBUG_FUNCTION_LINE("Trying to save.\n"); - - // Trying to save as JPEG. - valid = saveAsJPEG(path,(u8*) saveBuffer->surface.image_data,width,height,saveBuffer->surface.pitch,saveBuffer->surface.format); - - // Free the colorbuffer copy. - if(colorBuffer.surface.image_data != NULL) { - free(colorBuffer.surface.image_data); - colorBuffer.surface.image_data = NULL; - saveBuffer = NULL; - } - - // When taking the screenshot failed, decrease the resolution again ~. - if(!valid) { - low_memory = true; - if(height >= 1080) { - width = 1280; - height = 720; - DEBUG_FUNCTION_LINE("Switching to 720p.\n"); - } else if(height >= 720) { - width = 854; - height = 480; - DEBUG_FUNCTION_LINE("Switching to 480p.\n"); - } else if(height >= 480) { - width = 640; - height = 360; - DEBUG_FUNCTION_LINE("Switching to 360p.\n"); - } else { - return false; - } - } - } while(!valid); - - return true; -} diff --git a/plugins/screenshot/src/screenshot_utils.h b/plugins/screenshot/src/screenshot_utils.h deleted file mode 100644 index abb857f..0000000 --- a/plugins/screenshot/src/screenshot_utils.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _SCREENSHOT_UTILS_H_ -#define _SCREENSHOT_UTILS_H_ - -#include -#include -#include - -typedef struct _R8G8B8A8_COLOR { - u8 R, G, B, A; -} R8G8B8A8_COLOR; - -bool UnormR8G8B8A8TogdImage(gdImagePtr *gdImgTmp, void *image_data, u32 width, u32 rows, u32 pitch); - -bool saveAsJPEG(const char * path, u8 * sourceBuffer, u32 width, u32 height, u32 pitch, u32 format); - -bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, u32 targetWidth, u32 targetHeight); - -bool takeScreenshot(GX2ColorBuffer *srcBuffer,const char * path); - -#endif diff --git a/plugins/sdcafiine/Makefile b/plugins/sdcafiine/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/sdcafiine/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/sdcafiine/README.md b/plugins/sdcafiine/README.md deleted file mode 100644 index 90a10a8..0000000 --- a/plugins/sdcafiine/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# SDCafiine Plugin for the Wii U Plugin System - -See https://github.com/Maschell/SDCafiine for more information. - -# Currently supported - -- Modpack selector -- FAT32 support for SD and USB - -Whats NOT working: - -- NTFS support - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. -- [libfswrapper](https://github.com/Maschell/fs_wrapper) to replace the fs functions. - - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/sdcafiine/makefile.mk b/plugins/sdcafiine/makefile.mk deleted file mode 100644 index d535fb5..0000000 --- a/plugins/sdcafiine/makefile.mk +++ /dev/null @@ -1,61 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src \ - src/common \ - src/myfs - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -D_GNU_SOURCE -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lfswrapper -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils \ - -I$(PORTLIBS)/include/libfswrapper \ No newline at end of file diff --git a/plugins/sdcafiine/src/common/common.h b/plugins/sdcafiine/src/common/common.h deleted file mode 100644 index 797bc66..0000000 --- a/plugins/sdcafiine/src/common/common.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef COMMON_H -#define COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define CAFE_OS_SD_PATH "/vol/external01" -#define GAME_MOD_FOLDER "/sdcafiine" -#define SD_PATH "sd:" -#define USB_PATH "usb:" -#define DEFAULT_NAME_PACKAGE "DEFAULT" -#define NAME_PREFIX_SD "sd: " -#define NAME_PREFIX_USB "usb:" -#define WIIU_PATH "/wiiu" -#define IP_TXT "ip.txt" - -#define CONTENT_FOLDER "content" -#define AOC_FOLDER "aoc" -#define META_FOLDER "meta" - -#define BOOT_TV_TEX_TGA "bootTvTex.tga" -#define BOOT_DRC_TEX_TGA "bootDrcTex.tga" -#define BOOT_SOUND_BTSND "bootSound.btsnd" - -#define GAME_PATH_TYPE_CONTENT 1 -#define GAME_PATH_TYPE_AOC 2 -#define GAME_PATH_TYPE_STRIPPED_CONTENT 3 - -#define SDUSB_MOUNTED_NONE 0 -#define SDUSB_MOUNTED_FAKE (1<<0) -#define SDUSB_MOUNTED_OS_SD (1<<1) -#define SDUSB_LIBIOSU_LOADED (1<<2) -#define SD_MOUNTED_LIBFAT (1<<3) -#define USB_MOUNTED_LIBFAT (1<<4) -#define USB_MOUNTED_LIBNTFS (1<<5) - -#define FILELIST_NAME "filelist.txt" -#define DIR_IDENTIFY "?" /* maximum length = 1*/ -#define PARENT_DIR_IDENTIFY "?.." - -#define ELF_DATA_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x00)) -#define ELF_DATA_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x04)) -#define MAIN_ENTRY_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x00)) - -#ifndef EXIT_SUCCESS -#define EXIT_SUCCESS 0 -#endif -#define EXIT_HBL_EXIT 0xFFFFFFFE -#define EXIT_RELAUNCH_ON_LOAD 0xFFFFFFFD - -#ifdef __cplusplus -} -#endif - -#endif /* COMMON_H */ - diff --git a/plugins/sdcafiine/src/common/retain_vars.cpp b/plugins/sdcafiine/src/common/retain_vars.cpp deleted file mode 100644 index f72e6bd..0000000 --- a/plugins/sdcafiine/src/common/retain_vars.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "retain_vars.h" - -u8 gAppStatus __attribute__((section(".data"))) = 0; - -volatile bool gSDInitDone __attribute__((section(".data"))) = false; -volatile bool gUSBInitDone __attribute__((section(".data"))) = false; - -char gModFolder[FS_MAX_ENTNAME_SIZE] __attribute__((section(".data"))); -//char gLastMetaPath[FS_MAX_ENTNAME_SIZE] __attribute__((section(".data"))); diff --git a/plugins/sdcafiine/src/common/retain_vars.h b/plugins/sdcafiine/src/common/retain_vars.h deleted file mode 100644 index 88d76c5..0000000 --- a/plugins/sdcafiine/src/common/retain_vars.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef RETAINS_VARS_H_ -#define RETAINS_VARS_H_ -#include -#include - -#define ASYNC_RESULT_CACHE_SIZE 50 -#define FS_QUEUE_MESSAGE_COUNT 5 - -extern u8 gAppStatus; -extern volatile bool gSDInitDone; -extern volatile bool gUSBInitDone; - -extern char gModFolder[FS_MAX_ENTNAME_SIZE]; - -#endif // RETAINS_VARS_H_ diff --git a/plugins/sdcafiine/src/controllers.cpp b/plugins/sdcafiine/src/controllers.cpp deleted file mode 100644 index f288d51..0000000 --- a/plugins/sdcafiine/src/controllers.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include "controllers.h" - -VPADData vpad; -s32 vpadError; - -KPADData pads[4]; -s32 padErrors[4]; -u32 padTypes[4]; - -void initControllers() { - KPADInit(); -} - -void releaseControllers() { - for(int i = 0; i < 4; i++) { - padErrors[i] = WPADProbe(i, &padTypes[i]); - if(padErrors[i] == 0) { - WPADDisconnect(i); - } - } - - //Clear buffers so future launches of SDCafiine don't read old data - memset(&vpad, 0, sizeof(VPADData)); - vpadError = 0; - - memset(pads, 0, sizeof(KPADData) * 4); - memset(padErrors, 0, sizeof(s32) * 4); - memset(padTypes, 0, sizeof(u32) * 4); -} - -void pollControllers() { - VPADRead(0, &vpad, 1, &vpadError); - - for(int i = 0; i < 4; i++) { - padErrors[i] = WPADProbe(i, &padTypes[i]); - if(padErrors[i] == 0) { - KPADRead(i, &pads[i], 1); - } - } -} - -bool isButtonPressed(enum PadButton btn) { - if(vpadError == 0) { - switch (btn) { - case PAD_BTN_A: - if (vpad.btns_d & VPAD_BUTTON_A) return true; - break; - - case PAD_BTN_UP: - if (vpad.btns_d & VPAD_BUTTON_UP) return true; - break; - - case PAD_BTN_DOWN: - if (vpad.btns_d & VPAD_BUTTON_DOWN) return true; - break; - - case PAD_BTN_L: - if (vpad.btns_d & VPAD_BUTTON_L) return true; - break; - - case PAD_BTN_R: - if (vpad.btns_d & VPAD_BUTTON_R) return true; - break; - - default: - break; - } - } - - for(int i = 0; i < 4; i++) { - if(padErrors[i] == 0) { - if(pads[i].device_type < 2) { - switch(btn) { - case PAD_BTN_A: - if (pads[i].btns_d & WPAD_BUTTON_A) return true; - break; - - case PAD_BTN_UP: - if (pads[i].btns_d & WPAD_BUTTON_UP) return true; - break; - - case PAD_BTN_DOWN: - if (pads[i].btns_d & WPAD_BUTTON_DOWN) return true; - break; - - case PAD_BTN_L: - if (pads[i].btns_d & WPAD_BUTTON_1) return true; - break; - - case PAD_BTN_R: - if (pads[i].btns_d & WPAD_BUTTON_2) return true; - break; - - default: - break; - } - } - else { - switch(btn) { - case PAD_BTN_A: - if (pads[i].classic.btns_d & WPAD_CLASSIC_BUTTON_A) return true; - break; - - case PAD_BTN_UP: - if (pads[i].classic.btns_d & WPAD_CLASSIC_BUTTON_UP) return true; - break; - - case PAD_BTN_DOWN: - if (pads[i].classic.btns_d & WPAD_CLASSIC_BUTTON_DOWN) return true; - break; - - case PAD_BTN_L: - if (pads[i].classic.btns_d & WPAD_CLASSIC_BUTTON_L) return true; - break; - - case PAD_BTN_R: - if (pads[i].classic.btns_d & WPAD_CLASSIC_BUTTON_R) return true; - break; - - default: - break; - } - } - } - } - - return false; -} diff --git a/plugins/sdcafiine/src/controllers.h b/plugins/sdcafiine/src/controllers.h deleted file mode 100644 index 18c1e86..0000000 --- a/plugins/sdcafiine/src/controllers.h +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include - -enum PadButton { - PAD_BTN_A, - PAD_BTN_UP, - PAD_BTN_DOWN, - PAD_BTN_L, - PAD_BTN_R -}; - -void initControllers(); -void releaseControllers(); -void pollControllers(); -bool isButtonPressed(enum PadButton btn); diff --git a/plugins/sdcafiine/src/main.cpp b/plugins/sdcafiine/src/main.cpp deleted file mode 100644 index bc8629f..0000000 --- a/plugins/sdcafiine/src/main.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "common/retain_vars.h" -#include -#include -#include "common/common.h" -#include "main.h" -#include "modpackSelector.h" - -WUPS_PLUGIN_NAME("SDCaffiine"); -WUPS_PLUGIN_DESCRIPTION("Replaces the game files on the fly. Can be used for gamemods"); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -WUPS_FS_ACCESS() - -ON_APPLICATION_START(args) { - InitOSFunctionPointers(); - InitSocketFunctionPointers(); //For logging - InitVPadFunctionPointers(); //For logging - InitPadScoreFunctionPointers(); - - log_init(); - - if(FileReplacerUtils::setGroupAndOwnerID()) { - //DEBUG_FUNCTION_LINE("SUCCESS\n"); - } - - DEBUG_FUNCTION_LINE("SD mounted? %d\n",args.sd_mounted); - DEBUG_FUNCTION_LINE("USB mounted? %d\n",args.usb_mounted); - - gSDInitDone = args.sd_mounted; - gUSBInitDone = args.usb_mounted; - - HandleMultiModPacks(OSGetTitleID()); - - log_print("Init of SDCafiine!\n"); -} - -ON_APPLICATION_ENDING() { - FileReplacerUtils::getInstance()->StopAsyncThread(); - FileReplacerUtils::destroyInstance(); -} - -ON_APP_STATUS_CHANGED(status) { - gAppStatus = status; -} diff --git a/plugins/sdcafiine/src/main.h b/plugins/sdcafiine/src/main.h deleted file mode 100644 index aeab687..0000000 --- a/plugins/sdcafiine/src/main.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _MAIN_H_ -#define _MAIN_H_ - -#include -#include - -/* Main */ -#ifdef __cplusplus -extern "C" { -#endif - -void deInitApplication(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/plugins/sdcafiine/src/modpackSelector.cpp b/plugins/sdcafiine/src/modpackSelector.cpp deleted file mode 100644 index 44dde66..0000000 --- a/plugins/sdcafiine/src/modpackSelector.cpp +++ /dev/null @@ -1,212 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include "modpackSelector.h" -#include "common/common.h" -#include "controllers.h" - -#include -#include -#include -#include -#include -#include -#include "common/retain_vars.h" - -#define TEXT_SEL(x, text1, text2) ((x) ? (text1) : (text2)) - -void HandleMultiModPacks(u64 titleID/*,bool showMenu*/) { - gModFolder[0] = 0; - - char TitleIDString[FS_MAX_FULLPATH_SIZE]; - snprintf(TitleIDString,FS_MAX_FULLPATH_SIZE,"%016llX",titleID); - - std::map modTitlePath; - - std::map mounting_points; - if(gSDInitDone){ mounting_points[std::string(SD_PATH)] = std::string(NAME_PREFIX_SD); } - if(gUSBInitDone){ mounting_points[std::string(USB_PATH)] = std::string(NAME_PREFIX_USB); } - //int i = 0; - - //for (i = 0; i < ntfs_mount_count; i++){ - //mounting_points[std::string(((ntfs_md *)ntfs_mounts)[i].name) + ":"] = StringTools::strfmt("%s:(%s)",((ntfs_md *)ntfs_mounts)[i].name, ntfsGetVolumeName(((ntfs_md *)ntfs_mounts)[i].name)); - //} - - for (std::map::iterator it=mounting_points.begin(); it!=mounting_points.end(); ++it){ - - std::string curMount = it->first; - std::string curMountName = it->second; - //DEBUG_FUNCTION_LINE("%s %s \n",curMount.c_str(),curMountName.c_str()); - std::string modTitleIDPath = curMount + GAME_MOD_FOLDER + "/" + TitleIDString; - //DEBUG_FUNCTION_LINE("modTitleIDPath %s \n",modTitleIDPath.c_str()); - DirList modTitleDirList(modTitleIDPath.c_str(), NULL, DirList::Dirs); - - modTitleDirList.SortList(); - - for(int i = 0; i < modTitleDirList.GetFilecount(); i++) { - std::string curFile = modTitleDirList.GetFilename(i); - //DEBUG_FUNCTION_LINE("curFile %s \n",curFile.c_str()); - if(curFile.compare(".") == 0 || curFile.compare("..") == 0) - continue; - - if(curFile.compare(CONTENT_FOLDER) == 0 || curFile.compare(AOC_FOLDER) == 0/* || curFile.compare(META_FOLDER) == 0*/) { - std::string packageName = curMountName + " " + DEFAULT_NAME_PACKAGE; - modTitlePath[packageName] = modTitleIDPath; - DEBUG_FUNCTION_LINE("found %s \n",packageName.c_str()); - }else{ - std::string packageName = curMountName + " " + curFile; - modTitlePath[packageName] = modTitleIDPath + "/" + curFile; - DEBUG_FUNCTION_LINE("found %s \n",packageName.c_str()); - } - } - } - - //DEBUG_FUNCTION_LINE("Iteration done\n"); - - int modPackListSize =modTitlePath.size(); - - if(modPackListSize == 0) return; - if(modPackListSize == 1/* || !showMenu*/){ - for (std::map::iterator it=modTitlePath.begin(); it!=modTitlePath.end(); ++it){ - snprintf(gModFolder, FS_MAX_ENTNAME_SIZE, "%s", it->second.c_str()); - break; - } - return; - } - - int selected = 0; - int initScreen = 1; - int x_offset = -2; - - initControllers(); - - OSScreenInit(); - u32 screen_buf0_size = OSScreenGetBufferSizeEx(0); - u32 screen_buf1_size = OSScreenGetBufferSizeEx(1); - u32 * screenbuffers = (u32*)memalign(0x100, screen_buf0_size + screen_buf1_size); - OSScreenSetBufferEx(0, (void *)screenbuffers); - OSScreenSetBufferEx(1, (void *)(screenbuffers + screen_buf0_size)); - - OSScreenEnableEx(0, 1); - OSScreenEnableEx(1, 1); - - // Clear screens - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - int wantToExit = 0; - int page = 0; - int per_page = 13; - int max_pages = (modPackListSize / per_page) + 1; - - while(1){ - - pollControllers(); - - if (isButtonPressed(PAD_BTN_A)) { - wantToExit = 1; - initScreen = 1; - } - else if (isButtonPressed(PAD_BTN_DOWN)) { - selected++; - initScreen = 1; - } - else if (isButtonPressed(PAD_BTN_UP)) { - selected--; - initScreen = 1; - } - else if (isButtonPressed(PAD_BTN_L)) { - selected -= per_page; - initScreen = 1; - } - else if (isButtonPressed(PAD_BTN_R)) { - selected += per_page; - initScreen = 1; - } - - if (selected < 0) selected = 0; - if (selected >= modPackListSize) selected = modPackListSize - 1; - page = selected / per_page; - - if(initScreen) { - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - console_print_pos(x_offset, -1, " -- SDCafiine lite by Maschell --"); - console_print_pos(x_offset, 1, "Select your options and press A to launch."); - int y_offset = 3; - int cur_ = 0; - - for (std::map::iterator it=modTitlePath.begin(); it!=modTitlePath.end(); ++it){ - std::string key = it->first; - std::string value = it->second; - - if(wantToExit && cur_ == selected){ - snprintf(gModFolder, FS_MAX_ENTNAME_SIZE, "%s", value.c_str()); - break; - } - - if(cur_ >= (page*per_page) && cur_ < ((page+1)*per_page)){ - console_print_pos(x_offset, y_offset++, "%s %s",TEXT_SEL((selected == cur_), "--->", " "), key.c_str()); - } - cur_++; - } - - if(wantToExit){ //just in case. - break; - } - - if(max_pages > 0) { - console_print_pos(x_offset, 17, "Page %02d/%02d. Press L/R to change page.", page + 1,max_pages); - } - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - initScreen = 0; - } - os_usleep(20000); - } - - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - releaseControllers(); - - free(screenbuffers); - - return; -} - -void console_print_pos(int x, int y, const char *format, ...){ - char * tmp = NULL; - - va_list va; - va_start(va, format); - if((vasprintf(&tmp, format, va) >= 0) && tmp) - { - if(strlen(tmp) > 79) - tmp[79] = 0; - - OSScreenPutFontEx(0, x, y, tmp); - OSScreenPutFontEx(1, x, y, tmp); - - } - va_end(va); - - if(tmp) - free(tmp); -} diff --git a/plugins/sdcafiine/src/modpackSelector.h b/plugins/sdcafiine/src/modpackSelector.h deleted file mode 100644 index 17bee89..0000000 --- a/plugins/sdcafiine/src/modpackSelector.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _MODPACK_SELECTOR_H_ -#define _MODPACK_SELECTOR_H_ - -#ifdef __cplusplus -extern "C" { -#endif -#include - -void HandleMultiModPacks(u64 titleid/*,bool showMenu = true*/); -void console_print_pos(int x, int y, const char *format, ...); - -#ifdef __cplusplus -} -#endif - -#endif //_MODPACK_SELECTOR_H_ diff --git a/plugins/sdcafiine/src/myfs/fs_utils.cpp b/plugins/sdcafiine/src/myfs/fs_utils.cpp deleted file mode 100644 index 047b58b..0000000 --- a/plugins/sdcafiine/src/myfs/fs_utils.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "fs_utils.h" -#include "common/common.h" -#include "common/retain_vars.h" - -int is_gamefile(const char *path) { - if(path == NULL) return 0; - if(strncmp(path,"CAFE/",5) == 0) return GAME_PATH_TYPE_STRIPPED_CONTENT; //Workaround for NSMBU - - // In case the path starts by "//" and not "/" (some games do that ... ...) - if (path[0] == '/' && path[1] == '/') - path = &path[1]; - - // In case the path does not start with "/" (some games do that too ...) - int len = 0; - char new_path[16]; - if(path[0] != '/') { - new_path[0] = '/'; - len++; - } - - while(*path && len < (int)(sizeof(new_path) - 1)) { - new_path[len++] = *path++; - } - new_path[len++] = 0; - - if(strncmp(new_path,"/vol/content",12) == 0) return GAME_PATH_TYPE_CONTENT; - //dlc support - if(strncmp(new_path,"/vol/aoc",8) == 0) return GAME_PATH_TYPE_AOC; - - return 0; -} -char * getPathWithNewBase(const char * inPath, const char * newBase){ - if(inPath == NULL || *inPath == 0 || newBase == NULL || *newBase == 0) return NULL; - char * relativePath = getRelativePath(inPath); - char * result = NULL; - - if(relativePath == NULL){ - /* - if(strlen(gModFolder) > 0){ - int file = 0; - if(endsWith(inPath,BOOT_TV_TEX_TGA,-1,-1)){ file = 1;} - else if(endsWith(inPath,BOOT_DRC_TEX_TGA,-1,-1)){ file = 2;} - else if(endsWith(inPath,BOOT_SOUND_BTSND,-1,-1)){ file = 3;} - if(file == 0){ return NULL;} - - result = (char*)malloc((sizeof(char) * (strlen(newBase) +1 + strlen(META_FOLDER) + 1 + 20) + 1)); - if(result == NULL){ - DEBUG_FUNCTION_LINE("malloc for result failed.\n"); - return NULL; - } - if(file == 1){sprintf(result,"%s/%s/%s",newBase,META_FOLDER,BOOT_TV_TEX_TGA);} - if(file == 2){sprintf(result,"%s/%s/%s",newBase,META_FOLDER,BOOT_DRC_TEX_TGA);} - if(file == 3){sprintf(result,"%s/%s/%s",newBase,META_FOLDER,BOOT_SOUND_BTSND);} - return result; - }*/ - - return NULL; - } - - result = (char*)malloc((sizeof(char) * (strlen(newBase) +1+ strlen(relativePath))) + 1); - if(result == NULL){ - DEBUG_FUNCTION_LINE("malloc for result failed.\n"); - OSFATAL_FUNCTION_LINE("malloc for result failed.\n"); - return NULL; - } - sprintf(result,"%s/%s",newBase,relativePath); - - free(relativePath); - relativePath = NULL; - - return result; -} - -char * getRelativePath(const char *path){ - if(path == NULL) return NULL; - char * pathForCheck = NULL; - - int gameFile = is_gamefile(path); - if(gameFile > 0) { - //if(DEBUG_LOG) log_printf("getNewPath %s\n", path); - int path_offset = 0; - - // In case the path starts by "//" and not "/" (some games do that ... ...) - if (path[0] == '/' && path[1] == '/') - path = &path[1]; - - // In case the path does not start with "/" set an offset for all the accesses - if(path[0] != '/') - path_offset = -1; - - - if(gameFile == GAME_PATH_TYPE_CONTENT) { // is content - //content - - // some games are doing /vol/content/./.... - if(path[13 + path_offset] == '.' && path[14 + path_offset] == '/') { - path_offset += 2; - } - char * pathForCheckInternal = (char*)path + 13 + path_offset; - if(pathForCheckInternal[0] == '/') pathForCheckInternal++; //Skip double slash - - pathForCheck = (char*)malloc(sizeof(CONTENT_FOLDER) + 1 + (sizeof(char) * (strlen(pathForCheckInternal) + 1))); - if(pathForCheck == NULL){ - DEBUG_FUNCTION_LINE("malloc failed\n"); - OSFATAL_FUNCTION_LINE("malloc failed\n"); - return NULL; - } - sprintf(pathForCheck,"%s/%s",CONTENT_FOLDER,pathForCheckInternal); - } else if (gameFile == GAME_PATH_TYPE_AOC) { // is aoc - //aoc - int aocFolderLength = 1; - char * aocFolderLengthCheck = (char*)path + 5 + path_offset; - while (aocFolderLengthCheck[0] != '/') { - aocFolderLength++; - aocFolderLengthCheck++; - } - char * pathForCheckInternal = (char*)path + 5 + aocFolderLength + path_offset; - if(pathForCheckInternal[0] == '/') pathForCheckInternal++; //Skip double slash - - pathForCheck = (char*)malloc(sizeof(AOC_FOLDER) + 1 + (sizeof(char) * (strlen(pathForCheckInternal) + 1))); - if(pathForCheck == NULL){ - DEBUG_FUNCTION_LINE("malloc failed\n"); - OSFATAL_FUNCTION_LINE("malloc failed\n"); - return NULL; - } - sprintf(pathForCheck,"%s/%s",AOC_FOLDER,pathForCheckInternal); - } else if (gameFile == GAME_PATH_TYPE_STRIPPED_CONTENT) { // is stripped content - pathForCheck = (char*)malloc(sizeof(CONTENT_FOLDER) + 1 + (sizeof(char) * (strlen(path) + 1))); - if(pathForCheck == NULL){ - DEBUG_FUNCTION_LINE("malloc failed\n"); - OSFATAL_FUNCTION_LINE("malloc failed\n"); - return NULL; - } - sprintf(pathForCheck,"%s/%s",CONTENT_FOLDER,path); - } - } - - return pathForCheck; -} diff --git a/plugins/sdcafiine/src/myfs/fs_utils.h b/plugins/sdcafiine/src/myfs/fs_utils.h deleted file mode 100644 index 4913a71..0000000 --- a/plugins/sdcafiine/src/myfs/fs_utils.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __SDCAFIINE_FS_UTILS_H_ -#define __SDCAFIINE_FS_UTILS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -int is_gamefile(const char *path); -char * getPathWithNewBase(const char * inPath, const char * newBase); -char * getRelativePath(const char *path); - -#ifdef __cplusplus -} -#endif - -#endif // __FS_UTILS_H_ diff --git a/plugins/sdcafiine/src/patches.cpp b/plugins/sdcafiine/src/patches.cpp deleted file mode 100644 index a577041..0000000 --- a/plugins/sdcafiine/src/patches.cpp +++ /dev/null @@ -1,271 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "myfs/fs_utils.h" -#include "common/retain_vars.h" -#include "common/common.h" -#include "main.h" - -#define DEBUG_LOG 0 - -DECL_FUNCTION(int, FSCloseFile, FSClient *pClient, FSCmdBlock *pCmd, int fd, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSCloseFile(pClient, pCmd, fd, error); } - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSCloseFile(fd)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSCloseFile(pClient, pCmd, fd, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSGetPosFile, FSClient *pClient, FSCmdBlock *pCmd, int fd, int *pos, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSGetPosFile(pClient, pCmd, fd, pos, error); } - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSGetPosFile(fd,pos)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSGetPosFile(pClient, pCmd, fd, pos, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSGetStat, FSClient *pClient, FSCmdBlock *pCmd, const char *path, FSStat *stats, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSGetStat(pClient, pCmd, path, stats, error); } - - int result = USE_OS_FS_FUNCTION; - - if(DEBUG_LOG){ DEBUG_FUNCTION_LINE("for path %s\n",path); } - char * newPath = getPathWithNewBase(path,gModFolder); - if(newPath != NULL){ - if((result = fs_wrapper_FSGetStat(newPath,stats)) != USE_OS_FS_FUNCTION){ - if(newPath){ free(newPath); newPath = NULL;} - return result; - } - if(newPath){ free(newPath); newPath = NULL;} //Should be dead code... - } - - return real_FSGetStat(pClient, pCmd, path, stats, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSGetStatFile, FSClient *pClient, FSCmdBlock *pCmd, int fd, FSStat * stats, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSGetStatFile(pClient, pCmd, fd, stats, error); } - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSGetStatFile(fd,stats)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSGetStatFile(pClient, pCmd, fd, stats, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSIsEof, FSClient *pClient, FSCmdBlock *pCmd, int fd, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)) return real_FSIsEof(pClient, pCmd, fd, error); - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSIsEof(fd)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSIsEof(pClient, pCmd, fd, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSOpenFile, FSClient *pClient, FSCmdBlock *pCmd, const char *path, const char *mode, int *handle, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSOpenFile(pClient, pCmd, path, mode, handle, error); } - - /*if(endsWith(path,BOOT_TV_TEX_TGA,-1,-1)){ //Mario Party 10 crashes when pressing the home button. - if(startsWith("/vol/storage_mlc01/usr/title/",path)){ - u64 tID = getTitleIDFromPath(path); - HandleMultiModPacks(tID,false); - }else if(strlen(gLastMetaPath) > 0){ - DEBUG_FUNCTION_LINE("gLastMetaPath %s\n",gLastMetaPath); - if(startsWith("/vol/storage_usb01/usr/title/",gLastMetaPath) || - startsWith("/vol/storage_mlc01/usr/title/",gLastMetaPath) - ){ - u64 tID = getTitleIDFromPath(gLastMetaPath); - HandleMultiModPacks(tID,false); - } - } - }*/ - - if(DEBUG_LOG){ DEBUG_FUNCTION_LINE("for path %s\n",path); } - char * newPath = getPathWithNewBase(path,gModFolder); - int result = USE_OS_FS_FUNCTION; - - if(newPath != NULL){ - if((result = fs_wrapper_FSOpenFile(newPath,mode,handle)) != USE_OS_FS_FUNCTION){ - if(newPath){ free(newPath); newPath = NULL;} - return result; - } - if(newPath){ free(newPath); newPath = NULL;} //Should be dead code... - } - - return real_FSOpenFile(pClient, pCmd, path, mode, handle, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSReadFile, FSClient *pClient, FSCmdBlock *pCmd, void *buffer, int size, int count, int handle, int flag, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSReadFile(pClient, pCmd, buffer, size, count, handle, flag, error); } - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSReadFile(handle,buffer,size,count)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSReadFile(pClient, pCmd, buffer, size, count, handle, flag, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSSetPosFile, FSClient *pClient, FSCmdBlock *pCmd, int fd, u32 pos, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)) return real_FSSetPosFile(pClient, pCmd, fd, pos, error); - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSSetPosFile(fd,pos)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSSetPosFile(pClient, pCmd, fd, pos, setErrorFlag(error)); -} - -DECL_FUNCTION(int, FSReadFileWithPos, FSClient *pClient, FSCmdBlock *pCmd, void *buffer, int size, int count, u32 pos, int fd, int flag, int error) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || !(gUSBInitDone || gSDInitDone)){ return real_FSReadFileWithPos(pClient, pCmd, buffer, size, count, pos, fd, flag, error); } - - int result = USE_OS_FS_FUNCTION; - if((result = fs_wrapper_FSReadFileWithPos(buffer,size,count,pos,fd)) != USE_OS_FS_FUNCTION){ - return result; - } - - return real_FSReadFileWithPos(pClient, pCmd, buffer, size, count, pos, fd, flag, setErrorFlag(error)); -} - - -/** -In theory it would be enough just to patch the "async" versions of the function. -The non-async functions internally use the async function anyway. -However this my be a bit faster/robust, when we handle the async functions async. -**/ - -DECL_FUNCTION(int, FSCloseFileAsync, FSClient *pClient, FSCmdBlock *pCmd, int fd, int error, FSAsyncParams * asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSCloseFileAsync(pClient, pCmd, fd, error, asyncParams); - } - - return fs_default_os_wrapper_FSCloseFileAsync(pClient, pCmd, fd, error, asyncParams,(void*) real_FSCloseFileAsync); -} - -DECL_FUNCTION(int, FSGetPosFileAsync, FSClient *pClient, FSCmdBlock *pCmd, int fd, int *pos, int error, FSAsyncParams * asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSGetPosFileAsync(pClient, pCmd, fd, pos, error, asyncParams); - } - - return fs_default_os_wrapper_FSGetPosFileAsync(pClient, pCmd, fd, pos, error, asyncParams,(void*) real_FSGetPosFileAsync); -} - -DECL_FUNCTION(int, FSGetStatAsync, FSClient *pClient, FSCmdBlock *pCmd, const char *path, FSStat *stats, int error, FSAsyncParams * asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSGetStatAsync(pClient, pCmd, path, stats, error, asyncParams); - } - - return fs_default_os_wrapper_FSGetStatAsync(getPathWithNewBase((char*)path,gModFolder),pClient, pCmd, path, stats, error, asyncParams,(void*) real_FSGetStatAsync); -} - -DECL_FUNCTION(int, FSGetStatFileAsync, FSClient *pClient, FSCmdBlock *pCmd, int fd, FSStat * stats, int error, FSAsyncParams * asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSGetStatFileAsync(pClient, pCmd, fd, stats, error, asyncParams); - } - - return fs_default_os_wrapper_FSGetStatFileAsync(pClient, pCmd, fd, stats, error, asyncParams,(void*) real_FSGetStatFileAsync); -} - -DECL_FUNCTION(int, FSIsEofAsync, FSClient *pClient, FSCmdBlock *pCmd, int fd, int error, FSAsyncParams *asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSIsEofAsync(pClient, pCmd, fd, error,asyncParams); - } - - return fs_default_os_wrapper_FSIsEofAsync(pClient, pCmd, fd, error,asyncParams,(void*) real_FSIsEofAsync); -} -/* -u64 getTitleIDFromPath(const char * path){ - if(path == NULL || strlen(path) < 46) return 0; - char titleID[0x11]; - char titleIDHigh[0x09]; - char titleIDLow[0x09]; - char * test = (char * )&path[29]; - snprintf(titleIDHigh,0x09,"%s",test); - test = (char * ) &path[38]; - snprintf(titleIDLow,0x09,"%s",test); - snprintf(titleID,0x11,"%s%s",titleIDHigh,titleIDLow); - u64 tID = strtoll(titleID, NULL, 16); - tID &= ~ 0x0000000E00000000; // remove update flag - return tID; -}*/ - -DECL_FUNCTION(int, FSOpenFileAsync, FSClient *pClient, FSCmdBlock *pCmd, const char *path, const char *mode, int *handle, int error, FSAsyncParams *asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSOpenFileAsync(pClient, pCmd, path, mode, handle,error, asyncParams); - } - - return fs_default_os_wrapper_FSOpenFileAsync(getPathWithNewBase((char*)path,gModFolder), pClient, pCmd, path, mode, handle,error, asyncParams,(void*) real_FSOpenFileAsync); -} - -DECL_FUNCTION(int, FSReadFileAsync, FSClient *pClient, FSCmdBlock *pCmd, void *buffer, int size, int count, int fd, int flag, int error, FSAsyncParams *asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSReadFileAsync(pClient, pCmd, buffer, size, count, fd, flag, error, asyncParams); - } - - return fs_default_os_wrapper_FSReadFileAsync(pClient, pCmd, buffer, size, count, fd, flag, error, asyncParams, (void*) real_FSReadFileAsync); -} - -DECL_FUNCTION(int, FSReadFileWithPosAsync, FSClient *pClient, FSCmdBlock *pCmd, void *buffer, int size, int count, u32 pos, int fd, int flag, int error, FSAsyncParams *asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSReadFileWithPosAsync(pClient, pCmd, buffer, size, count, pos, fd, flag, error, asyncParams); - } - - return fs_default_os_wrapper_FSReadFileWithPosAsync(pClient, pCmd, buffer, size, count, pos, fd, flag, error, asyncParams, (void*) real_FSReadFileWithPosAsync); -} - -DECL_FUNCTION(int, FSSetPosFileAsync, FSClient *pClient, FSCmdBlock *pCmd, int handle, u32 pos, int error, FSAsyncParams *asyncParams) { - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND || checkErrorFlag(&error) || !(gUSBInitDone || gSDInitDone)){ // Use the real implementation if the app is not in foreground or we already checked it. - return real_FSSetPosFileAsync(pClient, pCmd, handle, pos, error,asyncParams); - } - - return fs_default_os_wrapper_FSSetPosFileAsync(pClient, pCmd, handle, pos, error,asyncParams, (void*) real_FSSetPosFileAsync); -} - -/* -DECL_FUNCTION(int, FSBindMount, void *pClient, void *pCmd, char *source, char *target, int error){ - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND) return real_FSBindMount(pClient,pCmd,source,target,error); - memcpy(gLastMetaPath,source,strlen(source) + 1); - return real_FSBindMount(pClient,pCmd,source,target,error); -} -DECL_FUNCTION(int, FSBindUnmount, void *pClient, void *pCmd, char *target, int error){ - if(gAppStatus == WUPS_APP_STATUS_BACKGROUND) real_FSBindUnmount(pClient,pCmd,target,error); - gLastMetaPath[0] = 0; - return real_FSBindUnmount(pClient,pCmd,target,error); -}*/ - - -WUPS_MUST_REPLACE(FSCloseFile, WUPS_LOADER_LIBRARY_COREINIT, FSCloseFile); -WUPS_MUST_REPLACE(FSGetPosFile, WUPS_LOADER_LIBRARY_COREINIT, FSGetPosFile); -WUPS_MUST_REPLACE(FSGetStat, WUPS_LOADER_LIBRARY_COREINIT, FSGetStat); -WUPS_MUST_REPLACE(FSGetStatFile, WUPS_LOADER_LIBRARY_COREINIT, FSGetStatFile); -WUPS_MUST_REPLACE(FSIsEof, WUPS_LOADER_LIBRARY_COREINIT, FSIsEof); -WUPS_MUST_REPLACE(FSOpenFile, WUPS_LOADER_LIBRARY_COREINIT, FSOpenFile); -WUPS_MUST_REPLACE(FSReadFile, WUPS_LOADER_LIBRARY_COREINIT, FSReadFile); -WUPS_MUST_REPLACE(FSReadFileWithPos, WUPS_LOADER_LIBRARY_COREINIT, FSReadFileWithPos); -WUPS_MUST_REPLACE(FSSetPosFile, WUPS_LOADER_LIBRARY_COREINIT, FSSetPosFile); - -WUPS_MUST_REPLACE(FSCloseFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSCloseFileAsync); -WUPS_MUST_REPLACE(FSGetPosFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSGetPosFileAsync); -WUPS_MUST_REPLACE(FSGetStatAsync, WUPS_LOADER_LIBRARY_COREINIT, FSGetStatAsync); -WUPS_MUST_REPLACE(FSGetStatFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSGetStatFileAsync); -WUPS_MUST_REPLACE(FSIsEofAsync, WUPS_LOADER_LIBRARY_COREINIT, FSIsEofAsync); -WUPS_MUST_REPLACE(FSOpenFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSOpenFileAsync); -WUPS_MUST_REPLACE(FSReadFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSReadFileAsync); -WUPS_MUST_REPLACE(FSReadFileWithPosAsync, WUPS_LOADER_LIBRARY_COREINIT, FSReadFileWithPosAsync); -WUPS_MUST_REPLACE(FSSetPosFileAsync, WUPS_LOADER_LIBRARY_COREINIT, FSSetPosFileAsync); \ No newline at end of file diff --git a/plugins/swipswapme/Makefile b/plugins/swipswapme/Makefile deleted file mode 100644 index a5d6788..0000000 --- a/plugins/swipswapme/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") -endif -ifeq ($(strip $(WUT_ROOT)),) -$(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) -endif - -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) - -PREFIX := powerpc-eabi- - -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)).mod -BUILD := build - -ifeq ($(notdir $(CURDIR)),$(BUILD)) -include ../makefile.mk -else -include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -# -Os: optimise size -# -Wall: generate lots of warnings -# -DGEKKO_U: define the symbol GEKKO (used in some headers) -# -D__wiiu__: define the symbol __wii__ (used in some headers) -# -mrvl: enable wii/gamecube compilation -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -fno-common: stop common variables which the loader can't understand -# -msdata-none: do not use r2 or r13 as small data areas -# -memb: enable embedded application specific compilation -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS += -Os -Wall -DGEKKO_U -D__wiiu__ -D__WIIU__ -mrvl -mcpu=750 -meabi -mhard-float -fno-common -msdata=none -memb -ffunction-sections -fdata-sections - - -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS += $(COMMON_CFLAGS) -x c -std=gnu11 - -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS += $(COMMON_CFLAGS) -x c++ -std=gnu++11 - -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ -endif - -ifeq ($(USE_WUT), 1) - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -ASFLAGS += - -LDFLAG_COMMON += - -ifeq ($(WRAP_MALLOC), 1) - LDFLAG_COMMON += -Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r -endif - -LDFLAGS_MOD += $(LD_FLAGS_MOD) -LDFLAGS_ELF += $(LD_FLAGS_ELF) - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ALL_LIBS := $(LIBS) -# - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += $(WUT_ROOT) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD_MOD := $(CC) -else - export LD_MOD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT) - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -############################################################################### -# Rule to make everything. -PHONY += all - -all : $(OUTPUT) -############################################################################### -# Special build rules - -# Rule to make the module file. -$(OUTPUT) : output.elf - @echo "checking for missing symbols ..." - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LD_FLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o check_linking.elf - @echo "linking ..." $@ - @$(LD_MOD) ../$(BUILD)/output.elf $(LDFLAG_COMMON) $(LDFLAGS_MOD) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -# Rule to make the module file. -output.elf : $(OFILES) - @echo "linking ... output.elf" - @$(LD) $(OFILES) $(LDFLAGS_ELF) $(ALL_LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp - @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/plugins/swipswapme/README.md b/plugins/swipswapme/README.md deleted file mode 100644 index b03c53a..0000000 --- a/plugins/swipswapme/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# SwipSwapMe Plugin for the Wii U Plugin System - -This little app can be used to swap the TV and DRC screen. - -# Usage - -When starting the app, you have the option to set your own button combo. Just press the button combo you want for 2 seconds. -Otherwise it will use the default settings (TV button). - -Press the TV button (or your button combo) on the Gamepad to swap the screens. Thats all. - -## Building - -For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) -- [dynamic_libs](https://github.com/Maschell/dynamic_libs/tree/lib) for access to the functions. -- [libutils](https://github.com/Maschell/libutils) for common functions. - - -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. \ No newline at end of file diff --git a/plugins/swipswapme/makefile.mk b/plugins/swipswapme/makefile.mk deleted file mode 100644 index 7ed28d3..0000000 --- a/plugins/swipswapme/makefile.mk +++ /dev/null @@ -1,60 +0,0 @@ -# Compiling the projects with libutils logging code? -DO_LOGGING := 1 - -# Non WUT plugins need to wrap the malloc functions. -WRAP_MALLOC := 1 - -# Sets the "-D__WUT__" compiling flag -USE_WUT := 0 - -# Target filename -TARGET := $(notdir $(CURDIR)).mod - -# Source directories -SOURCES := src \ - src/common \ - src/utils \ - -# Data directories -DATA := - -# Include directories -INCLUDES := src - -#--------------------------------------------------------------------------------- -# options for code generation and linking -#--------------------------------------------------------------------------------- -# Extra C compiler flags -CFLAGS := -# Extra C++ compiler flags -CXXFLAGS := -# Extra linking flags for all linking steps -LD_FLAGS := -# extra linking flags for linking the temporarily elf file (using ld) -LD_FLAGS_ELF := -# extra linking flags for linking the final mod file (using gcc/g++) -LD_FLAGS_MOD := - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(WUPSDIR) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwups -lutils -ldynamiclibs - -#--------------------------------------------------------------------------------- -# Will be added to the final lib paths -# example: -# -L$C:/library1/lib -#--------------------------------------------------------------------------------- -EXTERNAL_LIBPATHS := - -#--------------------------------------------------------------------------------- -# Will be added to the final include paths -# -IC:/library1/include -#--------------------------------------------------------------------------------- -EXTERNAL_INCLUDE := -I$(PORTLIBS)/include/libutils diff --git a/plugins/swipswapme/src/common/c_retain_vars.cpp b/plugins/swipswapme/src/common/c_retain_vars.cpp deleted file mode 100644 index 2c13da6..0000000 --- a/plugins/swipswapme/src/common/c_retain_vars.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#include "common/c_retain_vars.h" - -u8 gSwap __attribute__((section(".data"))) = 0; -u8 gCallbackCooldown __attribute__((section(".data"))) = 0; -u8 gAppStatus __attribute__((section(".data"))) = 0; -u32 gButtonCombo __attribute__((section(".data"))) = 0; - -VoiceInfo gVoiceInfos[VOICE_INFO_MAX] __attribute__((section(".data"))); diff --git a/plugins/swipswapme/src/common/c_retain_vars.h b/plugins/swipswapme/src/common/c_retain_vars.h deleted file mode 100644 index 4af09dc..0000000 --- a/plugins/swipswapme/src/common/c_retain_vars.h +++ /dev/null @@ -1,27 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#ifndef C_RETAINS_VARS_H_ -#define C_RETAINS_VARS_H_ -#include "dynamic_libs/gx2_functions.h" -#include "utils/voice_info.h" -extern u8 gSwap; -extern u8 gCallbackCooldown; -extern u8 gAppStatus; -extern u32 gButtonCombo; -extern VoiceInfo gVoiceInfos[VOICE_INFO_MAX]; - -#endif // C_RETAINS_VARS_H_ diff --git a/plugins/swipswapme/src/function_patcher.c b/plugins/swipswapme/src/function_patcher.c deleted file mode 100644 index bacdf45..0000000 --- a/plugins/swipswapme/src/function_patcher.c +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#include -#include "utils/logger.h" -#include "utils/voice_swapper.h" -#include "common/c_retain_vars.h" -#include "dynamic_libs/proc_ui_functions.h" -#include "dynamic_libs/vpad_functions.h" - -DECL_FUNCTION(s32, AXSetVoiceDeviceMixOld, void *v, s32 device, u32 id, void *mix){ - if(gSwap){ device = !device;} - if(VOICE_SWAP_LOG == 1){log_printf("AXSetVoiceDeviceMixOld voice: %08X device: %d, mix: %08X\n",v,device,mix);} - VoiceSwapper_setMix(v,device,mix); - return real_AXSetVoiceDeviceMixOld(v,device,id,mix); -} - -DECL_FUNCTION(s32, AXSetVoiceDeviceMix, void *v, s32 device, u32 id, void *mix){ - if(gSwap){ device = !device;} - if(VOICE_SWAP_LOG == 1){log_printf("AXSetVoiceDeviceMix voice: %08X device: %d, mix: %08X\n",v,device,mix);} - VoiceSwapper_setMix(v,device,mix); - return real_AXSetVoiceDeviceMix(v,device,id,mix); -} - -DECL_FUNCTION(void *, AXAcquireVoiceExOld, u32 prio, void * callback, u32 arg){ - void * result = real_AXAcquireVoiceExOld(prio,callback,arg); - if(VOICE_SWAP_LOG == 1){log_printf("AXAcquireVoiceExOld result: %08X \n",result);} - VoiceSwapper_acquireVoice(result); - return result; -} - -DECL_FUNCTION(void *, AXAcquireVoiceEx, u32 prio, void * callback, u32 arg){ - void * result = real_AXAcquireVoiceEx(prio,callback,arg); - if(VOICE_SWAP_LOG == 1){log_printf("AXAcquireVoiceEx result: %08X \n",result);} - VoiceSwapper_acquireVoice(result); - return result; -} - -DECL_FUNCTION(void, AXFreeVoiceOld, void *v){ - if(VOICE_SWAP_LOG == 1){log_printf("AXFreeVoiceOld v: %08X \n",v);} - VoiceSwapper_freeVoice(v); - real_AXFreeVoiceOld(v); -} - -DECL_FUNCTION(void, AXFreeVoice, void *v){ - if(VOICE_SWAP_LOG == 1){log_printf("AXFreeVoice v: %08X \n",v);} - VoiceSwapper_freeVoice(v); - real_AXFreeVoice(v); -} - -DECL_FUNCTION(void, GX2CopyColorBufferToScanBuffer, GX2ColorBuffer *colorBuffer, s32 scan_target){ - if(gSwap){ - if(scan_target == 1){ - scan_target = 4; - }else{ - scan_target = 1; - } - } - real_GX2CopyColorBufferToScanBuffer(colorBuffer,scan_target); -} - -/* -DECL(s32, AXSetDefaultMixerSelectOld, u32 s){ - s32 result = real_AXSetDefaultMixerSelectOld(s); - return result; -}*/ - - -void swapVoices(){ - VoiceSwapper_swapAll(); - for(int i = 0;i 0 && ((buffer[0].btns_h & gButtonCombo) == gButtonCombo) && gCallbackCooldown == 0 ){ - gCallbackCooldown = 0x3C; - if(gAppStatus == WUPS_APP_STATUS_FOREGROUND){ - gSwap = !gSwap; - swapVoices(); - } - } - if(gCallbackCooldown > 0) gCallbackCooldown--; - - return result; -} - - -WUPS_MUST_REPLACE(GX2CopyColorBufferToScanBuffer, WUPS_LOADER_LIBRARY_GX2, GX2CopyColorBufferToScanBuffer); -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); -WUPS_MUST_REPLACE(AXAcquireVoiceExOld, WUPS_LOADER_LIBRARY_SND_CORE, AXAcquireVoiceEx); -WUPS_MUST_REPLACE(AXFreeVoiceOld, WUPS_LOADER_LIBRARY_SND_CORE, AXFreeVoice); -WUPS_MUST_REPLACE(AXSetVoiceDeviceMixOld, WUPS_LOADER_LIBRARY_SND_CORE, AXSetVoiceDeviceMix); -//WUPS_MUST_REPLACE(AXSetDefaultMixerSelectOld, , WUPS_LOADER_LIBRARY_SND_CORE, AXSetDefaultMixerSelect), -WUPS_MUST_REPLACE(AXAcquireVoiceEx, WUPS_LOADER_LIBRARY_SNDCORE2, AXAcquireVoiceEx); -WUPS_MUST_REPLACE(AXFreeVoice, WUPS_LOADER_LIBRARY_SNDCORE2, AXFreeVoice); -WUPS_MUST_REPLACE(AXSetVoiceDeviceMix, WUPS_LOADER_LIBRARY_SNDCORE2, AXSetVoiceDeviceMix); diff --git a/plugins/swipswapme/src/main.cpp b/plugins/swipswapme/src/main.cpp deleted file mode 100644 index 7a89544..0000000 --- a/plugins/swipswapme/src/main.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -WUPS_PLUGIN_NAME("SwipSwapMe"); -WUPS_PLUGIN_DESCRIPTION("Swaps the gamepad and tv screen when pressing a certain button (TV is default)"); -WUPS_PLUGIN_VERSION("v1.0"); -WUPS_PLUGIN_AUTHOR("Maschell"); -WUPS_PLUGIN_LICENSE("GPL"); - -WUPS_FS_ACCESS() - -u32 SplashScreen(s32 time,s32 combotime); - -/* Entry point */ -ON_APPLICATION_START(args){ - InitOSFunctionPointers(); - InitSocketFunctionPointers(); //For logging - - InitSysFunctionPointers(); // For SYSLaunchMenu() - - //For patching - InitVPadFunctionPointers(); - InitPadScoreFunctionPointers(); - InitAXFunctionPointers(); - - memset(gVoiceInfos,0,sizeof(gVoiceInfos)); -} - -ON_APP_STATUS_CHANGED(status) { - gAppStatus = status; -} - -INITIALIZE_PLUGIN(){ - InitOSFunctionPointers(); - InitVPadFunctionPointers(); - u32 res = SplashScreen(10,2); - gButtonCombo = res; -} - -#define FPS 60 -u32 SplashScreen(s32 time,s32 combotime){ - u32 result = VPAD_BUTTON_TV; - - // Init screen - OSScreenInit(); - - u32 screen_buf0_size = OSScreenGetBufferSizeEx(0); - u32 screen_buf1_size = OSScreenGetBufferSizeEx(1); - - u32 * screenbuffer0 = (u32*)memalign(0x100, screen_buf0_size); - u32 * screenbuffer1 = (u32*)memalign(0x100, screen_buf1_size); - - if(screenbuffer0 == NULL || screenbuffer1 == NULL){ - if(screenbuffer0 != NULL){ free(screenbuffer0); } - if(screenbuffer1 != NULL){ free(screenbuffer1); } - return result; - } - - OSScreenSetBufferEx(0, (void *)screenbuffer0); - OSScreenSetBufferEx(1, (void *)screenbuffer1); - - OSScreenEnableEx(0, 1); - OSScreenEnableEx(1, 1); - - // Clear screens - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - // Flip buffers - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - OSScreenClearBufferEx(0, 0); - OSScreenClearBufferEx(1, 0); - - std::vector strings; - strings.push_back("SwipSwapMe 0.2 - by Maschell."); - strings.push_back(""); - strings.push_back(""); - strings.push_back("Press the combo you want to use for swapping now for 2 seconds."); - strings.push_back("Pressing the TV button will return directly."); - strings.push_back(""); - strings.push_back("Otherwise the default combo (TV button) will be used in 10 seconds."); - u8 pos = 0; - for (std::vector::iterator it = strings.begin() ; it != strings.end(); ++it){ - OSScreenPutFontEx(0, 0, pos, (*it).c_str()); - OSScreenPutFontEx(1, 0, pos, (*it).c_str()); - pos++; - } - - OSScreenFlipBuffersEx(0); - OSScreenFlipBuffersEx(1); - - s32 tickswait = time * FPS * 16; - - s32 sleepingtime = 16; - s32 times = tickswait/16; - s32 i=0; - - VPADData vpad_data; - s32 error; - u32 last = 0xFFFFFFFF; - s32 timer = 0; - while(i= combotime*FPS){ - result = vpad_data.btns_h; - break; - } - i++; - os_usleep(sleepingtime*1000); - } - - if(screenbuffer0 != NULL){ free(screenbuffer0); } - if(screenbuffer1 != NULL){ free(screenbuffer1); } - - return result; -} diff --git a/plugins/swipswapme/src/utils/voice_info.h b/plugins/swipswapme/src/utils/voice_info.h deleted file mode 100644 index 5c40300..0000000 --- a/plugins/swipswapme/src/utils/voice_info.h +++ /dev/null @@ -1,30 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ -#ifndef _VOICE_INFO_H_ -#define _VOICE_INFO_H_ - -#include - -#define VOICE_INFO_MAX 100 - -typedef struct _VoiceInfo { - void* voice; /**< Pointer to the voice */ - u32 mixTV[24]; /**< Mix to the TV */ - u32 mixDRC[24]; /**< Mix of the DRC */ -} VoiceInfo; - -#endif //_VOICE_INFO_H_ diff --git a/plugins/swipswapme/src/utils/voice_swapper.c b/plugins/swipswapme/src/utils/voice_swapper.c deleted file mode 100644 index 1a218f2..0000000 --- a/plugins/swipswapme/src/utils/voice_swapper.c +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * Copyright (C) 2017,2018 Maschell - * - * 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 3 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, see . - ****************************************************************************/ - -#include "voice_info.h" -#include "voice_swapper.h" - -void VoiceSwapper_acquireVoice(void * voice){ - for(int i = 0;i. - ****************************************************************************/ -#ifndef _VOICE_SWAPPER_H_ -#define _VOICE_SWAPPER_H_ -#define VOICE_SWAP_LOG 0 -#include "voice_info.h" -#include "common/c_retain_vars.h" - -#include "utils/logger.h" - -#include "dynamic_libs/os_functions.h" -#include -#include - -void VoiceSwapper_acquireVoice(void * voice); - -void VoiceSwapper_freeVoice(void * voice); - -void VoiceSwapper_setMix(void * voice,u32 device, void* mix); - -void VoiceSwapper_swapAll(); - -#endif //_VOICE_SWAPPER_H_