From ab05ace3ce8b999ab665194e63b8b5d03a7787ac Mon Sep 17 00:00:00 2001 From: ratalaika Date: Sat, 22 Nov 2014 00:13:09 +0100 Subject: [PATCH] Added first version of OS X compilation support --- OSX.diff | 167 ++++++++++++++++++ examples/makefile | 23 ++- examples/textures_logo_raylib.c | 2 +- .../glfw3/lib/cmake/glfw/glfwConfig.cmake | 10 ++ .../lib/cmake/glfw/glfwConfigVersion.cmake | 12 ++ .../lib/cmake/glfw/glfwTargets-debug.cmake | 20 +++ .../glfw3/lib/cmake/glfw/glfwTargets.cmake | 84 +++++++++ external/glfw3/lib/libglfw.3.0.dylib | Bin 0 -> 127856 bytes external/glfw3/lib/libglfw.3.dylib | 1 + external/glfw3/lib/libglfw.dylib | 1 + external/glfw3/lib/pkgconfig/glfw3.pc | 13 ++ src/makefile | 10 +- src/rlgl.c | 16 +- src/utils.c | 4 +- 14 files changed, 352 insertions(+), 11 deletions(-) create mode 100644 OSX.diff create mode 100644 external/glfw3/lib/cmake/glfw/glfwConfig.cmake create mode 100644 external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake create mode 100644 external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake create mode 100644 external/glfw3/lib/cmake/glfw/glfwTargets.cmake create mode 100755 external/glfw3/lib/libglfw.3.0.dylib create mode 120000 external/glfw3/lib/libglfw.3.dylib create mode 120000 external/glfw3/lib/libglfw.dylib create mode 100644 external/glfw3/lib/pkgconfig/glfw3.pc diff --git a/OSX.diff b/OSX.diff new file mode 100644 index 000000000..59b6fa6a7 --- /dev/null +++ b/OSX.diff @@ -0,0 +1,167 @@ +diff --git a/examples/makefile b/examples/makefile +index 076c959..f445321 100644 +--- a/examples/makefile ++++ b/examples/makefile +@@ -24,8 +24,8 @@ + #************************************************************************************************** + + # define raylib platform (by default, compile for RPI) +-# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX +-PLATFORM ?= PLATFORM_RPI ++# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX ++PLATFORM ?= PLATFORM_DESKTOP_OSX + + # define compiler: gcc for C program, define as g++ for C++ + CC = gcc +@@ -55,6 +55,14 @@ else + LFLAGS = -L. -L../src -L/opt/vc/lib + endif + ++# define library paths containing required libs ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ LFLAGS = -L. -L../src -L../external/glfw3/lib/ -I../external/openal_soft/lib/ ++else ++ LFLAGS = -L. -L../src ++endif ++ ++ + # define any libraries to link into executable + # if you want to link libraries (libname.so or libname.a), use the -lname + ifeq ($(PLATFORM),PLATFORM_RPI) +@@ -68,11 +76,18 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev + LIBS = -lraylib -lglfw -lGLEW -lGL -lopenal + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ # libraries for OS X 10.9 desktop compiling ++ # requires the following packages: ++ # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev ++ LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAl -framework Cocoa ++else + # libraries for Windows desktop compiling + # NOTE: GLFW3 and OpenAL Soft libraries should be installed + LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32 + endif + endif ++endif + + # define additional parameters and flags for windows + ifeq ($(PLATFORM),PLATFORM_DESKTOP) +@@ -254,9 +269,13 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + find . -type f -executable -delete + rm -f *.o + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ rm -f *.o ++else + del *.o *.exe + endif + endif ++endif + @echo Cleaning done + + # instead of defining every module one by one, we can define a pattern +diff --git a/examples/textures_logo_raylib.c b/examples/textures_logo_raylib.c +index f4aeb73..b56f5f0 100644 +--- a/examples/textures_logo_raylib.c ++++ b/examples/textures_logo_raylib.c +@@ -21,7 +21,7 @@ int main() + InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); + + // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) +- Texture2D texture = LoadTexture("resources/raylib_logo.png"); // Texture loading ++ Texture2D texture = LoadTexture("./resources/raylib_logo.png"); // Texture loading + //--------------------------------------------------------------------------------------- + + // Main game loop +diff --git a/src/makefile b/src/makefile +index 0c078e8..780aa16 100644 +--- a/src/makefile ++++ b/src/makefile +@@ -24,8 +24,8 @@ + #************************************************************************************************** + + # define raylib platform (by default, compile for RPI) +-# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX +-PLATFORM ?= PLATFORM_RPI ++# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX ++PLATFORM ?= PLATFORM_DESKTOP_OSX + + # define raylib graphics api depending on selected platform + ifeq ($(PLATFORM),PLATFORM_RPI) +@@ -57,7 +57,7 @@ endif + ifeq ($(PLATFORM),PLATFORM_RPI) + INCLUDES = -I. -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads + else +- INCLUDES = -I. ++ INCLUDES = -I. -I../external/glfw3/include/ -I../external/openal_soft/include/ + endif + + # define all object files required +@@ -124,9 +124,13 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + find . -type f -executable -delete + rm -f *.o libraylib.a + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ rm -f *.o libraylib.a ++else + del *.o libraylib.a + endif + endif ++endif + @echo Cleaning done + + # instead of defining every module one by one, we can define a pattern +diff --git a/src/rlgl.c b/src/rlgl.c +index 8f1a66a..865281a 100644 +--- a/src/rlgl.c ++++ b/src/rlgl.c +@@ -32,13 +32,23 @@ + #include // Declares malloc() and free() for memory management, rand() + + #if defined(GRAPHICS_API_OPENGL_11) +- #include // Basic OpenGL include ++ #ifdef __APPLE__ ++ #include ++ #include ++ #include ++ #else ++ #include // Basic OpenGL include ++ #endif + #endif + + #if defined(GRAPHICS_API_OPENGL_33) + #define GLEW_STATIC +- #include // Extensions loading lib +- //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW ++ #ifdef __APPLE__ ++ #include ++ #else ++ #include // Extensions loading lib ++ //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW ++ #endif + #endif + + #if defined(GRAPHICS_API_OPENGL_ES2) +diff --git a/src/utils.c b/src/utils.c +index b511211..26a4406 100644 +--- a/src/utils.c ++++ b/src/utils.c +@@ -40,7 +40,7 @@ + #include // Used for functions with variable number of parameters (TraceLog()) + //#include // String management functions: strlen(), strrchr(), strcmp() + +-#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) ++#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) + #define STB_IMAGE_WRITE_IMPLEMENTATION + #include "stb_image_write.h" // Create PNG file + #endif +@@ -107,7 +107,7 @@ unsigned char *DecompressData(const unsigned char *data, unsigned long compSize, + return pUncomp; + } + +-#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) ++#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) + // Creates a bitmap (BMP) file from an array of pixel data + // NOTE: This function is not explicitly available to raylib users + void WriteBitmap(const char *fileName, unsigned char *imgData, int width, int height) diff --git a/examples/makefile b/examples/makefile index 076c95947..f44532138 100644 --- a/examples/makefile +++ b/examples/makefile @@ -24,8 +24,8 @@ #************************************************************************************************** # define raylib platform (by default, compile for RPI) -# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX -PLATFORM ?= PLATFORM_RPI +# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX +PLATFORM ?= PLATFORM_DESKTOP_OSX # define compiler: gcc for C program, define as g++ for C++ CC = gcc @@ -55,6 +55,14 @@ else LFLAGS = -L. -L../src -L/opt/vc/lib endif +# define library paths containing required libs +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + LFLAGS = -L. -L../src -L../external/glfw3/lib/ -I../external/openal_soft/lib/ +else + LFLAGS = -L. -L../src +endif + + # define any libraries to link into executable # if you want to link libraries (libname.so or libname.a), use the -lname ifeq ($(PLATFORM),PLATFORM_RPI) @@ -67,12 +75,19 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) # requires the following packages: # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev LIBS = -lraylib -lglfw -lGLEW -lGL -lopenal +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + # libraries for OS X 10.9 desktop compiling + # requires the following packages: + # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev + LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAl -framework Cocoa else # libraries for Windows desktop compiling # NOTE: GLFW3 and OpenAL Soft libraries should be installed LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32 endif endif +endif # define additional parameters and flags for windows ifeq ($(PLATFORM),PLATFORM_DESKTOP) @@ -253,9 +268,13 @@ else ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) find . -type f -executable -delete rm -f *.o +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + rm -f *.o else del *.o *.exe endif +endif endif @echo Cleaning done diff --git a/examples/textures_logo_raylib.c b/examples/textures_logo_raylib.c index f4aeb738f..b56f5f03c 100644 --- a/examples/textures_logo_raylib.c +++ b/examples/textures_logo_raylib.c @@ -21,7 +21,7 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D texture = LoadTexture("resources/raylib_logo.png"); // Texture loading + Texture2D texture = LoadTexture("./resources/raylib_logo.png"); // Texture loading //--------------------------------------------------------------------------------------- // Main game loop diff --git a/external/glfw3/lib/cmake/glfw/glfwConfig.cmake b/external/glfw3/lib/cmake/glfw/glfwConfig.cmake new file mode 100644 index 000000000..b11654d39 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwConfig.cmake @@ -0,0 +1,10 @@ +# - Config file for the glfw package +# It defines the following variables +# GLFW_INCLUDE_DIR, the path where GLFW headers are located +# GLFW_LIBRARY_DIR, folder in which the GLFW library is located +# GLFW_LIBRARY, library to link against to use GLFW + +set(GLFW_INCLUDE_DIR "/Users/ratalaika/Repositories/external/glfw3/lib/include") +set(GLFW_LIBRARY_DIR "/Users/ratalaika/Repositories/external/glfw3/lib/lib") + +find_library(GLFW_LIBRARY "glfw" HINTS ${GLFW_LIBRARY_DIR}) diff --git a/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake b/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake new file mode 100644 index 000000000..524c86dc0 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake @@ -0,0 +1,12 @@ + +set(PACKAGE_VERSION "3.0.4") + +if ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "3") + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) +endif() + diff --git a/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake b/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake new file mode 100644 index 000000000..f35f7d2f8 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake @@ -0,0 +1,20 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "glfw" for configuration "Debug" +set_property(TARGET glfw APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(glfw PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/libglfw.3.0.dylib" + IMPORTED_SONAME_DEBUG "/Users/ratalaika/Repositories/external/glfw3/lib/lib/libglfw.3.dylib" + ) + +list(APPEND _IMPORT_CHECK_TARGETS glfw ) +list(APPEND _IMPORT_CHECK_FILES_FOR_glfw "${_IMPORT_PREFIX}/lib/libglfw.3.0.dylib" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/external/glfw3/lib/cmake/glfw/glfwTargets.cmake b/external/glfw3/lib/cmake/glfw/glfwTargets.cmake new file mode 100644 index 000000000..bd1834275 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwTargets.cmake @@ -0,0 +1,84 @@ +# Generated by CMake 3.1.0-rc2 + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget glfw) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) + +# Create imported target glfw +add_library(glfw SHARED IMPORTED) + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/glfwTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/external/glfw3/lib/libglfw.3.0.dylib b/external/glfw3/lib/libglfw.3.0.dylib new file mode 100755 index 0000000000000000000000000000000000000000..963d716d127232cb0f65aeee06c70e6fa92d5739 GIT binary patch literal 127856 zcmX^A>+L^w1_nlE1_lN;1_lOk1_p)Zfe}>z z%4cU_U|?lnVBmtv#>bbWR+Kpne~6S76NCowkzL9GH4o%xkP3)-@foQ(1*t_?%)7t{(R~aQPz($VAU@P+kah+J zsCf_$$bb1sS;_IasU;bCiMgp5;Wv#HV%}y>hz=MZ!ed}SF&pfjT|%)E4{0`&Os z+#HSU3q82QH?%xckc{3o!GJyEdqytuuPJr^+4;E0mad8ZB zM3RN(Ck6wk7>us~;e+xS$XtF1mmxkrFDJgZGB+tdC%&Mhh#@{6yLph@&A`B*z{mj7 z57iDX1L9#Ea5$ysBT@;b`vjow34rPW@zKpogvx=a`1qVeeC|ttn)d@5_#i&Ac_9C0 zgA9V=`1oYBbd2iX1Z7ABI6&2d`1sRtavE|*Ll3_NQ1cEz4FU0y-3PS>P9f)uoXp}9 zbn_B4AnwzE>HzW4%!5Z2ND0)u%-qEER8UezH?IR~9tTJ<0|Nty4-HDF2r30N4<3l< z=1qW_Cjkn01_lNYAI*Iz213m%PR%JwO)JJsFDvvR{_TJo0^&oNU~^a*pcN082htBN z2f*bD$V7Da85l#%TLD!M;v<{KfZe>}(t^|?Z06m7nkNA@55y6q@DVG1!QK?J6P z0i`^E$Rgz8}S>F4e0;t6YG1VB|D zfT&||fba`8L-?TN2oZtsc^McO5*Qd5K=B3<2ieNZpdVVCT2!oGlvt9OlbD&Es2`MC zkYAixl3$dWTCAU1QIcAemzblUo|9H?te=ya1j8T!J!8F;%ACw3kPS)<3=QBS*ntsj zPl5v@Lj$x70LedaVPxpwVqnPdXJmN63aP(AZqW#5WbkEWU{F}k$PnPdz`)JGzyK>N z8(A0_K-iOkf#DPj14A>&ARPF|YDR`rSmdOkerC6PcXeWw<<#Zx{r(%;3nZz)5osa&o9a@)_2ZN z&QH_>*LffT{jk)c;>`TKVtq%56xd`;b3w6z*IfUC)I4_|>;^;R7#J8Z%@t;3V8Cmx zr@wb*33g+_QgHWXAcuosI5PvoH2mRElyg3*d z7?|+7A7n;YW=d*4ZY#jjaDSkfFQCA}z@Wp3CqD7}!C4<64|Trk!O z&wxs5Jx4^I0XYm5Z^-%>8P~F)>w_dYJtt(HAblw5Q}iPX1A{KUcyTN!z!Blj`Vcv& zKTzVEA%cm4!2zGSpm=aEN-W68OfJS96)+VbPctwus6q2vKqwpX?pzfEnu}s z=Ffzf|G}fX_Jc=fEyQeP1_lO9v&||Q7(9-<{s0*Px8nr^BglcSKRmi!e?aV+Fac_Q zf=4&&#m5W`9y>u=Kp5c@(;eR!7(BWyJi0~IK7&lCz2VXM-J|oGM|bEAk51nU9-Xcy zHZZ(+ei$U_`og1|wGXVr^#3Q2$nh6vAuTHVp@hAAi9L67DX&;n8j9(QWDp7OlPD(RtjXJM_Yf=Z6>=Y#8`k!BN7A z9^H$}k)mW8D5kqv<3TRy_I=^eE#T2@$_O^^{EPXAK<;vV;L%w702CAat)RW5`#C@+ z_L{m}WMJ69@FE1+ICqe7y{rx2LB7}l+JW_A4#*I2aGP%Y2r}>Z3wMxE=kXUOL3FQa z5J+`r8%VWBH-zehrwxPH!xO*&nm!B=$)WT|cU{GcV<1EJ!8TNNy1vMCeF56R)p?-v z_zT`c3=BTKzArpFLGkVSqr0M_yYz)ecPKaobo;(=>^$Ll@Bxz#;{l&;*9YCcFAhFr z>^$k%dCK$PBPL(Q3m%;ZUmOA1&|UkXyYxk;>zx(4H()F2NfLH1k1H)(j$b+Bxbq=I;9`oo9{ov6pl-6nD1yH}FBD7QhJ#In*bpQD)dSur-s$@0W$6F^ z|G_C96e0(~S=%7?a2gn(=Whd#9k8%O3h57-eiGn7J=uBQqx0B{tp`9c>G}W>4j$dU zAFLfE_?wr3lE9At&|UPOJ@~Z_cqF^N0m*xGbMkK&as14$b?P&J+zF`ggU|eeJdIG! z2aj$~4rE2$p>I68T|Y1fNOWH6yx`I8i=kWqi}LOQiG$A=89$-u>2`es4-zj(kbn{d z$oTF82~gC51F75hgG;xggiGf^kAn}HJQz=aEcNO3{ovZ|DB*bU0i$c@0oTrho(CT? z`7oaJ==8ne(Rt9P+x5nawV+S|6(61FJ6*55ShOD&)Sv_mO}_#jy{w5}K-q(r36#yc zO&7ldh2?pVPS+1FbU|9WO=p0Gj=zutbA3N}bT)2aU|@LB0V!h{7+%PMtm@?z2bt8_ zxBwL9jXOaUC|UBif;K@Ncl`t6ymV$@VBilw;L*$a5>#k*?*J)#@pwN2!;6aP3=Fm) zMW{LiL3Z6yWng$w&IC&9e?U8rx?TTxG#?R&JfHlT3?7}X zKVE#;3-VCwi{JnMdo=C^Q4lLYr#id@6(k;h>6VUNz%8(=kCLDY*~ATrgV?qsUN`RL)=ie7gBtJ_BDDS46_9prU(jYgqSACzTUkc-7l8! zWnk!Ry#h9fRqie%Jgi-R@VA0aR`6&%0t%|w!!OeJGBEJVGl0Xd`3)#N1cDMmBRF0_ z-sNur?dkUDWwiu}cQ=6I3*?(Udl(ozdRdi0qQ}9aAk`kdtb!mBL}+#M7Tf{ZZt2l& z8ukVh7p^~ETn1?dRkz(cKs%m2x=o$mFfhCTn+Xy=-T)E?8`!-Al-NAFO%*{ZX2CQb zZvY8HRqOzVgX#a*pj3oV0TPC)02Svi=I>!(c%j6_!0_ViRB&cMOFzA=`llfd1T_U< zMLj6HfZGF(;f`UBp^hQJ9*u8)fZ7bbrDr_4Sx?>urOGQHi;lZqfKX>3)CmyfaoiPT zJHv6;Js@tk#S6~eprEt;e2Rgg)Ahm&p4|)#;P!<_r|SW0-wXV$d?5cc)`GS1x5^{) zT0oh}quccWC=M)kGcdf|!2vQY^h9^<8ISJL124Ak0vp>{3w8^C3pk-q=3roGtOdJ= zzZERf$icwy66~Pb6E6zEdiFq*aT?gf(hU$tb+f*|1+JsP0q$|!6&y7l$6aTDbRTz} z0-+{=sP5W59^C>j^uWd~X{=oW5`;Qo3aF6lWfcPF&Dss1f;(XsIJj4MG}eL*HhX4QnpT7khRNb{JUg+#%V0dW& zvIE4E11argJqk|v5X(OAM7JyjWCgNi4M>(<11WE;1#gb-Xbl5f2HJh>(OBC63PAoA z8IbnI+6K@baU_Q<-pRo5a``_{C0D!R#Z-_n`=S0}*zt>jfnk>r0|SHO4$yW|$DN=< zJa$SkFfi-`m2-}}K;Rgmab4^RN~n)ZTHrc5}kV?p|%$+ z$oS8rb87`e8blpu1BEs?UblkOb?(&xNp^nk-U@O-XRF5l|NpyN!R%g@|NsAY9z4#X z0`kyt7ZnbWpN_kz2!MQb+(ktKu-5{qr?wbe_0PA(!1KQ{A zxEHifxU-k#|Ns9xkAZ@^mjT3d0yF>o`~M#tlbyXk{{8>o4OVuXMFnImwqO964hja4 zUC6-zvI!InAiF@p0I~=a3?N%T!2n7u9-XZp{(*vF?He$)^aYsO`vgpFeem!9|IWF0 zz?``^z|_<$|Nj4fVY3}nO!&_5>2;mZ4T;3=tss*;IuE@_-NwKG_HC!@66@L}&>R~F zs!hSdp!B;Bw7(Zr+cE3}xyNw_C=wwFcn7F*a@++9KSyu??gkYKj{86-t~i1XaNGlm zV#mFp2<~jX@bCZs9iTYwY&`>Ff}**z^#q6sis{a+N5I*qbcRQ_nMZdShezku9Z-?Z z)-9kAZUw98+`0nf-DAgDR6s7k7StezfPxz26y%@=IR_NfAP0eh8sr*KP=lNT3Tlu$ zTsoI70f*q)1z>9L95A(Y2FTL6Q^1_L6TsBe9#9zH*a|9Qj=#7Drdu<>Ib~`Ai0W{Zm85=kS{zyP3cyUH~(Mgbe+;z3vxLFG$yVvfg+Dp>?VjZz0U-z zFuFr$cytSSbO%Xzbl1-C=xl8O1ykqN3XltXOaA@;|NoLl_f)Xe-IE}8gOodXbVD=w zHn1QlJA+hrwie*j6X4Ok7h=$UkRBh1k9@j&A%b8#Jvygm{QLjkr}L0c=SiRLRuHGN zHRa#`|BnAJcy!lp@aWzOa$;v|0w}x^wt&LR6{-9O6^b6aKs|C$lH19^$iU&z?YaWy z+{R;|MiQv%^9O0|u3gd58V@o_55$Gl_Y5AL$2~faffDwi%_vPbsINQQ1iLCSi0&A?W+CV&$R$TVnxZw0CM=$;Ce=-lf8 zj^yJ$-K`+jiyNCj&Z=GULK9>PBw9SWcYwV3;si(z-X8@8TnAVY%oCtvaXjE!Kwf?^ z6{H0kP~H2$zU*vu0C}bwBm-`(f+EM`-~%R)?!6!x560s!3{cE9U}RwE_Px@05LA0~ z`d(?Qy#hMgiN6n&?_Pq5mhYez`4Lb{D%vr|G1f88F&?!&4;nw}to_kh`o*I&^o2(! zXeb2Kdp`eSFDMwnLqf>yf2exMKvV6H7rY?%cDlZJ@o6I{gi2p{SRUhV1(o=qUKV65 z>iCO^pw`x+rLp!8NE?4IIDPiA>ON;+@L&a3ugSiDJTgy$>s7`Rpl%ar z9O?zAZP4xd2in8?^Kv&RO2HkLG=6y(23UJL0NktXuKm$y4+>If)9fK5s73h&B;t|m z`o*K$_lHOKPEdS$fPC|11IRbNFFY&{^7rb1LITuehD5kWa_N^B_dyCekH1*I5i}6+ z1?q?|FV}+{fl&Km?*?r4fD!>{gyKaH$QV!u63rg40+2oBAO)SrU%2D82c-5zC{}wQ zDa-Z73l)$t-M%-_{R372vWFj}pz}D`U)`=){R2|_;_Z4+z<>s88o=qg^Z1K3AgvHD zgOcQnIU5)lz)dQTU7#of2l3ATPylN6dvrH|N;i*g29ItB50CEJA0FM{@~*S=ibrSY z36Dw*`#>p-FH zy8s+*eUN1Mz@vKySOI9rTaO`wF;n58ebWrf0vU#BN)IeiQV0F*{ z>jWjm&-{WcjW0t%HthhFh@db9DLmk@1JnS4aY4p|63PV+ZAS@^{Dsf_k*7e6&;y_O z<4%3%j{zw`GnuCm+>b*G15iuV12YUj8O5X1b;65vYrtVJ0UQR*po#}PEV=`%02Br@ zK?*uucR-_W$BPP3f&f)=u-;k^xbxLmy8_$;>I0FW?je+hbQc?IH-M^a{$9{%5!mk@ zy}a{|g6s}m(QPu(quX~w=lRZ`mmeq|Yy1Za2>uqTr;QCBu(Yw^W!C@y|FMM^sI3eZ zM=rLv{Q3XiqxnbyB)4JK51{!CMbPLFxGw0d{o>JC`T|r2!@63GAHYRvEXbU0*9Wi+ z2AbMJK57^T4AUTAYDOHrNyec(@d!zB2IWWu5o{ zR&L;S&sp%e5Dxc%`bdzmM{r(#(XtBa9#HNEC67+uJ1_FVf(IWmb%)+zJmt~t`l3?+ zqNxFteL+KS;NrCT2xxE@JbvQQ{03aU1%NE?Wqo-c=1#Q2h!vDzAftQe^Air>`m(e1 z1GE@}4!C$U)`I7B_*+1U&ZDswTxjvPEP{mW50AzjprRU*x_TKH7{Dz>k6v)8{KKQW z6C?|sE%A&1Hw(HU&EoFb4=&y89-ZG^I*)a_9{GQ<)Adca>k(_$H~g)j!!13ML8XE3 z2M^F#b1$er1Q+Ralz_9X9ToWd&}0?BX$?$()iob+z?k1^d;|7QFKgUcP&*kqg$DC; zcj*W4eABTPk}DY)kOxg_UwCwadIO;Oml-d3L9)G~Rv;-kB_*<+HY9JEL2QGLtzu@rb1UIGm+d<XA0BRF7n}7yVJbGEpPJ!wTxbGApc5d)!tOaEh2L2ZC07-Z4 zh8IF$DR4jQ#i^wrU3%k#MF4iM$hUHYQij{`($`|&_1fll8opgHjFx(ZM-3IqEJ z+@iYi;_VV}++OfF?h5LNfV^_T!`k%%e{TgSX?EA%@aQf*@!}Fh*$NNPuqZ1NWHJGq zp6wvYR=iLK8QW{S<0ML7xzlxqN4M(?kIvc#P=C6+wBf}$kXeuh9CT7=38-825_F2? zan~iF<{CuH@fUMJNiEZwCLRuK#T`hSc+IZt%D9sx-; zR)LZ%1AhxB7k9h%cy#-|&~_97&Au!F4U6x22|BqF9NyZlJ)N$5z{U9i{wC1450nj_ zSMGM*W9_&WiJ1q)IX5Fqg zK!s}mVg`m|uKyWcW_aAbmJ|IWWqgxJQ&zs>c(N8=GtB7`65r(wVRY8S0LLtxfamW z5?F2pR38He19VCcAqOh!!B(zW3@Q|D9gm|WJ8)OTqZ728;yAe95Wa|k!2@cA9Vh^M zS$j}5fqEF7$6n|mDTD?;xK0yT1Py*rY6Z7aI*-5jy$~!22_;A~1*1JB;IRXgRX{NS zYK0&0=&k(&?P9&yxCrLAR*<7U^9!)P+69{2Jm~>$=fX5y0FRh-*Z%p;FX;Q@GrvGA zh)4wyxj$a?F9IdYFWuPYGa>Dz##->qDSr#-d{vMw9iX`l6e~{fhhGBsY9Y3Sg3Ly- zMRO4-t^Db9{qkZ0*uoFk+gA#p_SK93pmYpRd7YpUh}s|B^%dX_ZTCiSVpRnNb+_-2 z?#c?#R52IWf-jw}Z(cZpI$v1FQy}FbxHv>C`SIuteF7>NkGq0~ zf<`#Nt0OvHJHQJhp71w=4yXlpD?#g1x^22%1T6%WLxQdcKJg3so%mk9sDLwFs zUkB9tKmKB30RuyK=!?#a9-tz&ljVGO=o|1_fD7Fsji6N-pzhfXk8YNOodFfyp)VQ_ zfihHQ=nLc-|3Xk8f%=l2$6s(PfIAZA!YoMs0afgwH$1v|PJs%9vIVdN*J29F1)#E} z8#KwiqucjQ=Lzt#qi&W%V7ikD)bs#}p8{nek4~0rFF`p1Tx=mbqzmj2R-Q|sI@0v$ zIZ&N){Dtv+5be4F+RTPIs|q|YwFVsS$*yZaeK(J8(-~k*pd|whFMiDfnd934>Qy#_ zCLld}SsTF1gM2r5B!{l?=r%2cDF?UkUYr2w=yYA+(G9|;(O}u*FE&DiXMpRIZc`tK zFmx>Y#bk)=1eb2tH!htAJV2vI-7E)Px*aMY+zB4trV3y^=b^2|7x5rH-M!$Jqvb*V zR#`|GEt1y5ae*WTzZ zee!}gkAVTUGHKFU&?p>aISxcux8Meb7psE6A$7x}^ZW}okkeq@LC}$_7|{f(TDo1I zfNFtGMzD7~K_gJEKk%3D4xP1Mx@*6@Fr5b)_F`fHWvco)pkkMo3$%_1yb!7Ofk)@L z7gs>SpwXJf+8baGwJ3oCsF#%yq_Ec)G!}9LJgR=`#kx6=W`qf71qgHj)|WNl1z48@ zLEb8T;L-X0#Y~Wqy|%yBFfhExo(oPn7z3^i49FUtp1N@!GU-W>Kf(uHJ z-Jq3o;AST{=s^|er8%G}53pj;(zDtNp!N}HSnY)yNGE6sRp<2%*W)i#A>0=pouRM= zeGajQA^lIJMTp&QpsMtPwOa-Ml!FZq8Tq#z>^R83?I3tb9AbRd!K2sp1gJ~|k12x& zp}RwWbQe{CoU|8Y6TGVlYF2#W*8w+`KXfvBG}eNPGyWEs1ZcI;i%v!la7Pc~p5`|N zDCT#A*N}l4db4MP$~aI^fH0`s1(&l+UW9-w1+T!XeevS;ERZTt%LS|o8ksMafi!~$ zuUtPI2g!ieJc8rY15{*KyFTFW1+@vF3oLKESPwD>)DP*dJ@Deu_y7NG82DR2H(Yr1 z)~)~#D}AF;auAC(AzHw9-Tit zIzeknL95w9e|U7(?f|cIblvbGbvC5o2^xR=@xm3#y8{~1ec?PCT&kbw^nKG<3$7lZ z9s2It4=+?e)`G_RIzumj<}g6R@eGYWK_SWCD#ifPspWd%lLx<+?}<l^?r zYy&9(n|>K&K(B4aKD36-0m!jO}88{~U-NCU?mGJ8uIbI2M7~aMyl73Jw88EP?y8&2J1mdO;l;P~?C{pFm5N zL75KJMiC7JbQI0N3qeJiN4KacSPzRJcnk*I z21g2i@cMCBnGG#_LF<7*db(|lUYw`})j0h74nP)dV}>WBy$Mg=2qX4^db-^rMjqX} z3Yb9kmFb_O3=A)9LC)<4)f=XB;3_784p#T*Hhlydvu*^f-(m3R3|-*SSvrHi1ymY% zfHFomc${Fy3$|$t3@d`}+jQ-8LMb_;pHmfZC=9 zUU1Zagut?Qkz{XxWFNfHs)oz%hswTiL+Dry7GvRPtO#IsU}oTNg?4;@cy#mjgXL^E zUZ{aOnaCYV^z;iZk9&OuJa+LxTkW9SddQ<&v=}r&-&y+O6Tbl0Cw@WK5BwSjJvu?N zxuE8U>x~zGrht;YfbR!TdgX6x0yRD$qi~Q25ETS<`M|wEP@5k#7suaX16Bo|Ub+CT zkGesv1DxULApr_di5Ce|aKsXLZ1VVv4v;*k9R^9N9N^Wsom`Np@q)&Tmw-n%$UrX% z4^Y{Qbv?a+M{nsDkKRzw#)Kc>x?!>+s8Rs+r$NaA8alNNaQy`nGhwBi-Q{CpeA0Y?}ZlulNmrm zMxgjz4_0Xd8hW|`>Jq((0|zTOB~6CPb(cQr4t?-qN(Ee3C0GV~iiriw*>Jr00;(Lq z85@*6(fZeoZ$M*knE7*(2RKuf{_yDD24UK!fEuBY`5{>D^XROd0MCIdJi0-vg+eF1 zXqki~ZhKup_3n!`lR!QY6$XU`sLKIOQK22s)C9`SAf=ET-9bdI6vA!e2~c~+3S=YU zh9amx0xIb*eBzIAeej7t>cERIS%U)O2h-0tzosjRadipa32QzzjjtJ4Zmi zv@z;D_M#EAB?4TxVVl3gEMFIbwTc*dG**FTq8a#Gkcxs9u%r#g3(&<6kTMRONqMtj z5<*DUp~ZLe8_4_(cwluuBwL$)I>^BA;_w7;hXS%z71U-0R|wq|24I>M-0JK+_F~zq z|Np_A1W)iF0w@Q0blYldU|;}`R(N#tt~t!W;M2{!7EFnPcVl$czVPWh-&y*^r}J8e z>toOoc^}ZSTmK25AOh_&0qv4m3`$_&4n1fG#DxtEFZ4n3ouGMdP)67RaW07IVBpc+ z0P6RFdSf2lrUf9aorhlh>jxQF`=h(`Nr&tC7dMN+IoE-x_|gFBfs40r+RRzT`Kz+h3MCmjWPm13;ro2RW4WMN=oi;YK_Lv zdl?vBoa==odeAI7I8}rFIH?3Wu>fwygU5FsyxahH1D^KLi|3Kx6sG{|?}GZ5ouF2G z=>gDGfJe8jE@-1hH>(kCkY z(93ED67S|c4q6$|ZTkYeAH=k956A$~OCUkeoI$7Wg#VXd8|FUPLn?XS2cV+u1*qn~ z0Af7=v2K92xj}}jK&?pM4&Fbn7Xkq=NQO1VAqAEdA10`-KtQiUqIO z?`CxcCHQXBWuO$%dHh947bwY^g7$-e(u8Xl1H(&D_3P2g8Vrhp?gmKOFs+4ZPzGrL zFWSBhUtbPEaHF`incAp!9J31-!u71sW0oW&6&9FCyJwxfiw{ zr?d9QaaYJPKv0$0_#AW}n@1yfGaF=JsoV7nFUSb+7`^Kc4^_|wuCS>RP!$1E0BUR^ zDd2$5rN9(`n(9aj1TYkU5@e_Amu}ZDXyap``6JK(%m?rSO>iw$`og2z_A6-VJ;c+H zwsYwX$R^brFK%>zy$MjOB!tl~dO&7%9)EETwEiAefOnqjJk@#d z1(z$>9tBYK>i}yn6@bzQ@>rfnx9LuBvKKLGtb+D@kXpZU!E&IMF{oc*ss^zeTm%V# z>;`u?OvS;%$H8URiy!Tvv{kzSR91mXFxLhA8V5m~1ux8985mx|*Q9jw+JjAJ;qd5g zfV3_|Ye9?jp)FF-)N3fBg?j?t!d=vkvxN(8Z=M3X0PNsaka?ZQUnIAKN>D-99iSo= zH0trgqucZVsC4MIF#wgiJ3uac@QFXh_rQw@F5r*@EqX%9-#GGTCBzs|{shI(r){7# z4oUBC+Cc2%FZBNY|GyKIPQghX5LZC2Jk=sfrWwCe#<*ue59Xgma^;Q}5y$V4@t3(5RDt)L-E zNcnGi61+*^IA}4|kyc1JvHkh~A6_JMm)_|-_`=x<988exg3JjkysQvLzu-ak&rfg+S9)uA86g%Sc56FX0?G)`_9-MpLB|Q8g=ga%(9|Zph=5e5v%oq*)#)~9CcOb#=??3Q zmaYKxN8$ZY(7eP7kM7U~Fa9*+%%z~M@h?0dftKd zmw|dCygxw+tQ#^C1ev9L@h_8s!K3jA$Ty(k4>o>@HXa7?-yx9pMjOx+HUobPXfhw% z=Yot)f%9Frh@eNesTauCoyT8DG=s`Fu+8ltt=*vV%d`c&)c*L3Urpexf-gWT20Xf1 zuYwXwx2Ydg_6|rEY^^9W$T(Oaf+h?=2NaYpfCnU~xC1Y}d9k?(XF!6ByW1c`duw-q zrc#jmg`mMnP$SE9!6s0j5Y%w2o#E4Y-lv#IM@y0_O0+|Zv4!z*fZE6G7589A<{KdHjkOx7_Pd2=mV*|3*^#XiK=)%jDkUkH1 zkvzEm?yUXMSo;H%sQH^fOW%&W{sFCCwx|ISV{h(0QtxXF{j%pKjMb;KmBd z`g+Lt18R6Xg0={BUVmZV02-NNV1Vw-QM}N3u+#TJH)zudD7A}D1f|$+76I#y1SSRs z{x*mco`9+~=mIFvwmk-LaDvlG0$2l&U}qyp1860ZN4Kdm*tYX8F4luQ|Ko-7|Ns9x zUGG3;w}LkZoPV*o9#VjQ{R)x=^^-v513%b68^P{UsCv<>VD+H0HqLjJo&oJ6sV2R^U<>JQe{8KyY|^VAfxt^w$VB^ZE;Yut`5&G=lb$!PB2G zR8|n`!r-s}|AY4lBhp_6C;_9SKRvJ}(1M=pouya6>F>ge^L3yQfTh11-KAGRhn^%` zf?bNUzT1I3uzbLyn^g)lcaBsGf8rP50JX$G1E?>S*MZtS0>0o$5dJpMCO~NIyBoYY z;rI(runIxYm;$)Pv>GaI2o=8pRX-alE?EcZw1X}t{=_f9T09+M!-G%!ktaZ{D^N$* z_Xdo2<0WVe4Qj@7@UDX6FRs>t^dRiK4i(=E6~DnBegN7Y6A)FJ4w|b8IhDq*cY?ni z)N_E!-T=*ku^`K~fn=e1?=dKyfolZ;&|so~?~NBL5J3y>KN9M%;Yc4d!LGgjg1;6t zdC3hr&!H8xaTV&xPvCKY<1apd<`z^z*OtTjBcLHei0e#a!DbwPaT=tk8(gpjL4|hI zFfhCXFNyC3tzZOYJ<#4SQ0c?^51fubab>E!mVx2LB#?G+TL#+y1GQg1fY;!6hCX<4 zoDm#X(4~stRa7tMgQhTgS#v<;P$T&80Z_kzzZJCq)1#L)1SH@&9 zUp0srZ)|)6+PLb`398;oR~&Z*pMK!cUAn@fu@2&2$jJ`ft}7ZUgcxAQoPd?RRAm6A zkR_m{Z=m(24HW_mus;40UPuRg33yqMN3Uyx$4*eE9^_L;&`1UNM3rvQc2Jt=HhlnI zfPNjigx;eQyyVHHvo!}il`IHe6aOL*bQD&%?}|_ST8thL+LPrIzW{iT=_h`{P|y$@ zXeLU~6*OuG8NUOGffmULxPqpMT~B~|jv!fA)G@sSphf*2-M*mBa-j1YE_ihMPJk|2 zn&Hyzy2PdPkVm&E$0|_nIu74{N@&{71G0F_r5o&%7yaO=C{VMm5i+Xky1}CnJirPH z7yeez7ED+!{MrFd`DVJH$lK5GQV5h)FshRC)4?&$0Zt93Gr_C#&wt_<1TQ1^=mZ~f z@InG?Z7675aydAlkH26A3xQn%=^}tte&QEkc%fDSD(VG#L1W)({CWrZ+dxGnw2$Yy z!J`{GuVBi&5_J9vXzm1@IzW*RKHX&(xVi=U-|P4BE=V0h764jZk+@CvA2 zfZF1_!J~U8B!qZHK|u~mklke*KHaQspoQO^d%=fBbe{KsoD|^$IvlDObY?{7R2xtm ztn(Bo3_yoJctDPOcp(CIr|EG}2z5iXAA0ex3>17|PeH5$F=0i3F*vLay|{@@(F9O= z<x7|Gti=F(0t4bNcmp-%hIneITcLbesBt6CS7@WIYU8MBWM7@$?-un^6TauiI1? zw4DQVeqiUJ7wI4&9P>8@pZNt{|GX#z1x9b}jm~2)o|k}9PL%5hkPK)Ywd;@1{4wCw z*`OK;<-9z2dB3BxbW10wNT}Tb4=B-%AeTV~Ydv6jY$_;QLH9`Yf;KZi4s7WLi@!Ko zjI*aZ0W?niu^8kwE!Qoe)dCwn@kfA)@2HcY+zC3ng~3(yHH{NX1*^GAVNkW)dz zu)-W%X8VGQYf=hx*8|Y?v*7iZkj)0*O|YG=4d8VT;2jH~U7`(;$PqmV@;7u0vlWy9 zJvyg?4vB#t?$Zm|Nz)72snrcWRK}wltb&NS_GLv33@<^=Tu6dLT3-V$b3vhWx(Jj2 zK`w$7mgb8=;U)l9@rfT&7{3SrDT8HpaC_LJ`3-u19JHkynp_`&)}q7L|A5b3L>a6& z;L#nr;{_YYeV~a}4EKT7ksg1c2euWqKM~Y;1}z!|b?~q*8hrrj7lId!27pT>^!5!#vvgE!_tcZI@2eFtd%9@|n~#Ci)*^B6RO2J0^)%EQKb zNQ(~K0tJ?QevW%cg=4Epvf9kU4Sq~CCIvXJ_7@20Yc}o7w_^w84+aUmlu0N;eJQ7mqFtX zyFf!YAnXX8AYcvb18L*60#lYA-MlM6Ij`GvA$U&$Xa^mr8UMni)Axx7=upyjurd-OEklHyfClQOfzEdYPk>uMYEskF^B5Rj znB*}qyi5eOeR^4)K*bsS5IP;OBU~@M5Coao&3XnLex|wL)$PY${LTfr-82o#eFNr} zUhwE_18ooV0C!bU{olY(yJ>W>z0U0d-l@{=AcyTNnBq9htF6tA%Ah^5siC+N9 zkAm_ATS1jMsE&8|{{R1H{wPrI3oP~mbao7=5di9BfD8Z~69h50I`UxEn*L+LDCE8{GDD_PEeKr?Q{htKm6x0FOvt) z7J#=izl83^e&Nv#X-Pm*D)dBV(D)AW`HP@=o)_Wlpp%)A2Lum#bn|k8=IVPzwI+h9 z3Dag!aoB77X9DQxUDmB&iuW9d>K47;2@;eAEzb7X4Jyt+*r(SNv@*=6*H#0hs#le9 z0t18RUIqrxA~aBk)pdeLFY6hQv7n|;FY7`Gv%#a6wG7MzN3BOMs|SP!-f+~*Dh1(z zcC34JyG{VFVeMvp0!q}7ZR#G~tZJaKhE7O#vm4w`_vnN)mq2GJL&Q5FX}t58Pv=@t zYZ4Ukpp@a!*^AWJ@_`(d=hN8=IwsGjvlnzeo=+$EU_77BxuCP_JUZus4y*I&1fK%u z)43OPklYJP(9}`4=@QU7{m$brv_M?YUWo2i(C#Pjao3?IJi1M1&thPB!2^;7XHwJ2 zpivo+E2o09W;ggCJkSYMpltsn0~~Om;o8sO;Vx4fsQITrGTo-8Q0{IJ7rb}g72KZk z=r(nN82n-ZND8!_zMIz{YzBBfK?f{*-lH3Q6o5zPRM7c%9-XH=x_cq4R?xW~8yH?B zg0=IqfYf)JJ_QAI_f(J^c)Q3Um`km|%0R`OXdu`Y(_0{=ouJVa(5ZDEoxPxA>Rt$e z)tMdzNp^#Upquo6rh{q#Rvw7vP|%1%=kXVh!J?*qQ0^5F7jy;?a;Snv6l!NOFud3X zk_G$J)D~nuI8?!@2sKpu!0JHV4pUi(x);@8AyC_wcM`;>;GG|JMU4D z`fk%UFf|n<2Mb=;h8OqJKtTfz+ofOyrg0#u^Snp5Z-+*=r&~os{_R; z=qNvr&R)P$a^BB>iJ1PvQiumsqmD01RDYhEl_TMkpL0}@3Tb8$qPKXO&zB*FuZUA z$%6NAg@VM+g0?Ai9)F%RrjpA6OyiXzZSfgYW` z5g<>`2CFmm14(v+g`iQ?1eS0GIkXcjY03nmz-a;0`Gnf{A_}YyTvCFT1%d|kK<3t` zfU01DUQj^_882E2YRT+kU;wRs22~`izrfWBuP|tB9C&TGt-*9iy9{)eaOYOgQGDQb z*;Md}c%7{l;N;M205bn^GRS|X(?CkQdqGN}?mh*U0K5ApSklxBM1kE6GQg+16>PvF zusYLHxFpDu7d;@+Ue@^_r*$5GQ4ZpE+cJP==s_znyX`%|2SkEWu4xlk>%kWhAVr<6 z8X(s-9s$*(NT=_itoQS1egnGy;30T!8?@l|hetQ7GbmWQO>MxY9e=?EGOgRx6w3Xb z1WJOSO^~doKz6F0LQo^Tv&}7eGh3^EZRWvB6^u-Jq?eK4%|* z&Wi@EobNpD(Ru2{LWs#oXQe=ACP0;n9mx7_Q-82>(CGW|7lk18-KI-Gc>;9qWapt5 zaY+me{QFKock;F9gJQUsH3__0s`dbAohe9h=b;y-Ns!Sk@F`8;qn2H7yevcaE6FkUtpsTg*YGg9>rjOa){+3F~B#9iUTGx%Xgu^k!%G3ssb}4; zAjM$atqUNn@(+y_prdgZ__{n9Mr)(A;ztQ8MlfN$%*{iJQQFl6k!S^98gTz05K&QW=aak z6n41FAhFx}5gu}o=;#5TK?e>Bkdqkrdyt|79Qt^p1MC^(=m52t`B9=H3N${19vypy zp+N^4KY+|)f!zR&4v};;(L)4#;sKt{)mI6c`{~J(x-_h{{Bm$|P70MX~^V zDiePT=+*&9BGh0MK#gw=Ca?gq6I3AvbHEG+jo^dL1kE&p4^@GTl%tQwfJR+9OFwjm zzB%st05qm?+!eG(^#5_!3m_iiAb8MndWLS-7oda0n$tn2B7y?U_eJL^kIYM;GZ;NU zcYT10QP&^*+dOoj38D{ls12x$L=uAxWeBr?CJ({uPe3#5jTNB9DGdC5AYXwrzyw-B zV_)5_PeAMZ8NiE*Tz@oHfKEk0Q4A5lt{7Y)BAW~mz^)h){NVHfaz?j@2FQ8V9vb|; z;H{J0u0J4RC$v2@xpDa4fVEVB);=@v_kkB2fL+4^a;UZki2BhT0HRK4 z2e4r11I@^y=mS}ELfZpG{pbz=Q75zmIFR%mcLg2y4Jvkiz@h`mS{{hCAnHeV0EjxF z9l!(DegzaNS0K)X#0-)?(C+RN+8!Y4M|S{-I-wl^@g}l9NF*WY6M@(VqJDG-fT$DN z0U{Xofjhm(!2>E|PiT99s2`9L_k?zU1cp9P!b1rj8Hjx#>PL3~h&rJiAcLU~yk8dC zJ_U$A5cQ)w07RY84p6|*2PsI9{HFrZ2cmv-2Y{#(+5svU`XGr4Ngrs(*$HhA5cQ)w z07RY84lqE|*HB@?z~2Izh5*?D=0Vft6==@70xmDQU7vtXTWE$hBtZM;54;5J27*eo z8iLPxxnu2m19k!xm<`^1+wFP2!V2 z?Ruxv^+vbr70{7&pj^@I`U2{n7cYB3r!IE89smtz!`H(byf6l>_k-+m`{2R42V8&n ze(-2K2s*6+e1%Wrp(9|?(hnYu$4-ElpcWZuLH{|>oc@c8&@;tAr6l<9r!An#bx`rX z17rrc%INb2<;h;#uh|R?FABf~9%vx9{RYT5(5jKf9Uvyi&8QRi7qh`tZ!Ish{s2wJ z!2JKAaR*+X!Qp~3>3^D%lUgi(+>O9KyAa`(iboGgn=CXqVYLM66SE|M*0uO8!j+1 zFo4=D;NxYxU09y?z z>2X5n2?m947$kh3ybuioT`}?`sEL7rzZK!UD zAOyH&-)n0CvhFey+=-~$?$>;$c)1zo%rx&d_K+Huzfpj3!@C5lHk?=#TC5YSC<-Mo(>%o`rvybmDE z2OizLcOlFdoyT9?2?2KjIy@R{L3>LXQ1iixOmIFZ!p_&h+vEue82 zM$oqWj^nNiK-~lI*(2ac>2_TLElQTW1fLnzYib7?{p$^#ZN6`IKJZ7N9j-cR%US!7v>U@A&vmi0h&2zUv$H>FZaDo*0wI5!T zfb@Y<3}ovbXzmYn{->AqCTJs3C)7Qlo&=_Q>Nr5nJIDgY6^slFFKSJ}i3RB{Jg`O# zN4X+t%mS%U7;7ca6HVd)Wk#SwHZ;7icj;+LS6 zGy7#B1dogASSVgOn$r`H{}r4=?r`gJTbLl+KIp4p8*~DtWCvB=~#uz(L}QCfsTU7Y0=l z5Y;mLz2NX=M^A|XY@jUmpW!8_ZHrW}fp)y0&F6yF!$a1~f==}51f9MPK1}1oi?g6} zyg+9~z>Wih1pz3%zXXLhc=ZP;_BvfpyqE-14qAc0c-*5C6nw5XJU~q!*x3O$__uld zZ~O^r-to7B8eO0@B>dYrphDn-CgDOLE1-wagBmyBum(wjc7?x;`j56y)B$P!33Pr= zCwR08w5AGlObs+&ftF-o<|{Q;=*G_%Iz|kj;gt_iYe8)p(6GsiC5G^MYfyoLGG7KB zU+HC)Y-M1;Q z{(0dBQVzBeKHdaB&mOciptJN#cj*_62zD+4uQK+y|YG2zk4-tGIP^Zbji zewb4391yviAUV+DuTD3CZr?AUUQnlp1ndYU%=mx>T(|v;4PdRHgiz1%Vljdv@M4-D z=;%36o5jkP1E%JJ=+FF7OF_>6#2*a}kciC+gyr*$6mNS+FERa$3H=!d_c z8^u68Na+gp|4Z?GwoX4Z(vlIpPjPP;|x~ev#}0Z7yJ0f7r`v2^xR}B`eUjA#h48h1@ZWJu_Vb zjY5Gk6KFp~V+ClrF9YP*IM7LGAVCjS&_D%fwc@r;&;kn3W~^|DRuT>jN;g_5zq%dH_t#-2kShE&x-#6Tnn!!@mFj zJNMS?16>Z)TL7k7GxmW_+wM&OQ&S_r)Ybry`WDcg&-@x-UHqD@2Kzzj5NcGf1DFRj ze`)}j2eou=0+5^R_}=D*)#01v%QKyA|xcZr=5opq>J!Pp9t>m(JERASIo94}hpfTldM}oXNo7 z0vZkSXatLcg!o%#gEI;PXbUFjsydLMM{n;1kiOo%A3#*+IiKEEhW(&0bQAFDbrtaG zbmKVg#saEPkF$Y#t3KVWV2ePvU-f!`L-e3eH<Tjo21+`yhhKd6fZsRTS^K5&`2YX^{&)Upe$N5A+NiVk34c4dL)^={4ip-o zOQ4fQIy@K;{eR@q%W4q|ZaDpT*$tBHW%Ysat0DXd7(W}r&w=ryA^Zv$-y6a&gYm%= z485#01YU?$}52e zTTYPC&}P&_h)4c|_9(G}dbQw=g~u*X`vK%ski%r$LHlBD?Lpc=E`qigS&cw0?L7YC zkTCmO@Y-5Lf4{$78O@yV`#Ji2*BK&rc04uZ~11T~Lg1ux`;K2R$a zG|B`oc;~i4TkFV|y(|K)jq0{NS^RE;M#;F@Q#3z~__j_khw_W9^q1P~)V( z7%cM!)LVj{vy5s8L;_OQJZFSk2kKaXvJ(F`4-06gv<1`wfL(%i%!M(A`6Vd5ce}pn zIOvfa`USKAxWh**2HZzzsC~}B-vZh}b=>t0sHF)q%%gD!_*zkL+JX)9dvrH|1U*0p zn3sO(4*k$w`^E)yhYje+g!A3L5B`G=ods9LDEo)O>wh8V%YeHwO`ua-8*9JRflO}$ zxwWzO3+RwG{$^HCI{VlSSo;MOa?l(4 zK)Df?G+UA4#S%xnguvqE14_JvKx04x?qbk@3s|tb0VD`=aW^amz}q;^cl*8o2L!0Q zir&7*5+059&|_ONK!FR{I14&M@&sg{hQAARun%<0>K(7qEOf_0YFNjQlPKJCD6s3t9{SYDf}PDGcgng63i|Lx|%GxI=;% z4@cA&pzeEjc|d3B2iQql;429lYrimoj@<%Z8Q%y!cd!KqdUWj$LAI?Le;D3N!11%N0I>wp6O)>Gh$OqB4I1U2EH65#NK4O@fy zVjfTlu#V19=x8uF#$oMcQ2+iWXg?Ft{we-|-#_38K=DsgAlN@vNE*@o1CJjx|Ac_f zEC4muUZVRa1h;=UA^t%<7OpcCQb~Zz0*p#x-uwUmUxH2`LR{SkYUP0nbx_WA0JZ2p z@e48_ZdE{*_5cm4fTf#{fI}CSpCIX_6120a6LiF~AZU-9Aha0;tG2MahzH~%&^hZK zy{rx(1G*gwAOqUqW&^0b2dcb5&4veQ{CW-!$ZY_S45(TM%Xpx)0YG<;fuzA2LB$EE zumU$T9)NftuRLgk9l;H@3e@@X=&l7FD*|%9fbWYJ@n>LV2l{$VP<_=2+L;7u|AVfg z1Yb5+3JH5q(+jhw-8a?0~R9LJ)Wew=h18I?g2L|QQZR;BH2AVvq9q?pyeW*5M?yzTohQ}A6n=90PS?* z?*q4&F`7k_k@SK_nYwF#ytv;AIt2<^f1vdbds$~@f!qVRdA7Us#c|M~sQ4zN3|}Ed z7-(G%dN&Z_JaB1&;k+*|ku-xUh3;BVAN<9O*BzkoCFHSVP!9sVJq@bwKzHE5Zl)#1 zy^Y9LlImU;WX;I#Jx!E*LGy8-9Z{XNU%>GV4it>)>;4O*Kmnb9MoNe-Le>mgwh6kg z=`5=2kS^i?r^X4e`8`m0E(8s>b{_O-JO~7D>0J3%8O4i%s=RnYxXb(27oCcNcf zm5vqAgNQtOSyMAW?d(6+9Ux8oy`W7G(4x27^#`a`-V0ho< z1A`BPb1?7#hg|3j4{MfFkW+s^O&gEn4xoX1NE;X|06pz{JH*NpplwHuJ3!;6;HG~I zXsmW069Wr_M=$GYkRR zf`)$4J;(_0;3<$~cL&J#9?7AQgwo9dIy&?JMGOzBfkLdi_64YCH4zjm;Fcif_yu_U z4t^RpWbL#MNIhr_4LUk}{Kfi*pvfTDAFw&H<1gmIM7kXWK!ety2B67AP!_Ow;R$1R z9)DpAVne2kLB$`&d?MKX&eAW?d)c8~-(K)ZKhSQPN4L$v7oZF5k$Y*E!Ttm7{y6^P zraodx0%rLN?(l=6!eb|B6(N`f>BoTvFF-3d&%I~`nE-CX)&6*K3B&=-vve|cgGvq8 z7o7ndptG<*!=d1X$S)wL-hw=YZXf9U3Gn)njTVSHy&UHuYG>eT>x5n{ermww1WBtbAf>7r_Spy`t(4{aX>e)9RM8?;QK-w zbmr9o&=wru7utgS>koN!`yS{HWC0zwp$(=EbQeN+g)IE*uQ6WeJpRH1Yzp{Dj>byx zgbaTRXlx1W7!S}A>KED`BAw@7$b%K$0Pko9^{@YfOb6XU3tF6e!P@l~;mS z!3%4;T_0Gx-r;WoWpS9e5qP)^EDj!m?RLFk?Rtg388qe$veTo}bw{`FgHGQ&-M%+E zeL=@3cKV)y<_-7~|Ch@^JH5I=cd>!eEBO9+$l)DW+Uub4RnUQ)A3PfCLA50VKgz@u zr~~cM3mNx&VL1_8<0Gv>1Jz#8y5%KkP|sr*D9XS|u$Q+AlFc4?B$vJcWg!n;a2ERD z0nJiO5I!h)KX`OH3V^P51oit|IvpgSy=urf9cWw_QU8HvHDD9-kXeowpj**FE6PB# zOwgnYQIFcl1|8M=!lSeF1n8#FZZ{4P#q7odp#;F2BT7#|#7{uPPcXX)fR|Z=S9Q05 z*06TFKGAl4(CPZ;C8%WrTBHQtb#Q@yy$1{EWQK0n6JUW85P=)rzIUuaW1bMbceGt^ zfb>FpvlqI-spteK6+sU$MP9GfS^Eck6cT7UsnhpCW9=XC97HRq%YWSU4=Aj6fQDJR zegAa2-sn6rv)lK^_n+V!gV{jG_jQ8E51nkFVC*jakSPXIta+i+^-g2$9Z)ZyzXvpf z0qRY6b2J_ViGbLh9F4ViKm*5+rRJbGL6ZK^$$_^1iZcP)Uhl5`0J+H(Pt$41eWa!n zs4MQ#%X%T6fuS4RA_1*G2VJ`aZppxwC4kmYLgEwB9-kSHcm0(UvJGJW^|I#0gVG+T zQiE=51m_Bn!N}naKJUDj)e@u_mdrq54?5-^|9Hl^d;kA~=czy)chLRaphm}w6}|9o zJIwu{_S?-kaCnh2UXlkgAH2Q;Hul>B8qNZ>Awai>b-RA(i zy{w)P_dtpP*hn|_hVQexNU;a%t$@-CXo)UjU;sQI1K)1|^6yLVq&ak59(Hs4kj(`T z=l8Pi0%?P`2SE3Rb%QR>hBOZ#LlK}Ml@A^$He=MkAp0{x2B8)O4?x+2V8`jl9VFjc zfs3=+2QLo&`VX6l2M08)UIP!Mb-O+Q-4O<=N@2C6-JSr>s<(j9*h1G>np*YtkFr!)3u0IYl3~y?4pb(AiZ56b3%xx8>aR@%+0eZsK!kze#dS4M#s3FB zMUSe!@r?kumBIQCbXNqp@%_W2b1&#r4Uf*PpuON8ol`-FY8-FX`43rw=g|#5(hO9l zgBi@Ajbcz1M`tf+t9j#I5DD=Ws4IOOd@LcTbbbj6F^Dusg1;9uw-1p9@xe8>M>qIP z7ufb($dYC765n1^D;sbi7u*6ZbMt|^=w%`ss4#=-f@~Cpt`~-iLARiS#~Yv~NkL3f zLp4bp#UyZ%-u2(1%(aEURP=s|J=sa}1Wh&?Z0#LVu zfD*{kZ}5?Mja8tbJO=(gH&7D{zsaEe76eRYFe2zaP)6$pCzNi8)6X>?110v(tzeIw z>^#*8@rXw^I7K#Aff`#3{C%L_3jymP1v6M%w-XOR^TDYZzA2Ol^Fc0wI;-1BfLQY( z4QOKA4=z?A-tKl1AK0ZGHe_!3mY!9!7lIP)7SbQt(sKy@eqhl9ohp?-(&ter$SZG#RmAYd{m zkrGe>UhN8tKLbKO>jmdm97Y~H-m(>xok20?(QSGz7*x{Oz6UKW@7xPIi3HsC-wI)Y z4?B91p#V~2dKj*b6$$1$=*WD}=Qbbchq^UiR*( zAl8ctuo2+%dp$ZE!M4GD2I7I7iR!b7=3t*mqWTO{H-TyyP!xM~v);60VCe1z34mI7 z)~-J~dqKB*^0$KOuI^S4+oSOas78%F{6at;yrdenz6G_{K@Dlp5{mBq5Z{@CR@%Qf zEC-6D(jOkj+d#q~H-c7nd35gsIoYGzRK<^h;l*5pDv&T(6{IBqYfpp6SK#A2E#O8F zXlSP!dMLT+lK=*W7ol8G$kPR^|GoW)V+w8gWML4+@6ED2jX9llRdgki$E^8EDIaMLAy_^v-Z!6 z1)#y6-q1HY?}6&xPS+3JwSPKm-+($^9&nEsgN*5c7^480ABT*!bk>5F_(9uq3cDD< zbvmn#Ey#bMy$}|lfPKLQ(%Ea83Qkj?QI4!cS#rj{|7Jc5_J9X z5|n6P1hjy5GzfwhZoxWsNake*f_5+nxSH&wqOLjZlUoPDEsrbg4_p5VBMe-JwXSG9(3$H@M7~-=)xA{ z;mWn(A$ss}tBtiEKs6hGKllg^=olx+_1VJGTS$PN!V@SS6pHIg$?*%sVK!PNh2VGOc zfml-msxOe1;DD~2{^8NMivylOkXG!01fkX;yB$k^9@G5-a08LT10)DF5H#`&nnS=A z9*}Y5?$R%yRNr0uqr;sWc|9_CKOC%lZ`}U_9#WvD9yD!(1VJ_-xf^*uEZDuEz&Ym5 z!w8~18ux#|W)4UY%^b|}>BcwUQ&)Rg%Y4C8q@Zy^&;U-S?*pGs*Bf|-rFhRG6;yvA zm*|4h9Dg6EF$x=W=?9I!!M1G`8h~rj%b>LxurYwcEU*>)y{x}{7#O-OULXnaKKB7t zDGRzQSzfF`sN}r>7GBa_$?;+;lJHKj@QUtAo)>jU!i&JdYq~21UVu)L0e99tdU?CS z!W+6PMP39TsV)HvZ|Sa-cwvbo919lS(OoI?LJ3LO4J^E;yHeo=Hl*d|D=G z;Hx#||Ns9!-M%k;I>Bc`@^5q0#ing4=tM>SZH{_aB@01&HMTkGW0eH$_3d`F>1-_l zO>8+jKu$&Pc68}%t%2x+UU>udB*LK${M#HokxX>tclqGZ@u?%UvD?w7)3v4BF#vR= zDCo*5qzf}%7;FJgucA(yfSO4j;9v!%OOJgO(0u)3g(zs3k7>6Ts0xQ18QSfZ;nBSp zbQ-KjC%Z>CM6lB>!=telJV(Ue0=kqEnsQhJy%-pdflp^=Jk|;d2S)I|%c&s!on8{4 zakp+LN2c52#V1C13J?|Z0-clqHs7(+L7}^f<;7(r>F=J%(kk6m951#YN#8(`*66OX zcmX;u*aK>tlMeXY)Nb%y8XldF23_DNg!-o=fU|2VC}QAzE-34`LjdS5*cYBhK$GBG zA?Yi00qE#IP(uq6FfVpbhY#a{H~+vw>G%srP`%p?K0F@O7MgSzsc3ivs(ukl%MSnl z|6<`TNOYkY16u0pfiT7!*%Q|8$oA=q~+ZUHXH+4>Zcq?fR$F^~+08Z?oI=2kgdJr1m0cJ=jaoh96ipfq#E< z+wuSZUp@teF|5diOxc3=SVEHPF3_rfa1KD)zw7$JgB4uGcOHMy2o4d@Sh4E^(ADoR zoItCZLFegN9)xsVJivFNgUoob?K3Eeu=;~s2ukPH9tBV}y{uLsL3k6Z_QQ*pvq6e& zl|bT+$3gD!0Bv9ZHIutRTi-sw&yRTl>M(V>zIX}R0S0NtGk|6qJvte|yw2kzQ# zfKHraIOd?sc+5eM@tA`?<8cPi@Yit%@Wt219XKF79tb4>YIz=a5CQQZjS{5vfRgCJ#+M8NObnf_Upjq1@b`n3Xn~uR-L7ABnHfM5 zZ}?mKKuhRB-T{fSfJI;Mw}1{ngsWu*i$39RDFdl>1e^Xvmq7t!!UO((W6%yDs0pn9 z-~avJd9e8fA1D!ax?bUL7X%GD^s>5vC{TKY?Q`sQ{lfbHK14OUN2l+JPS+#+?TRwemda+Q|-~qy1)gz-ldb{CFm?2k6u>L5sTfvKRP{FULJyItA#4@;CQ(KB9aXg z;dwa^A`%G`5qQ}H5pjo!h`g+Vh?v4eBwl7fM3iA7GB3j*B7!gxg_of1>mI$V|D7QY z^iX+e1X1%ACZh2Yw06g%m-RM8q~laafDWvya~vYp>0trhDB#h{x)mY-6vek4Qikp@UouN;sf%Wtu=mck>a4*uzQx|NjTIINJXI|NrFw|Nk@o z|Np=0|NsB{{{R1f>Hq)#U;qC9&-U;Ce~Ewp|7-pG|KH}{|Nnmf{{IIZpj-6s|NoYM z|Nl?>_y0fWbmd+D{{NTx|Np<<|Ns9%w`W89v!MAgPtg6ip!qTAbUHX!fyeJL7QQ_@ zh?wpHmH(jbJpVQi9?12Z&}l~G_C3h_m!KPfAzcY@3m-Pch&|&rAN>FSC1`{h);W67 z;l%?r8MFKXncoRDA3Rr1c)z|9$O2HS9x``U`r$>xbZ`L)T4#Vheg!gL6WM%FcY^SI z@V*1s=7WD!!0myICqdS$pL77V+-jlQGKmPH1d!>Lpu`HQd*G!$sN95gPF^U3J11r! zm5{m~yjBWy@rMz@x7fqe66zjscoOH|bD%xrkVOrU<7B||-!o=l_3ur468#I>)&CMS zS`SKY4HX;={E!;X6e9>g9nWspFQB@%(@_Gn1GwAwMW>?-D5@cS{}-DPj>6J^2F14} z)P1D*e;>B^zJag`7T=)y7BsF38bgA{^apT$!=4$+K;}XRH9sKv9A3AF&IAWBXe9%v zJB+n{&$NStHxc%+Vb}+0f5GiDCBnX+@S#V7=kZM2OGNvn5XnyT{22h+_YSd-$o+}R zdl5xgJ0qxl0N$Snsl>ti6OrrjJFNfzLuzIg(4{M#u4nk$O(0bos14u&I=dQHGk3e* zL8-?Nbh_^0Z)bz3)&No6z6X%&@f+YfkbNI`fSR3C4mCVt!;3t9`pzs-Xi#9t4U@9qGdmk1J>3l{;MJ_Qm1pQr#@uFwHG zVG1Nt30DI;^bsVI4i^D6G(aNI(}W-JZ|eY^p9m5H?=9+f1qp!;O#}&nPud2X4LYk3 zBm!DChgsE4-wlro$Rt1H?q}Ek|Nn>o|NlSp|NsBh|NsB*g`Taj>Hq)#M?v`C|Nl?_ z{r~^<-~a!j|NsAI{r~?zQhinlKH-w6@oBN$NPRm{r2{HqKzG@|dqL0vaOCwGk`VJD z>vss(H=A}rD>QH$z1#N%Xt5itLPJl_pz>!Y=_FNt1nF>rjw}bw8-Vu7${=OpNwVvv7{b59Zu_khP_ zQTKa*g-CXfC28)tv;%wifJZD*-2)aP**z;Qz~wi1*)3$k2Je0tCmikp_aso=0~R9L zJ(8rkXVZ4<;llvx2cfzLEJU(s99+pvd^0A~1r zg-CEuFKezD-oCxqw*UWMvVsnRiHlegKo7z~mP&`3+3|0F%GKBxot^f7O3rHiII_%}ijD1x&JmNe(c{1txjGBp;X* z0Fy#sQUpwjfk_E4DFr5Fz@!|QQ~;AoU{VE4s)0!jFsTJ5b-<(^m^1*BMqtteOqzj7 z3ovN~CT+l^9hh_glTKjL1x&huNe?jT1txvKq#u|J0FyyrG6YP9fyoFk83iU|z+@bl zOaPNfU@`?vrh&-}Fqs7=bHHRCm@EL3MPRZ7OqPMk3NTp(CTqZC9hhuTWMJ^=l{J)O zU~mlnuc|1=z%T(cyvFeI+5i9lGeG^9m!RDS8K4!9FF`%u4A4TAmnT5737|n2P>(nR z)O~-s1tbP)?Yso_lruJgWI^-m8KC1sUrqzbGJ*zgdO$2`5UUBqG6S(dR~}^qgIIYW zu>ueaG`Wz`0b+s9q0CqaVu2Q@y2t1=8h zEKm6(Hj(h&2bK?jMLX3B*zbod5~CwJ5^@ z#Hs^{WrA2GAl5<%0Vmz5Ni&IB?e;c1+jQQtji!46NvR4#QO2)|Njgz4hDvo??5a)5bFtu6$)bA z0WGK&)&K zs{zDn2eHaPtbHI>4v2LZ#7Y9O7`Yf2UPgdek|35Jh~)@kxqw)yAePmi|Nj$CXrKd&S)Gp`t83rxEkOcBBihQyql z{A7mAyv!1iX)dWbsp*L&sa6a{sX3{M#iMh!tB?hJ z^UF}UnR%IsC8b5Eid<52v5GsTCgU~n)8B!U8^B(KEYrQfuac%TAsOy>8Vy3`6a;x`6X7+5Dh6xOwP{COLr_vO)O?eNrl90 zZhlH;T4rjITTWtnF+*;CX>lqj$WlO&ms64$!H|-gQ<50TkdqJbmuDU%8W@sFOG@(d z{7Q3^Qi~XhQgidmQju-2Vo1s_%}YVJFeo*-#3~=03SgS1trC9nMK7VL8-+B z`FSa+MGVQMMaB6=q2RP?1qnBo{PH{)vnVk=Jv9Z&3oWo>D9TLFDDedaFGLvuK$%!LGRct&b!juk@*QX)bLDrl+z6)zx-P;PN*UW#j3 zYF-JrECL0m6+?beN@|gRX$dF^=YvX+)RK_QlAKg4aH*7f+1gZ#ZC|H?)QD%B(9+(f6hhzwpY@LFd%M+7JGRqQ6Qa#i2@pbCNVxIZ*2!HWQ>$3eklRa{b;lL~fH5+t^*Qc}~v z^+ak(cw$~ju~RBIG3V!$f(k4Dg48^BpWxD>w8Z38Xej37q$Y#poKiCq%QEvpbxdjr z)DB2Q7N?dtLh=SUnSzTAaF~Efr&Lhd163J8sl_GvMTtqE2rkY@EJ{srM3j;s1&)w- z$jr|R$j`}4uC!uE%goCx&hSYr%>xH5NRe-1W}a_qUMaY!@GMEq1qA^l*?{6PKhG*V zwbHe)G_x!*2bSD|OOtZJS`d|^TYgb)VhJ=2f}=IKBrz`~u_(ncDZjKNATbY=$cs}8 z5{nW`@{2$gfyyQj4Gxyz)FM!gRt#|pq__r=u(Sg!{foh>y^)>d3oU5DvBFRaF6$k0 za*zU}*ovV9QD4Bya)>8EVF1ZfP`e9Ki_-Foa($8OEvQ&jetxbM1E?jDm!9gG2ll2F zLrH#mdQK`L9a%9zl?SJSVmiObsvO?z0Of$pJg3sUlpIhMoR;sB2~G=%MU@Ph#on2D zDgJ5Bp!x@tUR?`I6LUiHp$!d?z4_(N;L;J~Xofs+4FQTSr~LdJD~1%fQ6Mo$1Ekn7 zFU32xve=3NoNN$|1f_q7yI`q3IX@4SX+WtwBp+IoS;6ywV@XL-W>RTMYB53#8t34& z2Ts2gB_RK0r#hDw6{Y4u(sV@$Lvl`PViB5HT25(khEr);T51u!Eh)-OElX8^w1yPYit=+63J~o#V?6^s69up~1;1c- zABE(Ml*}RpP+Cn&EK*3R%uCG8OlAm5EzU13N=_|i@bvfaba4TpE+`aK9T;F`0RyNl2NKADu)t+OF+*@hez}5UP7Xt0X=VvXx{v{q zfk6SDnG0%jh!Rl%*CGXXfWAsAlS^X5v;>P?VpRnUjj70Gj6%pfbe@`FS~&3aJ&D#UUgUW!6uQhr$~gIj)4d16tDLUMj?L1IZ}Qf5wONhLuO43JEK`4MW3YcNiq zU^q0fC{-aZzeJ(9w4flrs3bK-A*oUUZVnE&WftSp19J_i1D0A*qEM8dR9ak;ms(t` zkei=^9Bk=1?y%llCMZ1=RVozZXXcf_ikHM3h0J1wq@w)n)I0`vpLoY0r}&iAq|)^G z{L+$w(h`^$O31+k5!Ql4Tq8o_kwmcM&(w;N)I4zXL+Vm&c^F-df@&rMJg{_~eHD;- zK1e(TY^K2i2$t-i_Nu1nff0jWK0F@NKphQ*%sd4gdfXFpa}yQHK%Gm4+|uF_g``x4 zbZ|*gq)?KPn5R&cT9gkmFgHIhvn0Q$SOIJzLr6xd0yxX$WF{3Q7FB}68b4=DlBJ%2Oi4vi?X5WLNYRo z!9` zv^*+?IRI8<<|LM+7QwPbu|j5=LPtP!0nFXr(4I z0|RIV4zz;|eD*wOLL9UT6SVpRq;S^EnV>T}LFa3MxD2Uh&w_S3F)%PZaAsgI0AbK^ zmtZ*v0TKhT3|uLdpEVN%c0%n2U5)`da0q<$0*Fx$atP?YK+sxK@SY|H1_qD^qZk+% zA{ZDLK)aDZx1}s(U|;~PSO{cbU;v%Z4RUZ00|P@O0|NtSJuB$)7|=O9ptYQ!v!_9a zZh+Pqf!0lfmRx}*9&{NP7(m;1K! z2OUBWx_|<7LRbs~0|V&vXV4M}KL!Q{&?z#YNp&Vh1_sdX63}!8Gb00NO5i^zQlc3d z7{VDD7(y5s7(h2VgVtPzGBPkkFfuSiF)}bjLe+xSS%QvG0tJQ-RLl=bOF?On90+?e zGBEf<#e5kV7>pSi7(k0!0vH(>92glGKnviV7#SFx85tNrD>_{n85rCc85rCd85m4K z>sS~W7(Ai+LFR$58Y2UPIwJ!EXq}4+BLjmbBLjmLR1N4BIglDXMg|5$Mg|6bsJJ$i z)`ijrj0_Acj0_B*jc;6x3=E*-%s`i0@-i|oC^IrJa5FM6C^0fHfG)iTEvw;RWMJTg z>IJ1T28IXrpc)U-P=yWlg4>Nq%|;Y)aHA=&1T-Q5RtM1vW+G`}a4<4)FtD^NX(mu*!@$76 z1Es~Fv;vgYg3=~X+73#4KZmV?q7 zP}&Ge+dyeIC>;Q$qo8yOl+J_F6;QefO7}o%Se`lns?0$xJ17mV*kO_k3=F9vpi-BC zp%_XxLTMx=VCD(XW^e`uhK2kP^{}=iSdxK(0Vcm4Di1z{5GIKve*!8GYLg;K!}VW< z%0sP#D}kAR7b*{G&%z~<%zp-z2i;MGP5w1h9+&&SLghh=sj%t)4V4FNJisQ;2|7oE zfdPC+6gGKY0`h`Td0gSA1eFJ!XoJoCM5sLIz&vd7B~W=>{#yi<2eo0b={FaI#6Pke zhz*M$3#dG<_;Dm4?*)~|75_m{d30C6><@v;gLbum+y%oh`2?suF85_Z<#E|x2$jcW ze=$@Zw3QNOH;9JWUj>!NWq&hN9+&y8P{qKj$gKj^7nGK?0=3j=&m0Ad(<^Ko}!kg0@I9Ffjaw`tt?U{tr-beyF=XK*bYEq2{59H$cTT(Zm-(#qFWu zuy8*B757CGF96;21RC=}7YE&?#lXOjh9-UhDlQ5dOh8Ka3KbA{=A)@k0PT`tU|^_6 z6F&eIpM)kZ06GSlfq`KGns@VSF4?xB5p@}nqF7#ty zV0Z%+hsBEnRQxqsd?|p={byic;N}9QCPe<<0J`}G)c!;hR{)=S#lWD1CT`FO2{%nN z@dr?GP`Lo=m;WG8E`SH57#JALpyvF5rXS>T1GIy81;jcy2}{=nXz6+fXpjl63c3zRoNA?FNrFD$(qG(+@(@;hie4~!u~U=n7}1km6ZSOh};A3#E;qv^|t|htmE~IuuH$K3L9k8I;}#rFTH-Q&9RAlzs)J!=UjO4W(i6 z2`i@ypyHKKx*1A$Lg~p+dJU953Z<_?>8DWo6O?8I4Z<=oFvvh@BPeYLrSqV436ySv z($k^zDkyytN`HgW(x5?K1_lNrDD4EL4#AIACwk^_A^zXv>}wnkv%blVeMQD38(<9 zJq&9fLxmY|wTof$#L_TxVeasNwzFaFBv6?TG7EI)E{HaOw#z|mZ1@C@_9D94325z1 zba@zG0NO5#AYktSsJaUT)G-iQ?rWgcXE67m(;iUseh{#C15{lBGB)4stIr2zCx~NhowJkO*=Nau0SckSI_nPzZ7k zaz@agwP7L-@qWQBscDI&IVC}*c|Q611)$v=41t9T6CC3GoxGgmoqZgGgX2}={em4q z+g=$OI@BLwDB(0K0&3g1AF`e11|^a(rrTK}ltNa$<5uDnr8s z#si$7XadXR7N-ZN=A|$+T(}C>1oDuCLwtOEaY>9Fcm}d3pPu6k+SSD{fuS%1%ymyKfo?W00|^$u z1R<#gBvc{n5bx>l4Bj6QkW-rOnFrEP1lk$tmR|(j^aE1Zzz9|e-GBqp0NTxrv{!Bd zLtzI*m1jvRct@dMYDEc1^8|>nFKAa-Q9ynXSa1eJFeo)Wv$&+F(lxK7s1jnXvm4TO z-3bhZ3m__?u5nK-fo(&DiWGzFSb?GlrUE3hflN*w_q~@i7cea6~cA!e- zRJxVsf%pD_Bo81-LLBA`-C8t(q3{Hfq&sM*jFGY%)lk-nHEr#TAZ2(PA3Z>s!)tw0TF|gldh+>sFMXiwNum%;FA^S{qh3Phcoqfi4(aT98^~1hQ!Zx>S5| zNl_{|E$v_iRpoxc?x`gKMfvIA4VV)c3J-vV<8xDUi&INLRXoU;6A(c}wV#%lnFErz z0Ffvw&MPR&%qvNQX}AFrPfP-b^aBt(8FJ{v1ct&FU@mCmE69KkAYNKdetr>%_XEr; zN(HCN1{Mj2_}s+gjQGT);{2S_lGON;%v`Wk2V4pyl9X7S8lRb$mJc#w0$2*{dJuO8 zh+B|f4q`6=vr96HQWI0+(^E^J8<3Jgax0MKvQsPLA)81*QX9~vKs!rI!0yI*uP!Z9xe zOhXzz0njZkAX_^i%Aw{tfwtO#qjLg^xN~9w_(+2Z423gLCGra@9dmM^+CeQguqf(55%%#Dc`+%#uownjI)=JpG|HBCL)*fGS-KI#>Xt z?F5QA$f2Mz2;9m-E}|}AD05FO@kj+7?g2981~zF=f5_n~6Br5~V3UUy3_+k%Z$LQ% zo0{;Z` zi9j((X6_ z5r_I6Dg{bnXgTEsL|ri4yIAbF08ta3SX6*L12Hf##)Gy!GH^2R1~V*XbWbf|c*Nvd z0o_jv@;!KKF~cGj-^A=xXu}_R3<1Lm7EgvwR`@AG49i%(@+*r=GLy4m&4CtnNKixD zzsosXQW@5Agfl$ifE>J$3YF;L25nP^awc&HGi+f3=QD;6Ea07+&WSlWpfg1nuCsdP6_l2MlfYwE@6<}T%q}+He1>Ce z!O5UwdElb|*g`xIB1=BmkDy9#6-4? z#3H!D18mF;6UrGFc$^u|GY1qg{AUI`H7GH+fT5W+jA0Fu6YqkY$ncWYH=p4>JP;YW z*g<=Kpn=XXl>_X=*)S(A;zDyGLj$JMzA%H%e}H=GCv#~L!#Wmbh7aWoEDQ~+nHU(D z@{=7?Qi@WGiy7vyfX{C5g={lsILpq$u;2z00}I23n;^2`0Z2LWkrc;Sit~#C@{1X| z*;p7pfTbaaQ4}*gVS(qCS1c?H2Ofec)M zYjS>GW?CiG!EM|u3>!Xzlr($>DS`C284j_6S}fqWZQx*GnDCW}5gHR0Sy>o9dF0Y9<(zvFff%Cr#h8_&W2)WWdrZ0X4uBg!myzeq@tl4qyprlm2BWM z4&ZV5gN=n@LJu<|T;LNM3qwO6NYjLVkS4gXa20PL#>4r)K;bz7q+`QG5P4t{h`cZv zL_V0p%)r3xSdm)Hu!J4rykdq`?BE9d26h&P4^u&^7EA|`7iNIe7Bd`Y4`8?qQSyZy z6q_K)5350r$uDMj!JbiBoSB@M14_FL@7P%wF0275*svBv9#{t=7pw;+0Vpz}QLfQ-2fQhwns zh&*r)qzQZ=8p98c#7xMcM8ymbxEYv0IvDynAt#Z64@zU0%E`j;;XYX7GiC+`j$npH zF7N>}40E_Zv2ueev^cd0+TmeX!VT6158yrA(5eb9a){e4Ke@CR&OgEJ2}xdXk#pP( zOo)@(7^ZQ74!(HL#lo=QImj6eFPIq^SV2}_;sOWcOD@P6E(|lcVfkbpH?pHvakDTy zcmdLT;3ZOW*}%=haN!k5c*AQX;cXz{H(=qnAacPw5INyJh-~-(A}4$SksrY1g|8s? zhHoJ9z;_UN;RlF(@DoIS_yr;x{(#5{e?jDee<1P!=u}9C3FQe19~d_>n5#7!w>WFmGU-!1#bMz@Z?ZfoTEb2WE$a4}1rh zKd^1!T)=jLc>?1H<_U}!7z+Xd3K|#_J}@^hPGG#i(!g|qaRO6HFMutFfo(?tU0n%M z2iv{?UnUP)Yl*z|8?<*BnGf324BE4$Ix!!#{TaMG5ww&8v|kcr;Bp2A2GD+97$4+d z(B8@fkR)hxB?AKkXrD1MAEf^SXtOi;nktBX7$2rT4oyEYKLw-+Dv$2|>kJGG$nFQ- z&4bPT0ieyD3=9mhj1c=_e2~!~_kVzz58{K|kIVCsS_}o9A5!L-`85tO`xxWCk)1HBWL6!;Pei$ESe*%bs9R5grkozw{cgkBp z^~3leWgz#*fEY;nk@@)CAIya6{sbn7`_<6Wj{#^yJ_7^8d8qv`KFC^-{TI-}ADItw zKX{Wq0|Ub&sD2n9rr!a?Kyp7aAEe&_wBetDf#DxiKa3C32C^RYNI&QjQ;-)x=7HiLnU630Oqo%`&y5*-_$5H?-wCxJ#s}F4vcCYD z^Fe%&{m6Wf`!9eF7GPjtI1AMe%m?Y;0M#$V0ttT@AEqC46gsl~$b69g15gKnZnp&G zUl<>zA5tnq;uB;)G9RR$0W=B7z`y`H9vP$`#)s)IfR@xCK1e?@AEdtkT$(a4gh1U7 zqu=S51K1e?@AEbW)RR3hCei$F5 z9;6@Hzaag{e31SJQ2iUB`eA&Se&q5Jq#v0N(tiPT*aiaw!y%}C7$2s82U_^S_}5q% z7}VGp7y=|gDk1TMFF$={LCsIBtdRVqj#eH`038Ivz`#(>3Q12eKFAhOcq{-_G)UzE zG9Tn01JFSq3=9liQ2j7IOh4#WGvxG$%m?WYfL3tRp!#8an11MX3UDz53QuG{NdE<> z{xwkjFg{E_bUPMYKQbSr-yt64ItGRVQ2j7IOh0n|1KE$v2kBn`)qfqTAI692M^67B z{m6Wfet~3&{U4$FVSJc===M>#`;qw|{R+@ZpOFm`e{epieZs)NfLwlo>__H<^anuo z%R=?T_%QpC{R`5M%m?Y;0M%~^)eqyt^dr|lApOXEkp2&;5dVil^~3nY>NiM-=+B4h zhw)+hn;_Eg@I&U~%RgOgsQG6)8}|Hj0BS!QJ0$#Je3<>n z^n)!%%0I|_uzsk4(lGr{K1@Gyc!TUm=7aPzK=;48LiNM=#OjCb3r>XUhw)+hq0Ke0 zvqAPF^Fj8*_TP3x^~3lu{mAYG=||>+^uzY)9)jwJ@rl(B+t2$EsvpLO=|`@wLG~l_ zLH5J;{VH)m;t$4$=?CqL1SKI5AEY0d57H0Y&zlU@592p-F)*}%G(s^*KPW$f&hi2Y zf%qWvkoh3<5+|K~rr~Cz~AI692M-DHLeq=sKKWv{fGY=&GV0@T<}*AEqDKzaag{e2{+F zzVK^M{V+aEKeBxw{m6Wfe%Su;?@;|PK1@Gy`2*6A%m?X*?K79+g`^)CAEqDKy&(O_ ze2{+Fesl+@ei$F7AK5;Teq=sKKWyK6B2+(&57UpFUqJei`5^tU{q2oV{V+bU`eFOv z7eV#I_%QtsK!qn#eTvKn*$>+8z0>lToADIu*58GG&8>%112dM{@ zzo4@ak@X|oDe{V+aEKXQEqvLBfb(hu8L-vHGQ0h!}KG!w?O)l`5^rb{SfF#X8o6-YlaAEZA4YTyZ| zei$F7AGy2-=||>+^lyObe*)DH15`hQ03`ju_%Qv*?H!PQWIjlL z!bFJwC87FZe3*V@_k#2z^FjJIK=m6z^~3lu{osNNsr*OggY{2>*zXO~59P!3Bj;C; z{m6Wf{(#94{V7oWFg{E_=&D$d3J@QpADIu*?=Tf4%fL_%)eqzM2w?9IAcsH5JY+t| zyauRwrh<_8fbl{0gVHl{{sZYp=7aP>z>WA@R`U{{lmmoe!KQbSrKLB)RBk0^7 zsD2n9q#k7dCJ+NDK4AP*LCAQq0O*io1_p*oLC87EkkDaZSb)Yqg2sP`#^)D8)o+5v zk3-|Ppz#->@sFVKAENPpq46bzQSAqL8{hbol`!h~lZ!B9{0V*hTVOsUL^cRR;uppT znGXtIE8gIu?F!$`jPn{{RW_kWYBq%Q2j7INIl4Y z1tj}G`jPn{{Q;{W_WyzEhw)+hk;`Y0eq=sKzrq@bejX8s|6zQXepqn?;)C=f^FjJI zK=ms?^~3le^&s~n=TDG+WIjm$f^`u4Eui{ge3*V@`#}1U`5^rUpgY|`=Y>P{!}u`$ z$n&Ql{m6WfegYoMG z591T7Utl97{8mHt!}u`$$nFK%kIcuHfA)%?=AWY?koMhQC^uzciVyN|58yde?jDbN-l7Zm|=t2Q#_~T12 z3&l{=%Stiq>BRu*USV-ae8c!K_agVFLGDH7gZ!JY2jU?msD2n9rXRU{0qIBPgY;j3 z>NkSwhw)+hk;_Mreq=sKzrtRK{Vq`bFg{E_^85x!KQbSr{{d8g6jVQq57UqAUyy!e zK1jd7eu(`=Q2j7IOh2-FLHd#TApHqY{hd(#Fg{E_a(@z}ADIu*9{}~xY^Z)1AEqBU ze}MEO^FjI(4no|&7OEe{hv_G@e(Jy>i2glL{V+aEKXUyHvLBfbvOnN3ME_~1ei)xv z{STn}A3^oQ_%Qv*0bcVuMO1?P8c=Lppg zeq=sKzrq!W{nMcOVSJc=X!Qn9KgfKL{s&O~E1~*fe3*XZ@g$J_ z$b69ghN}?!cR=;S_%Qv*;SJJ{%m?ZJ0M&mIsvpLO=|_%lkbY!7NPoaJi2V2Xc{|wa+Q{#9hw)+hk@E{kKQbTW ze}x+m|64=#!}u`$$ngczkIV<@KLFM52h|Vb!}LRszlNtDWIn#~CqWvu{K=Pwls{T% z<+sC4i2ENv?T7JU_9LfPko%GOAonxeg6RJW)eqyt^dsjNkbY!7NWTG8Kfeql{$PBV ze&q2(kbY!7NdJO|5c`#(`eA&SenRoj@Cc&c0;(Uzhv`SoFJSv2%E9pgvcCYTKN6}R z#)s)go{s|QN9Kd{Pk`#LgzAU!VfvB73#1>J57K`Cs(&(6Ka3C4k39Yh(vQps>1TKh z@z6S`ei$F7AGv=B(vQps=@)?NKM&Op6!V^gN)k5{d_%Qt*5NU9F0qIBP<8yx(n)@e1 z-H)Ds3!wJ@gW3<{!|X?%j|SO~%m=xj;Tgn%qH+-b!}u`$$o>WCN9Kd{2SD{}LG{D< z#OhxF)$ah+597o16Uu)A&mr!QgzAU!VfvBXi_QHBQ2ixP{V+aEKXQHr=||>+{NDi8 zKLM&A#)s)g&Tk<7$b69g15o`dp!#8an0`X;7kB~j|1qe37$2rT0lKpc#0S}r%m>+D z@D`%~22?+c4^j^r??x_fK>CsSApHxV`tL&Z!}xIhAO>{22dp2757K|(9mM_*Q2j7I zNEyg}LhWA@()z9z)Vn3?_B>%wpF#X8;tw7<2%m;;^ zz%Ph?DX4xJAEuvB_!U6)8$k8L_{8eJ0M+jW)eqwntKZ-^#QiBy{V+aEKcVz{0II(Z zsvpKDR)4@Bi2XC6`eA%x^*?~>-wM?a;}fgD;4j4f%TWC=KC${4{z3G=hw6v%iPb*= zs-IU8lKxWA@R`jP8fQ2IsYgVJvTRKG1$Ka3C454sl`-c?XOY`^YNC?B?e_J$$@1Nf>3&?VLk3=ChO z^057_JW3GzVEa|Ip?ui>QF|qbe%OA{04N`}zcU-E9=2bz1u75Qe>nvz58F?<2`UfU zA9)Na58Lnf1j>i)Uu0E=xDU1;QCS({9@zdu6DS|HU(f@p9=2aE8Y&Olf0qvB!}inF zLiw=$aTB5XVf)=yK>4u!YloofVf)c8LFHll%iclxu>E3ODiHU>_J66VK->@8&*cD> zhwaabhVo(irLv*wVf&xTq4Kc(OubM(Y=6>XsCw9bp|emvZ2!+UC?B?;M^+W$9@zdI zV<;cC-^LNjhwYz9Q-%5mx<957CJ){3vKGpR?N_-C<-_)$e1P$x6`GV9#5~yk5HmH1 zdtm!L5}wDKh`LOl6=b?Pq`rEf! z(DVb{)WV?+aSv>LtQ3?FTkoo&4N(tUzv=>&hpk7Agv!I#mzF{0Ve3Vkpz^TwpL3yn z*m};LP(EyZ=2a*kw%+m^ln+}!DWn5&4{SZ89+VGT-{=nI!`3S%K>4ushm|lsbUooD zC?B>yaIFp`JYehnc0u{D^>!zreAxQAYf$~L^j!p zR zP(Exv{1=oDo8K1FgZKwFU#+PJ@egeN*8<9i&F8v9`LOxfIH-Qud`mf$51T*ff%0MV zA&a1V*!;#eC?7UoaRzEWZ2sXsR30{;@Es}-n;+oPhqxa$-Y*H|!^U6rpnTYPst1%0 z8y}5<@?qnhg-||h{BjbM4;zo%1m(lV7tcWXu<^p@P(Ez@kHY}sKG=AkDwGc!U$TMn zVdF)CP(Ez@CmqU%jpsB#`LOYs*-$=gyk$F-4;w!@59PzgL*5!d;ukhP@d?C7IzK?r zkb!}Zje!BSK2+6^fk94;fdO_esSlJ7yN|E{%7@)QI19uVXJCNcOSK!yhuu5%0Lq8m z2gPN?z#u1%xHr}S%7@)&7cT7#R4F*4GFdGcbUz1cQwSsY3a%@ex}nA2wbS0OiBhJ7z%nu=9Kx zpnTYR;VDo)Y<=KrC?B?dU@w#p>rY>W@?q=AoDpnTYT*=#5uwtiwgln)z^J`Cl<=ErV9`LOk+ z@1T6x`0;NjAGUsr+Z5s-*m^8QC?7W8V+`fP=8xQ+g&IhHlP0q%7?8dGc@?q;oI-q>mdWuC*K5RYO4k#biU%Ub3!`4eagYsePAAi93 z&rLdKeAxV-8I%uO4-y3B!`4@1Liw=q{xT>Z)_!5sC|M(1) z4;wGL2j#=YAAUgju>QQ51;o9u@j(M9A2#0Q4CTYdAL5{V*mz(OlwSZ%4?R#mY`k?2 zln-04yB5lat-sw5<-^u9o`dpX{pEX5K5YE-9h46n4`sCkpYZ}+JI<4f3p-3K>c9gXjT#*abc z=c4g@(fCWz`1{cKx6$~Y(D)p-sP0oiw;9!iTH3L*s`+ z_;CF>5I$UgBN~4Wgb!E035|aojsF0`hui-h!iSsB=LmK$+&mpLz8@Mt6OG>h;ls_J z4&lSi+k(bFiN=3`#s{6t$H>3{cb~Kqs{2gP`2G++?EFfGcnBY^zY)TR%lD)47ozdE zpz)7F_|V;E3=B6Qe7Jdc(fDuC_+QcZf6(~M&S3w+&Etgdp}P+l7=+OHifDX22p{fW zX9yo|UN{;*8;xHK;lusch{m6a#$O5H!_8lZ#y^b4zmCR#jmBqiLG?d78lNAHFOJ5S zN8_ub@eR=U7HE7kRt5%hRt5$ORt5%URt5$ZRt5&pnQv^Y3=Hh73=ABs3=EvC3=F4O z7#L2oFfg29VPH7R!oYBjg@NHb3j@Oi76yikEDQ{nSQr>CvoJ7RVPRmn%EG_^I(P0m z3j@Oq76yi!EDQ{{SQr>?voJ8+VPRmn%fi5LkA;EZJ_`fG0~Q8`hb#;Xk60KO9)n_$ zm4Shgm4ShYm4Shem4U&Qm4U&Im4U&Ym4QK%m4QKh+R|)Rt75nUez6?C#?ht_R_|q$ZW7gAIoYKrX2(*3HW= z%1zACudpzSH#5;k*p|-#zFZ(UwZs|b0_ZvIU~$mRH)!I?pwsH(5hmo)!@X#B<}<{D zofnXkSdx}sl#9*zC<<`;BRw%UH<3PJ4)z1YK6LlHrDM#LJAW0nR%Hddh`o+ zuyyDz_5@u85TBfpn3tX!l8@3urMsrKzFx6JX_2F3P0#&Fp%&>QR!J6oS2&myOIDS zCZH0aiwrR2;FcFN#Fu5JfP4eG&I^8r7{rq(wt+Gh{00t4q=2rtqGL%1whk5@pv(li z8l?yvNI{9^AP#0~#v&S=S^^e@_@NwpQ3V~-71Y9f2Hj{-H4C{(!zDE*H9fH;RRL5q zf^Ktj&q;&cd1DoeT_waEq?cWnhEQQwYR2pd^RYcMvy&^k?Q}CYF>ILEM91txIYy zit2ci-{V7sDWLF6&x4o(u@C94 zP zSd^HXT9R5+Y!%C(4NjEc+lTT>K-ZjtQ)FghPG(hVEQ3Ch%Zv3RlJiqi^%4sT^r7mD z^<7fSQgiYPQj7Fq#aXewZ(_24aD-j~v}J{)CfLOrCT(b-XQ@}5lC2N9JW<~#GpQ)C zs8Sz%+fjLbQFgJu8|b1paJcHFfm{p{)%QqEOi3*&)(71dn4gRWOGyP^1_;Y>$Wocb{soDJrK#BDk`wdbDGX#CHZ_UK$*Bb;#cr8J#U(+h#Rd7G z>xQu@Oa>>%(1Mi25>SlB7pH+E1YdB0uZ_Z?pe!@B9G>BzMJ?juTxHi+dyrBFa?3UY^qNbE$!PVuOKLIFl~nOLsflH&X!QYVizhg>1Y!{6VySp= zHUV|>BGF8SD+E~8GsG7p78R$u`-DLT zHz0#-kQf`#B-kk+0r-`WkZ~${j736hf(5^0PELL@c)$yMw|p_w<8DQ%sVJf# z4+ld>&7l5)^1v5Yf<1&Xss^gE=#rqo7Qws&zTwohs3;%O@ddLWkqB`#s9y|W!TTK$ zE~x*GmUf_N30Zq^Y6;j##HbY5;~-NZ)pH6o{Gb%7;!M!>t8@yJg3=N_lt2MBexNBG zp%)DVad0`d{}X~J|tWWeEpp$ih$aAEjJ zC_QpN+%o7y1Z=nwJ_ri(8OAs#njm_7zzhMm5MU#N^zaSLE|ioG9od64>7i*9+9rld zVHJcGeUO$ns!B*r1RoXzjZUW(r50zvMc|tAa|;rSQjx`zF@+$Bq#!4=#3>*Eo@$|1 zg2pv-(#pY=7s~C!U|opuPk8c15<z)b~uOoyOYh=}4$P%8oC2*&_VXiUNjb7+l=kb%S|R2Zrnnix<8VIwlw zYISh%z!X5r7f^MN-2hOv4zK4?bb@5y6+Waah8c=zV3ZaVK&}@@RRB&7h>NMg=DMer zAYXHEkE3$!^L0+!N!gu4Su@RbWp1hsiUA2+L;C4a}14faJ>U*EQ7NR z*tJN4NF7roQE1l_*$nJ`RU|!OnZ=n&nK_vymB`v4R=XtTCZ?xiii7WL4oWR7O)V~g zlm?Jg3(>_8@0(Zw5r!sQm^i3ZM(*Z<_%5j!H&BB;3(@0|nFqB2!iNmOg6)Uc5Df3e zBV7RvHUKUI9V7r*2JiHP0~I6!R|OY=tAT_uiXwy%wqXE}QfL%FTnlj`TBjeR3b{)U z;=}EPbPpi<;DXR{79t9FFlgxjxc?5CP((2VLk6w~Tg4A?D#&N3r7K($IJ9xd!8$jI zIXOv*poSO7A#k1G6pceCG@vkK(Go1GJo1PK$R@l49carEFp4LP^$g%-11sQA`Ua?a zVciNyM*>9`sA0`OgIRBg13;$3nl7U=&e`x8XK)mZPUs>}XoG_UlwLq{qmaHOIg_f8 zA%92_0UKEYPa)x$eL+(RsqBynZM0EmxRDTrqm!DWlbX=ER`?tX$&;FpBnxipB29VX zNUzAsMrR8Zz|&(m=8nK}qqBv`DFz%Q;31RI*}~D;!g5d>8roSxYDJ=3LH)t6N}(E62!a-aq}$Tf&*$dw4y*vrXbBFLWUpF zhVWtT2q?lj^Ak{nIRgM1kbs*7ow7#f!)jZovk+4{F#F&l2&Y1dLBa#5@L^SCk3%#= zic6@a5Fw1QROI#*NF}r|g{X%312pUcVZkC8WwH|6gbm0f0; z;-$r@kW7Lhhc;miPBpN(9vBA_WB3NQ!8I+0*${ouXvZOo9I6oYxJTac51}KCoxwvA zVj?23!pGY|LO5K6GzkJ%j*+&JI~CwK!n*KsBq3N1$aBF#9AHmjoo1WPq&C z&r5~GV`z{MDEKmSQX$(2f>H~LQj1gbO2FF&Ko*3Cdb)sIk)Kywl9*Ql;(}c2R9TV= zjz^Gydn#BQCg$##Tv(b}lnUL5g|Vs2+1;_YI6pZvu_P5-`#I*NfN97AnSlJ_OlWF! zhnnC7+QvvqCUT%5=n|79=>l2a7L{ctrv~H~l^|*IECwYmBmt21pdb&(tVqp4iVB!xLGtdY zB_64u_5W!4+*3TQfQ5>KOAA1WtT;12 z53%$Cv;w)rF}WnO43=zsGC@<{U~#B*A)vh)X{kj{mEafxSpo`ps4Tb`a)Dh7(( zpw!~jqB2-|c1O4#i*ezJMFrTCVi?p!pUk{$h#x_@0G>1$;+>IIfZA~RxtV#1IsT<3 z1*MQ_BWUaeq!wj@HbJ6jfI6EY-qRmqdO%KTx+f%j(h`$X-SUf|X%D0X>K2Gf&%CsJ zM7af$_AE&)N-W7Q@=FD^t3CaF6N^hyiy(>C(?2LRJ+ru^sM0mBq^J^NgtHrBg9XR{ zs8yiWZDL7sMrK|*RHPV5))y+p5bqc4SWp0^yfaInElx;D2oi?&ErLq(eDd=PK*<#( z3fg}FNnaol$DAAprx+v`oSKuGT#{b|+F}VS{``U=tbnBa#G({X#RF0qm0AQ#$0$po z!ESrWQG((4;&e zD?!jiK?8soMuP-BOHy+&Bw%5VW(ed20u0su1*v)NKJX40x+btJxCnCtom^0Yp+5kW zuE4Q@Aq9y`OkwC+X*8>lx9(u*0qqaN5QMaPpu)&Ka%}OADvuHvs8UE)p-RB4iwEtR zD+wsdPtQxt1uff&cXo4z){KzU>70{TTpW~|mRgjWmkd^so0?mkS`wd}0a`R0UtE%y zoDJf{rzK|QFvQ0riKLe%7J*g^$Cnl76%=LWm85|bGQ`K{CuJqar{)%vRK_PKCTFBF z#3v>dGsGw5=a&?h6eSkKgVu*J#3zII;(-=Nq-28jXyoLB);y;brGi)6I_IQ<*7v68 zfNGe$lGOCnqB2mE(jBzS7P5pr+u02~j0-9}pqZ8-J~uHr17u%*PH9PMJZPa8R1CyS zN-R!|&&*59XNZURlL6w`+~V}$)Vvf_UT|qaYLOADSbT9wQECZjOM5v(d_hS@QEFle zXcKpFL27blT4pjrFgvv}98n23;-ZDhRXl| literal 0 HcmV?d00001 diff --git a/external/glfw3/lib/libglfw.3.dylib b/external/glfw3/lib/libglfw.3.dylib new file mode 120000 index 000000000..cd20112e3 --- /dev/null +++ b/external/glfw3/lib/libglfw.3.dylib @@ -0,0 +1 @@ +libglfw.3.0.dylib \ No newline at end of file diff --git a/external/glfw3/lib/libglfw.dylib b/external/glfw3/lib/libglfw.dylib new file mode 120000 index 000000000..d4bd51e18 --- /dev/null +++ b/external/glfw3/lib/libglfw.dylib @@ -0,0 +1 @@ +libglfw.3.dylib \ No newline at end of file diff --git a/external/glfw3/lib/pkgconfig/glfw3.pc b/external/glfw3/lib/pkgconfig/glfw3.pc new file mode 100644 index 000000000..f5252b35d --- /dev/null +++ b/external/glfw3/lib/pkgconfig/glfw3.pc @@ -0,0 +1,13 @@ +prefix=/Users/ratalaika/Repositories/external/glfw3/lib +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: GLFW +Description: A portable library for OpenGL, window and input +Version: 3.0.4 +URL: http://www.glfw.org/ +Requires.private: +Libs: -L${libdir} -lglfw +Libs.private: -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework CoreVideo +Cflags: -I${includedir} diff --git a/src/makefile b/src/makefile index 0c078e865..780aa16b6 100644 --- a/src/makefile +++ b/src/makefile @@ -24,8 +24,8 @@ #************************************************************************************************** # define raylib platform (by default, compile for RPI) -# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX -PLATFORM ?= PLATFORM_RPI +# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX +PLATFORM ?= PLATFORM_DESKTOP_OSX # define raylib graphics api depending on selected platform ifeq ($(PLATFORM),PLATFORM_RPI) @@ -57,7 +57,7 @@ endif ifeq ($(PLATFORM),PLATFORM_RPI) INCLUDES = -I. -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads else - INCLUDES = -I. + INCLUDES = -I. -I../external/glfw3/include/ -I../external/openal_soft/include/ endif # define all object files required @@ -123,9 +123,13 @@ else ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) find . -type f -executable -delete rm -f *.o libraylib.a +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + rm -f *.o libraylib.a else del *.o libraylib.a endif +endif endif @echo Cleaning done diff --git a/src/rlgl.c b/src/rlgl.c index 8f1a66a89..865281a36 100644 --- a/src/rlgl.c +++ b/src/rlgl.c @@ -32,13 +32,23 @@ #include // Declares malloc() and free() for memory management, rand() #if defined(GRAPHICS_API_OPENGL_11) - #include // Basic OpenGL include + #ifdef __APPLE__ + #include + #include + #include + #else + #include // Basic OpenGL include + #endif #endif #if defined(GRAPHICS_API_OPENGL_33) #define GLEW_STATIC - #include // Extensions loading lib - //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW + #ifdef __APPLE__ + #include + #else + #include // Extensions loading lib + //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW + #endif #endif #if defined(GRAPHICS_API_OPENGL_ES2) diff --git a/src/utils.c b/src/utils.c index b51121116..26a44065b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -40,7 +40,7 @@ #include // Used for functions with variable number of parameters (TraceLog()) //#include // String management functions: strlen(), strrchr(), strcmp() -#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) +#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" // Create PNG file #endif @@ -107,7 +107,7 @@ unsigned char *DecompressData(const unsigned char *data, unsigned long compSize, return pUncomp; } -#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) +#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) // Creates a bitmap (BMP) file from an array of pixel data // NOTE: This function is not explicitly available to raylib users void WriteBitmap(const char *fileName, unsigned char *imgData, int width, int height)