From c479a67c2c51ae4a5eb2ab08305b78f4e6564209 Mon Sep 17 00:00:00 2001 From: Wind4 Date: Mon, 6 Jun 2016 10:36:00 +0800 Subject: [PATCH] vlmcsd-svn906-2016-06-05-Hotbird64 --- GNUmakefile | 254 +- config.h | 64 +- floppy144.vfd | Bin 1474560 -> 1474560 bytes kms.c | 26 +- libkms-test.c | 9 +- libkms.c | 54 +- libkms.h | 11 +- make_dragonfly | 1 + make_freebsd | 28 +- make_hurd | 38 + make_kfreebsd | 47 + make_linux | 263 +- make_lxss | 3507 +++++++++++++++++ make_mainframe_linux | 50 - make_multilib_linux | 137 + make_netbsd | 10 +- make_osx | 14 +- make_windows | 39 +- network.c | 163 +- network.h | 3 + output.c | 395 +- output.h | 8 + shared_globals.c | 12 + shared_globals.h | 14 + strip_binaries | 3 + types.h | 36 +- vlmcs.1 | 7 +- vlmcs.1.dos.txt | 186 +- vlmcs.1.html | 21 +- vlmcs.1.pdf | Bin 25436 -> 25770 bytes vlmcs.1.unix.txt | 186 +- vlmcs.c | 49 +- vlmcs_all.c | 6525 -------------------------------- vlmcsd.7 | 10 +- vlmcsd.7.dos.txt | 6 +- vlmcsd.7.html | 14 +- vlmcsd.7.pdf | Bin 17147 -> 17301 bytes vlmcsd.7.unix.txt | 6 +- vlmcsd.8 | 15 +- vlmcsd.8.dos.txt | 294 +- vlmcsd.8.html | 73 +- vlmcsd.8.pdf | Bin 34740 -> 35009 bytes vlmcsd.8.unix.txt | 294 +- vlmcsd.c | 207 +- vlmcsd.h | 1 + vlmcsd.ini | 18 +- vlmcsd.ini.5 | 11 +- vlmcsd.ini.5.dos.txt | 34 +- vlmcsd.ini.5.html | 39 +- vlmcsd.ini.5.pdf | Bin 19032 -> 19603 bytes vlmcsd.ini.5.unix.txt | 34 +- vlmcsd_all.c | 6009 ------------------------------ vlmcsdmulti.1.html | 2 +- vlmcsdmulti.1.pdf | Bin 10040 -> 10042 bytes vlmcsdmulti_all.c | 8274 ----------------------------------------- 55 files changed, 5728 insertions(+), 21773 deletions(-) create mode 100755 make_hurd create mode 100755 make_kfreebsd create mode 100755 make_lxss delete mode 100755 make_mainframe_linux create mode 100755 make_multilib_linux create mode 100755 strip_binaries delete mode 100644 vlmcs_all.c delete mode 100644 vlmcsd_all.c delete mode 100644 vlmcsdmulti_all.c diff --git a/GNUmakefile b/GNUmakefile index d98cadf..f3cfb3b 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -5,7 +5,10 @@ PROGRAM_NAME ?= vlmcsd CLIENT_NAME ?= vlmcs MULTI_NAME ?= vlmcsdmulti +OBJ_NAME ?= libkms-static.o +A_NAME ?= libkms.a CONFIG ?= config.h +COMPILER_LANGUAGE ?= c # crypto library to use for standard algos, could save ~1-2kb ;) # can be either 'openssl', 'polarssl' or anything other for internal impl @@ -34,49 +37,72 @@ endif ifneq (,$(findstring androideabi,$(TARGETPLATFORM))) ANDROID := 1 UNIX := 1 + ELF := 1 endif ifneq (,$(findstring minix,$(TARGETPLATFORM))) MINIX := 1 UNIX := 1 + ELF := 1 endif ifneq (,$(findstring mingw,$(TARGETPLATFORM))) MINGW := 1 WIN := 1 + PE := 1 endif ifneq (,$(findstring cygwin,$(TARGETPLATFORM))) CYGWIN := 1 WIN := 1 + PE := 1 +endif + +ifneq (,$(findstring cygnus,$(TARGETPLATFORM))) + CYGWIN := 1 + WIN := 1 + PE := 1 endif ifneq (,$(findstring freebsd,$(TARGETPLATFORM))) FREEBSD := 1 UNIX := 1 BSD := 1 + ELF := 1 endif ifneq (,$(findstring netbsd,$(TARGETPLATFORM))) NETBSD := 1 UNIX := 1 BSD := 1 + ELF := 1 endif ifneq (,$(findstring openbsd,$(TARGETPLATFORM))) OPENBSD := 1 UNIX := 1 BSD := 1 + ELF := 1 endif ifneq (,$(findstring solaris,$(TARGETPLATFORM))) SOLARIS := 1 UNIX := 1 + ELF := 1 endif ifneq (,$(findstring linux,$(TARGETPLATFORM))) LINUX := 1 UNIX := 1 + ELF := 1 +endif + +ifneq (,$(findstring gnu,$(TARGETPLATFORM))) +ifeq (,$(findstring linux,$(TARGETPLATFORM))) + UNIX := 1 + HURD := 1 + ELF := 1 +endif endif ifeq ($(CYGWIN),1) @@ -89,12 +115,25 @@ else DLL_NAME ?= libkms.so endif -BASECFLAGS = -DCONFIG=\"$(CONFIG)\" -DBUILD_TIME=$(shell date '+%s') -g -Os -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections +BASECFLAGS = -DVLMCSD_COMPILER=\"$(notdir $(CC))\" -DVLMCSD_PLATFORM=\"$(TARGETPLATFORM)\" -DCONFIG=\"$(CONFIG)\" -DBUILD_TIME=$(shell date '+%s') -g -Os -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections BASELDFLAGS = STRIPFLAGS = CLIENTLDFLAGS = SERVERLDFLAGS = +ifndef SAFE_MODE + BASECFLAGS += -fvisibility=hidden -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants + + ifeq ($(ELF),1) + BASELDFLAGS += -Wl,-z,norelro + endif + + ifneq (,$(findstring gcc,$(notdir $(CC)))) + BASECFLAGS += -flto + endif + +endif + ifeq ($(NOLIBS),1) NOLRESOLV=1 NOLPTHREAD=1 @@ -105,20 +144,24 @@ ifneq ($(NO_DNS),1) ifneq ($(NOLRESOLV),1) ifeq ($(MINGW),1) - BASELDFLAGS += -ldnsapi + CLIENTLDFLAGS += -ldnsapi endif ifeq ($(LINUX),1) - BASELDFLAGS += -lresolv + CLIENTLDFLAGS += -lresolv + endif + + ifeq ($(HURD),1) + CLIENTLDFLAGS += -lresolv endif ifeq ($(DARWIN),1) - BASELDFLAGS += -lresolv + CLIENTLDFLAGS += -lresolv endif ifeq ($(CYGWIN),1) DNS_PARSER := internal - BASELDFLAGS += -lresolv + CLIENTLDFLAGS += -lresolv endif ifeq ($(OPENBSD),1) @@ -126,7 +169,7 @@ ifneq ($(NO_DNS),1) endif ifeq ($(SOLARIS),1) - BASELDFLAGS += -lresolv + CLIENTLDFLAGS += -lresolv endif endif @@ -155,16 +198,18 @@ else STRIPFLAGS += -s endif +LIBRARY_CFLAGS = -DSIMPLE_SOCKETS -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_EXTENDED_PRODUCT_LIST -DNO_BASIC_PRODUCT_LIST -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT -DNO_VERSION_INFORMATION + ifeq ($(FEATURES), embedded) - BASECFLAGS += -DNO_HELP -DNO_USER_SWITCH -DNO_BASIC_PRODUCT_LIST -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_VERBOSE_LOG + BASECFLAGS += -DNO_HELP -DNO_USER_SWITCH -DNO_BASIC_PRODUCT_LIST -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_VERBOSE_LOG -DNO_VERSION_INFORMATION else ifeq ($(FEATURES), autostart) - BASECFLAGS += -DNO_HELP + BASECFLAGS += -DNO_HELP -DNO_VERSION_INFORMATION else ifeq ($(FEATURES), minimum) - BASECFLAGS += -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_EXTENDED_PRODUCT_LIST -DNO_BASIC_PRODUCT_LIST -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT + BASECFLAGS += $(LIBRARY_CFLAGS) else ifeq ($(FEATURES), most) BASECFLAGS += -DNO_SIGHUP -DNO_PID_FILE -DNO_LIMIT else ifeq ($(FEATURES), inetd) - BASECFLAGS += -DNO_SIGHUP -DNO_SOCKETS -DNO_PID_FILE -DNO_LIMIT + BASECFLAGS += -DNO_SIGHUP -DNO_SOCKETS -DNO_PID_FILE -DNO_LIMIT -DNO_VERSION_INFORMATION else ifeq ($(FEATURES), fixedepids) BASECFLAGS += -DNO_SIGHUP -DNO_CL_PIDS -DNO_RANDOM_EPID -DNO_INI_FILE endif @@ -202,7 +247,7 @@ ifdef HWID endif ifdef TERMINAL_WIDTH - BASECFLAGS += -DTERMINAL_FIXED_WIDTH=$(TERMINAL_WIDTH) + BASECFLAGS += -DTERMINAL_FIXED_WIDTH=$(TERMINAL_WIDTH) -DDISPLAY_WIDTH=\"$(TERMINAL_WIDTH)\" endif ifeq ($(NOPROCFS), 1) @@ -216,13 +261,15 @@ endif ifneq ($(ANDROID), 1) ifneq ($(MINIX), 1) ifneq ($(NOLPTHREAD), 1) - ifeq ($(findstring NO_LIMIT,$(CFLAGS) $(BASECFLAGS)),) - BASELDFLAGS += -lpthread + + ifeq ($(THREADS), 1) + SERVERLDFLAGS += -lpthread + endif + + ifeq (,$(findstring NO_LIMIT,$(CFLAGS) $(BASECFLAGS))) + SERVERLDFLAGS += -lpthread endif - ifneq ($(findstring USE_THREADS,$(BASECFLAGS)),) - BASELDFLAGS += -lpthread - endif endif endif endif @@ -283,6 +330,7 @@ ifeq ($(MSRPC),1) VLMCSD_SRCS += msrpc-server.c VLMCS_SRCS += msrpc-client.c MULTI_SRCS += msrpc-server.c msrpc-client.c + DLL_SRCS += msrpc-server.c BASECFLAGS += -DUSE_MSRPC -Wno-unknown-pragmas BASELDFLAGS += -lrpcrt4 else @@ -312,7 +360,6 @@ else ifeq ($(CRYPTO), polarssl) else ifeq ($(CRYPTO), windows) BASECFLAGS += -D_CRYPTO_WINDOWS SRCS += crypto_windows.c - #BASELDFLAGS += -lpolarssl else BASECFLAGS += -D_CRYPTO_INTERNAL SRCS += crypto_internal.c @@ -332,9 +379,12 @@ endif ifeq ($(VERBOSE),3) COMPILER := $(shell printf "%-40s" $(notdir $(CC))) + ARCHIVER := $(shell printf "%-40s" $(notdir $(AR))) endif -ifeq ($(CAT),2) +ARCMD := AR + +ifdef CAT LDCMD := CC/LD else LDCMD := LD @@ -344,99 +394,96 @@ endif %.o: %.c ifeq ($(VERBOSE),1) - $(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< + $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< ifeq ($(DEPENDENCIES),1) - $(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< + $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< endif else @echo "$(COMPILER) CC $@ <- $<" - @$(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< + @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< ifeq ($(DEPENDENCIES),1) @echo "$(COMPILER) DEP $*.d <- $<" - @$(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< + @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< endif endif -vlmcsd_all.c: $(VLMCSD_SRCS) - ifeq ($(VERBOSE),1) - cat $^ > $@ - else - @echo "$(COMPILER) CAT $@ <- $^" - @cat $^ > $@ - endif - -vlmcs_all.c: $(VLMCS_SRCS) - ifeq ($(VERBOSE),1) - cat $^ > $@ - else - @echo "$(COMPILER) CAT $@ <- $^" - @cat $^ > $@ - endif - -vlmcsdmulti_all.c: $(MULTI_SRCS) - ifeq ($(VERBOSE),1) - cat $^ > $@ - else - @echo "$(COMPILER) CAT $@ <- $^" - @cat $^ > $@ - endif - ifdef CAT -ifeq ($(CAT),2) -$(PROGRAM_NAME): vlmcsd_all.c + BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ - + VLMCSD_PREREQUISITES = $(VLMCSD_SRCS) + VLMCS_PREREQUISITES = $(VLMCS_SRCS) + MULTI_PREREQUISITES = $(MULTI_SRCS) + DLL_PREREQUISITES = $(DLL_SRCS) + OBJ_PREREQUISITES = $(DLL_SRCS) else -$(PROGRAM_NAME): vlmcsd_all.o + BUILDCOMMAND = $(CC) -o $@ $^ + VLMCSD_PREREQUISITES = $(VLMCSD_OBJS) + VLMCS_PREREQUISITES = $(VLMCS_OBJS) + MULTI_PREREQUISITES = $(MULTI_OBJS) + DLL_PREREQUISITES = $(DLL_OBJS) + OBJ_PREREQUISITES = $(DLL_OBJS) endif + +ifeq ($(VERBOSE),1) + BUILDCOMMANDPREFIX = + else -$(PROGRAM_NAME): $(VLMCSD_OBJS) + BUILDCOMMANDPREFIX = +@ endif - ifeq ($(VERBOSE),1) - +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) - else - +@echo "$(COMPILER) $(LDCMD) $@ <- $^" - +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + +INFOCOMMAND = +@echo "$(COMPILER) $(LDCMD) $@ <- $^" +ARINFOCOMMAND = +@echo "$(ARCHIVER) $(ARCMD) $@ <. $^" + +VLMCSD_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) +VLMCS_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS) +MULTI_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS) $(SERVERLDFLAGS) +DLL_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -shared -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC +OBJ_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC + +$(PROGRAM_NAME): $(VLMCSD_PREREQUISITES) + ifneq ($(VERBOSE),1) + $(INFOCOMMAND) endif + $(VLMCSD_COMMAND) + +$(CLIENT_NAME): $(VLMCS_PREREQUISITES) + ifneq ($(VERBOSE),1) + $(INFOCOMMAND) + endif + $(VLMCS_COMMAND) + +$(MULTI_NAME): $(MULTI_PREREQUISITES) + ifneq ($(VERBOSE),1) + $(INFOCOMMAND) + endif + $(MULTI_COMMAND) + +$(DLL_NAME): $(DLL_PREREQUISITES) + ifneq ($(VERBOSE),1) + $(INFOCOMMAND) + endif + $(DLL_COMMAND) + +ifndef CAT +$(OBJ_NAME): + +@echo Cannot make $@ without CAT defined. Please create $(A_NAME) +else +$(OBJ_NAME): $(OBJ_PREREQUISITES) + ifneq ($(VERBOSE),1) + $(INFOCOMMAND) + endif + $(OBJ_COMMAND) +endif ifdef CAT -ifeq ($(CAT),2) -$(CLIENT_NAME): vlmcs_all.c +$(A_NAME): $(OBJ_NAME) else -$(CLIENT_NAME): vlmcs_all.o +$(A_NAME): BASECFLAGS += -fvisibility=hidden -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC +$(A_NAME): $(DLL_OBJS) endif -else -$(CLIENT_NAME): $(VLMCS_OBJS) -endif - ifeq ($(VERBOSE),1) - +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) - else - +@echo "$(COMPILER) $(LDCMD) $@ <- $^" - +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + ifneq ($(VERBOSE),1) + $(ARINFOCOMMAND) endif - -ifdef CAT -ifeq ($(CAT),2) -$(MULTI_NAME): vlmcsdmulti_all.c -else -$(MULTI_NAME): vlmcsdmulti_all.o -endif -else -$(MULTI_NAME): $(MULTI_OBJS) -endif - ifeq ($(VERBOSE),1) - +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) - else - +@echo "$(COMPILER) $(LDCMD) $@ <- $^" - +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) - endif - -$(DLL_NAME): $(DLL_SRCS) - ifeq ($(VERBOSE),1) - +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) -shared -DIS_LIBRARY=1 -UNO_SOCKETS -UUSE_MSRPC - else - +@echo "$(COMPILER) $(LDCMD) $@ <- $^" - +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) -shared -DIS_LIBRARY=1 -UNO_SOCKETS -UUSE_MSRPC - endif - + +@rm -f $@ + $(BUILDCOMMANDPREFIX)$(AR) rcs $@ $^ %.pdf : % ifeq ($(shell uname), Darwin) @@ -467,10 +514,10 @@ htmldocs : $(HTMLDOCS) alldocs : $(UNIXDOCS) $(HTMLDOCS) $(PDFDOCS) $(DOSDOCS) clean: - rm -f *.o *.d *_all.c $(PROGRAM_NAME) $(MULTI_NAME) $(DLL_NAME) $(CLIENT_NAME) $(PDFDOCS) $(DOSDOCS) $(UNIXDOCS) $(HTMLDOCS) + rm -f *.o *.d *_all.c libkms_all_*.c $(PROGRAM_NAME) $(MULTI_NAME) $(DLL_NAME) $(CLIENT_NAME) $(PDFDOCS) $(DOSDOCS) $(UNIXDOCS) $(HTMLDOCS) $(OBJ_NAME) $(A_NAME) *.a help: - @echo "Type:" + @echo "Type" @echo " ${MAKE} - to build $(PROGRAM_NAME) and $(CLIENT_NAME)" @echo " ${MAKE} clean - to remove $(PROGRAM_NAME) and $(CLIENT_NAME)" @echo " ${MAKE} help - to see this help" @@ -485,8 +532,9 @@ help: @echo " ${MAKE} $(CLIENT_NAME) - to build the client only." @echo " ${MAKE} $(MULTI_NAME) - to build $(PROGRAM_NAME) and $(CLIENT_NAME) in a single multi-call binary" @echo " ${MAKE} $(DLL_NAME) - to build the shared library $(DLL_NAME)" + @echo " ${MAKE} $(A_NAME) - to build the static library $(A_NAME)" @echo "" - @echo "Options:" + @echo "Options" @echo " CONFIG= Compile as instead of config.h." @echo " INI= Compile $(PROGRAM_NAME) with default ini file " @echo " PROGRAM_NAME= Use as output file name for the KMS server. Defaults to vlmcsd." @@ -498,7 +546,10 @@ help: @echo " CRYPTO=openssl_with_aes_soft EXPERIMENTAL: Use openssl for SHA256/HMAC and AES calculations (software)." @echo " CRYPTO=polarssl Use polarssl instead of internal crypto code for SHA256/HMAC calculations." @echo " CRYPTO=windows Use Windows CryptoAPI instead of internal crypto code for SHA256/HMAC calculations." + @echo " MSRPC=1 Use Microsoft RPC instead of vlmcsd's internal RPC. Only works with Windows and Cygwin targets." @echo " CC= Use compiler . Supported compilers are gcc, icc, tcc and clang. Others may or may not work." + @echo " AR= Use instead of ar to build $(A_NAME). Set to gcc-ar if you want to use gcc's LTO feature." + @echo " COMPILER_LANGUAGE= May be c or c++." @echo " TERMINAL_WIDTH= Assume a fixed terminal width of columns. Use in case of problems only." @echo " VLMCSD_VERSION= Sets as your version identifier. Defaults to \"private build\"." @echo " CFLAGS= Pass as additional arguments to the compiler." @@ -522,7 +573,7 @@ help: @echo " FEATURES=minimum Compiles only basic features of $(PROGRAM_NAME)." @echo " FEATURES=fixedepids $(PROGRAM_NAME) only uses bultin internal ePIDs." @echo "" - @echo "Useful CFLAGS to save memory when running $(PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=):" + @echo "Useful CFLAGS to save memory when running $(PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=)" @echo " -DNO_EXTENDED_PRODUCT_LIST Don't compile the detailed product list." @echo " -DNO_BASIC_PRODUCT_LIST Don't compile the basic product list." @echo " -DNO_VERBOSE_LOG Don't support verbose logging. Removes -v option." @@ -533,26 +584,29 @@ help: @echo " -DNO_USER_SWITCH Don't support changing uid/gid after program start. Removes -u and -g options." @echo " -DNO_HELP Don't support command line help." @echo " -DNO_CUSTOM_INTERVALS Don't support custom intervals for retry and refresh activation. Removes -A and -R options." + @echo " -DNO_FREEBIND Don't support binding to foreign IP addresses. Removes -F0 and -F1 options. Only affects FreeBSD and Linux." + @echo " -DSIMPLE_SOCKETS Compile $(PROGRAM_NAME) with basic socket support only. Removes -L option." @echo " -DNO_SOCKETS Don't support standalone operation. Requires an internet superserver to start $(PROGRAM_NAME)." @echo " -DNO_CL_PIDS Don't support specifying ePIDs and HwId from the command line in $(PROGRAM_NAME)." @echo " -DNO_LIMIT Don't support limiting concurrent clients in $(PROGRAM_NAME)." @echo " -DNO_SIGHUP Don't support SIGHUP handling in $(PROGRAM_NAME)." + @echo " -DNO_VERSION_INFORMATION Don't support displaying version information in $(PROGRAM_NAME) and $(CLIENT_NAME). Removes -V option." + @echo " -DENABLE_DEPRECATED_OPTIONS Enable command line options that provide compatibility with previous versions of $(PROGRAM_NAME)." @echo "" @echo "Troubleshooting options" - @echo " CAT=1 Combine all sources in a single file." - @echo " CAT=2 Combine all sources in a single file and don't create a *.o file." + @echo " CAT=1 Combine all sources in a single in-memory file and compile directly to target." @echo " NOPROCFS=1 Don't rely on a properly mounted proc filesystem in /proc." @echo " AUXV=1 Use /proc/self/auxv (requires Linux with glibc >= 2.16 or musl.)" @echo " NOLPTHREAD=1 Disable detection if -lpthread is required (for use with Android NDK)." - @echo " NOLRESOLV=1 Disable detection if -lresolv is requires (for use with Android NDK)." + @echo " NOLRESOLV=1 Disable detection if -lresolv is required (for use with Android NDK)." @echo " NOLIBS=1 Do not attempt to autodetect any library dependencies." @echo " OPENSSL_HMAC=0 Compile for openssl versions that don't have HMAC support (required on some embedded devices)." @echo " NO_TIMEOUT=1 Do not set timeouts for sockets (for systems that don't support it)." @echo " CHILD_HANDLER=1 Install a handler for SIGCHLD (for systems that don't support SA_NOCLDWAIT)." - @echo " NO_DNS=1 Compile vlmcs without support for detecting KMS servers via DNS." + @echo " NO_DNS=1 Compile $(CLIENT_NAME) without support for detecting KMS servers via DNS." @echo " DNS_PARSER=internal Use $(CLIENT_NAME) internal DNS parsing routines. No effect on MingW (native Windows)." @echo "" - @echo "Other useful CFLAGS:" + @echo "Other useful CFLAGS" @echo " -DSUPPORT_WINE Add code that the Windows version of $(PROGRAM_NAME) runs on Wine if MSRPC=1" @echo " -D_PEDANTIC Report rare error/warning conditions instead of silently ignoring them." @echo " -DINCLUDE_BETAS Include SKU / activation IDs for obsolete beta/preview products." diff --git a/config.h b/config.h index 221e97d..ffe6bea 100644 --- a/config.h +++ b/config.h @@ -37,15 +37,15 @@ */ #ifndef EPID_WINDOWS -#define EPID_WINDOWS "06401-00206-271-298329-03-1033-9600.0000-0452015" +#define EPID_WINDOWS "06401-00206-271-398432-03-1033-9600.0000-1422016" #endif #ifndef EPID_OFFICE2010 -#define EPID_OFFICE2010 "06401-00096-199-198322-03-1033-9600.0000-0452015" +#define EPID_OFFICE2010 "06401-00096-199-198384-03-1033-9600.0000-1422016" #endif #ifndef EPID_OFFICE2013 -#define EPID_OFFICE2013 "06401-00206-234-398213-03-1033-9600.0000-0452015" +#define EPID_OFFICE2013 "06401-00206-234-384729-03-1033-9600.0000-1422016" #endif #ifndef HWID // HwId from the Ratiborus VM @@ -82,6 +82,25 @@ +/* + * ------------------------------- + * Backward compatibility + * ------------------------------- + */ + + +#if !defined(ENABLE_DEPRECATED_OPTIONS) +/* + * comment out the following line if you want vlmcsd no to support command line options + * that have been present in previous versions of vlmcsd and are now obsolete + */ + +//#define ENABLE_DEPRECATED_OPTIONS + +#endif // ENABLE_DEPRECATED_OPTIONS + + + /* * ---------------------------------------------------------------------------------------- @@ -366,6 +385,20 @@ */ +#ifndef NO_FREEBIND +/* + * Do not compile support for FREEBIND (Linux) and IP_BINDANY (FreeBSD). This disables the -F1 command + * line option and you can bind only to (listen on) IP addresses that are currently up and running on + * your system. + */ + +//#define NO_FREEBIND + +#endif // NO_FREEBIND + + + + #ifndef NO_EXTENDED_PRODUCT_LIST /* * Do not compile the extended product list. Removes the list of Activation GUIDs (aka @@ -399,6 +432,18 @@ +#ifndef NO_VERSION_INFORMATION +/* + * Removes the -V option from vlmcsd and vlmcs that displays the version information + */ + +//#define NO_VERSION_INFORMATION + +#endif // NO_VERSION_INFORMATION + + + + #ifndef NO_VERBOSE_LOG /* * Removes the ability to do verbose logging and disables -v and -q in vlmcsd. It does not remove the -v @@ -577,6 +622,19 @@ +#ifndef SIMPLE_SOCKETS +/* + * Disables the ability to choose IP addresses using the -L option in vlmcsd. vlmcsd will listen on all IP addresses. + * It still supports IPv4 and IPv6. + */ + +//#define SIMPLE_SOCKETS + +#endif // SIMPLE_SOCKETS + + + + /* Don't change anything BELOW this line */ diff --git a/floppy144.vfd b/floppy144.vfd index 1154443e43b8480fce5f2ee5c9ae6c4d98502259..a7220f550e21869fcfac4369e0e243b8436a04c2 100644 GIT binary patch delta 341878 zcmV)0K+eB_fLefnTCfr(0=r0)6ed0byGWB%COHsf>3YRTyGQ^4>3YRTbqB|johCH` zyGVo7CWq7}0f*Ek0*BNl1BcWm1c%fn1&7oo28Yxp2Zz)q2#3@r35V1s3WwAt3y0Ju z42RSv4Tsbw4!6`M4?_Wer>ZDdNh+a$0FniG9$pR-7m2556SGIw;A0Xs8qJ_NdqnLi zZq#G?ag(j|vlQBN{#UvjT5MQ+h)Cz)zO&l>%Bjml0|f&TR2 zti5&NCFwDXgXQ+zTsh3r*U%o^-?We!0<@}TU{Mn8Po40%%5SuP6OIjq2xlUJr&GF> z<;Rwe#^jK`mhC6y6{%FB_A;tJfVSBE9=@*=R@i8#b9gflLUB!w6FEm~Nq8l>!FaHD z{IBKCAj+PHkf>Rin5mfu@&Epj8R4G@%ze~3!WJ)(ZqaWum^3l*be%yQ9-p*Ib-^Nk z^5y$e+1+8L{YDFaB3NNVEePAGNd<@1QZCe;%Lt>Fc1X=5L%o3?6W|OvyQVs#*!lfT z)^bKjk9%0!rx52Cz?ZWFcztXQ&9dd=Kbx(|$n{;~gxlnEb#Ulo7$2=2l_tPS(1AtgdaH6n69mT6nudXJFt; z__S*)oYs8atj_o6t1p-iEPkYXb-ihKVk^aoZ;K!w!p{5>&YAU)hWe-Cp&5157HMg6 z6^tQGOSwQz^z!Dm3aDOLi_i&a|GSwP&L#_| zE8jpCC*h8NB3cSu;Mh=-6jHk442*by39B8(J&S_}DCQ8V??Ei-T28>3#>)=uGCNP+HksNC+(%Q8% z0Xnbh=eMuQJoJMRZn5HYmm;pc&|{7oK1*dAb6ymGN&HzIt;S>q8(&!8$WQy>7Uh3J z7y+F_3b~cpTiTfji<<`m8+;rio3;Rh(0qNG<3S-p*F#Fjv8X=UZzOXfZ>i}*t?Q>^ z?Gl?SJ8gE`1IcUOf9~HvUCBzO7Hmq}s8_&R9`Kq1W_xBqF1^uXbx!)z38h90hGiz`i)f~m=(&NnEB zw6T;d#y@IpWEj;OCz+kZ_eapa`Q)YKl;uf`3c0pzwP*l3q6FE3(NYdbV}V^Y6VDNpM7 zJfDH9U^vnYFQn)8F^7|#6a$Z>Z$sMVdckqXV)nsj;z0I$7NaX`E*Qvd6Z=+wHoS@? zU%~Cr>}U}fA0A<$VS1YuA0#8E%Sh=;D4Wu_3xA3FNBf+((nno+n7v%cRD>H(Y`|H2 zBPkK`yX%=8g|p?eYx_&yr%7>|K; z4Kf84vC0hRt7R&lJ>zrI7mO)?{?RcNMw~N9+<>pZ7x}wvk9ClPsa~-pl*cD{0~Ww> zMJ2<~BQQE|6_R%>4vZ zK-X*aZOdIE9maK7jPcih1NYM9<2R~zm^SLJ$`VwfK2YLY9t$hBR7}wsJy11>BO%5$ zPb$?DoW1l=5_BkfB2k`|9puI3^N<}b*0+eIs|e}z7@_}ofhE84I}*p9z;W9mU44HM z)MKoTDQzu+QJq%90)O?;e@g39)bUC8jt0pH0E?g`jC;m!N{b`24h}GhFfv;=v zVP>!78UUceE;w6&*8sc_29NC(1M%Q!fKEBuzGQ+-n8|+9&H!2k9Rs*aujym_c zhSiIMOar$O(q@?eQH}rN*WU=7=q|gOG%3CuxeU|U; zh9(v|sg5EP7t2?FT8pV~65xYq-Klu zXB`ORW|3Pok5(QvFxi}uY|Xneh!A)e;yD=uAb}k7Rj<7z<5Qp z{KaPZFE8Qj-t=*ZE)Q=N8b5vyqAXAb{euN$3><$I8;7HRY^FBvF&;tfqJY?Bo9}fJ zqH|cn((9O|(H`fDu(%Bwt!BL4lBj3n3Qn|-DqH5oWeMibTgymr8KlI!I^A%^kMSGI zS#lN3d_MqJ>fnW`-7d!hk_}+~o&VT4<9(G_-59~pX|61yIaD{9oV*V&-3)S51iFU8 zrx{iR6N;;U-mwt8bW|{P&bZRYVMbng=qHm(st{K~A|h7ZD&B#J~Uf;aERLChO3l1l}DpUl^Q1IwA0>`Z^l!E0kuAz6y#d0Ga( z1`jyW1w#EGNZr9kN!OTM^P(=7VYpM48g(E`+WOOchW(_gGDfzgx%J_Cf4yNs?!ox&6LUcEX9?tg zQuh%G8+7>Zj7)O@Sj|?OOTvFq!x>b+N^9xQSBe<8ng2#iEpvU#^AU(Q1HChVq^OKWgs0eXK`Ul(XLO}I+K8CKU17rz^TG~`XfMnW zg9rKtf|mRG#mh%^i^Xl6rEpw5uJiJLk-6a;R{BV)ik(BGZt@EouS~4>DvvvAhr_>R zPUet$GlSMRM?S!_m8L1MmD(T;_){QVTCD+$rbiI||7Kg-Rw#bNt)u)1{wZCCb-o>r zQp@r7;uZhsk|MvCJ>*GrU)?Wnn@H?(E%*G}&)?p@6q~0JH;rfCL>Mr^N}>zeTJj)$0_gQbaDMy zO2=uQMS14J{ z5>g(oPz_);X8G==uirq)p(QEPXqMPZMHfScv;fHDKh6h4+yC=UV+5{$G8c`^^KQD39a<~JJx}-VhacK zq)&jVp-W@(&*z4c98Ec3(?SSJ@}EImyUwy9%-UOWXKKNkR$uxN-(K)D5M95s!CpXy zV}prl(VaaF?9DZoOVf#e+JsuV=GU46Zh1MQZe5=QxCGPk_DG_%gCOEZFoD>mum_AJjcQr?W$3emt6{Nf) zT2>O^i~=alDpMfgrBKQ35Z;g$9(BrbHm#B|>nZNgKrLT)bTpKIQg}@J6em5I_}1h& zsqEV-d~rt}`ro~&_50Re><&+!hcvHWLU0{RZs6PC4D5m}hjBuDbDX*zG9h!uRogy+ z5c}Cu9Y8hX`YP|dLq5xz0Ip+P&L^kXc_0_g#ZAIQ={5(E{io*Sz9|1mX^YK-et90-gQI_qlg-8zbiUk#(dqE#s=awT% zYB{jv#9MnZ9%d_an>YT*`*?~hue7?3+7uu|5Z;-+cF<&xY_e2M^Cj>PSvtMq(s!Co z{i5Rk4no0W^Q}Q)*yuQ}!)AckFhg=pGpX2cx4_u&Bqe));-4-<32e<~4p_+v{yr8w z3K66VZP{9O>u1$F&2c2sjw~!d%E;wrlBCpw+<^`go?PAG)?LEjky|O)C(H>2+ z93|<^G5OFY5b9gfPdP(RJ+1Jqm==s!__ENA%0%q4y*G1Zk$o(5khH}kB<|N5r|+FK zVywz0ZVM0q8O@7O*`0lNzj#pL6p*35ViJyoCS|^VWltv(C6!Y!PwTU^(&ADOkt2Gj zn+*atpu zO{qp|q_$2|WdwCxnBTGcCS$|HPq!@9<&xwTZ=9ZcPCw#tBV>^mZKO+0ftHV5z+;AO z7|1+-XKCqn*LsPqVa865=7XtSYK;M!^npmzgT?@jai1hPu|o@71|qJIg_@+|%}&Wt zj%AShG2bU^-QT!?D7ffweO_X(YVPQ|58Qqs^uP4yWKCj^c#B*SPbbv~uG#~vD|7+5 zwVL_abXkQ%>faCSnc}t@LMFu6w=@j^d^5Fwv7i^v8xV6am399{zTJDzej9sh z=7aOpVT$*>zirh5$pfx5G_(?1XmJvKoSG>$bbJ=q_k?l;IeB_c4Ac!IlUL}N*`ynmrcDmmd37Z|( zuDdF+QIjJY3r|*#8f%sEQ9((i9m`Tkj|d1^Mr|;jbE>+bH-=3rpqsxn;&$+3;|d?Z zJ8ZUM8krHGO~wC{5RhdlTur)OdN_Am*YDYySupq0fmNM^`uJtv}g!yxS+^;FLKz)4gshR1ZY3N3EG}vK;a2^mZ6tLelWG# zJ@Oo~>0H=Ee3F6Gl0B-;MiZ2vZX9;H#ug}d_7w`cvc5o#qkUI*EE zyue3<-|KYZudsx1&wRBZ88<@vTd%qc6gNmUtME7a@VfDz?uzY&RrEMA4QYQ z7hG|U2Vo|&PdG|vEECQ8H1vb57)%x7sgNrMm)>u%SNt=@uoqwAC^x7KTx(+X?HYr$ z5Y$Hk&cF+^$6!gB26Oj+5^-F~&Ft0=-Na%JugSE5`c(lHK{F<-&sW3FrOPHe$uhOU zw$I@!_*wydGa5mL16kJr6%zPY&B;+Hr@ZkcSkewRwZRUe2~q55ffB|^`8Hk77=N0 zZaDPssrsv3bXCFEnFj-yZ52VCdJ5zelIUdj?s}{- z##bHUtn(x{O*c?~GH@usiT*?w$#Hc9GrdU%#0*a+twBQHmGE!`qM6!_Fm1+TE-!-w z`#Uc+koTt(NTtT6$^HbS0J=ULk47nd@<5Naptc;e!RUI9d+jdON$?4kmAky*j+?I3 z9azDk37}+O@pILi1g|t1oxm-s$R{;^Ru*w0zdJx#=V>s za)AtQjeo+tFV;Xem`yLPw}i$I$$JY5#?>vd5tlSLKT{Sb>vb8(Uw>DQ z@&-{TBL>kfwbJXIv{R>tleBn6sux}$QQqOl17$j zYjAS6ZF0ap3S>{o-snAAhqJ-mHgGe6B}Jy&n+J|?bg6~kWo*6uZj9849iYwuJMB~_ zBHXfnm~wc4xwb2?QFL1~VbYM*!P8Aq**}|~VOQqb@DhM_a%T{tA+W2bA_C^a3Cdd5 zMn0Aq=0&ckxF7sL<%W(WwtS_xv$YS(3z>+gK8dc?sn}v})@jbFVvJ`$ZthrN-r{&| zo?@q6fe0^GcJCgD*ViM z`LF)XgnOn|< z+V>HDf+(vqL6C~64Dg`P6G}0yXbB^*S3dW5KRGDXtG+89=ODPsq8L>pQMh4BI~ zDdmVB5svDvL!{5<)eT`8tm^0hupSp`5mj!9$9ZjjzE7nU!*C17pnN}hoU5bMBDetF z1n^Gq`fvYxvf1BdSxl1{n16vh0t*~}8PPaA1d^FN(-bZM{@$;Sk_u_vhC&K!C3x}y zMRpc(Rp;5iMm^=5C9I-Cc5ie+hFzH#9CY$WzSdPew_V&!A#)utQ;CBoDG-6zS;ZT; z2(rGjkR)Ss3-nMzItp=uVLk9h{TmL5Y7LMML5?MyvAj@noe&hdto8DOe zK5a|b`Bxmj4ED;Zy*?xRL?5q`$%vYUSscU3IH+kQ94}xUz#27&_`OQ)Kw^&Fuso%R zyFQLxAafe4T+UX~3C(`5%|N4msigsnd)22i>hNK-Lwv1(P$6TMbZ0N#&{I>1y!Gsy z!|;2B@2cD%zI#6g!2$A;tT2v$PM7sWBe!b=cNep>zk@6R4dGt~ZouWoiIu0YpE5y< zF56pVx7@PP0L7@m+)U8Y=UR?iM3orBcWlVO|N4K(-nJ%<4_DE#RbB7Ko`CCovRER# z5}+Ok%FU^NO@TYiRTb6A?7NyB7ornI*KX#agAUzWSk~#06_N72E?Q21s6#~~P%WmV zDtn&#It|Ze=u8lMIA>Un+ROC!wnyDQKW-%a~3yS30EN7mQ9c-Xis&$=^S?Bp1z(bd*V|6PoK=!IP2?pS4Nj71pt zMhT?i_=-xmvQ*AJgSd z8ex^0Z#$VriC3+U=?unF&|X`Vf*p&hSaMM?_Ba*w0#^ZVR-!G(Uo7I~3acyK&$Kue zW3Y;fJ}FRp43mg|qE}jNXGBW>n}H?pPS>ngmTH)y<*0=%{tFWQDj6>`r#==r{^htC zUiqI9I%kJb6F4B#!&NR|rndr`Amm%5ndr;-e>m>?zd4S>J!J;e(uQRHwmPK^x^k2v z9&fZspi%~;aZIF9;7J2QwsBtmG-x3oNlr%JEAut)t@c}gF(%Fsqd)$3I)SgGwnpb0 z1>rpSY42pHX7gqJHo+O@#7!~i zy;{NztqGQYvGuLwZ;rSnFfXifj!Lc80d0@hSJ#t34Elnp;kOLI_;&(yv-)R0us-Ft z30cYt958qa6Y~DeTsqcB@cg?c8_DGMC;i4li-@g&j%Jz^R%v|Zu%YvkG(b$yx%1x^voq(*u1kuWXsF?wg;z1EuwmVEk@bq{{5q=k$er zA}+y_PbH^a2po0Nq7wITBw#se=t`{I6y67aEC>w6(W&AGWhD=z?biUfu2pBuiT#SM zsQ=yC)G&?h$i6B|?Jek2lb@vOD{MVX_FSKex~2OLBq4y$LSa*ux0)`eUr z%L;}ssFuId@!V6gc51g!d#Zc#x(5KoQ8vPwFw9%2z|FVr{-|k(L21X<;@NPY;@8=k>$tD>ACFJ+Dk(U1da>!mmat$MN(Wr{4LgLBHy?!I&Q&D8a^M zu)|m8c;)r$`oQX&tHowKj&A>rfXNMiA3Yp*JX{-<0+bm1_>lY83^UX3W*@@y*Konp zxT~MIH)oK1R$IRUni%eK2)3V%%-jVQoI5G+klzF~`L9_$4|+0KIRW3pYGXoxhF9}@ zAB2aZq*g?j_xFw@wlQO%hf!Ll!`0elSj`4{qIwQbaX52QQt|SLcX3Q%Xm6l@Mgm5} zk?RxEN?U*P9L-T1mZ=_h8V+-XimoE~{Z*5`FP6=|cmK-6ThG>rO&eX&H{j$H+4HwK zF~oYBBGPj|bUF1aGa(Q^td%8$8tjD0$unqobDAP(x&VHH;lH?0o@)`vVq_T1P-vXe zaG5mUAab-Oud0uvFBWd4nWXK1Os1)Nee4VD8xagp`MLvi80s?EV*NBB!Qf*_Qn?r` zR7mWm|6rA2GE21K8l!4Z74T$Sg>2BV0oB9)H?KwD1S&+n;rQl`&y$opZskT8 zH0BHd3=TcWPN39(ujR&hV(vtmdZI4idD#=Rt|Ty6NCDIrxarULNY$ymE<)3>nz?06 zB^0ZJ_iC&mkqPac{9>IW1h@RjB7$T7+Fti#(df^>QYS@_#^F}1I!#wL1Z?0~@9BE5 zRCn86ld>^G}3m4xXrK6|9X{ zNMI7lbMsO+gX8Y|xLBdB6+IjC3|kK#QGFO!hyFM1T8l~qB_*Fza}>4yBC6EUZqT09 z1F)-lI{lQK0z$AxlEc~vgop)vqnHfO(*-dO=g*haG}xU#-40l?wAEfRtzWLoBK-+r zXee-&74>s}Ybas{cP#C=v`rPZ|7h1767`{-*`cTZ!JgLG%jeg)mG%jxGTUERiSG*> zDue8#{MxWSQwna1g}@(BtP%aLU<4Q6wL|ZH3eUEF;MjpUun)>6QdlXZVLs_H zl$6hEGg#V=Rsev}BVrlXapKsug9Xm>RGC`;v%P?Si+h>a!!&RHNR*a6(7a2q^ZP$y zw+_L+mlY~roKfD>7m#H#3GyT~BO!`hte@NNYRSGug}rM*3^qDD3|xmE5UZudDo+C< z@yk7S9+WDt^CrIxN~MbbvD8Deg&G0i?rJn{OyzT3Y{NwL#zE$9AR>H{Pc>mTPT>EV?59(+W@wX-I#fzZ0CHTpMqPV#h1;9xsLr^+v3FS2rZQ_q@)wHCUXU zneeb;?V=rv9V*%t<(6W0M-3u(Pld0Ib;-?t7beFOx2Op)kS(Xi!X-QbaIhjG(NZxS zzhey{TeTt2l4Nys%hR5ahzUE(y9Q45$bx`97f-$16J&UiM=6zcFsg+PHi#W7K@+6i z9Af3h3}tuEw`%)EH>WA-aVY8Koy-Mnc4WYd4FaRLha(*1g^&3)S*hY4aC>S(h;Z@FPF^ zsMtu(IRqLLk{}fe;w^JHHK_fBrzaJa@t9r_bN4Y*NnJT_yOeGZ@(2&il|$F_rxQ=> z1I_b8UFUNZ9b#D^?LdGdqbgOigq$TQOgLqOq{)hlj zbLIr&jZp_O>iaiXq3SZ0G@j0POrL8dn_xxG`>h;PPGz z2W_G&T%Aw^5Vzj4XCce@H1wuWsXXlYHy}1VnbTbk#=L(Ya3W(rMRxu}G`l^Z#qveg zaww41|9r{FwB{s%cUs-K9&k_!QNwJKildo-8aSXiRbQ?WVocwo43r*!#H!X+I*8Ji zc1u&LzC;-nQfVwLN|azVF0Mw;#a?0Qg+XFu*iiZd-1$6EZXk^1`hSzU_M|i#zN(g_ zH*mS#9P9-Ho*gTSFED&bz3$KiLh*@sWah!_-9HSkgZUlE##_m8Uqpi%1l!S}DY3n6 zqq@6AOEDpH>MoIud3D@>LGdl05$d10|A&Xa-v$AptHA1sMDawtVJWM0T-7O~_OV>o z+0l-^@&iZB&n2+ps^Ne?n1V2fdvuWyF&86CMm3S-xfsnXfT@Y7bmPU||WBA)8F z7-L+*+K<`-k1?(tE-xp>=HC6Uv>n&!8nAOVs*lG31$_>r$6X75VVxSE-Y_LcwgBC~ zgv3oxhsocym$EW(JDgzZDyjgud*{*++RT{RKm-m>r!e=fRRl|0A=0sPqSpw^Yl%V~ z{|r}^BzdUZyIEe*Mx~#Ry}pkBmj@i$8+vI|Vk4s)_&fL*fNgFe`Av#TL^iInlL2G>1L z{g|SPQ|0+p5zd141B7#HDYY+lMpmWnMGp1*7Mq0gN*gzCbL<&N#W};UoxR};s?g$N zuLWZ+KV?=QX0k^omkj@~Coc+#Zl#Pb#mTn$t|FIxopE=6Y}_tfrw;@}qXCiXefakB zOaGCkUk9D576rHo6XB|b>qX;1+&`;u`lWBAMFKi?i8Q=>?Q9nQbF~5h{DY&!SN}Ay zTnd0F(MjKuL;Ol3q?i9LhP+QFGNts^RsQXPC@)B$nOqJU?~B#W>Fi+|Ys5^laR>uU zFiGJ3b$8i+-KVi?AUToQM?bZmDVfc9xuu!G^FP!Ipm>hy+&%D*>su?rx8R8vRCdb1 zi?5x=_PwOSo_#G>-@(!^s^t(qS(kzUEKB`8?BwI1Z`vPORrh>xku`8Y{Ojd4#q>|d zPWlZ7NkGmPh7D|V1p@qggRgFOy0f14LIw3()YsjAl`%xnH#Sn_t1#5VvBg2DF0Vl5iVFvVe$drp&CsM_W??{>u1!57NAOz@Iyat4HL=~ zDE{hyCR*3yv9-|B#qOJen$OAJR~4KX1%HPVW2)uhTO=Cf7GnXZJu5cs8Oy%|bXXUE zb`?j}kn!%b1>JzIQ=AFSR`RM7fv{}jSIJgp!b3;Kb7Ha>m?hJ-Xdl@gXNd#mc(y3} z;8T=v7{P8{0-mE4`R&oBn9>``Yh~Zb1B!ruQkH55>edNIVBMs$o9f8k%9WrFAZNyL z9DUL|>T^oVix~z6;S*1p~h{RTnZFbss2;z;EY@` z=B*aE)hra5Np}}{Tcr`EWtNK@OQ$q--@jz0LhgaVJId)%#iabIrW{aE1MQ%X))e-C z(`sG`m;g(eBNMf2w0GFaUS?b!A*?Ya#WCN_$zz&*3d*`jr}@couoUZhTYlR(yLaT- zK^(LxZ(pIm&H#7 z)nWzrTD(mm0$30!#FLis51tV}=LGCJXC-w9`+!mE^|PRwz@#WdM`MA^pDmdLC;KEZ z%^`}5CYt!(NVY8e8qA~xk2OOA+ixd_D?w8@7+Z&CFtUYfA{K4x2bh=Ozhtw2FH2xs z_y*H-?uW;Cm?<8&HYmiY(Nt4iY15oViHU8FJpO0)(IRBv!Jq&+>N!A zW#dL^ZFl+riWeX2(52E{I+)gRr!-|T|Eca%Gey`7_l7O>3@=dw8Mz%qaYeTb?54v` zjoVwy2hD`4(cFW-97H333^LayRpy%t_T9S;dF0okX=of8A!{$2kzO=dKpLELGQ24% zTWTs_2zYP>BMZ_=1yl#I^a-^QTSKRvYKpXHd1fY7JJabv;*!YIo^Ak?BD2-*u1EQL z^R0cmz#?s`S#kkI>o|16t*)Btq7f&}{ZhUDeBP+#!Y1HA$&8o&{Gn%N4z_M86=ObRLA zzO-q8-?XV}(I*hf3>cfLcvZ)MeIK;SQ6b^fkBtClT|ClTDvF+oGLLB4SE;@W@+753$Itm-Z4jMDCIC)@LBL5{{R%xLk4OGJ{DT z{dY|KEH|@%>{AXz_x>QbJWz*l0bNy5mwspF)QnlVd%YgJnq?H@z#2bqO@)-)M8@iL z`R=99i6q{>U#LHLAE~%KAjvQ7)RzN?rJ#08AwJOBbcFdE<)278D>h9F03m`Ig-G@g zv+#pk#-F4;ZQjKGWBM!5ME;V?K=uk_*j6JsO<<6JfRQvC8Hu8KUOCV1=k0zr_;sD( z*tp`F>Wk+T`U|v}jE3Jd(8l1FZTo5CPQ$f{C;T9q&_sykpg5wlgoDS0D!`ZFH_l)N zuYf5D$je{CVO%XK7JkFe`ovuDcz$Jzuqc-~KpI%_!O$}iDKF;Q$RwcyDd8@PHy&INDj5HJ%C zCT!PCV#}GVuAOVMb%22kVf2MbpqIXE4G1}0zb--mhT%bfbXa6FEf@;&+` znt}FTPqeT5v@-&ANtwp@t(Ww*X8v4RJ@slyaT0wUJGhh?AF(hedyr(Bu0MMq8CJGoO@WBaUNe*8`tm(iBWzQKhEpW(Yoxw2JJ@(^ zCD>LKx8RqBYjUQyEl>16!(12mQ(@|V6AS_F`QpZ70!Bu^RiK+)UFUPj#h!L{6vd^! zbzQUlbxaM|UF->=(s1x~@++?kKpWr80Y_<=nSRFXE4-pWO(Dt?HN7(RQsDhI6Cz^1 zzv}vtNsr9n;!bMzn8L}NkdEl`=&5T$J;f2V1$R1w*$o za3qtcPhf^x=0JjjT^JX?>QWoKX`Mc`@fn>kl{b=6mWkdI7KApcv2uu+wZ8D$`v+RN zZbK!GVsv&8xLs`xP82D1I*>Gf_63v!NQU#ZtY6tBtJT-_zNbn9SDA_ z>3KOfQKHHdk1&YGCW(K%ZsFWMbx?E|G&Qp#yJ%CvGAp>UMx2nKBk$VDYwI0BjQ1t( zE}W=Lm}5XioU$Nl1c;p9CM)UYY z$dyUbLfFBfXz!ExEoi>RO+QVO`X>92ODYFzF%9~5d0A(fn%!VqN zJ0D?GWA@XVO+M2{+et8gj4`$jS%;%gY@OME34opLgW{~_6lIsRK|8_|*dGH9?%;4j z6Qur^dBjdbN;tRs8o#;f!Ifl{2&)2Pe+XdH?5cU2p#}8)#dqM6Lr{_&t_1iMqa8c& z*u?;OZWif;i_`*7_YWGW&%O^8v*f?4b9n(K8BLr5- z6l&Y&uZV=t=Nt`94}hN+Iy-HK-?;m@w98-P z-1cZcu5fqPZks7{wpY}{7v4Alj{Ka;WrU?Jn`bi=5!T0@5Qtgu?AU(AIR$b0=Ry|* z>8qvNFkKKn>}S<~jkSi~8h;mlm+*FKGwQ7AlEDM@tas~TrvCT;NG-UL z>M^XgRB@H|z8~`FbFwkoBG7~7zM+~Mt7+!A?7o4Xu_7>k==?UMgFZBi;|0A(F}{}0 z`#^yhisD5om+emKU(_Stph(hhRjVf62&FY{bs*&|P6LtaW}1KUh}&Y-c2!cHZ_hQ# z1KGyCtaH;EDu+c%@S)+2REHf_r_OY->c50|aX{dXN%=q2oOhjqY9#;h+waq7?;y_K8L+E_)D>t4|oH$3fa-mpyRt<597 z7&Us^h*(lzaZ^{J&WHf3Dwm@yDK`Zo_jXLWME)|s{DU$coL_L83Z;oILsWKg_?le< zdcjGg#<@!Fa;q zqML&b-LQT(^hrd@qmILI0L}0~k8)A4j+|)VE8Ymy9CkM;l`saD9?tUjWAJ7VK=CcwTNfts zv~j7rsT0~^DqG9LWXiim12x|A8zR@z6%y|PHI&A!~tA&D8ZeJ|T`7hoi@a+<>9~o(qq8AHhU@=(g*2 zW<{9cR>5E*EaWBE6eu@kH_mmZrEJH4X?(jeIwO4lNeVgKs?6c4oRx_%d!lM@?Iz)O z2e@m3?x#<*Bd@m;pKoM@F8EoJN7X?*TfHSD79)6a8xHR4U zX;^$ZVT4A;-imbuQxfjiNk5HTs=M+oq2fmZ9m52oZ>;3t_nUupbTF3{_STBgiC?}I zTAe#kiV=CUU_q$#NNrFYxc`wTmfvm$ZugZ`?B2e7<~V3jUTKF)Pv?m%R!8zSfU=ZZ zKxuhHmq_YZn0Z0E$CPms;3jo{38mknU14Kc2(&*InCrKX!#HL|mpuKaQCu#YJ}*nS zA&%fjLEvd z#Tu@T(qfr}n;#J1WdS&1Gh_9V7+G6l8>Io!rqerT{gV>{(r`_iW)lD|cZQjj zm->h(pPmGXjuvs)6V6S4?xIs%B`=hzILr=;j_m0SIF>L7Bk2PPY-+Lw)RV~%cS#W4 zbzZII>Q7HFz`=m6-A^v0IzZr|bo0Aj{fw_9zePRfiShfan1H}S6&rS-=|xKyFX;Ob za;IQvhS_A{gODe9@i@W-Af4zxKZe(I>t3$fukNV$m}DGyoiy-&i5%zPaUJI9^JRZc z*S*@|dih8GsXyq??fH$MoU8_iodEa_tWDI|%s2+(F$vRrI$~m;ka4#}TDBV2Eo!!I z=em0u=5^wQHk##rNMJefFRhm~zNR{i9K}^9{2Ere;30qYK~@qXl_n;MjGED%TYQm} z7w19fms&4`(@MyH9g?8K8Vc}gVx`D|{KRgGYSHvZ2UMZr)FTv~WRu(}qhth;-t|$@ z(?$@LRs!m9#Ol9%OQ|u8k!9_+ub)WOW|i9@6A1V|fr$&I$zwlG!x*Mfa#U9KTRfGC z_fpqDy;|=M_Ag?j9|zmMn0e!!o(`D=HbMvN%}o0gj;<4b6d~b~94tbvpPmyhFztCO zr1p(6X|r3Y7XPAIuTep?{$1W zP1m?8eWDSTz0-PDgzMpP1}U~W1-TEqgVZXArh3TINFVcBNxX}Aa``^g0TRvIm7+%s z;n89>c0dPzmQm;0catl6QwEr~`a&<~mD-q~OWqDA{Ve?SpHRZYXDi>o+d2A@O}wuz z+r>X$pLXrf&Tcbgo-P&=r45#<qj0;!Us+m;Z_Eqm)^{r3cI*agKRI008Xm1K!k`~<0# z+F53B^1x`WZ`q`1Dr;VL&&~uQk-l{|27Kr}Cam*T3I8gZnZn4&f$@m?29>c$99jOo z8NfLxJWzj^TXN4gy0GMGH7blYB>d;TGAILoNnDFx)+t6H9_{*+Q2k7NUkvLYO#2Q= ze7orW9q6cNn?`69qSphuT}HFV>;x;eAcr#xe|8LEk$dN9RrAKV0t|XOZi@N6e$Ehp zW1U=?k=o!JLsG0?Ydi1W8-#dGM$-j< zmwKG}EQ|4W!Dy9m8DR=o|K5ED|pZ2R!+ z4rm;NU=G4Vk?Wzp&g8*&fMwL_2qvy9snH)@X6LnOEg|R!j9n9N#@Ljo9d!xUYw-NK zPHGN!4eu42kbqmiDzfmXIZpMQi-ZM#(mp7YL6+CO6bm*G!WSUEP7TwejI8ciPiDf6 zz>~lpd9wA(E&w68P^#PgSS>jQ>J!-Rm)hsa+o~OS8UPQ_?Y@?`q65GqeL>cW3k9T--y~`B2$1?mtJ11>8~2j$=^0wP8LKZO9xL z^$}tJmM3-HxWft#_5MhpxV5}D@}iVyf1>w)AF}G*Z!+mHzYg3`KLOC=B`QANo1m>m zB20K?8L`L?iw;ekiwUCiB6_radCo@tLQU<~oFO*^;qPC36o;aEM z2@_onQ|?YR=e8L|5lZsOGGNHQRPCYY=c|BmP06tB2<|G_u@loO9T^X#EqfKoe_Bfd z@6$Qm-dCig@^vCauOW!`secej#XP|zAiu6CHT@f7rjLV&hjHG73ciYSCQPFC%25pp zp!-PvopvHzK#fuG>X*de;eb+35L?a zV``r8tu}$<&TutTx(1K~CWsBb6dKagV{toX7qFq^xI(T`l!G3O$^ zcg!z(vmgXR2I9g*-RH{GV5|a5J8pw4k=L{G>l$)^ns3Lzyp*rOf2&Cl^f``9KZHTv z<6jI$q0hTe_}>M~Tn%W^0Ze0%Q9T$2lRCb^Wnr4>&^}vt{se$xq znLG{m=NO0tB|J=+0~A@XuCo8@nH#TbKP3=~9BwP=IT|$8Bxd7_e_r)2lLl-b-QULF zaEto8jOCrOf2;J3rpuLTS~$@zPb&glT(IqrSD{c=>vgQrd&Pp2V48#uN5X-3*ic(@ z7aKp)v2Kq-eC_=yw)z<`6lUq1=_M)$_|1!+fwa!pnt^Dp17i_MXp72<4k#5!K7_eb zQXbP;9R>$F0(TEqp&rk=D|(Qo7%6yFvnkk*V#NmUf5LZ%sm#J(qxoF2rAJ*xr41*Z z?Oaw^5}TwE_T371lD@a`bv&=F5kIiMg{`%nekf&X7!OvzTHZw}?Y&D2h7kwehCZu8 z2HjdP+OJ3)XA~~vjnPQ!fJ(_Zf^7_at7b4RbVehix8j9~VgZq!6h1}YtadKC$BGn+ zo)~(5f1sI}>Jzg6@M=oaWDk>-AUow-iaKw@o;he-=~6myh!JR#8Mg0t?77N6y_6x5 zwNz&XcR^c}CsEnaB*-=yd{KS&YTd4djAe##bncedi!TIUV5BRuBp+jv@%)CrlpEVa z-@G1O>o-iNOMV-8n0|QFjg(W-b!I0;1$dSGf659qrk+0zF_+h}3}fK814ufap`I3Q zNepUcW#Un6{aNaw_KLvMuP+9KLeXw?88N_{mrxAw|F{c+YOjBwkKVeIH;*tOs&u4; z;fzi;MX^s;v?z)h&yBe0X?OQB4T55YdEB7~#=m9UWV<@5J_)}qOptKW)(*@&m?#1W ze+JS$A@RqG@inoH2AMOpaR6*3?jmJ6B)?5!Rc)lgx(ezK6i*J>GYB^M>Gz4R>~R;1 zQexgWL95M*aT?X$)WryQEiQ zNbW?e;ytb#3g7s!x)>a@daSW3pie{m<-v^5WP33)x-xH(SU6H_9<_|=H)iE||2BpO ze1l@DJv@CD0>b9lSH4v0_#QmP=7&{Ahq7Z?l*@tYT(1M79zGEGHM$}I_50)ie?JK( zY-ICzo4SG^DRsp%5csSi)41oKpKrcPHBxMKy?Pd@v4JXW&gG%F3|Vj=%vpuqAuDBt zhSt3iuBa(@=&|IxyT3WFNgl3RJ-Xn1UR{+0ir_HihJhG09MG6F{v!lhs%8o^>g;*D z#cU)M_LZHS7BR~b=amSWVpT^=e`)opb&Y?edd8eo+Y%-vk0pW}*9hezzh~ulJ6P)X zEL*b!UNDu&RvB(YQ8Lrunx+ndUKy-lt#`Jo#{+WY(00gL8a{}nJjDNayjt^bV|lJ6 z6JRjvC8{bAr3;L+v-!YN8)5yoD_l%`iDn;)Q?$7Q7kPuj{!N9f1!Xul96#GkOeks z?Aq&}VZOFFM2|gq-P*yVIe=tXawo2$1Op?ZrQJ7Db$eyS((7kr3i5_6GaBm?={P4& zUkC5yA;*nXw|TgOow>&^fk4j|7IvAkf0^rSf$Kul0LfCYCNi!%0M~MZ=O1uF zA(w?@G#YlaPn_7JNN&Zgg7%W>LX)Z5sw{(5(aWrRcU=1{l3(x^zvl<#J7zbJsbHm z1P*DJa!&K0lZvyMB!zrW+cO>45era#7jl54HJ$(AHW4K+vCbrb3M2uN=E27@Cz47)hP3cr-@(Y|kX2 zk4=7Q+;dR4gE&@lXxFqLafV(v(KvQ(KHDnJ`FN=_qB$Kzp>xOo3|2Hl#QJC*(S}7E zf4Jq|Lm=2hvgtGwx5O3xpB~-Atk(11QuaXYMcOWKK`JsFBeqkVE%0fmg5tR$Uovx2 zq54rit{?=ZodSSut2c^NJ24C(LNlZ=P&B!l$RXKS{$Gyf$#OSdSEidy5gzW105B#J zmG`mJ?o-8}UAUW}-G)VT6v66pBA_7pe>{^g#N)-m9hpbfz&95cC{$#w;|deC(?$Wb ztOkkLStugFwsAxH?Yj`HgJ+@@OGz$d)UypZOE@gv!Oh)Xqzf12d*|jeM&%9B8<@^O zgDQRj-~kd2LW_)^Zv;DY2M55IDOxqPB4_Fe>n|hes z0AuACmGRVuRN6xARyhR1Jf3u$vnezULVKYciSMYWFp*XA=d8$8Q|Q9fA!f(@*;A(O znC3Y=Q5lK|g6ApX?U9wXJtbM^f4>p&4n3x7zZ*sbvaWG2aH&IaLjUZ&l+%1^aPwZ7 zZ>2J`@uk7-1Cx6hBk|8!NTYpL1$AXl2+V=6pPN%xr69(Wel2{z zz6z`N0x9mqyW$k^=DNmJtAwEup5B^1e@zV=-ym_(F8;{V@hmKCPE8SYe{u=*-#V7i z4S5sg=YvEm3r+5B>R8lOgd>r3dyqtTvsNrvRtqQT;gbw|^Nr*F{SC3=k}3XH0g7a` zyl2bI$Wdj4)U|1r-taI5o3Wh*TIlD{s*kbrlWr)xEihIx>8nT>u2u z52aD0JB)Pe*&z7Gq=8fie@ebhFl5^tY2l}rZI^a?2Rriv9v4Nm>)FiBw|dDag*Q%r z3i`5M#|lta1Q84xp1-M$dFIm0lc_{Q_y@?m8a)H>xJI%q&VFXuFX8V>;tP|*wRP*6 zFe8%xfv;}8P@hsX=qtt0{Rf@fH>#ToZm#NhTM8-vGt5cKKWsJoe`OPiCis^<0X|a& z0m7+sbxpBqx<2dnpjD!O>Pn?f%f#i>-}z$nRSf`;o#1(p7Iul`M~TekyJO38V`uC; z1S!FZs#2fT+Xw~Ba%KNW#mutAQrK_Z$C-ZM@T&@jSfvLi1bRWAxIG*7P==%S)4#hC>S7BRsDmvMbJRV-(d1I^>_TY{w2L z&0uD)>^V|N(v4#y$D3&d{IwY<_c)G*q!tmbd%*Qme|#l2DSmd^*)B*x;|0^q&Dyp1 zSMELPd(2C8b*hFz#eq_Ir?uFolw3bi$c{N8snh~d(AYV)Krzbn;@7n7^JY!1>av0I z_(yshgCyAkBE*FVIodOnY2wPx&tDAa-nO*Gq)G2`sLVrJ%(4^=aEuk{hu4M05=J|W zFtgI@f4D6tQPU+=Cvz`de8b@M4}EI8I^T>`^lnM?*5NCIy9 zmTlTjUm_ZsW1dmHRgP;mMVgKk`>CT+3I`Z&zld?_i1mGhUsh03xBrk;BZ2g=)@&3o zuX9gD@M$jjV<;bkF>r$DmSF$UYvDqcl#?NhzQ%Cl>vSj-t6|jbQct3)C5s~%OAo%Q ze~PUAh`UyGB6do9ne>C?Kcod zvyVLkf=v_<@Lj70YCLGwPO)Er<-o~5e}!D31I~S1UY-~U+A^!=fbr1x@98Rf6|YR zNeS9Ye>_n8kF)K)jssXPJr<9M-9A|b^ zRSBQfI)hYBX5^ktf}9CFPsmHp-*gCDa?7un3I`wD5;;#YbQ`yET40>DGrK+h)8Th2 z7cg9`x@o0xW3sbkbGD!Hg*F@~kfWrbY9H%_ zjbbfZc(G+9;O)7o_|h?Pf5MmQs;`a7$_==chQ5S*+x-*D>qNu)yo zj*VLKl}(r+Q`4Tba!Z7S4-|z7tH$e|$HLIBd;5h|tuLB9b18d1jR2+}%JkS7vEDn~Q^73gN$?RtPa8%-}WG%&?W?!ucle^IIYv;LcQFkDeK zgVDgFQ|+zhOgBjy)5d^fIa=)th=mqp(W8<@6ZUAEIeyP|ep6CVcJdrZ`%LBvgsm>r zAv+;p1)*I5They-RHXx=f;h;1K|8fn=h1?_c|&y{l}2UCS4{n>ulCjaNK|qb!gWc? z+Vml603UI?hk<}2f2!MwlYyD>HTT&VR$6FrvY_~dpaBR`;3CJO`*UwRvtcG0^>8=ob9<_Wg2Zxm`=%cv z?b4@_O?8q=e@^dFZpzq2e!e3TKMEt)=KV-Ja97sV6OJX5!1$esh@pW@erAyjx%Kok zKjoXKD6HJTx4H6xA_3O?%#J$3k~nX;SDoLQKBALQSh_wbdDJPjRzkRt6k}S;8N|t( zk$Hu~IdAewDpdJRg;+(;&$GQDC31uiW$gmzx;8*Pe@?7(BnjrWz0gloF&S#ox96|L z3n-_t8P@9@s0uls7@D5l7}g87kCGLu>Q>g{;jtw zh^lPp$NlE0Xw5S=oe%xp=)Vx^sxt2X#NY9SU{d|yhN?-3e?N=o2%L5Ea+)KI$GDH4 zn`3e5f8`gJm}Ebb)G6nG^qAACN{Fv&+I)TdTve?~_ZM3UJg^q2fXnQEE(?TameIR! zwd)wbTn%h(T(KbW{=U=~Ne!8%TxB+u(DTk9Yz)GZHHf3a_7NAa`29v27a?Fa$L zf8d*xltXE6qR%I|u5cr~xC0K*&xqn5h4%Qbj1r6UGoUK4btod^+Yk5tFtl>cgiHyi zH!E=pwqn!-<`;6Bo^nmD4#?l1KUx!g1TmZU0B9%d>yC#Iqv&;!rY7q{8`Itfzg3Wh zmqQlEowAWiGM?+}0vP77=+OS0fqXn9f4DO%aKetLq&XQ5g=lvl^u-_a{~q*P^&RAX zclS}-By{TmidIsAWanh65AUJ=a|*4)HiwiQRoP^o{LJ?-ipZa;o}_GO+g=cdH4EmN zZEVl~F!=uX)TeQXD3W75l0TRu#SoZ!6pJ7DyrxEN2A7+bv02w_BNc8|E^VrPe|>F^ zsQ2q42&wC-3 z=GM{euEG1i>xcEqmf`GLhc;iHe}>D3wFeqjwcI}caJ*;FPUdC(%_O(hZj;5H<}(qaxdG;H+Q%xM+o!Ym3Cupt(pW3|x%?g5uwA zs<%H?*gg3@9c{WlJ&|t?Ht1h)|0A}?13(08z#@L``;@l~(=7~{a~q;B0Nnp|cwkGT zH7;p!U69KN`+_M|7*_$2f6j=XF{+Y|eHO#~>~s{JDlGGNdC<)e<|9iWW`b-;cx41 z(_2_SCx{sW>M$(@69EJz%VHF>#L6!!zJl}=^t-O_lCDysEKd#IH2VZW4I73O9ABrI z)P0-VSiQaXNG|Wtxc1x0sC=^~6bBYG`JjJR^1T0WP5xFsZbQi*-bJ z6mgvRk1qW5*PKQuf1irr`%fw60``MUe@Qr`eq@P5jC>n5z0=qnd=O`14092mRrqAk z@1d7v&pYaLh!b;P2>G-`YvuMOK9v`Rqjw?kgcBZ*|5?Gy2lhv#TP{oGu>3Xwn)kbS zv&h3+%xvOo=D4moad@GWLCGT71V+iV6FHd%&uOr`UmnA)e`;mjUr;NgoZ^dhY2$d+ z_LFr1nBxJiEI9P+WWpuf)EYtZH@+=E%?4}ft6w|UqvhgY*2~&z*us3=2e=h`-jXfz zXNnnot?HE0{&lITDV=21@DaY;N%>^_R*2^ZXS>8H&g!&;F6aL0=&^xQhgv(?3L(}LLfygrWoft7Z&_djzd zO4MP>OY2g_6a!Q!$jo#?Cu!C}SDB!|58*EEN zTniUG=6#v2-oUl9%XJvls5d~gg=s>UvHsh-Idjpke?>U>2Lx_qtq18elJ>eYzB^VX0OSV^Ybg$@gp;@NYiW`7}Jbt@4WqshxRc6Y+hEZi75)> zJnaQbP;DrYRIv{)+xDbrtF?1x7hQ`Xi32%&w0o%>`a1799m!_`_;`(+Nu$1+4~^0Q zm@_A@f4c(7ue@}11prZ#!o?%m&FQHUL5NNOHj>dYCyxNMY7(UCs|T6aFc1h^B}zGzF*7Dwb;Jhb5d67n8VKnI$Y6nLia^Af6&I)! zleEB!G_>eJJn{>-EItcxu=TclQ9G;Xw!098}_2 zegP>N0a|M>cX@kspAIiU#{Z(81hjI1v|KTz1?LG-3(5#$27T;2mM*X) zF0b0`emqh|fm~y2Tk0sa1wstID+)Y$=fJKjywm9&kYbbSIYWfMVX?Z*Q$356o&18y zg|zO=D5i#)s%8Som3JcwGG;y8EB&{3My+kwCq~Pco1R9&J=I@X!8lWKe+_fx6ZkN# z($8I@NLdVDK{u{cn;ivUUjMrJqK)g5z!qAjz-TeCL!#)vW`+&0YW1@Y1rg2A1neOC zfd3uJyQ{SQnAfoG>*?wdWEQoYgS1-TF)~)SPIxTsEf6 zL-%5fra;-kS8y>3GpJHK^oc={kQ1LN2K8DPU%Tb`*m~?I6SchGeYT65fDIU{7B$03 zp@d?OjvU$@)Vf`?o>6vIVI}%}H|A~8&C;S|b_{z5bULGg9Z^3If3!pa@v`F|r)?Ee zV7-9sw9E96LjZ@HU?D^J4=bJPQ5-Nry%tD)ih#H+WUK$EaDl2Jg0mEZY$SE zb9oVbovtgon=y7c!KdW(CU&~Bng}~g-}btWGjNIZli=5kI$}aNfqH{9cIHK|^y`$V zrDXz~a54gUS(tHVf7%th#T8ZWxXQ)=A~^dVDg*MZ(j8c20C@u*y5WQAQK#LBJgTH; zMjn9KFM4)2s(zpzFel7er~xG8G$MKjnE zpX6AM4?H{u_b_+?LJ{f5>wJlg{g-Q6e`!sSa-uhUzX6BrwQ`IA zi5GHx< ztb=F>$b-5s8$a{Yw7XK`NwtbCmLF194DLzy6RdAM&?FC`_S+3|X=A+H2cteme-K3yq^(XP(bz^s3vd#f*`9_(#rSmx z-PV>V)^9vhdM=gYjM{rD5!pCKl~T?lOWQH9@~L>fT^0l&n8^P0e*19ItL!rJUS!6q zrY9ZuNq@1N8r64b2#CWe1T6KzAI5h4DxKPF;fl(Me{%ubbe!tjES#c6;qe*gpvC@j zB%HV-VKi(`2pL;)dfmBQzmns33ZBAoHWU(dpFA3Z?o^10l9iH7SsFz^ppGX}%Jh6y z7?u3(R8>7@bY}KA1JjBLW|?38G(a2rzjLj_Uj&J6FHaM4H>72hQn*(r<2Qy`h}8JrMm_TyhCSM>&(S3{%%;l>7j_ZcD)#6LZWoS?Ae4o&sbPs; zP8@VQyRosZR&~wW@Cz8V+~t4|%gBFd5=X=pf16E>U}+*`<@lT4n?ZW3EV;MdH-8~b zu&Hy$r5n=isGAllj+64kIy(~O(xwmT=?ooDau{7KUtWAvW#F{}W8Ce@{w=-c5gWpqzi`<>L# z4L)gzorS>mHrnkfXe~@v}&@(L0I6f3p+i za%op&ysn-VT3$Rz6BU?atZ8A}6w0JyycTMX#%0t5EJWzfl3O1<%#fC%VWoY8&W6I$ z=axeGzW`d#mRxJ2NFDkUTKjpwu8H1Q$AQqbKUjM$Z`J+&)u`h@70<+mHk+c5w=pvt6vR9XYbA8c7uPZWy@yw33pDWD>-?gTT|J*dzbil6 zvvS*v?uh66%O~>Re-!ISBfyv&Bt9EqR9GV9d*@r;(eWgMLKYf@O_Unme??gzX-nb$ zU^y}bRGx~;Ff*T9wP>FK#m1TebTMtK2WG!m_MNR>fGrv=+K2RB?tKXezw8HBxS&7;N?B5wbj{1 zsV;=C$yZ(nHmZL%iyGbEe`_}Xv6d&}Jl1Ucs{C>`JcO&O=$LV|1I<8Ro-MA%TxQvV z8k~5mvYZy?KH~n6tSnZ~o&XP^h5WxopCREVTztK?6mg}DTkbvwp{s)SK(f1aMOj2_ z@1oCmqxHn0*6}>z0q*7T{DZV&krM5FMc>iG)z zYMG8oQqr=|Er<$!#BD=^vPP`SiO^|4AFtQ5q-5Dsrb@vjuR0Zw2_UC=61%z*5py!8 zbLdznM^k~hGO5v_PKq@RmV{(%SU%D#%P`{ea|}RuPkGV`e=W3NHrq({CpZwjE7&y9 zE;ps?vo+6gUGiH>$So%mqO!#hlsZh`Oo2YNCnPJgd3EkSp0~XML zZ9ndCZ1xN=Qm`+&iG%Vt|0Z(OLNY)Xjy7ZhpY1G>a^?^9-APC$ynHbe_rr=Y*3YLT zEu&=>mT83|f2L~8J20UGgqaKJNN}4-Tr;AC@jg5NMgJi_k}wc`2Id@|lCmMCuroJ6 zKw@*{ro|Z){68PC0bQK57~IIs=a$sw#rm9L)@FZig~HAY0ycqZ-0kL@m+T@a)1UTr z{oE!F3t^0uKpF-J-5F%&c#Es-07LHR!lp(5avfp{e+b>k1~gaj1^KGZZlT#}5hg1B9l>8>rWxctfBIc7Rri+9%e2fr56tYe7*XXwSTO$q zQQlEaM!*{G!U1Y90*J`0@NV^5og+4-|G~nT&&M@$rpe9Rt_|=oGcd_X=(*jPH3_tiku+t~TV1rRUp`P8Q61ZLTPRK~sOgjp zaG#Q}8|UQ7?5YSf6jff*07#9@n2=fvzVsveg*)NfVq!_qv`$v)57T|AJBrZlHrRi$ zYg7nHVhb&_8|CI-=srBb6siGOri!6BP3uy!e|nK;6ps$hap+(&z);1mPs_|uA=sCE z+yE5MXUK**;fLjoAT4be$-Jr|`bbfnDEd^gDMXfDR1Cc{PRWE5wZJ{ivXS$gJTjf% zmS@ym^l=Y|yC!0RX>NM#YD+tPZGL*bSku$%r75X?6f(SZ`f1!eW6YU9WDq8H?lfg+ zf5mV4qJ2nw&){(g;eDGT?yoFDaeV>kY0Y*lN(oLyq$*~A`=w&`lj7A{% z;zz#fjIEi~cV4<-yC-KZ#<^e&81?iVfAV}~!Ti|E6iNa&s06GYjv9#-zqr&F;W_;) z;16QT_-&a)WM@qg7*#lb{N3<>9IX9AOt4CgPtDKvH32fC2denmD{a3nUp`v>V7S!{ z)1eNz98G~tKjPAUW^c0^DA@1Qd^WPrydY%bisdAS-Q|B<{oI6C`}reD@RxLw{lmj|S&>meZM+q-UJXDB#-zeh2e^5iJsG-NvW$;sv9sXv;GI1FwJ2A9%S+8k)`;oqM zVa7=DHsJsD!(ye+vdo>y4{r!a<=3pt+;i5}##HByiM!rA8up3IeJEZ=o!VJQkS4Vg zfCB)dox~i@jZG%3ZHx9sqN}sqEs4C5D1ABja+De)YC_@R<%`S#WBi~Ne_F3E*ZTSV z`goZ?4@!#@rY?O4(Ug%`qZCf7e^OOJi_Su4lsO%YK(yRRd9>msfF?}X7eNZp0WE!O z-v)0sUgupjtN82vhE(WH%yPsOtm1knhoHQwI`R71QrT+ppZu%{D!*>^gf-FnYS(Vl z?6Y40l0%{auj1JWxt%!3e=chjdcYI=d`WRgwjAY&uZuN&PbJ%LF2*C_k$CJB5=|wd zg6%rDOX%JTOvi$AxH|{uFDF*?J9zv-t#<$vi%unfK=lKCj1t~kdCiZiB6lmXn4Yja zD+h1Os9Un(wP?z}<8W=K@eh$AAWS1p`riW$EKpbVv$eb3>DHQU+ z|J&e>i(6ylFCZTZBq3y%Eixw-yMcv7qQfHp@e3x~=+QhOXD5Y|x@!~iM2269FZNl# zLe*7vBCCZdIP`*i3Uflm>~rP0j_BEn{1yxlf1V9sM$_}le}#MZ_Pl*Vc!kw(!(}QQ zkl(^o0`Zh<`dkm>35+x|+=Z)=&cSj5Gu`r;#{T5Mc)}98iF(dH{o?B`iS*UmCabT)Yf6|s8Z`E);}-xFf4XyIN6bUi zo(D>K>=i}})sa@QpF2Ik48~5>=3r$hT}LK=p2B6NDTLN;4ep6SRwX7#isayWhgZaC z{28U+ME0{kkLLvKn&eUET(DUXLbzF2wA>h0$SFF5e~JxXaIiT=Vnx|O^w@M(li)a{ zGYut-Xe6&kYe9ocj)XeeUWWM-uC1MA5%*u1X3Q0Ml{qOaZH#o&D2GsJUHKezX8(Lm zIMt3-v2Z}@Cd6_XB%9|}hKS@3KIuly5Or^uWlgwZygn7s6IF@4o|T8f_8)PLCAZgz zm_eKxe=+-orJsk=$k9yunCD&n5%t%`=~e~IL;J^q5)-iaq9qL5c2>x!ysndO`pZii$Ht}Pw9{f>08XpY z2q0zwIc}&F9gM1(9qc(~|vf~j@w8=(tKs4a_ z_6JVRs0UczIu;#3D|KPSKBNxAR44drB|Q%H2@mE@EYt!ERI~{g?!MtixI!hv&PQh` zw#BT(PUB34+|lNKKG7N}lhc<*ue|yGAkxh8gYHPrV@ex)B%}u3q+fD{9OMVNe-a-1 zjN~sqk1gNn!crge|9KN$(PV=U*>8|Cg5_6?<8#%q$hTjp^@gWvPD>>H#9|@HHYMH$ z)X?$3+9`~^w(_V#=JoGX)RzwLL#PU$a53$)(qXZbOT-!YIKko-%2{C~J;e`0B}2r` zZjGJyj+cU=(U`M?exFAuk1=^yf1o;gB>2t`R8uu6@r%j)%dOpTy${hPGiw@66x6e- zFGcnnuaNm+_I1?GE)zODLay4t)^GM-`y>xNN1*eCw2P@{*M>>4A3^dMZ3Igl_7St) zOlq&ORu#rnhc4BFKYrq1?0y22$dHV?^i5}$u^Z)K0x+$bG!k*=CTC&xe=l-SW!Rxa z7H0{W8NOI9#eokQwM?u(>_40zra_S11w#h7BYEBt<5A|NO6@`w=Sc6{cN>%ypp=n< zIip0+t-dg&r3vNJEo`ztkRyBOH9$n5F2e|1(5ht`H35wNz~ID8#b;ps4hB zGpNK0PZVs#TdAR1Z|sBGe^*tv5P@1GKLU}Q(!M&*gFTiys(;7?q1bcVD%{?s;cgJE z0sqJIZcJxEZf1}sR>}i7qnS=z48>N-;o#Bf?;1`MZxsE~v$Yk!t3K16I%cBQz4XFm z+y)FCm2*zJ!Dss?M^aMC>Lr(TIfevAy?8J$@3HwJe^KS6*@5ZhdRG$e z$B2uolzt9{<%y0r3EDzXd+Z-y;gE=vuer{vq2-JLhHFTps7}#=+Xg^9xY<-5 zZmhz;(&N&VPO9~)D9@&1S-$J*bfsde`lSjx51~&^eIJhLY1p*)U&9rXIpL;!CtfBi zujaMAJ~vJ(YIqsFe|();VnY3Ik+c^aaFY+U_bkKf=?%;Ux%>mA7)umiqOV7eW(iLD z0W9EVx5a+wTY0}(CEOwoV+HY06N$K+M3xbJOOfn5P9s}Ll{k%3i4di^gdu{N;vua~ z?_gO&tNlzW4kZWco~%gM(>}1&|B?DUyzMW}SQtFDO`v=UfAuQO?K&tVUO`r!o?8!=JkAo88nWpj^-vji$!G+XbGEqlf(ND z{e41Lpt8Ksb>cxRYp6vm2ap<%EAl8#5 z1e;RpggjWY9h23^jrnTfxYwYAn3vp$Pp+(_i>5cKOl&Xx8kVp(O=_Ne)!tWHN6Kk` z|L71^8O|(;YB$-QY}=Twb2DNhiAvYQhFyixY#t0|f3%k`H1?B3ODQ@+aF_$V)IMiC zNEKrwEbuX(duz)kd1Sb;U8Cof)~jt}uqSQ?1;vM{3$pk+;>@%s&P5y2?iL)z2ua|8 zHoQAkKD8^=hKJ|=!GSdp9^FmVsYEw`FWvx-vi)vkD)@kmsx!{W`@aZtmGUPiwmh2S zRudi=e|uS+OJQ1TQ2Rv;eqjxZvqNcE!aE!B2W}CmVnUhlFc86X0KZnVNKK1{{faEs zylR8H@a^8_p!|_vgpT$}!r#~7ePXhLEw6UIe}I#p!^e-r5luTFF}(ce?IuARQXi2Wj=KP5#(ZY&?}fg%!fLk=EV( zLjg@h%5hLToV$)snv4{xhl{2UgdC4$_S_*uHR}Gy=KqV9NPZK$y_@gb5|u|@mdH}; ze~_InDd zJ&wDC#5%_l#u*-E3Fn3`xz;ebOhSehf5BGIM9NN%`ohL;&tDp8W`_K?^lZ1aQjs{U;^^cd%umm@CcM)(tyV z%5u8)&IVPm0Sa2t6*|f=!cRW9yEK602VR!&)Y7D)QFGtYb?I{7y8F0tJlBjwe^j`B zDwYgOo9`bMv|4m)K^ipD)ajt2sqrVi{pYc(JK)-_c_iPE#0?sKtrEJZGvd$Cd6BMF2eBQ5ajZO3*|*f`6&lvs zmk#Jt^?gcjCf|yz0WCwen@~i4e@x;s#++k`6r)rZOJ^u-09-A&Zo26j)?&+%Nk!z8us*==fx4Q`}mzRvpFHme4LEse(y z@3K*tXPC+%X9-Ne!XS2&%S9MU6hLz4S1rT?6kJOn?@}jDwUcxCF$B5Ie}{dqftP%# z)pX-4r~1J1=<+#)r8f5ku+zRmSuj3Ve@$8NJp+-j8sl1+ z-wKwt_KLR7;l4536&5+2zD1m+zw-BZySQ?zoK$)5gOlbkY2?auNrMwwiB0yW)=9QE zwMHTL)ov<3GRB+052u+eglGy>xjv{4Wunzsk7~fv&H#+rfUz+|i!syJQKVb?6lyk7 zY%g3Is57I!{%Fx%e~6LBwHo1#r*dc{egmnA_V4`&lY?PoqQL>sn8oLB8M9=1J1dO6 zb3MecA`iOdQ9E9bt<=-J_J}`oJ>vyTWDn{94b@e?I~GfII?Ot<4V41 zgW}A8ge#Z0%2J$5=pl!@Z!nr6(xrFO7=ad^w{-`7V23A{e9}fAcNwq`OrCW$-@R2D%Ea_v9`DO4#@Z*Q}6EjkR@4*i=|gaB>hnlnyuZ z%!sXo+Sy>psAM1*iuj)JRn_}|eixD_hOQ4HLpHtL>c-TZn>wfopJLPwj}50>^pSiW zvbM(PKUBl8vgdx3-oi#(RVmeLz`RSfr{O^GmbWMqe*ifFx9&3`BQ=n<++cf(YFN0D zk6^PyOI0Yj#-9R@F;5VpbVz^G38~xer;kouJoVN3{O<%e4^*l8kT-tS1jVyyFnbQq zlM3ZU{lxHpD&pYc0BH_?j!nZ?)AtL|Ai$-{EI&6DB7|SBPZ%!emL-^kKAO?Il(!CO zR!Et#e|BDCPuqn@h*c06QM91}cX~~-fDCP@5-)v&;7nSGx>1t-KN%x5hLq0)s^cn^ zk!d6nT)={w*St7kr=;6e)SI>b9(|fTEeN;c{Iz2APA^2j%VmP25yZmy#ym4z(HsCb zK*+!8Duv@%wvSkK8a_TlqATFVG_0``$3J$ zV=O7pc?`@eFqUxF{Gf2<@EC^l^u%$T4wb5x?*xVbv_pclBjtCM_9N8Gio{q`+-;4T zLfWaugLPz;vlyuBa}lrUs-dU`czq>rJ%1HfJG0C#*u+F}lep!1s)A$B+1(e#n&Qz9^c=3+z3;3tbK}%9~HHn`}L39V$Xt9$*`@BH!-Nus1L{wPqV6{XFpQ zK*h@xr`1%UT`(i>N)-*p_PrJB&C;KR=Cmt`6%pZ0I#DYRlatjW(1E{mkYf^Gt(YfWF0z2+{>4phsKtLAssW+}4`+w*pL^R?dr_Y-hC)*sqLn7C2O5a>leIE&Zey;o7 z(Eb zoSm!1o>aF;p$M~a5Ek`{hd61cFPRY*N`4A~x?T2pu8Z4&ayoqzT;K6wnv zHOJbt?kwR+SrniP+|-(cV2ERpS1i2j*Jx|pJEf*LR(jcas>BuDef-qJO76E!B4hbb8?(v8}ne3H!%E9E;(FyHf`H{_vSiUIarU zm>6{?Gi3}8wMT~Rx7|pL8AQEB@7j)Kvgi4;ylEdg0txDw6GrN{CHJJtgd4U&HC2f( zwF57B;`dkg6!c7vU~oHM!5B7a(-;b+-t|@gn)9+S{d5LEBJ;dLJ%8%j(faIPV=$8c zV!f&Vz1e^tZ~*kn4PvuVL!%zd-0{1Y zUnW?nNiU8vcc|WLQGfC8#%&o3;bzwk(ZH`#Xpl%;sK`vf_`JGcZsnm?UU~c4*KI2|5{=~@&bD^BD~}6u)pjY zhEd{)4m`|kJ8rTM4j)L^lxhZ@kO58nPY7YbC#}G)GIK6{IEiOH zDL+rqaJza}kAGfpsHs|6S21hh_3!1HR3%|9AtE`O!55ayX&llOFVdGn)th9L+qrl- z&m^b+ljojUV>VKUWG|2z=WD%XHkpV<=FlPaT>ux=_2AfML75m}f`1LB1wWh7kC*#nE)FW9U!%`8 zS1tFh0pqfki3OwG7Im~lo<|e!?wf44zF!UsN4HtRH2zJG9=Nc2R<(!tfpiT%03#rO zmZYs%-MHudAXkBxMjlG2RxM8K#7-=(UiytDx>Od4kz!w1XV7ox=@Rjo5dP0q`$UcQ z#^tpH=YP2?u&V;$3j)}0FF4PcV2yb&<@RrH>baY-8OiKT6XmH!&m8dKY>5eR;Uj{y z_30D09Eo=K;e#){hMMGSaLdXV=IgFyz9s)r2ptmW9=Z3+FO$Vn2)k zUXE+`cd*vP`1@>hPZk%U(=07MQ^|y1ZRdUHuYbYR;|@%5k(aCnla2|pRaLhWM^a&N zi{*!bsteu-kY%=98jRjuCyhzpb?rKg(AJgB*)#(3g_gBU0OdCN$FsY9to_O`eAGuZ zb2QfQH}7zUwCQ6_#Da-%UQ9J5X!uu5=j(+=5t_sw1X5)de$&1EEIc@6i! zbboN{R>CFUey4EFyPTW=e!1E~pYz~RY0hLyS39Lx>e#ErC2M;iQ4VGx5I#&N*XZ@3 zu=M4BX)pTU9Dclfk5Y-nS=Mj8&@egO8stgrLDAp-Cv%4ngDcW0T=Znd7dA-a(@NLBV(IRzGL2J|)&sSg zpkE-z1AA$kL-xs^2`0$lBpajf4zcY}kD_)${tK;0;DP0?mhuWzMegrf%#(deOLBf{ z+np14r!_p5n%e>6StHh79@erpLRI%b?}rAQ$egRAMcTE|?1I3AsUJ-yrM{Q+<$nTb z55tQ7+anlPo;%QUl(s%|Woh=YmfeT*BjP;QBZaqzS>VO)sQiHva&&;~#7EV)IpTM`QaM$>bP_L_Mt^ zS{t-LB;{x{UG!k9o-NO+SbZX7&#EX>@?-{~u_Tfso4xd^R z`8^qofHfe5;Gkyz(+)E>%-!j}0_yNWlXGj|cNuW^Lx(>SBc(eKonn-egsg1aidW`0 z1=DDK5A&zrBlAvPnCGdzHGd|$@8oGOJcU(XouXy<(A-Iq)2n9?`*@%MQ1vxVtvE#$ zN%aEVW$AA8lBjCfPY!k2-DQkg*PP{w9smJIvq|7skb8shLlOnI9=sN@b^>n_(2D`x zP*!6r51QJ$ai>ES&k&4+)A9YSd$A6XvaYao*XPlJR{Up?QK z1+&hA3@*Rto+`s>wdJb8LqGUAe#qNQoU|h^JjeK_CBxVf(>_u=`c#FS6}@e~&k<|D zp1eYS&RXW(NkWO6S${WUb8kUZs@+R}8KGo}^0_7!PB2s_C(cpWQ?unnoiaoKVHM)R zN3+!P?D-Xx#O_}))+xnq0n47YkLWS-ycQ{T-~;a7MDfF0c~vd+o^t^i6I_$Rk)w;6g>w4fd1Lh(#p?~&+RKLH>R6vWw$MIr}%VP8nf zq6^SEw#*6ln15wzP;QTI1PwC*Dyk7fl9FN!9QSUDeL_}2R?nG7lt%zRidCFgm4x{? z_ZzEd8#b9O{ZSC(Zg?PMC$;e&hpinh+3Z?tS;_Mi!{By;Q|yT z@L>V!iGXFPB6{|YrT#o%gLB{cjS^ie<;JILTk|LYm4606zxr)qBdrM287DiU?K(p` zIo30MT$}wz)qI^2Uk);i+~J`jS)tY8z$XyWWPLvfRhlmxOvlgD+2}#e&dL+kQ&nPl z)`JNm8vNwt8+;Oc<*g1h5e(v->nBP`P#0HEyyD|wHn=JxyN)?!1A2SXA_qJaG!pZ* zuS|id^?x|jd#B?3lVV!HzkTWM*WDY8(;l^jmm_4oLp{b_5hYo9cx?{anDQ>MHme!h z99i;WL_8gxr5juK0F~g!L92fI7N3MR%}0+a<$6xqIngDg18%KUQ(t?xn%91RS1T+d z>uy&3csZ=00ze^my`F2I?b{P8j0C}MP7^-)L4V|2ol9|X!7(+FC!wbCYf8?EdEz*` z$de@#fLXj{ojKq-vYKKQ?%<#xzc>Byesio#nOn*4))K}^B@GE3DcUvYGUR0QeK!Xm z{`7e9`*vCGqr|kEj0R5dXC#htVmCLqBI5A@ z>fkWYUN0w&=3Loq=7({0Rs9BYjLv&;>K6B!-oY%VXdau+K_;;K{#p_%;1P)WwX_52 zwMV$y1cb!pfuhV#KUTHtQ+yl2!=w0fmwzx;#4s@{1F@f1o@AoRiF}+pq4ftAC2N0w z7}n42+dN{!G`{=Aj`Ji?r>X^NA4Hm`bw}v-H-y(N^|LsAcu0OH5;3#n_26=;`?C$M zjy0qX(`230Ok4Y5vu5IYumaJSO>;M&JJ_V5*pXoHGwVEbZ!%NzhBvuS*9v<#1b^`z zDBMz`7u)GH1@ z4R2)OEj|aVYevSqForKP?sxVOm?7~#fJ~K`HY15h3Wr1*e2Yq4T7#s{*UUkkg%IK` zFYPjS`@^5?iVYKR+eyer48-;sf`5flw}LgkH?^PMT7X=1I0wW)vpjxIeB3Y*$N5Pw zkFJkaDWgY;r@mR;_+?ql>Y+z5q@& zPM;VY@6v3z?jl_z8pglpd|!s_EXZu8dw-IXi8ZTppI850n&N!r9<$@-b7;u+3;a-&I|aoj4$oH7i&3+|wu{v!`FNy}KhvPK<+YRyZ0d7IYh)UOPUx z8Cc*cBRcd>*C%+VNHk-v3-lko0`%j(IW&+BOVGz;3;q>z5r4M>vv-&TwNz$Ft}9_) zWh7^b5!Uae+ptc^Ga3f&Rg;d534DSr3OcJmK4OEjaX5MNpS)kMl(CdWOruarYj`0o z^`ylz&B%qCyF9FH+YxNEOhIp5-;qEEW+$4?$FCB?#8#w5I)|`#g&AW~d9tG}W8Q*} zGB<7mg^JjR;(xBgk#0d%bKn@EZY)8;Hcb#!G5<7WGg>3rT1a(b!iv0^98_5Um8n`z zpqfyY)Nj1RlWzlej@})}=CD5o@dj>MUlJ6%O?Xht)PxX>^rEGLhS}Lkv^sgvU?9sd zC+~}+p{n?nUKqzvQjO)@@pD4EQww(KGZwVZ5%e?7qJO2uUS)v&Bm<=kl4KF@eyDpo z05!dXrN4Pebz9IkEp|xMG|4hTm{EIAdY!Z51Zy`9i*@_I2!$O{QMVLGtn#ZeH{(_% zjOW%xtu%^aTJ_bkH)&vQ&% zBvh?*rB%*Be#{Mf#L5F0f(nx~C>Pbi;$9PjH^@Kj^Eu7mUg$Y(OzIsC$Nf zQ%0of*Zv2n%N-e@yM|)*rxF;h#<+}cthRSq0{vC{y;-!5IATa)UZ>0=#ZnX6ertz# z3V$R;h~7vZ6zVToKI^8x#I*ngf6Sws1z1eiwYlwb$g9XI`3CLmD8h&WlCah;?<-iX##_(MSs}v6Pfu8?+!nq>_3(Ft=h{(&rd?h1rWTJ zD#qrSlMeC`{dml~l-x>iy7FPU`AW4XvBKqNuH_e7T_1=(`35ZOQEDBIwZt!Z9nmT5 zV})W*6XUDB8&m8c$Ai~YysLIqVAfp>tE%hI62iBcM_yKG0`Scr*Kl*&8kx+5o`1nE zy80#uRl|z)6Di`wJ|1VPqm4^!eQMOEQe&zbmAuAk-)wb7DpF$Il|sIS91V&e{`f@I zW97J>8IpuGtxT*|lD=s{L6EJI`1qR17CvMjBh_V23F_K7QrqemF{t(9i)uHU1DeZ^ zQ&H4CWokahwAJ|j!!q&1y6_WS;eRQujT@V~LC(Hh{X=@3O|;n~c5WT>%cg|DHVhoj z@Rf-Fya$)S@1i>D6c<0k?!j+l%%!3hhs#u6Qo+kc>2}H74L^&FpTbAxVm)R4JIZLD z3%?a$5Q?srTH2ZfcT0cZAL}^~PlX!<*$Se!gB9E6DU(+M)P;pYcY^D&7k`=D?C9`N|zUaVtJ|c z38vfR4rhBOEP`{>3=MI8&7mZLD@AwRm)1vH1M*j@caAW>BCL+oZvyV>c+@sM9WMw!QFN+qc?TaO$t`!G=;tK*S1dq-dC^NTo5HN@ z>Id96M&d6}bxq-&e}{I+{8GTQOp(JaFArl2vsGqx?%T6FNtT9|dVe)l%WJZ=_cW<_ zC!AMNr=0T+NS-uAVWhRdg6`g#o0K7Ue|}MwKgj5(uhD=2Nq>@Y@($)-J8v$WEke!_2IHu#Hc=~%2nK2ZA^9UZYi=t!E8*_(AmxB99vnAr4OFqw-SVr z7_KH|Njh-h-FCJn5w1S&XHOs5Q$<2*f@KrkawfjYTb1DwsUtTE0K3K?r`A5jYtXaR zHl4>o^PrDsihpl;mVS6^)+{nDF+?e6{wD8tmWZqWH|R-ul_cyh*#9m27RWsflT+~v z1gi19D8y1gTvQ|boI;GltbSYpQV>YLah1BEa~w6jmjFr0y_i-NO8D0=y=fRlMbRod zng3*=_t$vu>ncdIBd=d#Q~*(r#@P_gTF3OpElAvNr++kCbqzWE<`;e2dNHqk94vp> zXFaEIq}smT%nxs%GUyH|maZO1kL&U-K~zqcgjq#Uyb;~fH3Awqw!7i`k)=Ca|^9XY#DIl{qglS!qK{U=HuVWzkA_fh!$%1WKn{w zMGctF01%R;QPP85*?CqZVea1BFT#5U(#KLee586Y<7Kr^ZaHus!W|e&Q_Si9g6Rpu zSa6S)RLnOTb;++J@KFI3$IFNV-*nNOPh0Ow{~#UAO}R(L;hbCQJYx=I(p2c?%iQdMPfciSrTkr zz#%lNY*{Hw4P3()y4Rec6b!3>H0WlyJKI&QTIgk}anY~ZQFpx(^gMQ_2{JjcQSS=5 zF@G{H=RO+=U#gk(?rdulS#B_FCdjEg7$1zCJN~noz^RG5;O>rbbpvkKHFT2PpvGv={veOZP`voa1mj6(@14( zT7CbI_O)j%V6Fo8eVWSiW&RYf${>Robs;gpslPw{+4?L_K*`myguXHltJwqc3*yz0 zP}a_ZOm_bZIUx&Yv@8>j3h~xb|59%o()_>hd+yXg|kqORg9-!i$Y^W`#ahkBQI(nj_km z{ZR4M`WmcDJ_3A1Gyu^|MEswG^SoWGGvJbDuQS-_h+FX7)Z&GUmw|xiS+8>u+TpHJ zi^d|Wgmt0Wlq$|O%j|-xHt~=u(B$upRx_p zp4tvFi+TtGw@7~-L__O~rk~T{Z6gEZRz@GutqD#CtIiNJ&fhgtJG zpI}8kGb*OadLz1}7UDef;I-){)9D<;V|QbIStVx=kJc5Nw`A4mDL@~c%$&XSt!@6p zfku(596Q1K#`sV3Iqu>DU30u*Y@4115cN6p?}jxtF$&1-cE3z5K!2(*%?CUYAmhl0cAuI~GgI zGkKWTkn|hg2_urro_~Uv%%OYJZX{B`!@&Bj<}6cDag&l|uluZO4^^Ad5N1|b=WY*2 z^QqO_%=?IXoKHZJK%*F@fMhYM6G!sd3tY<2@>N4v^;Z$-jZbe*!y!_R0KehIaM@EO zFd*$(~6-|3BvwsT3!)c z4BYPK5&_fZuCu%GdD;Exb(uw2vRW{bw)1qT(pOiGxWFlhwWi`_Fm2HI`|oond;>3t z(&5>qdR@4etaFLuKhvvD4EFy_igJ8mb3h{IT~l!{$6C{G(-w90>Y>M1((2C#p*ryO zO8t%E_0JSUn13dKe?-mkES>P$z!xstv|YV?^Hk?g@Q}PY821|RojYurRrP5_8U`y` z61w|$+PirqTjJB=@paG{)3W*I&JuyHh8HEYxs8hFO)2=^zU}u?!N|ht#woJNSl5`F}QZ-2X?eF0ny9N@&sWwXN2b z#-G02WLxLz`4N*%9*%jligM4$sk?U|mu9kWcTbvLFzg76fF0m<>;@j?^x0ETbPLEt zXL>g?)?k~X-gB#*i!YOm$?}35)6N|d3wp9EC74F(ulJNjFQ$gice7U4fa`4-kb}$~ zvF`&DsDE3*z#PiJkysg-s(UuizV99Vu=-uq9S|X=EQ))jV|{ccMbWCq@L}v1=&dyo zArNyS>abuq15ph}Fx*vWwuf6vzXQ7z?Y`BM)C zYqbZxAhyrfCZ^(%=h{nGV1f?1)+6?wJ=9~UEOgZCOJ6T?fC)7CzZmrpRS4rzSW=Ty z2EL)iWInrB1vVkJnP%M5F0!kK@G8ju`wke9kmI68G_~VORe4+HCS0&G5-+ljlm;n6nEuB zZD8-`ohzfmOYtZEgHs~Q`5%%#yAVD$xRjZ8B37f-k5mJN92HUxi0Sy?%x-F-2a>&$ zL@NAAR*%h(WvRknrlUv~0O!WL`!GN=>wgx|gAIMNqo13NY1B$#Kpr$ zA*|?{w&@VE3!x6dBPP4atV2tdhh>z3&7}V@yY*D19RIB}9Yec47GF7Ln%6j^F@NZ~ z=>kXmS^IRf+n-7}JI!VYUL|Pb8X#w?&O)uN^2F zYNr}b@RdQ3KmQ3#z`*Yad(GHVmsUa2^Dd_ErOHHrgOMBe__-w2bj3`)3x{u{HCQ4nAofThJzSQWLuOtVz z(_;GVh;qcH<+@ZW*L;LhPJbFRLe2gHDnv}SyvJEt!*#F0dAKUX#%T>xQWXRS)SX%B zx_xus2529l5Pn0ky{OO5mq7A zioiTsHEEW2-n|PEU4Nbb>J+oZnEkDA*f8%Aj`CPFqr(jG6Gy?W$d&OvSt{Bvn~qi2U?MM2p?`<9Pf}wE7I!5@;m@nO z6yIcd<&gI8QB}5fL)bDKxv}~b%)|cea;a{U=$AnUl7>}cMqu916htM(=di=u6km}j z6`<}9LI0BkQ=gmn=mO$dNXC(&%W; z8Kw)`UUybnTnS$1oHIR09xw)lEKLbm1U02d5LI`!lz;4plAMI&Z;Th>_^Op~)I9U9 z$$94Wz@R70Lo6eMlv6P53$GMca84t){YX{cC}mJlXvuFRTxM3XQx^8Ru6D`?d9cg1 z)d8I0U-a~WSbmR=M_>EH5NDvB`{M8eLG?dxAM5@_&V(yE0O4oK>%jwpyPBV>AoUvI