summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeInstallation.cmake58
-rw-r--r--CMakeLists.txt295
-rw-r--r--MANIFEST21
-rw-r--r--README.txt2
-rwxr-xr-xbin/cmakehdf567
-rwxr-xr-xbin/h5vers47
-rwxr-xr-xbin/snapshot4
-rw-r--r--c++/examples/Makefile.am5
-rw-r--r--c++/examples/Makefile.in5
-rw-r--r--c++/src/H5File.cpp31
-rw-r--r--c++/src/Makefile.in2
-rw-r--r--c++/src/cpp_doc_config2
-rw-r--r--config/cmake/ConfigureChecks.cmake39
-rw-r--r--config/cmake/H5pubconf.h.in35
-rw-r--r--config/cmake/HDF518_Examples.cmake.in4
-rw-r--r--config/cmake/HDFCompilerFlags.cmake274
-rw-r--r--config/cmake/hdf5-config.cmake.in20
-rw-r--r--config/cmake/libhdf5.settings.cmake.in10
-rwxr-xr-xconfig/cmake/scripts/CTestScript.cmake282
-rwxr-xr-xconfig/cmake/scripts/HDF518config.cmake172
-rw-r--r--config/gnu-flags258
-rw-r--r--config/lt_vers.am2
-rwxr-xr-xconfigure43
-rw-r--r--configure.ac23
-rw-r--r--fortran/examples/Makefile.am1
-rw-r--r--fortran/examples/Makefile.in1
-rw-r--r--fortran/src/H5Zf.c2
-rw-r--r--fortran/src/H5_f.c5
-rw-r--r--fortran/src/H5f90global.f903
-rw-r--r--fortran/src/Makefile.in2
-rw-r--r--hl/c++/examples/Makefile.am1
-rw-r--r--hl/c++/examples/Makefile.in1
-rw-r--r--hl/c++/src/Makefile.in2
-rw-r--r--hl/fortran/examples/Makefile.am1
-rw-r--r--hl/fortran/examples/Makefile.in1
-rw-r--r--hl/fortran/src/Makefile.in2
-rw-r--r--hl/src/Makefile.in2
-rw-r--r--release_docs/INSTALL_CMake.txt272
-rw-r--r--release_docs/INSTALL_Cygwin.txt8
-rw-r--r--release_docs/INSTALL_parallel57
-rw-r--r--release_docs/RELEASE.txt19
-rw-r--r--release_docs/USING_HDF5_CMake.txt4
-rw-r--r--src/CMakeLists.txt12
-rw-r--r--src/H5A.c26
-rw-r--r--src/H5AC.c2
-rw-r--r--src/H5ACprivate.h51
-rw-r--r--src/H5Abtree2.c132
-rw-r--r--src/H5Adense.c4
-rw-r--r--src/H5Aint.c326
-rw-r--r--src/H5Apkg.h10
-rw-r--r--src/H5B.c110
-rw-r--r--src/H5B2.c78
-rw-r--r--src/H5B2cache.c40
-rw-r--r--src/H5B2dbg.c31
-rw-r--r--src/H5B2hdr.c94
-rw-r--r--src/H5B2int.c536
-rw-r--r--src/H5B2pkg.h86
-rw-r--r--src/H5B2stat.c2
-rw-r--r--src/H5B2test.c110
-rw-r--r--src/H5Bcache.c7
-rw-r--r--src/H5Bdbg.c8
-rw-r--r--src/H5Bpkg.h4
-rw-r--r--src/H5Bprivate.h1
-rw-r--r--src/H5C.c385
-rw-r--r--src/H5Cpkg.h34
-rw-r--r--src/H5Cprivate.h52
-rw-r--r--src/H5Dbtree.c288
-rw-r--r--src/H5Dchunk.c1262
-rw-r--r--src/H5Dcompact.c17
-rw-r--r--src/H5Dcontig.c43
-rw-r--r--src/H5Ddeprec.c75
-rw-r--r--src/H5Defl.c19
-rw-r--r--src/H5Dint.c118
-rw-r--r--src/H5Dio.c15
-rw-r--r--src/H5Dmpio.c21
-rw-r--r--src/H5Dpkg.h47
-rw-r--r--src/H5Dprivate.h2
-rw-r--r--src/H5EA.c14
-rw-r--r--src/H5EAcache.c26
-rw-r--r--src/H5EAdbg.c30
-rw-r--r--src/H5EAhdr.c66
-rw-r--r--src/H5EApkg.h21
-rw-r--r--src/H5F.c12
-rw-r--r--src/H5FA.c20
-rw-r--r--src/H5FAcache.c15
-rw-r--r--src/H5FAdbg.c10
-rw-r--r--src/H5FAdblock.c32
-rw-r--r--src/H5FAhdr.c66
-rw-r--r--src/H5FApkg.h14
-rw-r--r--src/H5FD.c59
-rw-r--r--src/H5FDcore.c4
-rw-r--r--src/H5FDdirect.c2
-rw-r--r--src/H5FDfamily.c42
-rw-r--r--src/H5FDlog.c2
-rw-r--r--src/H5FDmulti.c47
-rw-r--r--src/H5FDprivate.h4
-rw-r--r--src/H5FDsec2.c2
-rw-r--r--src/H5FS.c24
-rw-r--r--src/H5FScache.c18
-rw-r--r--src/H5FSpkg.h4
-rw-r--r--src/H5Faccum.c14
-rw-r--r--src/H5Fdeprec.c2
-rw-r--r--src/H5Fint.c4
-rw-r--r--src/H5Fio.c3
-rw-r--r--src/H5Fpkg.h8
-rw-r--r--src/H5Fprivate.h7
-rw-r--r--src/H5Fpublic.h6
-rw-r--r--src/H5Fsuper.c48
-rw-r--r--src/H5Fsuper_cache.c45
-rw-r--r--src/H5Gcache.c16
-rw-r--r--src/H5Gdeprec.c2
-rw-r--r--src/H5Glink.c2
-rw-r--r--src/H5HFcache.c950
-rw-r--r--src/H5HFdbg.c6
-rw-r--r--src/H5HFdblock.c4
-rw-r--r--src/H5HFdtable.c4
-rw-r--r--src/H5HFhdr.c2
-rw-r--r--src/H5HFhuge.c6
-rw-r--r--src/H5HLcache.c47
-rw-r--r--src/H5HLpkg.h6
-rw-r--r--src/H5I.c71
-rw-r--r--src/H5MF.c2
-rw-r--r--src/H5O.c4
-rw-r--r--src/H5Oattr.c2
-rw-r--r--src/H5Ocache.c90
-rw-r--r--src/H5Ofill.c2
-rw-r--r--src/H5Omessage.c46
-rw-r--r--src/H5Oprivate.h4
-rw-r--r--src/H5PL.c3
-rw-r--r--src/H5Pencdec.c4
-rw-r--r--src/H5Pgcpl.c2
-rw-r--r--src/H5Rpublic.h2
-rw-r--r--src/H5S.c11
-rw-r--r--src/H5SMcache.c35
-rw-r--r--src/H5Shyper.c20
-rw-r--r--src/H5Smpio.c6
-rw-r--r--src/H5Sselect.c4
-rw-r--r--src/H5T.c170
-rw-r--r--src/H5Tarray.c2
-rw-r--r--src/H5Tconv.c18
-rw-r--r--src/H5Tfloat.c2
-rw-r--r--src/H5Tnative.c6
-rw-r--r--src/H5VM.c180
-rw-r--r--src/H5VMprivate.h35
-rw-r--r--src/H5Zdeflate.c6
-rw-r--r--src/H5Znbit.c2
-rw-r--r--src/H5Zscaleoffset.c2
-rw-r--r--src/H5Zszip.c12
-rw-r--r--src/H5detect.c303
-rw-r--r--src/H5private.h7
-rw-r--r--src/H5public.h4
-rw-r--r--src/H5trace.c4
-rw-r--r--src/Makefile.in2
-rw-r--r--src/libhdf5.settings.in2
-rw-r--r--test/cache.c1342
-rw-r--r--test/cache_api.c58
-rw-r--r--test/cache_common.c122
-rw-r--r--test/cache_common.h36
-rw-r--r--test/cache_tagging.c61
-rw-r--r--test/earray.c1
-rw-r--r--test/links.c4
-rw-r--r--test/th5o.c4
-rw-r--r--testpar/t_cache.c367
-rw-r--r--tools/h5repack/CMakeTests.cmake4
-rw-r--r--tools/misc/h5debug.c45
165 files changed, 5484 insertions, 5474 deletions
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 0380adc..74bf85f 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -139,7 +139,7 @@ configure_file (
)
install (
FILES ${HDF5_BINARY_DIR}/libhdf5.settings
- DESTINATION ${HDF5_INSTALL_CMAKE_DIR}
+ DESTINATION ${HDF5_INSTALL_LIB_DIR}
COMPONENT libraries
)
@@ -466,10 +466,22 @@ The HDF5 data model, file format, API, library, and tools are open and distribut
if (HDF5_PACKAGE_EXTLIBS)
if (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
if (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
- set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;ALL;/")
+ if (WIN32)
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;ALL;/")
+ else (WIN32)
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;libraries;/")
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;headers;/")
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;configinstall;/")
+ endif (WIN32)
endif (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
if (SZIP_FOUND AND SZIP_USE_EXTERNAL)
- set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;ALL;/")
+ if (WIN32)
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;ALL;/")
+ else (WIN32)
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;libraries;/")
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;headers;/")
+ set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;configinstall;/")
+ endif (WIN32)
endif (SZIP_FOUND AND SZIP_USE_EXTERNAL)
endif (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
endif (HDF5_PACKAGE_EXTLIBS)
@@ -592,24 +604,28 @@ The HDF5 data model, file format, API, library, and tools are open and distribut
GROUP Applications
INSTALL_TYPES Full Developer User
)
- CPACK_ADD_COMPONENT (hlcpplibraries
- DISPLAY_NAME "HDF5 HL C++ Libraries"
- DEPENDS hllibraries
- GROUP Runtime
- INSTALL_TYPES Full Developer User
- )
- CPACK_ADD_COMPONENT (hlcppheaders
- DISPLAY_NAME "HDF5 HL C++ Headers"
- DEPENDS hlcpplibraries
- GROUP Development
- INSTALL_TYPES Full Developer
- )
- CPACK_ADD_COMPONENT (hlfortlibraries
- DISPLAY_NAME "HDF5 HL Fortran Libraries"
- DEPENDS fortlibraries
- GROUP Runtime
- INSTALL_TYPES Full Developer User
- )
+ if (HDF5_BUILD_CPP_LIB)
+ CPACK_ADD_COMPONENT (hlcpplibraries
+ DISPLAY_NAME "HDF5 HL C++ Libraries"
+ DEPENDS hllibraries
+ GROUP Runtime
+ INSTALL_TYPES Full Developer User
+ )
+ CPACK_ADD_COMPONENT (hlcppheaders
+ DISPLAY_NAME "HDF5 HL C++ Headers"
+ DEPENDS hlcpplibraries
+ GROUP Development
+ INSTALL_TYPES Full Developer
+ )
+ endif (HDF5_BUILD_CPP_LIB)
+ if (HDF5_BUILD_FORTRAN)
+ CPACK_ADD_COMPONENT (hlfortlibraries
+ DISPLAY_NAME "HDF5 HL Fortran Libraries"
+ DEPENDS fortlibraries
+ GROUP Runtime
+ INSTALL_TYPES Full Developer User
+ )
+ endif (HDF5_BUILD_FORTRAN)
endif (HDF5_BUILD_HL_LIB)
endif (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a6994ef..33b4bca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,24 @@ PROJECT (HDF5 C CXX)
# set CMAKE_INSTALL_PREFIX to the required install path.
# Make install can be used to install all components for system-wide use.
#
+if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
+ MESSAGE(FATAL_ERROR "\nERROR! ${PROJECT_NAME} DOES NOT SUPPORT IN SOURCE BUILDS!\n"
+ "CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
+ " == CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}\n"
+ "NEXT STEPS:\n"
+ "(1) Delete the CMakeCache.txt file and the CMakeFiles/ directory\n"
+ " under the source directory for ${PROJECT_NAME}, otherwise you\n"
+ " will not be able to configure ${PROJECT_NAME} correctly!\n"
+ " * For example, on linux machines do:\n"
+ " $ rm -r CMakeCache.txt CMakeFiles/\n"
+ "(2) Create a different directory and configure ${PROJECT_NAME} in that directory.\n"
+ " * For example, on linux machines do:\n"
+ " $ mkdir MY_BUILD\n"
+ " $ cd MY_BUILD\n"
+ " $ cmake [OPTIONS] ..\n"
+ )
+endif ()
+
#-----------------------------------------------------------------------------
# Instructions for use : Sub-Project Build
#
@@ -29,7 +47,7 @@ PROJECT (HDF5 C CXX)
# dependencies to this variable so that external projects pick them up
#
# HDF5_EXTERNAL_LIB_PREFIX :
-# If the parent project needs to install hdf libraries, but avoid
+# If the parent project needs to install hdf libraries, but avoid
# name conflicts with system versions, then a prefix may be added
# to ensure that the correct versions configured are used.
#
@@ -53,8 +71,8 @@ PROJECT (HDF5 C CXX)
# # Setup all necessary overrides for zlib so that HDF5 uses our
# # internally compiled zlib rather than any other version
# if (HDF5_ENABLE_Z_LIB_SUPPORT)
-# # We must tell the main HDF5 library that it depends on our zlib
-# set (HDF5_LIB_DEPENDENCIES vtkzlib)
+# # We must tell the main HDF5 library that it depends on our zlib
+# set (HDF5_LIB_DEPENDENCIES vtkzlib)
# # Override the zlib header file
# if (VTK_USE_SYSTEM_ZLIB)
# set (H5_ZLIB_HEADER "zlib.h")
@@ -65,7 +83,7 @@ PROJECT (HDF5 C CXX)
# set (ZLIB_LIBRARIES vtkzlib)
# endif (VTK_USE_SYSTEM_ZLIB)
# endif (HDF5_ENABLE_Z_LIB_SUPPORT)
-#
+#
# # Add the sub project
# add_subdirectory (Utilities/hdf5-1.8)
#-----------------------------------------------------------------------------
@@ -246,7 +264,7 @@ endif (NOT HDF5_EXTERNALLY_CONFIGURED)
#-----------------------------------------------------------------------------
# Targets built within this project are exported at Install time for use
-# by other projects using FindHDF5.
+# by other projects using FindHDF5.
#-----------------------------------------------------------------------------
if (NOT HDF5_EXPORTED_TARGETS)
set (HDF5_EXPORTED_TARGETS "hdf5-targets")
@@ -304,7 +322,7 @@ option (HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" O
if (HDF5_ENABLE_COVERAGE)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
- set (LDFLAGS "${LDFLAGS} -fprofile-arcs -ftest-coverage")
+ set (LDFLAGS "${LDFLAGS} -fprofile-arcs -ftest-coverage")
endif (HDF5_ENABLE_COVERAGE)
#-----------------------------------------------------------------------------
@@ -313,7 +331,7 @@ endif (HDF5_ENABLE_COVERAGE)
# option (HDF5_ENABLE_USING_DMALLOC "Indicate that dmalloc is used" OFF)
# if (HDF5_ENABLE_USING_DMALLOC)
# find_package (DMALLOC)
-# set (H5_HAVE_DMALLOC DMALLOC_FOUND)
+# set (H5_HAVE_DMALLOC DMALLOC_FOUND)
# endif (HDF5_ENABLE_USING_DMALLOC)
#-----------------------------------------------------------------------------
@@ -321,7 +339,7 @@ endif (HDF5_ENABLE_COVERAGE)
#-----------------------------------------------------------------------------
option (HDF5_ENABLE_USING_MEMCHECKER "Indicate that a memory checker is used" OFF)
if (HDF5_ENABLE_USING_MEMCHECKER)
- set (H5_USING_MEMCHECKER 1)
+ set (H5_USING_MEMCHECKER 1)
endif (HDF5_ENABLE_USING_MEMCHECKER)
#-----------------------------------------------------------------------------
@@ -329,9 +347,9 @@ endif (HDF5_ENABLE_USING_MEMCHECKER)
#-----------------------------------------------------------------------------
option (HDF5_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols" ON)
if (HDF5_ENABLE_DEPRECATED_SYMBOLS)
- set (H5_NO_DEPRECATED_SYMBOLS 0)
+ set (H5_NO_DEPRECATED_SYMBOLS 0)
else (HDF5_ENABLE_DEPRECATED_SYMBOLS)
- set (H5_NO_DEPRECATED_SYMBOLS 1)
+ set (H5_NO_DEPRECATED_SYMBOLS 1)
endif (HDF5_ENABLE_DEPRECATED_SYMBOLS)
#-----------------------------------------------------------------------------
@@ -395,24 +413,6 @@ else (CMAKE_BUILD_TYPE MATCHES Debug)
endif (CMAKE_BUILD_TYPE MATCHES Debug)
#-----------------------------------------------------------------------------
-# Compiler specific flags : Shouldn't there be compiler tests for these
-#-----------------------------------------------------------------------------
-if (CMAKE_COMPILER_IS_GNUCC)
- if (CMAKE_BUILD_TYPE MATCHES Debug)
- set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -finline-functions -fno-common")
- else (CMAKE_BUILD_TYPE MATCHES Debug)
- set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -fomit-frame-pointer -finline-functions -fno-common")
- endif (CMAKE_BUILD_TYPE MATCHES Debug)
-endif (CMAKE_COMPILER_IS_GNUCC)
-if (CMAKE_COMPILER_IS_GNUCXX)
- if (CMAKE_BUILD_TYPE MATCHES Debug)
- set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS} -finline-functions -fno-common")
- else (CMAKE_BUILD_TYPE MATCHES Debug)
- set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS} -fomit-frame-pointer -finline-functions -fno-common")
- endif (CMAKE_BUILD_TYPE MATCHES Debug)
-endif (CMAKE_COMPILER_IS_GNUCXX)
-
-#-----------------------------------------------------------------------------
# Option to embed library info into executables
#-----------------------------------------------------------------------------
option (HDF5_ENABLE_EMBEDDED_LIBINFO "embed library info into executables" ON)
@@ -420,210 +420,7 @@ if (HDF5_ENABLE_EMBEDDED_LIBINFO)
set (H5_HAVE_EMBEDDED_LIBINFO 1)
endif (HDF5_ENABLE_EMBEDDED_LIBINFO)
-#-----------------------------------------------------------------------------
-# Option to allow the user to disable compiler warnings
-#-----------------------------------------------------------------------------
-option (HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
-if (HDF5_DISABLE_COMPILER_WARNINGS)
- # MSVC uses /w to suppress warnings. It also complains if another
- # warning level is given, so remove it.
- if (MSVC)
- set (HDF5_WARNINGS_BLOCKED 1)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /w")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w")
- endif (MSVC)
- if (WIN32)
- add_definitions (-D_CRT_SECURE_NO_WARNINGS)
- endif (WIN32)
- # Borland uses -w- to suppress warnings.
- if (BORLAND)
- set (HDF5_WARNINGS_BLOCKED 1)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
- endif (BORLAND)
-
- # Most compilers use -w to suppress warnings.
- if (NOT HDF5_WARNINGS_BLOCKED)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
- endif (NOT HDF5_WARNINGS_BLOCKED)
-endif (HDF5_DISABLE_COMPILER_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# CDash is configured to only allow 3000 warnings, so
-# break into groups (from the config/gnu-flags file)
-#-----------------------------------------------------------------------------
-if (NOT MSVC)
- if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline")
- else (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -erroff=%none -DBSD_COMP")
- endif (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
- # Append warning flags
- # Don't use the '-Wtraditional' flag, we're way past having K&R C code
- # set (H5_CFLAGS "${H5_CFLAGS} -Wtraditional")
- # Don't use the '-Wtraditional-conversion' flag, there's too many warnings
- # from GCC's assert macro
- # set (H5_CFLAGS "${H5_CFLAGS} -Wtraditional-conversion")
-
- # Append warning flags from gcc-3* case
- # (don't use -Wpadded flag for normal builds, many of the warnings its
- # issuing can't be fixed and they are making it hard to detect other,
- # more important warnings)
- #set (H5_CFLAGS "${H5_CFLAGS} -Wfloat-equal -Wmissing-format-attribute -Wpadded")
- set (H5_CFLAGS1 "${H5_CFLAGS1} -Wfloat-equal -Wmissing-format-attribute")
-
- # Append warning flags from gcc-3.2* case
- set (H5_CFLAGS1 "${H5_CFLAGS1} -Wmissing-noreturn -Wpacked -Wdisabled-optimization")
-
- # Enable more format checking flags, beyond the basic -Wformat included
- # in -Wall
- set (H5_CFLAGS1 "${H5_CFLAGS1} -Wformat=2")
-
- # The "unreachable code" warning appears to be reliable now...
- # (this warning was removed in gcc 4.5+)
- #set (H5_CFLAGS "${H5_CFLAGS} -Wunreachable-code")
-
- # Append warning flags from gcc-3.3* case
- set (H5_CFLAGS1 "${H5_CFLAGS1} -Wendif-labels")
-
- # Append warning flags from gcc-3.4* case
- set (H5_CFLAGS2 "${H5_CFLAGS2} -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch")
-
- # Append more extra warning flags that only gcc4.0+ know about
- set (H5_CFLAGS2 "${H5_CFLAGS2} -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros")
-
- # Append more extra warning flags that only gcc 4.1+ know about
- set (H5_CFLAGS3 "${H5_CFLAGS3} -Wunsafe-loop-optimizations -Wc++-compat")
-
- # Append more extra warning flags that only gcc 4.2+ know about
- set (H5_CFLAGS3 "${H5_CFLAGS3} -Wstrict-overflow")
-
- # Append more extra warning flags that only gcc 4.3+ know about
- #
- # Technically, variable-length arrays are part of the C99 standard, but
- # we should approach them a bit cautiously... -QAK
- set (H5_CFLAGS3 "${H5_CFLAGS3} -Wlogical-op -Wlarger-than=2048 -Wvla")
-
- # Append more extra warning flags that only gcc 4.4+ know about
- set (H5_CFLAGS4 "${H5_CFLAGS4} -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat")
-
- # Append more extra warning flags that only gcc 4.5+ know about
- set (H5_CFLAGS4 "${H5_CFLAGS4} -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants")
-
- # Append more extra warning flags that only gcc 4.6+ know about
- set (H5_CFLAGS5 "${H5_CFLAGS5} -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines")
-
- # Append more extra warning flags that only gcc 4.7+ know about
- set (H5_CFLAGS5 "${H5_CFLAGS5} -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn")
-endif (NOT MSVC)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable all warnings
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_ALL_WARNINGS "Enable all warnings" OFF)
-if (HDF5_ENABLE_ALL_WARNINGS)
- if (MSVC)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall")
- else (MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic ${H5_CFLAGS1} ${H5_CFLAGS2} ${H5_CFLAGS3} ${H5_CFLAGS4}")
- endif (MSVC)
-endif (HDF5_ENABLE_ALL_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPZERO_WARNINGS "Enable group zero warnings" OFF)
-if (HDF5_ENABLE_GROUPZERO_WARNINGS)
- if (MSVC)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W1")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W1")
- else (MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic")
- endif (MSVC)
-endif (HDF5_ENABLE_GROUPZERO_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPONE_WARNINGS "Enable group one warnings" OFF)
-if (HDF5_ENABLE_GROUPONE_WARNINGS)
- if (MSVC)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W2")
- else (MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS1}")
- endif (MSVC)
-endif (HDF5_ENABLE_GROUPONE_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPTWO_WARNINGS "Enable group two warnings" OFF)
-if (HDF5_ENABLE_GROUPTWO_WARNINGS)
- if (MSVC)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
- else (MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS2}")
- endif (MSVC)
-endif (HDF5_ENABLE_GROUPTWO_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPTHREE_WARNINGS "Enable group three warnings" OFF)
-if (HDF5_ENABLE_GROUPTHREE_WARNINGS)
- if (MSVC)
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
- string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
- else (MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS3}")
- endif (MSVC)
-endif (HDF5_ENABLE_GROUPTHREE_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPFOUR_WARNINGS "Enable group four warnings" OFF)
-if (HDF5_ENABLE_GROUPFOUR_WARNINGS)
- if (NOT MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS4}")
- endif (NOT MSVC)
-endif (HDF5_ENABLE_GROUPFOUR_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# Option to allow the user to enable warnings by groups
-#-----------------------------------------------------------------------------
-option (HDF5_ENABLE_GROUPFIVE_WARNINGS "Enable group five warnings" OFF)
-if (HDF5_ENABLE_GROUPFIVE_WARNINGS)
- if (NOT MSVC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS5}")
- endif (NOT MSVC)
-endif (HDF5_ENABLE_GROUPFIVE_WARNINGS)
-
-#-----------------------------------------------------------------------------
-# This is in here to help some of the GCC based IDES like Eclipse
-# and code blocks parse the compiler errors and warnings better.
-#-----------------------------------------------------------------------------
-if (CMAKE_COMPILER_IS_GNUCC)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
-endif (CMAKE_COMPILER_IS_GNUCC)
-if (CMAKE_COMPILER_IS_GNUCXX)
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
-endif (CMAKE_COMPILER_IS_GNUCXX)
+include (${HDF_RESOURCES_DIR}/HDFCompilerFlags.cmake)
#-----------------------------------------------------------------------------
# All libs/tests/examples need the main include directories
@@ -700,7 +497,7 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED)
if (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
PACKAGE_ZLIB_LIBRARY (${HDF5_ALLOW_EXTERNAL_SUPPORT})
endif (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
-
+
if (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
PACKAGE_SZIP_LIBRARY (${HDF5_ALLOW_EXTERNAL_SUPPORT})
endif (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
@@ -708,7 +505,7 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED)
endif (NOT HDF5_EXTERNALLY_CONFIGURED)
#-----------------------------------------------------------------------------
# Option to use threadsafe
-# Note: Currently CMake only allows configuring of threadsafe on
+# Note: Currently CMake only allows configuring of threadsafe on
# non-Cygwin WINDOWS.
#-----------------------------------------------------------------------------
if (WIN32)
@@ -742,7 +539,7 @@ endif (WIN32)
# -----------------------------------------------------------------------
# wrapper script variables
-#
+#
#set (CFLAGS "${C_DEFINES}")
#set (CXXFLAGS "${CXX_DEFINES}")
@@ -763,7 +560,7 @@ endif (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT
#-----------------------------------------------------------------------------
# Dashboard and Testing Settings
#-----------------------------------------------------------------------------
-option (BUILD_TESTING "Build HDF5 Unit Testing" OFF)
+option (BUILD_TESTING "Build HDF5 Unit Testing" ON)
if (BUILD_TESTING)
set (DART_TESTING_TIMEOUT 1200
CACHE INTEGER
@@ -789,12 +586,22 @@ if (BUILD_TESTING)
option (HDF5_TEST_FHEAP_VFD "Execute tests with different VFDs" ON)
mark_as_advanced (HDF5_TEST_FHEAP_VFD)
endif (HDF5_TEST_VFD)
-
+
include (${HDF5_SOURCE_DIR}/CTestConfig.cmake)
configure_file (${HDF_RESOURCES_DIR}/CTestCustom.cmake ${HDF5_BINARY_DIR}/CTestCustom.ctest @ONLY)
endif (BUILD_TESTING)
#-----------------------------------------------------------------------------
+# Option to build HDF5 Tools
+#-----------------------------------------------------------------------------
+if (EXISTS "${HDF5_SOURCE_DIR}/tools" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/tools")
+ option (HDF5_BUILD_TOOLS "Build HDF5 Tools" ON)
+ if (HDF5_BUILD_TOOLS)
+ add_subdirectory (${HDF5_SOURCE_DIR}/tools ${PROJECT_BINARY_DIR}/tools)
+ endif (HDF5_BUILD_TOOLS)
+endif (EXISTS "${HDF5_SOURCE_DIR}/tools" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/tools")
+
+#-----------------------------------------------------------------------------
# Option to build examples
#-----------------------------------------------------------------------------
if (EXISTS "${HDF5_SOURCE_DIR}/examples" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/examples")
@@ -839,7 +646,7 @@ if (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/for
# -----------------------------------------------------------------------
# wrapper script variables
- #
+ #
# set (FCFLAGS "${Fortran_DEFINES}")
add_subdirectory (${HDF5_SOURCE_DIR}/fortran ${PROJECT_BINARY_DIR}/fortran)
@@ -876,17 +683,7 @@ if (EXISTS "${HDF5_SOURCE_DIR}/c++" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/c++")
endif (EXISTS "${HDF5_SOURCE_DIR}/c++" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/c++")
#-----------------------------------------------------------------------------
-# Option to build HDF5 Tools
-#-----------------------------------------------------------------------------
-if (EXISTS "${HDF5_SOURCE_DIR}/tools" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/tools")
- option (HDF5_BUILD_TOOLS "Build HDF5 Tools" ON)
- if (HDF5_BUILD_TOOLS)
- add_subdirectory (${HDF5_SOURCE_DIR}/tools ${PROJECT_BINARY_DIR}/tools)
- endif (HDF5_BUILD_TOOLS)
-endif (EXISTS "${HDF5_SOURCE_DIR}/tools" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/tools")
-
-#-----------------------------------------------------------------------------
-# Check if Fortran's default real is double precision. If it is and HL is
+# Check if Fortran's default real is double precision. If it is and HL is
# being built then configure should fail due to bug HDFFV-889.
#-----------------------------------------------------------------------------
if (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB )
diff --git a/MANIFEST b/MANIFEST
index c20bae0..83d8310 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -13,7 +13,7 @@
# access to either file, you may request a copy from help@hdfgroup.org.
#
#------------------------------------------------------------------------------
-# This is the list of files that are part of HDF5 source distribution.
+# This is the list of files that are part of HDF5 source distribution.
# All files have a `./' prefix and appear in lexicographic order.
# Lines that end with _DO_NOT_DISTRIBUTE_ will not be included in a
# release. Blank lines and comments are ignored. Comments must start
@@ -582,7 +582,7 @@
./src/H5Bdbg.c
./src/H5Bpkg.h
./src/H5Bprivate.h
-./src/H5Bpublic.h
+./src/H5Bpublic.h
./src/H5B2.c
./src/H5B2cache.c
./src/H5B2dbg.c
@@ -590,7 +590,7 @@
./src/H5B2int.c
./src/H5B2pkg.h
./src/H5B2private.h
-./src/H5B2public.h
+./src/H5B2public.h
./src/H5B2stat.c
./src/H5B2test.c
./src/H5C.c
@@ -745,7 +745,7 @@
./src/H5HFman.c
./src/H5HFpkg.h
./src/H5HFprivate.h
-./src/H5HFpublic.h
+./src/H5HFpublic.h
./src/H5HFsection.c
./src/H5HFspace.c
./src/H5HFstat.c
@@ -1438,8 +1438,8 @@
./tools/testfiles/tattrintsize.ddl
./tools/testfiles/tattrintsize.h5
./tools/testfiles/tattrreg.h5
-./tools/testfiles/tattrreg.ddl
-./tools/testfiles/tattrregR.ddl
+./tools/testfiles/tattrreg.ddl
+./tools/testfiles/tattrregR.ddl
./tools/testfiles/tbigdims.ddl
./tools/testfiles/tbigdims.h5
./tools/testfiles/tbinary.h5
@@ -1478,8 +1478,8 @@
./tools/testfiles/tcompound2.h5
./tools/testfiles/tcompound_complex.h5
./tools/testfiles/tdatareg.h5
-./tools/testfiles/tdatareg.ddl
-./tools/testfiles/tdataregR.ddl
+./tools/testfiles/tdatareg.ddl
+./tools/testfiles/tdataregR.ddl
./tools/testfiles/tdeflate.ddl
./tools/testfiles/tdset-1.ddl
./tools/testfiles/tdset-2.ddl
@@ -2406,6 +2406,7 @@
./config/cmake/H5pubconf.h.in
./config/cmake/hdf5-config.cmake.in
./config/cmake/hdf5-config-version.cmake.in
+./config/cmake/HDFCompilerFlags.cmake
./config/cmake/HDF5Macros.cmake
./config/cmake/libhdf5.settings.cmake.in
./config/cmake/mccacheinit.cmake
@@ -2516,3 +2517,7 @@
./tools/misc/CMakeTests.cmake
./tools/perform/CMakeLists.txt
./tools/perform/CMakeTests.cmake
+
+# CMake-specific User Scripts
+./config/cmake/scripts/CTestScript.cmake _DO_NOT_DISTRIBUTE_
+./config/cmake/scripts/HDF518config.cmake _DO_NOT_DISTRIBUTE_
diff --git a/README.txt b/README.txt
index 9f22b0f..1148808 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.216 currently under development
+HDF5 version 1.9.219 currently under development
Please refer to the release_docs/INSTALL file for installation instructions.
------------------------------------------------------------------------------
diff --git a/bin/cmakehdf5 b/bin/cmakehdf5
index 1f0fb7c..715d6d7 100755
--- a/bin/cmakehdf5
+++ b/bin/cmakehdf5
@@ -23,6 +23,7 @@ makelog="#${progname}_2build.log"
testlog="#${progname}_3test.log"
packlog="#${progname}_4pack.log"
installlog="#${progname}_5install.log"
+config_summary=libhdf5.settings
exit_code=0
# This command should be in the source directory's bin/
@@ -51,6 +52,7 @@ build_testing=-DBUILD_TESTING:BOOL=ON # Build tests default on
build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON # Build tools default on
with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT=ON # enable zlib filter default on
with_szlib=-DHDF5_ENABLE_SZIP_SUPPORT=OFF # enables zlib filter default off
+shared_lib=-DBUILD_SHARED_LIBS:BOOL=ON # enables shared lib; default on
#=============
@@ -80,16 +82,14 @@ Usage: $progname [<options>]
enable or disable c++ API. Default is off.
--enable-hl | --disable-hl:
enable or disable high level API. Default is on.
+ --enable-shared | --disable-shared:
+ enable or disable shared lib. Default is on.
--enable-tools | --disable-tools:
enable or disable building tools. Default is on.
--enable-testing | --disable-testing:
enable or disable building tests. Default is on.
- --with-zlib=INC,LIB | --without-zlib:
+ --with-zlib | --without-zlib:
Use zlib library for external deflate I/O filter. Default is on.
- INC and LIB are the include and lib directories.
- --with-szlib=INC,LIB| --without-szlib:
- Use szip library for external szip library I/O filter. Default is off.
- INC and LIB are the include and lib directories.
--help: shows details help page
EOF
}
@@ -125,6 +125,40 @@ STEP()
}
+# Install the generated installation image file. Different platform uses
+# different image files.
+# Linux: HDF5-<version>-Linux.sh file
+# Mac OS X: Not implemented yet
+# Others: Not implemented yet
+INSTALL_HDF5()
+{
+ myos="`uname -s`"
+ case "$myos" in
+ Linux)
+ install_file=./HDF5-${version}-Linux.sh
+ $install_file --skip-license $*
+ ;;
+ Darwin) # Mac OSX DMG file
+ install_file=HDF5-${version}-Darwin.dmg
+ test -d hdf5 || mkdir hdf5
+ basename=`basename $install_file .dmg`
+ # mount the DMG file as /Volumes/$basename
+ # echo 'Y' as yes for license.
+ echo Y | hdiutil mount $install_file
+ # copy the contents to the install location
+ cp -R "/Volumes/$basename/HDF_Group" hdf5
+ # unmount the DMG file
+ hdiutil unmount /Volumes/$basename
+ ;;
+ *) # unknown/unsupported OS.
+ echo "INSTALL_HDF5: Error--unknown/unsupported OS($myos)"
+ return 1
+ ;;
+ esac
+ return 0
+}
+
+
#==========
# main
#==========
@@ -166,6 +200,12 @@ while [ $# -gt 0 ]; do
--disable-hl)
build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=OFF
;;
+ --enable-shared)
+ shared_lib=-DBUILD_SHARED_LIBS:BOOL=ON
+ ;;
+ --disable-shared)
+ shared_lib=-DBUILD_SHARED_LIBS:BOOL=OFF
+ ;;
--enable-tools)
build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON
;;
@@ -178,6 +218,12 @@ while [ $# -gt 0 ]; do
--disable-testing)
build_testing=-DBUILD_TESTING:BOOL=OFF
;;
+ --with-zlib)
+ with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON
+ ;;
+ --without-zlib)
+ with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF
+ ;;
--help)
# print the detail help page and exit
HELP
@@ -212,20 +258,22 @@ if [ $? != 0 ]; then
echo $vers failed. Aborted.
exit 1
fi
-echo Running Cmake for HDF5-${version} ...
-
+echo Running Cmake for HDF5-${version} ...
# 4. Configure the C library, tools and tests with this command:
+# If successful, append the configure summary to the configure logfile.
STEP "Configure..." "cmake \
-C $cacheinit \
$build_cpp_lib \
$build_fortran \
$enable_f2003 \
$build_hl_lib \
+ $shared_lib \
$build_testing \
$build_tools \
$with_zlib \
$with_szlib \
- $srcdir" $configlog
+ $srcdir" $configlog &&\
+ cat $config_summary >> $configlog
# 5. Build the C library, tools and tests with this command:
STEP "Build the library, tools and tests, ..." "cmake --build . --config Release" $makelog
@@ -237,7 +285,8 @@ STEP "Test the library and tools..." "ctest . -C Release" $testlog
STEP "Create an install image..." "cpack -C Release CPackConfig.cmake" $packlog
# 8. Install with this command:
-STEP "Install..." "./HDF5-${version}-Linux.sh --skip-license" $installlog
+#STEP "Install..." "./HDF5-${version}-Linux.sh --skip-license" $installlog
+STEP "Install..." "INSTALL_HDF5" $installlog
# save the last exit code
exit_code=$?
diff --git a/bin/h5vers b/bin/h5vers
index cb4b9e0..2aa8023 100755
--- a/bin/h5vers
+++ b/bin/h5vers
@@ -187,6 +187,10 @@ die "unable to read file: $RELEASE\n" unless -r $file;
my $CONFIGURE = $file;
$CONFIGURE =~ s/[^\/]*$/..\/configure.ac/;
die "unable to read file: $CONFIGURE\n" unless -r $file;
+# cpp_doc_config
+my $CPP_DOC_CONFIG = $file;
+$CPP_DOC_CONFIG =~ s/[^\/]*$/..\/c++\/src\/cpp_doc_config/;
+die "unable to read file: $CPP_DOC_CONFIG\n" unless -r $file;
# Get the current version number.
open FILE, $file or die "unable to open $file: $!\n";
@@ -234,7 +238,8 @@ if ($set) {
$README = "";
$RELEASE = "";
$CONFIGURE = "";
- $LT_VERS = "";
+ $CPP_DOC_CONFIG = "";
+ $LT_VERS = "";
@newver = @curver;
}
@@ -309,6 +314,46 @@ if ($RELEASE) {
close FILE;
}
+# Update the c++/src/cpp_doc_config file
+if ($CPP_DOC_CONFIG) {
+ my $data = read_file($CPP_DOC_CONFIG);
+ my $version_string = sprintf("HDF5 version %d.%d.%d%s %s",
+ @newver[0,1,2],
+ $newver[3] eq "" ? "" : "-".$newver[3],
+ "currently under development");
+
+ $data =~ s/PROJECT_NUMBER\s*=.*/PROJECT_NUMBER = $version_string/;
+
+ write_file($CPP_DOC_CONFIG, $data);
+}
+
+# helper function to read the file for updating c++/src/cpp_doc_config file.
+# The version string in that file is not at the top, so the string replacement
+# is not for the first line, and reading/writing the entire file as one string
+# facilitates the substring replacement.
+sub read_file {
+ my ($filename) = @_;
+
+ open my $in, $filename or die "Could not open '$filename' for reading $!";
+ local $/ = undef;
+ my $all = <$in>;
+ close $in;
+
+ return $all;
+}
+
+# helper function to write the file for updating c++/src/cpp_doc_config file.
+sub write_file {
+ my ($filename, $content) = @_;
+
+ open my $out, ">$filename" or die "Could not open '$filename' for writing $!";;
+ print $out $content;
+ close $out;
+
+ return;
+}
+
+
sub gen_configure {
my ($name, $conf) = @_;
diff --git a/bin/snapshot b/bin/snapshot
index b4adf5e..a496edd 100755
--- a/bin/snapshot
+++ b/bin/snapshot
@@ -67,8 +67,8 @@ ReleaseDir_default=release_dir
ZLIB_default=
ZLIB=$ZLIB_default
-# What compression methods to use? (md5 does checksum).
-METHODS="gzip zip bzip2 md5 doc"
+# What compression methods to use?
+METHODS="gzip zip bzip2 doc"
# Use User's MAKE if set. Else use generic make.
MAKE=${MAKE:-make}
diff --git a/c++/examples/Makefile.am b/c++/examples/Makefile.am
index 5bb8d59..2408217 100644
--- a/c++/examples/Makefile.am
+++ b/c++/examples/Makefile.am
@@ -42,8 +42,8 @@ INSTALL_FILES=create.cpp readdata.cpp writedata.cpp compound.cpp \
# Some of the examples depend on files created by running other examples
readdata.chkexe_: create.chkexe_
chunks.chkexe_: extend_ds.chkexe_
-h5tutr_rdwt.chkexe_: h5tutrcrtdat.chkexe
-h5tutrcrtatt.chkexe_: h5tutrcrtdat.chkexe
+h5tutr_rdwt.chkexe_: h5tutr_crtdat.chkexe
+h5tutrcrtatt.chkexe_: h5tutr_crtdat.chkexe
h5tutr_crtgrpd.chkexe_: h5tutr_crtgrpar.chkexe
# Tell conclude.am that these are C++ tests.
@@ -52,6 +52,7 @@ CXX_API=yes
# Where to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/c++
+EXAMPLETOPDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples
# How to build programs using h5c++
$(EXTRA_PROG): $(H5CPP)
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index c8d6b18..03bd135 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -627,6 +627,7 @@ CXX_API = yes
# Where to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/c++
+EXAMPLETOPDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples
# Assume that all tests in this directory are examples, and tell
# conclude.am when to build them.
@@ -1020,8 +1021,8 @@ help:
# Some of the examples depend on files created by running other examples
readdata.chkexe_: create.chkexe_
chunks.chkexe_: extend_ds.chkexe_
-h5tutr_rdwt.chkexe_: h5tutrcrtdat.chkexe
-h5tutrcrtatt.chkexe_: h5tutrcrtdat.chkexe
+h5tutr_rdwt.chkexe_: h5tutr_crtdat.chkexe
+h5tutrcrtatt.chkexe_: h5tutr_crtdat.chkexe
h5tutr_crtgrpd.chkexe_: h5tutr_crtgrpar.chkexe
# How to build programs using h5c++
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index fc802d0..84e7827 100644
--- a/c++/src/H5File.cpp
+++ b/c++/src/H5File.cpp
@@ -73,9 +73,6 @@ H5File::H5File() : H5Location(), CommonFG(), id(H5I_INVALID_HID) {}
/// exists, and fail, otherwise
/// \li \c H5F_ACC_RDWR - Open file for read/write, if it already
/// exists, and fail, otherwise
-/// \li \c H5F_ACC_DEBUG - print debug information. This flag is
-/// used only by HDF5 library developers; it is neither
-/// tested nor supported for use in applications.
///\par
/// For info on file creation in the case of an already-open file,
/// please refer to the \b Special \b case section in the C layer
@@ -133,25 +130,25 @@ void H5File::p_get_file(const char* name, unsigned int flags, const FileCreatPro
{
// These bits only set for creation, so if any of them are set,
// create the file.
- if( flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC|H5F_ACC_DEBUG))
+ if( flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC))
{
- hid_t create_plist_id = create_plist.getId();
- hid_t access_plist_id = access_plist.getId();
- id = H5Fcreate( name, flags, create_plist_id, access_plist_id );
- if( id < 0 ) // throw an exception when open/create fail
- {
- throw FileIException("H5File constructor", "H5Fcreate failed");
- }
+ hid_t create_plist_id = create_plist.getId();
+ hid_t access_plist_id = access_plist.getId();
+ id = H5Fcreate( name, flags, create_plist_id, access_plist_id );
+ if( id < 0 ) // throw an exception when open/create fail
+ {
+ throw FileIException("H5File constructor", "H5Fcreate failed");
+ }
}
// Open the file if none of the bits above are set.
else
{
- hid_t access_plist_id = access_plist.getId();
- id = H5Fopen( name, flags, access_plist_id );
- if( id < 0 ) // throw an exception when open/create fail
- {
- throw FileIException("H5File constructor", "H5Fopen failed");
- }
+ hid_t access_plist_id = access_plist.getId();
+ id = H5Fopen( name, flags, access_plist_id );
+ if( id < 0 ) // throw an exception when open/create fail
+ {
+ throw FileIException("H5File constructor", "H5Fopen failed");
+ }
}
}
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index 55c3577..2ea7be5 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -670,7 +670,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
# This is our main target
diff --git a/c++/src/cpp_doc_config b/c++/src/cpp_doc_config
index f2caed2..9fff198 100644
--- a/c++/src/cpp_doc_config
+++ b/c++/src/cpp_doc_config
@@ -38,7 +38,7 @@ PROJECT_NAME = "HDF5 C++ API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.8.13
+PROJECT_NUMBER = HDF5 version 1.9.219 currently under development
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index b193ff4..e223553 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -92,45 +92,6 @@ endif (WINDOWS)
# ----------------------------------------------------------------------
CHECK_FUNCTION_EXISTS (difftime H5_HAVE_DIFFTIME)
-#CHECK_FUNCTION_EXISTS (gettimeofday H5_HAVE_GETTIMEOFDAY)
-# Since gettimeofday is not defined any where standard, lets look in all the
-# usual places. On MSVC we are just going to use ::clock()
-if (NOT MSVC)
- if ("H5_HAVE_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_TIME_GETTIMEOFDAY$")
- TRY_COMPILE (HAVE_TIME_GETTIMEOFDAY
- ${CMAKE_BINARY_DIR}
- ${HDF_RESOURCES_EXT_DIR}/GetTimeOfDayTest.cpp
- COMPILE_DEFINITIONS -DTRY_TIME_H
- OUTPUT_VARIABLE OUTPUT
- )
- if (HAVE_TIME_GETTIMEOFDAY STREQUAL "TRUE")
- set (H5_HAVE_TIME_GETTIMEOFDAY "1" CACHE INTERNAL "H5_HAVE_TIME_GETTIMEOFDAY")
- set (H5_HAVE_GETTIMEOFDAY "1" CACHE INTERNAL "H5_HAVE_GETTIMEOFDAY")
- endif (HAVE_TIME_GETTIMEOFDAY STREQUAL "TRUE")
- endif ("H5_HAVE_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_TIME_GETTIMEOFDAY$")
-
- if ("H5_HAVE_SYS_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_SYS_TIME_GETTIMEOFDAY$")
- TRY_COMPILE (HAVE_SYS_TIME_GETTIMEOFDAY
- ${CMAKE_BINARY_DIR}
- ${HDF_RESOURCES_EXT_DIR}/GetTimeOfDayTest.cpp
- COMPILE_DEFINITIONS -DTRY_SYS_TIME_H
- OUTPUT_VARIABLE OUTPUT
- )
- if (HAVE_SYS_TIME_GETTIMEOFDAY STREQUAL "TRUE")
- set (H5_HAVE_SYS_TIME_GETTIMEOFDAY "1" CACHE INTERNAL "H5_HAVE_SYS_TIME_GETTIMEOFDAY")
- set (H5_HAVE_GETTIMEOFDAY "1" CACHE INTERNAL "H5_HAVE_GETTIMEOFDAY")
- endif (HAVE_SYS_TIME_GETTIMEOFDAY STREQUAL "TRUE")
- endif ("H5_HAVE_SYS_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_SYS_TIME_GETTIMEOFDAY$")
-
- if (NOT HAVE_SYS_TIME_GETTIMEOFDAY AND NOT H5_HAVE_GETTIMEOFDAY)
- message (STATUS "---------------------------------------------------------------")
- message (STATUS "Function 'gettimeofday()' was not found. HDF5 will use its")
- message (STATUS " own implementation.. This can happen on older versions of")
- message (STATUS " MinGW on Windows. Consider upgrading your MinGW installation")
- message (STATUS " to a newer version such as MinGW 3.12")
- message (STATUS "---------------------------------------------------------------")
- endif (NOT HAVE_SYS_TIME_GETTIMEOFDAY AND NOT H5_HAVE_GETTIMEOFDAY)
-endif (NOT MSVC)
# Find the library containing clock_gettime()
if (NOT WINDOWS)
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index c47b7c4..fcbdbd5 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -88,10 +88,6 @@
/* Define if Darwin or Mac OS X */
#cmakedefine H5_HAVE_DARWIN @H5_HAVE_DARWIN@
-/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
- */
-#cmakedefine H5_HAVE_DECL_TZNAME @H5_HAVE_DECL_TZNAME@
-
/* Define to 1 if you have the `difftime' function. */
#cmakedefine H5_HAVE_DIFFTIME @H5_HAVE_DIFFTIME@
@@ -167,12 +163,6 @@
/* Define to 1 if you have the `gettimeofday' function. */
#cmakedefine H5_HAVE_GETTIMEOFDAY @H5_HAVE_GETTIMEOFDAY@
-/* Define to 1 if you have the `gettimeofday' function declared in time.h . */
-#cmakedefine H5_HAVE_TIME_GETTIMEOFDAY @H5_HAVE_TIME_GETTIMEOFDAY@
-
-/* Define to 1 if you have the `gettimeofday' function declared in sys/time.h . */
-#cmakedefine H5_HAVE_SYS_TIME_GETTIMEOFDAY @H5_HAVE_SYS_TIME_GETTIMEOFDAY@
-
/* Define to 1 if you have the `get_fpc_csr' function. */
#cmakedefine H5_HAVE_GET_FPC_CSR @H5_HAVE_GET_FPC_CSR@
@@ -201,15 +191,6 @@
/* Define to 1 if you have the `mpe' library (-lmpe). */
#cmakedefine H5_HAVE_LIBMPE @H5_HAVE_LIBMPE@
-/* Define to 1 if you have the `mpi' library (-lmpi). */
-#cmakedefine H5_HAVE_LIBMPI @H5_HAVE_LIBMPI@
-
-/* Define to 1 if you have the `mpich' library (-lmpich). */
-#cmakedefine H5_HAVE_LIBMPICH @H5_HAVE_LIBMPICH@
-
-/* Define to 1 if you have the `mpio' library (-lmpio). */
-#cmakedefine H5_HAVE_LIBMPIO @H5_HAVE_LIBMPIO@
-
/* Define to 1 if you have the `nsl' library (-lnsl). */
#cmakedefine H5_HAVE_LIBNSL @H5_HAVE_LIBNSL@
@@ -279,9 +260,6 @@
/* Define to 1 if you have the `setsysinfo' function. */
#cmakedefine H5_HAVE_SETSYSINFO @H5_HAVE_SETSYSINFO@
-/* Define to 1 if you have the `sigaction' function. */
-#cmakedefine H5_HAVE_SIGACTION @H5_HAVE_SIGACTION@
-
/* Define to 1 if you have the `siglongjmp' function. */
#cmakedefine H5_HAVE_SIGLONGJMP @H5_HAVE_SIGLONGJMP@
@@ -363,9 +341,6 @@
/* Define to 1 if you have the <sys/timeb.h> header file. */
#cmakedefine H5_HAVE_SYS_TIMEB_H @H5_HAVE_SYS_TIMEB_H@
-/* Define to 1 if you have the <time.h> header file. */
-#cmakedefine H5_HAVE_TIME_H @H5_HAVE_TIME_H@
-
/* Define to 1 if you have the <sys/time.h> header file. */
#cmakedefine H5_HAVE_SYS_TIME_H @H5_HAVE_SYS_TIME_H@
@@ -396,9 +371,6 @@
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine H5_HAVE_UNISTD_H @H5_HAVE_UNISTD_H@
-/* Define to 1 if you have the `asprintf' function. */
-#cmakedefine H5_HAVE_ASPRINTF @H5_HAVE_ASPRINTF@
-
/* Define to 1 if you have the `vasprintf' function. */
#cmakedefine H5_HAVE_VASPRINTF @H5_HAVE_VASPRINTF@
@@ -620,9 +592,6 @@
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#cmakedefine H5_TIME_WITH_SYS_TIME @H5_TIME_WITH_SYS_TIME@
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#cmakedefine H5_TM_IN_SYS_TIME @H5_TM_IN_SYS_TIME@
-
/* Define using v1.6 public API symbols by default */
#cmakedefine H5_USE_16_API_DEFAULT @H5_USE_16_API_DEFAULT@
@@ -681,8 +650,4 @@
/* Define to `long' if <sys/types.h> does not define. */
#cmakedefine H5_ssize_t
-#if defined(__cplusplus) && defined(inline)
-#undef inline
-#endif
-
#endif
diff --git a/config/cmake/HDF518_Examples.cmake.in b/config/cmake/HDF518_Examples.cmake.in
index d767f51..febf20a 100644
--- a/config/cmake/HDF518_Examples.cmake.in
+++ b/config/cmake/HDF518_Examples.cmake.in
@@ -21,7 +21,7 @@ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_ENABLE_F2003:BOOL=ON")
###############################################################################################################
if(WIN32)
if(STATICLIBRARIES)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF")
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
endif(STATICLIBRARIES)
set(ENV{HDF5_DIR} "${INSTALLDIR}/cmake")
set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}\\build)
@@ -29,7 +29,7 @@ if(WIN32)
set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}")
else(WIN32)
if(STATICLIBRARIES)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
endif(STATICLIBRARIES)
set(ENV{HDF5_DIR} "${INSTALLDIR}/share/cmake")
set(ENV{LD_LIBRARY_PATH} "${INSTALLDIR}/lib")
diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake
new file mode 100644
index 0000000..56d17bf
--- /dev/null
+++ b/config/cmake/HDFCompilerFlags.cmake
@@ -0,0 +1,274 @@
+#-----------------------------------------------------------------------------
+# Compiler specific flags : Shouldn't there be compiler tests for these
+#-----------------------------------------------------------------------------
+if (CMAKE_COMPILER_IS_GNUCC)
+ if (CMAKE_BUILD_TYPE MATCHES Debug)
+ set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99")
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftrapv -fno-common")
+ endif ()
+ else (CMAKE_BUILD_TYPE MATCHES Debug)
+ set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99")
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstdarg-opt")
+ endif ()
+ endif (CMAKE_BUILD_TYPE MATCHES Debug)
+endif (CMAKE_COMPILER_IS_GNUCC)
+if (CMAKE_COMPILER_IS_GNUCXX)
+ if (CMAKE_BUILD_TYPE MATCHES Debug)
+ set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS} -std=c99")
+ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftrapv -fno-common")
+ endif ()
+ else (CMAKE_BUILD_TYPE MATCHES Debug)
+ set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS} -std=c99")
+ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstdarg-opt")
+ endif ()
+ endif (CMAKE_BUILD_TYPE MATCHES Debug)
+endif (CMAKE_COMPILER_IS_GNUCXX)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to disable compiler warnings
+#-----------------------------------------------------------------------------
+option (HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
+if (HDF5_DISABLE_COMPILER_WARNINGS)
+ # MSVC uses /w to suppress warnings. It also complains if another
+ # warning level is given, so remove it.
+ if (MSVC)
+ set (HDF5_WARNINGS_BLOCKED 1)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /w")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w")
+ endif (MSVC)
+ if (WIN32)
+ add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+ endif (WIN32)
+ # Borland uses -w- to suppress warnings.
+ if (BORLAND)
+ set (HDF5_WARNINGS_BLOCKED 1)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
+ endif (BORLAND)
+
+ # Most compilers use -w to suppress warnings.
+ if (NOT HDF5_WARNINGS_BLOCKED)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
+ endif (NOT HDF5_WARNINGS_BLOCKED)
+endif (HDF5_DISABLE_COMPILER_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# CDash is configured to only allow 3000 warnings, so
+# break into groups (from the config/gnu-flags file)
+#-----------------------------------------------------------------------------
+if (NOT MSVC AND CMAKE_COMPILER_IS_GNUCC)
+ if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline")
+ else (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -erroff=%none -DBSD_COMP")
+ endif (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+ # Append warning flags
+ # Don't use the '-Wtraditional' flag, we're way past having K&R C code
+ # set (H5_CFLAGS "${H5_CFLAGS} -Wtraditional")
+ # Don't use the '-Wtraditional-conversion' flag, there's too many warnings
+ # from GCC's assert macro
+ # set (H5_CFLAGS "${H5_CFLAGS} -Wtraditional-conversion")
+
+ # Append warning flags from gcc-3* case
+ # (don't use -Wpadded flag for normal builds, many of the warnings its
+ # issuing can't be fixed and they are making it hard to detect other,
+ # more important warnings)
+ #set (H5_CFLAGS "${H5_CFLAGS} -Wfloat-equal -Wmissing-format-attribute -Wpadded")
+ set (H5_CFLAGS1 "${H5_CFLAGS1} -Wfloat-equal -Wmissing-format-attribute")
+
+ # Append warning flags from gcc-3.2* case
+ set (H5_CFLAGS1 "${H5_CFLAGS1} -Wmissing-noreturn -Wpacked -Wdisabled-optimization")
+
+ # Enable more format checking flags, beyond the basic -Wformat included
+ # in -Wall
+ set (H5_CFLAGS1 "${H5_CFLAGS1} -Wformat=2")
+
+ # The "unreachable code" warning appears to be reliable now...
+ # (this warning was removed in gcc 4.5+)
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+ set (H5_CFLAGS1 "${H5_CFLAGS1} -Wunreachable-code")
+ endif()
+
+ # Append warning flags from gcc-3.3* case
+ set (H5_CFLAGS1 "${H5_CFLAGS1} -Wendif-labels")
+
+ # Append warning flags from gcc-3.4* case
+ set (H5_CFLAGS2 "${H5_CFLAGS2} -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch")
+
+ # Append more extra warning flags that only gcc4.0+ know about
+ set (H5_CFLAGS2 "${H5_CFLAGS2} -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros")
+
+ # Append more extra warning flags that only gcc 4.1+ know about
+ set (H5_CFLAGS3 "${H5_CFLAGS3} -Wunsafe-loop-optimizations -Wc++-compat")
+
+ # Append more extra warning flags that only gcc 4.2+ know about
+ set (H5_CFLAGS3 "${H5_CFLAGS3} -Wstrict-overflow")
+
+ # Append more extra warning flags that only gcc 4.3+ know about
+ #
+ # Technically, variable-length arrays are part of the C99 standard, but
+ # we should approach them a bit cautiously... -QAK
+ set (H5_CFLAGS3 "${H5_CFLAGS3} -Wlogical-op -Wlarger-than=2048 -Wvla")
+
+ # Append more extra warning flags that only gcc 4.4+ know about
+ set (H5_CFLAGS4 "${H5_CFLAGS4} -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat")
+
+ # Append more extra warning flags that only gcc 4.5+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
+ set (H5_CFLAGS4 "${H5_CFLAGS4} -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants")
+ endif()
+
+ # Append more extra warning flags that only gcc 4.6+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
+ set (H5_CFLAGS5 "${H5_CFLAGS5} -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines")
+ endif()
+
+ # Append more extra warning flags that only gcc 4.7+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+ set (H5_CFLAGS5 "${H5_CFLAGS5} -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn")
+ endif()
+
+ # Append more extra warning flags that only gcc 4.8+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8)
+ set (H5_CFLAGS5 "${H5_CFLAGS5} -Wsuggest-attribute=format")
+ endif()
+
+ # Append more extra warning flags that only gcc 4.9+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
+ set (H5_CFLAGS5 "${H5_CFLAGS5} -Wdate-time -Wopenmp-simd")
+ endif()
+
+ # (There was no release of gcc 5.0)
+
+ # Append more extra warning flags that only gcc 5.1+ know about
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.1)
+ set (H5_CFLAGS6 "${H5_CFLAGS6} -Warray-bounds=2 -Wc99-c11-compat")
+ endif()
+
+endif (NOT MSVC AND CMAKE_COMPILER_IS_GNUCC)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable all warnings
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_ALL_WARNINGS "Enable all warnings" OFF)
+if (HDF5_ENABLE_ALL_WARNINGS)
+ if (MSVC)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall")
+ else (MSVC)
+ if (CMAKE_COMPILER_IS_GNUCC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic ${H5_CFLAGS1} ${H5_CFLAGS2} ${H5_CFLAGS3} ${H5_CFLAGS4}")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ endif (MSVC)
+endif (HDF5_ENABLE_ALL_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPZERO_WARNINGS "Enable group zero warnings" OFF)
+if (HDF5_ENABLE_GROUPZERO_WARNINGS)
+ if (MSVC)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W1")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W1")
+ else (MSVC)
+ if (CMAKE_COMPILER_IS_GNUCC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ endif (MSVC)
+endif (HDF5_ENABLE_GROUPZERO_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPONE_WARNINGS "Enable group one warnings" OFF)
+if (HDF5_ENABLE_GROUPONE_WARNINGS)
+ if (MSVC)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W2")
+ else (MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS1}")
+ endif (MSVC)
+endif (HDF5_ENABLE_GROUPONE_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPTWO_WARNINGS "Enable group two warnings" OFF)
+if (HDF5_ENABLE_GROUPTWO_WARNINGS)
+ if (MSVC)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
+ else (MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS2}")
+ endif (MSVC)
+endif (HDF5_ENABLE_GROUPTWO_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPTHREE_WARNINGS "Enable group three warnings" OFF)
+if (HDF5_ENABLE_GROUPTHREE_WARNINGS)
+ if (MSVC)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
+ else (MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS3}")
+ endif (MSVC)
+endif (HDF5_ENABLE_GROUPTHREE_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPFOUR_WARNINGS "Enable group four warnings" OFF)
+if (HDF5_ENABLE_GROUPFOUR_WARNINGS)
+ if (NOT MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS4}")
+ endif (NOT MSVC)
+endif (HDF5_ENABLE_GROUPFOUR_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPFIVE_WARNINGS "Enable group five warnings" OFF)
+if (HDF5_ENABLE_GROUPFIVE_WARNINGS)
+ if (NOT MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS5}")
+ endif (NOT MSVC)
+endif (HDF5_ENABLE_GROUPFIVE_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# Option to allow the user to enable warnings by groups
+#-----------------------------------------------------------------------------
+option (HDF5_ENABLE_GROUPSIX_WARNINGS "Enable group six warnings" OFF)
+if (HDF5_ENABLE_GROUPSIX_WARNINGS)
+ if (NOT MSVC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS6}")
+ endif (NOT MSVC)
+endif (HDF5_ENABLE_GROUPSIX_WARNINGS)
+
+#-----------------------------------------------------------------------------
+# This is in here to help some of the GCC based IDES like Eclipse
+# and code blocks parse the compiler errors and warnings better.
+#-----------------------------------------------------------------------------
+if (CMAKE_COMPILER_IS_GNUCC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
+endif (CMAKE_COMPILER_IS_GNUCC)
+if (CMAKE_COMPILER_IS_GNUCXX)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
+endif (CMAKE_COMPILER_IS_GNUCXX)
diff --git a/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in
index da5304d..667d3e6 100644
--- a/config/cmake/hdf5-config.cmake.in
+++ b/config/cmake/hdf5-config.cmake.in
@@ -105,20 +105,20 @@ endif ()
list (REMOVE_DUPLICATES ${HDF5_PACKAGE_NAME}_FIND_COMPONENTS)
foreach (comp IN LISTS ${HDF5_PACKAGE_NAME}_FIND_COMPONENTS)
set (hdf5_comp2)
- if (${comp} MATCHES "C")
+ if (${comp} STREQUAL "C")
set (hdf5_comp "hdf5")
- elseif (${comp} MATCHES "CXX")
+ elseif (${comp} STREQUAL "CXX")
set (hdf5_comp "hdf5_cpp")
- elseif (${comp} MATCHES "HL")
+ elseif (${comp} STREQUAL "HL")
set (hdf5_comp "hdf5_hl")
- elseif (${comp} MATCHES "CXX_HL")
+ elseif (${comp} STREQUAL "CXX_HL")
set (hdf5_comp "hdf5_hl_cpp")
- elseif (${comp} MATCHES "Tools")
+ elseif (${comp} STREQUAL "Tools")
set (hdf5_comp "hdf5_tools")
- elseif (${comp} MATCHES "Fortran")
+ elseif (${comp} STREQUAL "Fortran")
set (hdf5_comp2 "hdf5_f90cstub")
set (hdf5_comp "hdf5_fortran")
- elseif (${comp} MATCHES "Fortran_HL")
+ elseif (${comp} STREQUAL "Fortran_HL")
set (hdf5_comp2 "hdf5_hl_f90cstub")
set (hdf5_comp "hdf5_hl_fortran")
endif ()
@@ -133,17 +133,15 @@ list (REMOVE_DUPLICATES ${HDF5_PACKAGE_NAME}_FIND_COMPONENTS)
else ()
set (${HDF5_PACKAGE_NAME}_${comp}_FOUND 1)
string(TOUPPER ${HDF5_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY)
- set (${COMP_LIBRARY} ${${COMP_LIBRARY}} ${hdf5_comp2} ${hdf5_comp})
+ set (${HDF5_PACKAGE_NAME}_LIBRARIES ${${HDF5_PACKAGE_NAME}_LIBRARIES} ${hdf5_comp2} ${hdf5_comp})
endif ()
else ()
set (${HDF5_PACKAGE_NAME}_${comp}_FOUND 1)
string(TOUPPER ${HDF5_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY)
- set (${COMP_LIBRARY} ${${COMP_LIBRARY}} ${hdf5_comp})
+ set (${HDF5_PACKAGE_NAME}_LIBRARIES ${${HDF5_PACKAGE_NAME}_LIBRARIES} ${hdf5_comp})
endif ()
endif ()
endforeach ()
check_required_components(${HDF5_PACKAGE_NAME}_FIND_COMPONENTS)
-
-set (${HDF5_PACKAGE_NAME}_LIBRARIES ${${COMP_LIBRARY}})
\ No newline at end of file
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index a036ff8..e2124e1 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -23,8 +23,8 @@ Compiling Options:
CPPFLAGS: @CPPFLAGS@
H5_CPPFLAGS: @H5_CPPFLAGS@
AM_CPPFLAGS: @AM_CPPFLAGS@
- Shared Libraries: @H5_ENABLE_SHARED_LIB@
- Static Libraries: @H5_ENABLE_STATIC_LIB@
+ Shared C Library: @H5_ENABLE_SHARED_LIB@
+ Static C Library: @H5_ENABLE_STATIC_LIB@
Statically Linked Executables: @BUILD_STATIC_EXECS@
LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@
AM_LDFLAGS: @AM_LDFLAGS@
@@ -42,11 +42,16 @@ Languages:
@BUILD_FORTRAN_CONDITIONAL_TRUE@ Fortran Flags: @CMAKE_Fortran_FLAGS@
@BUILD_FORTRAN_CONDITIONAL_TRUE@ H5 Fortran Flags: @H5_FCFLAGS@
@BUILD_FORTRAN_CONDITIONAL_TRUE@ AM Fortran Flags: @AM_FCFLAGS@
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ Shared Fortran Library: @H5_ENABLE_SHARED_LIB@
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ Static Fortran Library: @H5_ENABLE_STATIC_LIB@
+
C++: @HDF5_BUILD_CPP_LIB@
@BUILD_CXX_CONDITIONAL_TRUE@ C++ Compiler: @CMAKE_CXX_COMPILER@
@BUILD_CXX_CONDITIONAL_TRUE@ C++ Flags: @CMAKE_CXX_FLAGS@
@BUILD_CXX_CONDITIONAL_TRUE@ H5 C++ Flags: @H5_CXXFLAGS@
@BUILD_CXX_CONDITIONAL_TRUE@ AM C++ Flags: @AM_CXXFLAGS@
+@BUILD_CXX_CONDITIONAL_TRUE@ Shared C++ Library: @H5_ENABLE_SHARED_LIB@
+@BUILD_CXX_CONDITIONAL_TRUE@ Static C++ Library: @H5_ENABLE_STATIC_LIB@
Features:
---------
@@ -56,7 +61,6 @@ Features:
Default API Mapping: @DEFAULT_API_VERSION@
With Deprecated Public Symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
I/O filters (external): @EXTERNAL_FILTERS@
- I/O filters (internal): @FILTERS@
MPE: @H5_HAVE_LIBLMPE@
Direct VFD: @H5_HAVE_DIRECT@
dmalloc: @H5_HAVE_LIBDMALLOC@
diff --git a/config/cmake/scripts/CTestScript.cmake b/config/cmake/scripts/CTestScript.cmake
new file mode 100755
index 0000000..0cd686a
--- /dev/null
+++ b/config/cmake/scripts/CTestScript.cmake
@@ -0,0 +1,282 @@
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+########################################################
+# This dashboard is maintained by The HDF Group
+# For any comments please contact cdashhelp@hdfgroup.org
+#
+########################################################
+# -----------------------------------------------------------
+# -- Get environment
+# -----------------------------------------------------------
+if(NOT SITE_OS_NAME)
+ ## machine name not provided - attempt to discover with uname
+ ## -- set hostname
+ ## --------------------------
+ find_program(HOSTNAME_CMD NAMES hostname)
+ exec_program(${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE HOSTNAME)
+ set(CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}")
+ find_program(UNAME NAMES uname)
+ macro(getuname name flag)
+ exec_program("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}")
+ endmacro(getuname)
+
+ getuname(osname -s)
+ getuname(osrel -r)
+ getuname(cpu -m)
+ message(STATUS "Dashboard script uname output: ${osname}-${osrel}-${cpu}\n")
+
+ set(CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}")
+ if(USE_AUTOTOOLS)
+ set(CTEST_BUILD_NAME "AT-${CTEST_BUILD_NAME}")
+ endif()
+ if(SITE_BUILDNAME_SUFFIX)
+ set(CTEST_BUILD_NAME "${CTEST_BUILD_NAME}-${SITE_BUILDNAME_SUFFIX}")
+ endif()
+ set(BUILD_OPTIONS "${ADD_BUILD_OPTIONS}")
+else(NOT SITE_OS_NAME)
+ ## machine name provided
+ ## --------------------------
+ if(CMAKE_HOST_UNIX)
+ set(CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_OS_BITS}-${SITE_COMPILER_NAME}-${SITE_COMPILER_VERSION}")
+ else()
+ set(CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_COMPILER_NAME}")
+ endif()
+ if(SITE_BUILDNAME_SUFFIX)
+ set(CTEST_BUILD_NAME ${CTEST_BUILD_NAME}-${SITE_BUILDNAME_SUFFIX})
+ endif()
+ set(BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}")
+endif(NOT SITE_OS_NAME)
+
+#-----------------------------------------------------------------------------
+# MAC machines need special option
+#-----------------------------------------------------------------------------
+if(APPLE)
+ # Compiler choice
+ execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND xcrun --find c++ OUTPUT_VARIABLE XCODE_CXX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set(ENV{CC} "${XCODE_CC}")
+ set(ENV{CXX} "${XCODE_CXX}")
+
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF")
+endif(APPLE)
+
+#-----------------------------------------------------------------------------
+set(NEED_REPOSITORY_CHECKOUT 0)
+set(CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"")
+if(CTEST_USE_TAR_SOURCE)
+ ## Uncompress source if tar file provided
+ ## --------------------------
+ if(WIN32)
+ message(STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} x ${CTEST_USE_TAR_SOURCE}.zip]")
+ execute_process(COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip RESULT_VARIABLE rv)
+ else()
+ message(STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_USE_TAR_SOURCE}.tar]")
+ execute_process(COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar RESULT_VARIABLE rv)
+ endif()
+
+ if(NOT rv EQUAL 0)
+ message(STATUS "extracting... [error-(${rv}) clean up]")
+ file(REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}")
+ message(FATAL_ERROR "error: extract of ${CTEST_USE_TAR_SOURCE} failed")
+ endif()
+
+ file(RENAME ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE} ${CTEST_SOURCE_DIRECTORY})
+else(CTEST_USE_TAR_SOURCE)
+ if(LOCAL_UPDATE)
+ if(CTEST_USE_GIT_SOURCE)
+ find_program(CTEST_GIT_COMMAND NAMES git git.cmd)
+ set(CTEST_GIT_UPDATE_OPTIONS)
+
+ if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}")
+ set(NEED_REPOSITORY_CHECKOUT 1)
+ endif()
+
+ if(${NEED_REPOSITORY_CHECKOUT})
+ if(REPOSITORY_BRANCH)
+ set(GITUpdateOptions "clone \"${REPOSITORY_URL}\" --branch \"${REPOSITORY_BRANCH}\" \"${CTEST_SOURCE_DIRECTORY}\" --recurse-submodules")
+ else()
+ set(GITUpdateOptions "clone \"${REPOSITORY_URL}\" \"${CTEST_SOURCE_DIRECTORY}\" --recurse-submodules")
+ endif()
+ set(CTEST_CHECKOUT_COMMAND "${CTEST_GIT_COMMAND} ${GITUpdateOptions}")
+ else()
+ set(GITUpdateOptions "pull")
+ endif()
+ set(CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}")
+ else(CTEST_USE_GIT_SOURCE)
+ ## --------------------------
+ ## use subversion to get source
+ #-----------------------------------------------------------------------------
+ ## cygwin does not handle the find_package() call
+ ## --------------------------
+ set(CTEST_UPDATE_COMMAND "SVNCommand")
+ if(NOT SITE_CYGWIN})
+ find_package (Subversion)
+ set(CTEST_SVN_COMMAND "${Subversion_SVN_EXECUTABLE}")
+ set(CTEST_UPDATE_COMMAND "${Subversion_SVN_EXECUTABLE}")
+ else()
+ set(CTEST_SVN_COMMAND "/usr/bin/svn")
+ set(CTEST_UPDATE_COMMAND "/usr/bin/svn")
+ endif()
+
+ if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}")
+ set(NEED_REPOSITORY_CHECKOUT 1)
+ endif()
+
+ if(NOT CTEST_REPO_VERSION)
+ set(CTEST_REPO_VERSION "HEAD")
+ endif()
+ if(${NEED_REPOSITORY_CHECKOUT})
+ set(CTEST_CHECKOUT_COMMAND
+ "${CTEST_SVN_COMMAND} co ${REPOSITORY_URL} \"${CTEST_SOURCE_DIRECTORY}\" -r ${CTEST_REPO_VERSION}")
+ else(${NEED_REPOSITORY_CHECKOUT})
+ if(CTEST_REPO_VERSION)
+ set(CTEST_SVN_UPDATE_OPTIONS "-r ${CTEST_REPO_VERSION}")
+ endif()
+ endif(${NEED_REPOSITORY_CHECKOUT})
+ endif(CTEST_USE_GIT_SOURCE)
+ endif(LOCAL_UPDATE)
+endif(CTEST_USE_TAR_SOURCE)
+
+#-----------------------------------------------------------------------------
+## Clear the build directory
+## --------------------------
+set(CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)
+if(NOT EXISTS "${CTEST_BINARY_DIRECTORY}")
+ file(MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}")
+else()
+ ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
+endif()
+
+# Use multiple CPU cores to build
+include(ProcessorCount)
+ProcessorCount(N)
+if(NOT N EQUAL 0)
+ if(NOT WIN32)
+ set(CTEST_BUILD_FLAGS -j${N})
+ endif()
+ set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
+endif()
+
+#-----------------------------------------------------------------------------
+# Send the main script as a note.
+list(APPEND CTEST_NOTES_FILES
+ "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}"
+ "${CMAKE_CURRENT_LIST_FILE}"
+ "${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake"
+)
+
+#-----------------------------------------------------------------------------
+# Check for required variables.
+# --------------------------
+foreach(req
+ CTEST_CMAKE_GENERATOR
+ CTEST_SITE
+ CTEST_BUILD_NAME
+ )
+ if(NOT DEFINED ${req})
+ message(FATAL_ERROR "The containing script must set ${req}")
+ endif()
+endforeach(req)
+
+#-----------------------------------------------------------------------------
+# Initialize the CTEST commands
+#------------------------------
+if(LOCAL_MEMCHECK_TEST)
+ find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
+ set (CTEST_CONFIGURE_COMMAND
+ "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/mccacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\""
+ )
+else()
+ if(LOCAL_COVERAGE_TEST)
+ find_program(CTEST_COVERAGE_COMMAND NAMES gcov)
+ endif()
+ set (CTEST_CONFIGURE_COMMAND
+ "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\""
+ )
+endif()
+
+#-----------------------------------------------------------------------------
+## -- set output to english
+set($ENV{LC_MESSAGES} "en_EN")
+
+# Print summary information.
+foreach(v
+ CTEST_SITE
+ CTEST_BUILD_NAME
+ CTEST_SOURCE_DIRECTORY
+ CTEST_BINARY_DIRECTORY
+ CTEST_CMAKE_GENERATOR
+ CTEST_BUILD_CONFIGURATION
+ CTEST_GIT_COMMAND
+ CTEST_CHECKOUT_COMMAND
+ CTEST_CONFIGURE_COMMAND
+ CTEST_SCRIPT_DIRECTORY
+ CTEST_USE_LAUNCHERS
+ )
+ set(vars "${vars} ${v}=[${${v}}]\n")
+endforeach(v)
+message(STATUS "Dashboard script configuration:\n${vars}\n")
+
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+ ## NORMAL process
+ ## -- LOCAL_UPDATE updates the source folder from svn
+ ## -- LOCAL_SUBMIT reports to CDash server
+ ## -- LOCAL_SKIP_TEST skips the test process (only builds)
+ ## -- LOCAL_MEMCHECK_TEST executes the Valgrind testing
+ ## -- LOCAL_COVERAGE_TEST executes code coverage process
+ ## --------------------------
+ ctest_start (${MODEL} TRACK ${MODEL})
+ if(LOCAL_UPDATE)
+ ctest_update (SOURCE "${CTEST_SOURCE_DIRECTORY}")
+ endif()
+ configure_file(${CTEST_SOURCE_DIRECTORY}/config/cmake/CTestCustom.cmake ${CTEST_BINARY_DIRECTORY}/CTestCustom.cmake)
+ ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}")
+ ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}")
+ if(LOCAL_SUBMIT)
+ ctest_submit (PARTS Update Configure Notes)
+ endif()
+
+ ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ if(LOCAL_SUBMIT)
+ ctest_submit (PARTS Build)
+ endif()
+
+ if(NOT LOCAL_SKIP_TEST)
+ if(NOT LOCAL_MEMCHECK_TEST)
+ ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
+ if(LOCAL_SUBMIT)
+ ctest_submit (PARTS Test)
+ endif()
+ if(res GREATER 0)
+ message(FATAL_ERROR "Failed tests: ${res}\n")
+ endif()
+ else()
+ ctest_memcheck (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args})
+ if(LOCAL_SUBMIT)
+ ctest_submit (PARTS MemCheck)
+ endif(LOCAL_SUBMIT)
+ endif()
+ if(LOCAL_COVERAGE_TEST)
+ ctest_coverage (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ if(LOCAL_SUBMIT)
+ ctest_submit (PARTS Coverage)
+ endif()
+ endif()
+ endif(NOT LOCAL_SKIP_TEST)
+
+ if(NOT LOCAL_MEMCHECK_TEST AND NOT LOCAL_NO_PACKAGE)
+ ##-----------------------------------------------
+ ## Package the product
+ ##-----------------------------------------------
+ execute_process(COMMAND cpack -C ${CTEST_BUILD_CONFIGURATION} -V
+ WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY}
+ RESULT_VARIABLE cpackResult
+ OUTPUT_VARIABLE cpackLog
+ ERROR_VARIABLE cpackLog.err
+ )
+ file(WRITE ${CTEST_BINARY_DIRECTORY}/cpack.log "${cpackLog.err}" "${cpackLog}")
+ if(cpackResult GREATER 0)
+ message (FATAL_ERROR "Failed packaging: ${cpackResult}\n")
+ endif()
+ endif(NOT LOCAL_MEMCHECK_TEST AND NOT LOCAL_NO_PACKAGE)
+#-----------------------------------------------------------------------------
diff --git a/config/cmake/scripts/HDF518config.cmake b/config/cmake/scripts/HDF518config.cmake
new file mode 100755
index 0000000..f0aceea
--- /dev/null
+++ b/config/cmake/scripts/HDF518config.cmake
@@ -0,0 +1,172 @@
+##########################################################################
+### For Windows ${CTEST_SCRIPT_ARG} is one of ###
+### [64-VS2013, 32-VS2013, 64-VS2012, 32-VS2012] ###
+### ctest -S HDF518config.cmake,32-VS2012 -C Release -VV -O hdf518.log ###
+### ###
+### Other platforms do not use ${CTEST_SCRIPT_ARG} ###
+### ctest -S HDF518config.cmake -C Release -VV -O hdf518.log ###
+##########################################################################
+
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+set(CTEST_SOURCE_VERSION 1.8.15)
+set(CTEST_SOURCE_NAME hdf5-${CTEST_SOURCE_VERSION})
+set(CTEST_BINARY_NAME "build")
+set(CTEST_DASHBOARD_ROOT "${CTEST_SCRIPT_DIRECTORY}")
+if(WIN32)
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}")
+else()
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
+endif()
+
+###################################################################
+### Following Line is one of [Release, RelWithDebInfo, Debug] #####
+set(CTEST_BUILD_CONFIGURATION "Release")
+###################################################################
+
+###################################################################
+######### Following describes compiler ############
+if(WIN32)
+ set(SITE_OS_NAME "Windows")
+ set(SITE_OS_VERSION "WIN7")
+ if(${CTEST_SCRIPT_ARG} STREQUAL "64-VS2013")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 12 2013 Win64")
+ set(SITE_OS_BITS "64")
+ set(SITE_COMPILER_NAME "vs2013")
+ set(SITE_COMPILER_VERSION "12")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "32-VS2013")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 12 2013")
+ set(SITE_OS_BITS "32")
+ set(SITE_COMPILER_NAME "vs2013")
+ set(SITE_COMPILER_VERSION "12")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "64-VS2012")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 11 2012 Win64")
+ set(SITE_OS_BITS "64")
+ set(SITE_COMPILER_NAME "vs2012")
+ set(SITE_COMPILER_VERSION "11")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "32-VS2012")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 11 2012")
+ set(SITE_OS_BITS "32")
+ set(SITE_COMPILER_NAME "vs2012")
+ set(SITE_COMPILER_VERSION "11")
+ endif()
+## Set the following to unique id your computer ##
+ set(CTEST_SITE "WIN7${CTEST_SCRIPT_ARG}.XXXX")
+else()
+ set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+## Set the following to unique id your computer ##
+ if(APPLE)
+ set(CTEST_SITE "MAC.XXXX")
+ else()
+ set(CTEST_SITE "LINUX.XXXX")
+ endif()
+endif()
+###################################################################
+
+###################################################################
+######### Following is for submission to CDash ############
+###################################################################
+set(MODEL "Experimental")
+######### Following describes computer ############
+## following is optional to describe build ##
+set(SITE_BUILDNAME_SUFFIX "STATIC")
+###################################################################
+
+###################################################################
+##### Following controls CDash submission #####
+#set(LOCAL_SUBMIT "TRUE")
+##### Following controls test process #####
+#set(LOCAL_SKIP_TEST "TRUE")
+#set(LOCAL_MEMCHECK_TEST "TRUE")
+#set(LOCAL_COVERAGE_TEST "TRUE")
+##### Following controls cpack command #####
+#set(LOCAL_NO_PACKAGE "TRUE")
+##### Following controls source update #####
+#set(LOCAL_UPDATE "TRUE")
+set(REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/branches/hdf5_1_8")
+#uncomment to use a compressed source file: *.tar on linux or mac *.zip on windows
+#set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}")
+###################################################################
+
+###################################################################
+#### Change default configuration of options in config/cmake/cacheinit.cmake file ###
+#### format: set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DXXX:YY=ZZZZ")
+
+### uncomment/comment or change the following lines for configuration options
+
+### comment the following line or change OFF to ON in order to build shared libraries
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
+
+#### ext libraries ####
+### ext libs from tgz
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=TGZ -DTGZPATH:PATH=\"${CTEST_SCRIPT_DIRECTORY}\"")
+### ext libs from svn
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=SVN")
+### ext libs on system
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_LIBRARY:FILEPATH=some_location/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=some_location/include")
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSZIP_LIBRARY:FILEPATH=some_location/lib/szlib.lib -DSZIP_INCLUDE_DIR:PATH=some_location/include")
+### disable ext libs building
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF")
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF")
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF")
+#### fortran ####
+### enable Fortran 2003 depends on HDF5_BUILD_FORTRAN
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_F2003:BOOL=ON")
+### disable Fortran; change OFF to ON in order to build FORTRAN libraries
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
+
+### disable test program builds
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF")
+
+### disable packaging
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_NO_PACKAGES:BOOL=ON")
+### Create install package with external libraries (szip, zlib, jpeg)
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACKAGE_EXTLIBS:BOOL=ON")
+
+### change install prefix
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX:PATH=install")
+
+###################################################################
+
+if(WIN32)
+ include(${CTEST_SCRIPT_DIRECTORY}\\CTestScript.cmake)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.exe")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.exe" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.msi")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.msi" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.zip")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.zip" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+else()
+ include(${CTEST_SCRIPT_DIRECTORY}/CTestScript.cmake)
+ if(APPLE)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.dmg")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.dmg" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ else()
+ if(CYGWIN)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ else()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ endif()
+ endif()
+endif()
diff --git a/config/gnu-flags b/config/gnu-flags
index 6c33808..5f10519 100644
--- a/config/gnu-flags
+++ b/config/gnu-flags
@@ -19,10 +19,10 @@
# if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes'
#
-# Get the compiler version in a way that works for gcc, egcs, and
-# pgcc unless a compiler version is already known
+# Get the compiler version in a way that works for gcc
+# unless a compiler version is already known
#
-# cc_vendor: The compiler name: gcc, egcs, or pgcc
+# cc_vendor: The compiler name: gcc
# cc_version: Version number: 2.91.60, 2.7.2.1
#
if test X = "X$cc_flags_set"; then
@@ -55,61 +55,9 @@ if test X = "X$cc_flags_set"; then
cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
fi
-# GCC compilers before gcc-2.8.1 have problems with `long long'.
-if test gcc = "$cc_vendor" -a "$cc_vers_all" -lt 2008001; then
- cat <<EOF
- **
- ** This compiler may be unable to properly compile the long long
- ** data type used extensively by hdf5. There may be other code
- ** generation problems also, especially when optimizations are
- ** enabled. Please upgrade to at least GNU gcc version 2.8.1
- ** before reporting bugs to the HDF5 team.
- **
-EOF
- sleep 5
-
-# GCC v2.96 (shipped with RH7.x) has problems with `float'-> `double' conversions.
-elif test gcc = "$cc_vendor" -a "$cc_vers_all" -eq 2096000; then
- cat <<EOF
- **
- ** This compiler may have problems converting 'float' values to
- ** 'double' values. There may be other code generation problems
- ** as well.
- **
- ** Please use a different version of gcc before reporting bugs.
- **
-EOF
- sleep 5
-
-# Current EGCS compilers have problems with `long long' and register
-# allocation when optimizations are turned on for x86 systems.
-elif test egcs = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
- cat <<EOF
- **
- ** This compiler may have problems allocating registers when
- ** optimizations are enabled on some platforms.
- **
-EOF
- sleep 5
-
-# All current versions of PGCC have problems also.
-elif test pgcc = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
- cat <<EOF
- **
- ** This compiler may have problems allocating registers for long
- ** long data types when optimizations are enabled. There may be
- ** other code generation problems as well. We know of no version
- ** of pgcc which is capable of compiling HDF5 in production mode.
- ** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
- **
-EOF
- sleep 5
-
-fi
-
# Common GCC flags for various situations
case "$cc_vendor-$cc_version" in
- gcc*|egcs*|pgcc*)
+ gcc*)
# Architecture-specific flags
arch=
case "$host_os-$host_cpu" in
@@ -146,33 +94,40 @@ case "$cc_vendor-$cc_version" in
esac
# General
- H5_CFLAGS="$H5_CFLAGS $arch -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
+ H5_CFLAGS="$H5_CFLAGS $arch -std=c99 -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
# Production
case "$cc_vendor-$cc_version" in
- gcc-2.95.[34])
- PROD_CFLAGS="-O3"
- ;;
- gcc-3.*)
+ gcc-[34].*)
PROD_CFLAGS="-O3"
;;
- gcc-4.*)
- PROD_CFLAGS="-O3"
+ gcc-5.*)
+ PROD_CFLAGS="-O3 -fstdarg-opt"
;;
*)
- PROD_CFLAGS="-O"
+ PROD_CFLAGS="-O -finline-functions"
;;
esac
-
- PROD_CFLAGS="$PROD_CFLAGS -fomit-frame-pointer -finline-functions"
PROD_CPPFLAGS=
# Debug
- DEBUG_CFLAGS="-g -fverbose-asm"
+ case "$cc_vendor-$cc_version" in
+ gcc-5.*)
+ DEBUG_CFLAGS="-Og -g -ftrapv -fno-common"
+ ;;
+ *)
+ DEBUG_CFLAGS="-g"
+ ;;
+ esac
+ #DEBUG_CFLAGS="$DEBUG_CFLAGS -fsanitize=undefined"
DEBUG_CPPFLAGS=
+ # Try out the new "stack protector" feature introduced in gcc 4.1
+ # (We should also think about adding some of the other memory protection options)
+ #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
+
# Profile
- PROFILE_CFLAGS="-g -pg"
+ PROFILE_CFLAGS="-Og -g -pg"
PROFILE_CPPFLAGS=
# Flags are set
@@ -186,13 +141,10 @@ esac
# the information from the previous version and adding modifications to that.
case "$cc_vendor-$cc_version" in
-# Closer to the gcc 4.10 release, we should check for additional flags to
+# Closer to the gcc 5.2 release, we should check for additional flags to
# include and break it out into it's own section, like the other versions
# below. -QAK
- gcc-4.9*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
+ gcc-5.1*)
# Append warning flags
# Don't use the '-Wtraditional' flag, we're way past having K&R C code
# H5_CFLAGS="$H5_CFLAGS -Wtraditional"
@@ -259,16 +211,81 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.9+ know about
H5_CFLAGS="$H5_CFLAGS -Wdate-time -Wopenmp-simd"
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
+ # (There was no release of gcc 5.0)
+
+ # Append more extra warning flags that only gcc 5.1+ know about
+ H5_CFLAGS="$H5_CFLAGS -Warray-bounds=2 -Wc99-c11-compat"
;;
- gcc-4.8*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+ gcc-4.9*)
+ # Append warning flags
+ # Don't use the '-Wtraditional' flag, we're way past having K&R C code
+ # H5_CFLAGS="$H5_CFLAGS -Wtraditional"
+ # Don't use the '-Wtraditional-conversion' flag, there's too many warnings
+ # from GCC's assert macro
+ # H5_CFLAGS="$H5_CFLAGS -Wtraditional-conversion"
+
+ # Append warning flags from gcc-3* case
+ # (don't use -Wpadded flag for normal builds, many of the warnings its
+ # issuing can't be fixed and they are making it hard to detect other,
+ # more important warnings)
+ #H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+ H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+ # Append warning flags from gcc-3.2* case
+ H5_CFLAGS="$H5_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+ # Enable more format checking flags, beyond the basic -Wformat included
+ # in -Wall
+ H5_CFLAGS="$H5_CFLAGS -Wformat=2"
+
+ # The "unreachable code" warning appears to be reliable now...
+ H5_CFLAGS="$H5_CFLAGS -Wunreachable-code"
+
+ # Append warning flags from gcc-3.3* case
+ H5_CFLAGS="$H5_CFLAGS -Wendif-labels"
+
+ # Append warning flags from gcc-3.4* case
+ H5_CFLAGS="$H5_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+ # Replace old -W flag with new -Wextra flag
+ H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+ # Append more extra warning flags that only gcc4.0+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+ # Append more extra warning flags that only gcc 4.1+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wunsafe-loop-optimizations -Wc++-compat"
+
+ # Append more extra warning flags that only gcc 4.2+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow"
+
+ # Append more extra warning flags that only gcc 4.3+ know about
+ #
+ # Technically, variable-length arrays are part of the C99 standard, but
+ # we should approach them a bit cautiously... -QAK
+ H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+ # Append more extra warning flags that only gcc 4.4+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+ # Append more extra warning flags that only gcc 4.5+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants"
+
+ # Append more extra warning flags that only gcc 4.6+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+ # Append more extra warning flags that only gcc 4.7+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+
+ # Append more extra warning flags that only gcc 4.8+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wsuggest-attribute=format"
+
+ # Append more extra warning flags that only gcc 4.9+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wdate-time -Wopenmp-simd"
+ ;;
+
+ gcc-4.8*)
# Append warning flags
# Don't use the '-Wtraditional' flag, we're way past having K&R C code
# H5_CFLAGS="$H5_CFLAGS -Wtraditional"
@@ -331,17 +348,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.8+ know about
H5_CFLAGS="$H5_CFLAGS -Wsuggest-attribute=format"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.7*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Append warning flags
# Don't use the '-Wtraditional' flag, we're way past having K&R C code
# H5_CFLAGS="$H5_CFLAGS -Wtraditional"
@@ -402,17 +411,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.7+ know about
H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.6*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -466,17 +467,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.6+ know about
H5_CFLAGS="$H5_CFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.5*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -527,17 +520,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.5+ know about
H5_CFLAGS="$H5_CFLAGS -Wstrict-aliasing -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.4*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -584,17 +569,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.4+ know about
H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.3*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -638,17 +615,9 @@ case "$cc_vendor-$cc_version" in
# Technically, variable-length arrays are part of the C99 standard, but
# we should approach them a bit cautiously... -QAK
H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wvla"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.2*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -686,17 +655,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.2+ know about
H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.1.*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -731,17 +692,9 @@ case "$cc_vendor-$cc_version" in
# Append more extra warning flags that only gcc 4.1+ know about
H5_CFLAGS="$H5_CFLAGS -Wunsafe-loop-optimizations -Wc++-compat -Wvolatile-register-var"
-
- # Try out the new "stack protector" feature in gcc 4.1
- # (Strictly speaking this isn't really a "warning" flag, so it's added to
- # the debugging flags)
- #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
gcc-4.0*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -776,9 +729,6 @@ case "$cc_vendor-$cc_version" in
;;
gcc-3.4*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -810,9 +760,6 @@ case "$cc_vendor-$cc_version" in
;;
gcc-3.3*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -838,9 +785,6 @@ case "$cc_vendor-$cc_version" in
;;
gcc-3.2*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -863,9 +807,6 @@ case "$cc_vendor-$cc_version" in
;;
gcc-3*)
- # Replace -ansi flag with -std=c99 flag
- H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
-
# Disable warnings about using 'long long' type
H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
@@ -876,11 +817,6 @@ case "$cc_vendor-$cc_version" in
#H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute"
;;
-
- gcc-2.9[56]*)
- # Disable warnings about using 'long long' type
- H5_CFLAGS="$H5_CFLAGS -Wno-long-long"
- ;;
esac
# Clear cc info if no flags set
diff --git a/config/lt_vers.am b/config/lt_vers.am
index 41d7e81..d0ef02f 100644
--- a/config/lt_vers.am
+++ b/config/lt_vers.am
@@ -19,7 +19,7 @@
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
## If the API changes *at all*, increment LT_VERS_INTERFACE and
diff --git a/configure b/configure
index 76c3a91..b1da8b3 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
#! /bin/sh
# From configure.ac Id: configure.ac 22697 2012-08-19 14:35:47Z hdftest .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for HDF5 1.9.216.
+# Generated by GNU Autoconf 2.69 for HDF5 1.9.219.
#
# Report bugs to <help@hdfgroup.org>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='HDF5'
PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.9.216'
-PACKAGE_STRING='HDF5 1.9.216'
+PACKAGE_VERSION='1.9.219'
+PACKAGE_STRING='HDF5 1.9.219'
PACKAGE_BUGREPORT='help@hdfgroup.org'
PACKAGE_URL=''
@@ -1472,7 +1472,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures HDF5 1.9.216 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.9.219 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1542,7 +1542,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of HDF5 1.9.216:";;
+ short | recursive ) echo "Configuration of HDF5 1.9.219:";;
esac
cat <<\_ACEOF
@@ -1731,7 +1731,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-HDF5 configure 1.9.216
+HDF5 configure 1.9.219
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2668,7 +2668,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by HDF5 $as_me 1.9.216, which was
+It was created by HDF5 $as_me 1.9.219, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3539,7 +3539,7 @@ fi
# Define the identity of the package.
PACKAGE='hdf5'
- VERSION='1.9.216'
+ VERSION='1.9.219'
cat >>confdefs.h <<_ACEOF
@@ -7684,6 +7684,19 @@ fi
## ----------------------------------------------------------------------
+## Disable shared libraries on CYGWIN. (LK - 04/16/15)
+## A number of tests run by "make check" fail on CYGWIN, so for HDF5 v1.8.15
+## we will change the default for shared libraries to disabled.
+
+
+case "`uname`" in
+ CYGWIN*)
+ enable_shared="no"
+ CHECK_WARN="Shared libraries are not currently supported on CYGWIN."
+ ;;
+esac
+
+## ----------------------------------------------------------------------
## Fortran libraries are not currently supported on Mac. Disable them.
## (this is overridable with --enable-unsupported).
##
@@ -21435,6 +21448,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
## ----------------------------------------------------------------------
## Check if we should install only statically linked executables.
## This check needs to occur after libtool is initialized because
@@ -28562,7 +28577,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
-HDF5 config.lt 1.9.216
+HDF5 config.lt 1.9.219
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -30678,7 +30693,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by HDF5 $as_me 1.9.216, which was
+This file was extended by HDF5 $as_me 1.9.219, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -30744,7 +30759,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-HDF5 config.status 1.9.216
+HDF5 config.status 1.9.219
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -33129,5 +33144,11 @@ cat >> src/H5config.h <<EOF
#endif
EOF
+## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
+## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
+## This sed script corrects "-l <libname>" first and then "-l " with no library name.
+## If the order is not preserved, all instances of "-l " will be removed.
+sed -e '/^postdeps/ s/-l \(a-zA-Z\)/-l\1/g' -e '/^postdeps/ s/-l //g' -i libtool
+
## show the configure settings
cat src/libhdf5.settings
diff --git a/configure.ac b/configure.ac
index 27e856a..922da9f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ AC_PREREQ([2.69])
## NOTE: Do not forget to change the version number here when we do a
## release!!!
##
-AC_INIT([HDF5], [1.9.216], [help@hdfgroup.org])
+AC_INIT([HDF5], [1.9.219], [help@hdfgroup.org])
AC_CONFIG_SRCDIR([src/H5.c])
AC_CONFIG_HEADER([src/H5config.h])
@@ -637,6 +637,19 @@ AC_SUBST([RUNPARALLEL])
AC_SUBST([TESTPARALLEL])
## ----------------------------------------------------------------------
+## Disable shared libraries on CYGWIN. (LK - 04/16/15)
+## A number of tests run by "make check" fail on CYGWIN, so for HDF5 v1.8.15
+## we will change the default for shared libraries to disabled.
+
+
+case "`uname`" in
+ CYGWIN*)
+ enable_shared="no"
+ CHECK_WARN="Shared libraries are not currently supported on CYGWIN."
+ ;;
+esac
+
+## ----------------------------------------------------------------------
## Fortran libraries are not currently supported on Mac. Disable them.
## (this is overridable with --enable-unsupported).
##
@@ -687,6 +700,8 @@ LT_PREREQ([2.2])
## win32-dll - This will build clean dlls on win32 platforms.
LT_INIT([dlopen,win32-dll])
+
+
## ----------------------------------------------------------------------
## Check if we should install only statically linked executables.
## This check needs to occur after libtool is initialized because
@@ -2899,5 +2914,11 @@ cat >> src/H5config.h <<EOF
#endif
EOF
+## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
+## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
+## This sed script corrects "-l <libname>" first and then "-l " with no library name.
+## If the order is not preserved, all instances of "-l " will be removed.
+sed -e '/^postdeps/ s/-l \([a-zA-Z]\)/-l\1/g' -e '/^postdeps/ s/-l //g' -i libtool
+
## show the configure settings
cat src/libhdf5.settings
diff --git a/fortran/examples/Makefile.am b/fortran/examples/Makefile.am
index feed32c..caaa08c 100644
--- a/fortran/examples/Makefile.am
+++ b/fortran/examples/Makefile.am
@@ -79,6 +79,7 @@ endif
# Tell automake how to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/fortran
+EXAMPLETOPDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples
# List dependencies for each example. Normally, automake would take
# care of this for us, but if we tell automake about the programs it
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index dd2fb46..c894b75 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -639,6 +639,7 @@ FORTRAN_API = yes
# Tell automake how to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/fortran
+EXAMPLETOPDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples
# Assume that all tests in this directory are examples, and tell
# conclude.am when to build them.
diff --git a/fortran/src/H5Zf.c b/fortran/src/H5Zf.c
index 0427c23..169e018 100644
--- a/fortran/src/H5Zf.c
+++ b/fortran/src/H5Zf.c
@@ -51,9 +51,7 @@ nh5zunregister_c (int_f *filter)
* Call H5Zunregister function.
*/
c_filter = (H5Z_filter_t)*filter;
- printf(" filter # %d \n", (int)c_filter);
status = H5Zunregister(c_filter);
- printf("From C zunregister %d \n", status);
if (status < 0) return ret_value;
ret_value = 0;
return ret_value;
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index a149109..1641989 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -421,12 +421,17 @@ nh5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags,
/*
* H5F flags
+ *
+ * Note that H5F_ACC_DEBUG is deprecated (nonfunctional) but retained
+ * for backward compatibility since it's in the public API.
*/
h5f_flags[0] = (int_f)H5F_ACC_RDWR;
h5f_flags[1] = (int_f)H5F_ACC_RDONLY;
h5f_flags[2] = (int_f)H5F_ACC_TRUNC;
h5f_flags[3] = (int_f)H5F_ACC_EXCL;
+#ifndef H5_NO_DEPRECATED_SYMBOLS
h5f_flags[4] = (int_f)H5F_ACC_DEBUG;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
h5f_flags[5] = (int_f)H5F_SCOPE_LOCAL;
h5f_flags[6] = (int_f)H5F_SCOPE_GLOBAL;
h5f_flags[7] = (int_f)H5F_CLOSE_DEFAULT;
diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90
index ca50e20..0e371f5 100644
--- a/fortran/src/H5f90global.f90
+++ b/fortran/src/H5f90global.f90
@@ -234,6 +234,9 @@ MODULE H5GLOBAL
!
! H5F flags (DO NOT FORGET TO UPDATE WHEN NEW FLAGS ARE ADDED !)
!
+ ! NOTE: H5F_ACC_DEBUG is deprecated (nonfunctional) but retained for
+ ! backward compatibility since it's in the public API.
+ !
! H5F flags declaration
!
INTEGER, PARAMETER :: H5F_FLAGS_LEN = 19
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index 345ebe7..02071c9 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -724,7 +724,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
AM_FCLIBS = $(LIBHDF5)
diff --git a/hl/c++/examples/Makefile.am b/hl/c++/examples/Makefile.am
index c8f0305..7202a96 100644
--- a/hl/c++/examples/Makefile.am
+++ b/hl/c++/examples/Makefile.am
@@ -36,6 +36,7 @@ CXX_API=yes
# Where to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl/c++
+EXAMPLETOPDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl
# How to build programs using h5c++
$(EXTRA_PROG): $(H5CPP)
diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in
index a36886c..5bad31f 100644
--- a/hl/c++/examples/Makefile.in
+++ b/hl/c++/examples/Makefile.in
@@ -616,6 +616,7 @@ CXX_API = yes
# Where to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl/c++
+EXAMPLETOPDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl
# Assume that all tests in this directory are examples, and tell
# conclude.am when to build them.
diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in
index 89b71cb..44ec9df 100644
--- a/hl/c++/src/Makefile.in
+++ b/hl/c++/src/Makefile.in
@@ -662,7 +662,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
# This is our main target
diff --git a/hl/fortran/examples/Makefile.am b/hl/fortran/examples/Makefile.am
index 91cb7c5..6a5032b 100644
--- a/hl/fortran/examples/Makefile.am
+++ b/hl/fortran/examples/Makefile.am
@@ -54,6 +54,7 @@ endif
# Tell automake how to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl/fortran
+EXAMPLETOPDIR=${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl
# List dependencies for each example. Normally, automake would take
# care of this for us, but if we tell automake about the programs it
diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in
index c8878d5..e229f12 100644
--- a/hl/fortran/examples/Makefile.in
+++ b/hl/fortran/examples/Makefile.in
@@ -623,6 +623,7 @@ FORTRAN_API = yes
# Tell automake how to install examples
# Note: no '/' after DESTDIR. Explanation in commence.am
EXAMPLEDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl/fortran
+EXAMPLETOPDIR = ${DESTDIR}$(exec_prefix)/share/hdf5_examples/hl
# Assume that all tests in this directory are examples, and tell
# conclude.am when to build them.
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index 6f34295..d8466fd 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -680,7 +680,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
# Our main target, the high-level fortran library
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index 8685b9e..88fada8 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -661,7 +661,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
# This library is our main target.
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index dc87d5a..7f67eb2 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -26,7 +26,7 @@ Obtaining HDF5 source code
2. Obtain compressed (*.tar or *.zip) HDF5 source from
http://www.hdfgroup.org/ftp/HDF5/current/src/
and put it in "myhdfstuff".
- Do not uncompress.
+ Uncompress the file. There should be a hdf5-1.8."X" folder.
CMake version
1. We suggest you obtain the latest CMake from the Kitware web site.
@@ -38,14 +38,19 @@ CMake version
II. Quick Step Building HDF5 Libraries with CMake Script Mode
========================================================================
This short set of instructions is written for users who want to quickly
-build the HDF5 C, C++, Fortran, and High-level shared libraries and tools
-from the HDF5 source code package using the CMake tools. This procedure
-will use the default settings in the config/cmake/cacheinit.cmake file.
+build the HDF5 C and C++ static libraries and tools with SZIP and ZLIB
+compression included. This procedure will use the default settings in
+the config/cmake/cacheinit.cmake file.
HDF Group recommends using the ctest script mode to build HDF5.
The following files referenced below are available at the HDF web site:
http://www.hdfgroup.org/HDF5/release/cmakebuild.html
+Single compressed file with all the files needed, including source:
+ hdf5-1.8.15-CMake.zip or hdf5-1.8.15-CMake.tar.gz
+
+Individual files
+-----------------------------------------------
CMake build script:
CTestScript.cmake
@@ -54,10 +59,8 @@ External compression szip and zlib libraries:
ZLib.tar.gz
Platform configuration files:
- HDF518Windows64CMake.cmake
- HDF518Windows32CMake.cmake
- HDF518LinuxCMake.cmake
- HDF518MacCMake.cmake
+ HDF518config.cmake
+-----------------------------------------------
To build HDF5 with the SZIP and ZLIB external libraries you will need to:
@@ -69,32 +72,47 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
3. Download the CTestScript.cmake file to "myhdfstuff".
CTestScript.cmake file should not be modified.
- 4. Download a platform configuration file to "myhdfstuff".
- Do not modify the file unless you want to change default build
- environment.
+ 4. Download the platform configuration file, HDF518config.cmake,
+ to "myhdfstuff". Do not modify the file unless you want to change
+ default build environment. (See http://www.hdfgroup.org/HDF5/release/chgcmkbuild.html)
5. From the "myhdfstuff" directory execute the CTest Script with the
following options:
- ctest -S <configuration file> -C Release -VV -O hdf5.log
+ On 32-bit Windows with Visual Studio 2012, execute:
+ ctest -S HDF518config.cmake,32-VS2012 -C Release -VV -O hdf5.log
+ On 64-bit Windows with Visual Studio 2012, execute:
+ ctest -S HDF518config.cmake,64-VS2012 -C Release -VV -O hdf5.log
+ On 32-bit Windows with Visual Studio 2013, execute:
+ ctest -S HDF518config.cmake,32-VS2013 -C Release -VV -O hdf5.log
+ On 64-bit Windows with Visual Studio 2013, execute:
+ ctest -S HDF518config.cmake,64-VS2013 -C Release -VV -O hdf5.log
+ On Linux and Mac, execute:
+ ctest -S HDF518config.cmake -C Release -VV -O hdf5.log
The command above will configure, build, test, and create an install
- package in the myhdfstuff/hdf5-1.8/build folder.
+ package in the myhdfstuff folder. It will have the format:
+ HDF5-1.8.NN-<platform>.<zip or tar.gz>
+ On Unix, <platform> will be "Linux". A similar .sh file will also be created.
+ On Windows, <platform> will be "win64" or "win32". If you have an
+ installer on your system, you will also see a similar file that ends
+ in either .exe (NSIS) or .msi (WiX).
+
The -S option uses the script version of ctest.
The value for the -C option (as shown above, "-C Release") must
match the setting for CTEST_BUILD_CONFIGURATION in the platform
configuration file.
- The -VV option is for verbose; use -V for less verbose.
+ The -VV option is for most verbose; use -V for less verbose.
The "-O hdf5.log" option saves the output to a log file hdf5.log.
6. To install, "X" is the current release version
On Windows, execute:
- HDF5-1.8."X"-win32.exe or HDF5-1.8."X"-win64.exe
+ HDF5-1.8."X"-win32.msi or HDF5-1.8."X"-win64.msi
By default this program will install the hdf5 library into the
"C:\Program Files" directory and will create the following
directory structure:
@@ -108,7 +126,7 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
On Linux, change to the install destination directory
(create it if doesn't exist) and execute:
- <path-to>/myhdfstuff/hdf5-1.8/build/HDF5-1.8."X"-Linux.sh
+ <path-to>/myhdfstuff/HDF5-1.8."X"-Linux.sh
After accepting the license, the script will prompt:
By default the HDF5 will be installed in:
"<current directory>/HDF5-1.8."X"-Linux"
@@ -124,7 +142,7 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
------lib
------share
- On Mac you will find HDF5-1.8."X"-Darwin.dmg in the build folder. Click
+ On Mac you will find HDF5-1.8."X"-Darwin.dmg in the myhdfstuff folder. Click
on the dmg file to proceed with installation. After accepting the license,
there will be a folder with the following structure:
HDF_Group
@@ -136,7 +154,7 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
------share
By default the installation will create the bin, include, lib and cmake
- folders in the <install destination directory>/HDF_Group/HDF5/1.8.
+ folders in the <install destination directory>/HDF_Group/HDF5/1.8."X"
========================================================================
@@ -159,10 +177,10 @@ Notes: This short set of instructions is written for users who want to
5. Configure the C library, tools and tests with one of the following commands:
On Windows 32 bit
- cmake -G "Visual Studio 11" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
+ cmake -G "Visual Studio 11 2012" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
On Windows 64 bit
- cmake -G "Visual Studio 11 Win64" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
+ cmake -G "Visual Studio 11 2012 Win64" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
On Linux and Mac
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5-1.8."X"
@@ -180,7 +198,7 @@ Notes: This short set of instructions is written for users who want to
9. To install
On Windows, execute:
- HDF5-1.8."X"-win32.exe or HDF5-1.8."X"-win64.exe
+ HDF5-1.8."X"-win32.msi or HDF5-1.8."X"-win64.msi
By default this program will install the hdf5 library into the
"C:\Program Files" directory and will create the following
directory structure:
@@ -267,7 +285,7 @@ IV. Further considerations
CTEST_USE_LAUNCHERS:BOOL=ON
CMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF
- 4. Windows developers should install NSIS to create an install image with CPack.
+ 4. Windows developers should install NSIS or WiX to create an install image with CPack.
Visual Studio Express users will not be able to package HDF5 into
an install image executable.
@@ -275,7 +293,7 @@ IV. Further considerations
the settings for the developers' environment. Then the only options needed
on the command line are those options that are different. Example using HDF
default cache file:
- cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 11" \
+ cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 11 2012" \
-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF \
-DCMAKE_BUILD_TYPE:STRING=Release ..
@@ -354,12 +372,12 @@ These five steps are described in detail below.
* MinGW Makefiles
* NMake Makefiles
* Unix Makefiles
- * Visual Studio 12
- * Visual Studio 12 Win64
- * Visual Studio 11
- * Visual Studio 11 Win64
- * Visual Studio 10
- * Visual Studio 10 Win64
+ * Visual Studio 12 2013
+ * Visual Studio 12 2013 Win64
+ * Visual Studio 11 2012
+ * Visual Studio 11 2012 Win64
+ * Visual Studio 10 2010
+ * Visual Studio 10 2010 Win64
<options> is:
* SZIP_INCLUDE_DIR:PATH=<path to szip includes directory>
@@ -376,12 +394,8 @@ These five steps are described in detail below.
set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE)
set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
- set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
- set (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
set (HDF5_ENABLE_F2003 ON CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
- set (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
- set (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
set (HDF5_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE)
set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
set (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
@@ -430,7 +444,7 @@ These five steps are described in detail below.
2.2 Preferred command line example on Windows in c:\MyHDFstuff\hdf5\build directory:
- cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 11" \
+ cmake -C ../config/cmake/cacheinit.cmake -G "Visual Studio 11 2012" \
-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF \
-DCMAKE_BUILD_TYPE:STRING=Release ..
@@ -498,7 +512,7 @@ These five steps are described in detail below.
5. Packaging HDF5 (create an install image)
- To package the build into a simple installer using the NullSoft installer NSIS
+ To package the build into a simple installer using WiX toolset or the NullSoft installer NSIS
on Windows, or into compressed files (.tar.gz, .sh, .zip), use the CPack tool.
To package the build, navigate to your build directory and execute;
@@ -506,6 +520,7 @@ These five steps are described in detail below.
cpack -C {Debug | Release} CPackConfig.cmake
NOTE: See note 8 of this document for NSIS information.
+ See note 9 of this document for WiX information.
Also, if you are using a Visual Studio Express version or do not
want to enable the packaging components, set HDF5_NO_PACKAGES
to ON (on the command line add -DHDF5_NO_PACKAGES:BOOL=ON)
@@ -529,6 +544,9 @@ These five steps are described in detail below.
"output directory", which is where the program will be installed. These
options are case-sensitive, so be sure to type them in upper case.
+ 9. WiX Toolset
+ WiX--the Windows Installer XML toolset--lets developers create installers for
+ Windows Installer, the Windows installation engine. See http://wixtoolset.org.
========================================================================
@@ -615,37 +633,31 @@ build and test process.
VIII. Options for Platform Configuration Files
========================================================================
-Below is the HDF518LinuxCmake.cmake ctest script with extra comments.
-The example is for a linux machine, but the same scripts can be used on
-a Windows machine by adjusting the CTEST_CMAKE_GENERATOR option in the
-platform configuration script.
-
+Below is the HDF518config.cmake ctest script with extra comments.
+Execute:
+ ctest -S HDF518config.cmake -C Release -V -O hdf518.log
+The same scripts can be used on Linux, Mac OSX or a Windows machine by
+adding an option (${CTEST_SCRIPT_ARG}) to the platform configuration script.
-############################################################################
-# Product specific script, HDF518LinuxCmake.cmake, that uses the
-# CTestScript.cmake file. Usage:
-# "ctest -S HDF518LinuxCmake.cmake -C Release -O hdf518shared.log"
-############################################################################
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
-
-# this is the location of the source hardcoded to hdf5-1.8.13
-set(CTEST_SOURCE_NAME hdf5-1.8.13)
-# this is the location of the source with ctest parameter hdf5src
-# "ctest -S HDF518LinuxCmake.cmake,hdf5src -C Release -O hdf518static.log"
-#set(CTEST_SOURCE_NAME ${CTEST_SCRIPT_ARG})
-# this is the location of the build directory
-set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build)
+#########################################################################
+### For Windows ${CTEST_SCRIPT_ARG} is one of ###
+### [64-VS2013, 32-VS2013, 64-VS2012, 32-VS2012] ###
+### ctest -S HDF518config.cmake,32-VS2012 -C Release -V -O hdf518.log ###
+#########################################################################
-# this is the directory the script is executed from
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+set(CTEST_SOURCE_VERSION 1.8.15-pre7)
+set(CTEST_SOURCE_NAME hdf5-${CTEST_SOURCE_VERSION})
+set(CTEST_BINARY_NAME "build")
set(CTEST_DASHBOARD_ROOT "${CTEST_SCRIPT_DIRECTORY}")
-
-# this is the full path of the source directory
-set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}")
-
-# this is the full path of the build directory
-set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
-
+if(WIN32)
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}")
+else()
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
+endif()
###################################################################
### Following Line is one of [Release, RelWithDebInfo, Debug] #####
@@ -654,13 +666,41 @@ set(CTEST_BUILD_CONFIGURATION "Release")
###################################################################
######### Following describes compiler ############
-# this is for linux
-set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
-# this is for windows 32 bit
-#set(CTEST_CMAKE_GENERATOR "Visual Studio 11")
-# this is for windows 64 bit
-#set(CTEST_CMAKE_GENERATOR "Visual Studio 11 Win64")
-# Visual Studio 2013 is 12, Visual Studio 2012 is 11, Visual Studio 2010 is 10
+if(WIN32)
+ set(SITE_OS_NAME "Windows")
+ set(SITE_OS_VERSION "WIN7")
+ if(${CTEST_SCRIPT_ARG} STREQUAL "64-VS2013")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 12 2013 Win64")
+ set(SITE_OS_BITS "64")
+ set(SITE_COMPILER_NAME "vs2013")
+ set(SITE_COMPILER_VERSION "12")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "32-VS2013")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 12 2013")
+ set(SITE_OS_BITS "32")
+ set(SITE_COMPILER_NAME "vs2013")
+ set(SITE_COMPILER_VERSION "12")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "64-VS2012")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 11 2012 Win64")
+ set(SITE_OS_BITS "64")
+ set(SITE_COMPILER_NAME "vs2012")
+ set(SITE_COMPILER_VERSION "11")
+ elseif(${CTEST_SCRIPT_ARG} STREQUAL "32-VS2012")
+ set(CTEST_CMAKE_GENERATOR "Visual Studio 11 2012")
+ set(SITE_OS_BITS "32")
+ set(SITE_COMPILER_NAME "vs2012")
+ set(SITE_COMPILER_VERSION "11")
+ endif()
+## Set the following to unique id your computer ##
+ set(CTEST_SITE "WIN7${CTEST_SCRIPT_ARG}.XXXX")
+else()
+ set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+## Set the following to unique id your computer ##
+ if(APPLE)
+ set(CTEST_SITE "MAC.XXXX")
+ else()
+ set(CTEST_SITE "LINUX.XXXX")
+ endif()
+endif()
###################################################################
###################################################################
@@ -668,25 +708,24 @@ set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
###################################################################
set(MODEL "Experimental")
######### Following describes computer ############
-## Set the following to unique id your computer ##
-set(CTEST_SITE "LINUX.XXXX")
-## following is optional to describe build ##
-set(SITE_BUILDNAME_SUFFIX "SHARED")
+## following is optional to describe build ##
+set(SITE_BUILDNAME_SUFFIX "STATIC")
+###################################################################
-######### Following controls CDash submission ##########
+###################################################################
+##### Following controls CDash submission #####
#set(LOCAL_SUBMIT "TRUE")
-######### Following controls test process ##########
+##### Following controls test process #####
#set(LOCAL_SKIP_TEST "TRUE")
#set(LOCAL_MEMCHECK_TEST "TRUE")
#set(LOCAL_COVERAGE_TEST "TRUE")
-######### Following controls cpack command ##########
+##### Following controls cpack command #####
#set(LOCAL_NO_PACKAGE "TRUE")
-######### Following controls source update ##########
+##### Following controls source update #####
#set(LOCAL_UPDATE "TRUE")
-######### Following controls source repository ##########
-#set(REPOSITORY_URL "http://svn.${hdfgroup_url}/hdf5/branches/hdf5_1_8")
-#comment to use a uncompressed source folder
-set(CTEST_USE_TAR_SOURCE "hdf5-1.8.13")
+set(REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/branches/hdf5_1_8")
+#uncomment to use a compressed source file: *.tar on linux or mac *.zip on windows
+#set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}")
###################################################################
###################################################################
@@ -695,8 +734,8 @@ set(CTEST_USE_TAR_SOURCE "hdf5-1.8.13")
### uncomment/comment and change the following lines for configuration options
-### uncomment the following line to build static libraries
-#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
+### comment the following line or change OFF to ON in order to build shared libraries
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
#### ext libraries ####
### ext libs from tgz
@@ -706,33 +745,70 @@ set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING
### ext libs on system
#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_LIBRARY:FILEPATH=some_location/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=some_location/include")
#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSZIP_LIBRARY:FILEPATH=some_location/lib/szlib.lib -DSZIP_INCLUDE_DIR:PATH=some_location/include")
-
+### disable ext libs building
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF")
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF")
+#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF")
#### fortran ####
-### disable Fortran 2003
-#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_F2003:BOOL=OFF")
-### disable Fortran
-#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
-
-### Create install package with external libraries (szip, zlib)
-set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACKAGE_EXTLIBS:BOOL=ON")
+### enable Fortran 2003 depends on HDF5_BUILD_FORTRAN
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_F2003:BOOL=ON")
+### disable Fortran; change OFF to ON in order to build FORTRAN libraries
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
### disable test program builds
#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF")
### disable packaging
#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_NO_PACKAGES:BOOL=ON")
-
-### disable building examples
-#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_EXAMPLES:BOOL=OFF")
-
-### disable building tests
-#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF")
+### Create install package with external libraries (szip, zlib, jpeg)
+set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACKAGE_EXTLIBS:BOOL=ON")
### change install prefix
#set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX:PATH=install")
+
###################################################################
-include(${CTEST_SCRIPT_DIRECTORY}/CTestScript.cmake)
+if(WIN32)
+ include(${CTEST_SCRIPT_DIRECTORY}\\CTestScript.cmake)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.exe")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.exe" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.msi")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.msi" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.zip")
+ file(COPY "${CTEST_BINARY_DIRECTORY}\\HDF5-${CTEST_SOURCE_VERSION}-win${SITE_OS_BITS}.zip" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+else()
+ include(${CTEST_SCRIPT_DIRECTORY}/CTestScript.cmake)
+ if(APPLE)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.dmg")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.dmg" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Darwin.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ else()
+ if(CYGWIN)
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-CYGWIN.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ else()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.sh")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.sh" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ if(EXISTS "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.tar.gz")
+ file(COPY "${CTEST_BINARY_DIRECTORY}/HDF5-${CTEST_SOURCE_VERSION}-Linux.tar.gz" DESTINATION ${CTEST_SCRIPT_DIRECTORY})
+ endif()
+ endif()
+ endif()
+endif()
========================================================================
diff --git a/release_docs/INSTALL_Cygwin.txt b/release_docs/INSTALL_Cygwin.txt
index 2b72cac..26d3cb9 100644
--- a/release_docs/INSTALL_Cygwin.txt
+++ b/release_docs/INSTALL_Cygwin.txt
@@ -34,7 +34,7 @@ Preconditions:
The following compilers are supported by HDF5 and included in the Cygwin
package system:
- gcc (4.7.3), which includes:
+ gcc (4.7.3 and 4.9.2), which includes:
gcc4-core : C compiler
gcc4-g++ : C++ compiler
gcc4-fortran : fortran compiler
@@ -72,7 +72,6 @@ Preconditions:
The latest supported public release of SZIP is available from
ftp://ftp.hdfgroup.org/lib-external/szip/2.1.
-
2.3 Additional Utilities
@@ -260,6 +259,11 @@ Build, Test and Install HDF5 on Cygwin
dt_arith tests may fail due to the use of fork. This is a known issue
with cygwin on Windows.
+ "make check" fails when building shared lib files is enabled. The default
+ on Cygwin has been changed to disable shared. It can be enabled with
+ the --enable-shared configure option but is likely to fail "make check"
+ with GCC compilers.
+
-----------------------------------------------------------------------
Need Further assistance, email help@hdfgroup.org
diff --git a/release_docs/INSTALL_parallel b/release_docs/INSTALL_parallel
index c38c3fc..e4c540c 100644
--- a/release_docs/INSTALL_parallel
+++ b/release_docs/INSTALL_parallel
@@ -49,54 +49,15 @@ more detailed explanations.
----------------------------
HDF5 knows several parallel compilers: mpicc, hcc, mpcc, mpcc_r. To build
parallel HDF5 with one of the above, just set CC as it and configure.
-The "--enable-parallel" is optional in this case.
- $ CC=/usr/local/mpi/bin/mpicc ./configure --prefix=<install-directory>
+ $ CC=/usr/local/mpi/bin/mpicc ./configure --enable-parallel --prefix=<install-directory>
$ make # build the library
$ make check # verify the correctness
# Read the Details section about parallel tests.
$ make install
-2.2. IBM SP
------------
-During the build stage, the H5detect is compiled and executed to generate
-the source file H5Tinit.c which is compiled as part of the HDF5 library. In
-parallel mode, make sure your environment variables are set correctly to
-execute a single process mpi application. Otherwise, multiple processes
-attempt to write to the same H5Tinit.c file, resulting in a scrambled
-source file. Unfortunately, the setting varies from machine to machine.
-E.g., the following works for the IBM SP machine at LLNL.
-
- setenv MP_PROCS 1
- setenv MP_NODES 1
- setenv MP_LABELIO no
- setenv MP_RMPOOL 0
- setenv LLNL_COMPILE_SINGLE_THREADED TRUE # for LLNL site only
-
-The shared library configuration is problematic. So, only static library
-is supported.
-
-Then do the following steps:
-
- $ ./configure --disable-shared --prefix=<install-directory>
- $ make # build the library
- $ make check # verify the correctness
- # Read the Details section about parallel tests.
- $ make install
-
-We also suggest that you add "-qxlf90=autodealloc" to FCFLAGS when building
-parallel with fortran enabled. This can be done by invoking:
-
- setenv FCFLAGS -qxlf90=autodealloc # 32 bit build
-or
- setenv FCFLAGS "-q64 -qxlf90=autodealloc" # 64 bit build
-
-prior to running configure. Recall that the "-q64" is necessary for 64
-bit builds.
-
-
-2.3. Linux 2.4 and greater
+2.2. Linux 2.4 and greater
--------------------------
Be sure that your installation of MPICH was configured with the following
configuration command-line option:
@@ -107,7 +68,7 @@ This allows for >2GB sized files on Linux systems and is only available with
Linux kernels 2.4 and greater.
-2.4. Hopper (Cray XE6) (for v1.8 and later)
+2.3. Hopper (Cray XE6) (for v1.8 and later)
-------------------------
The following steps are for building HDF5 for the Hopper compute
@@ -176,16 +137,8 @@ a properly installed parallel compiler (e.g., MPICH's mpicc or IBM's mpcc_r)
and supply the compiler name as the value of the CC environment variable.
For examples,
- $ CC=mpcc_r ./configure
- $ CC=/usr/local/mpi/bin/mpicc ./configure
-
-If no such a compiler command is available then you must use your normal
-C compiler along with the location(s) of MPI/MPI-IO files to be used.
-For example,
-
- $ CPPFLAGS=-I/usr/local/mpi/include \
- LDFLAGS=-L/usr/local/mpi/lib/LINUX/ch_p4 \
- ./configure --enable-parallel=mpich
+ $ CC=mpcc_r ./configure --enable-parallel
+ $ CC=/usr/local/mpi/bin/mpicc ./configure --enable-parallel
If a parallel library is being built then configure attempts to determine how
to run a parallel application on one processor and on many processors. If the
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 17f9ac1..6b223fc 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.216 currently under development
+HDF5 version 1.9.219 currently under development
================================================================================
@@ -117,6 +117,18 @@ New Features
Library:
--------
+ - H5F_ACC_DEBUG labeled "deprecated"
+
+ The symbol was originally used to emit some extra debugging
+ informationi in the multi VFD. The underlying functionality
+ was removed due to disuse in HDF5 1.8.16 though the symbol
+ remained defined since it was visible in H5Fpublic.h.
+
+ In this release, the symbol has been labeled deprecated and will
+ not be defined when H5_NO_DEPRECATED_SYMBOLS is defined.
+
+ (DER - 2015-04-30, HDFFV-1074)
+
- The library can load filter libraries dynamically during runtime. Users
can set the search path through environment variable HDF5_PLUGIN_PATH
and call H5Pset_filter to enable a dynamic filter. (SLU - 2013/04/08)
@@ -1383,6 +1395,11 @@ The following platforms are not supported but have been tested for this release.
Known Problems
==============
+* "make check" fails on CYGWIN when building shared lib files is enabled. The
+ default on Cygwin has been changed to disable shared. It can be enabled with
+ the --enable-shared configure option but is likely to fail "make check"
+ with GCC compilers. (LK -2015/04/16)
+
* CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
catches some undefined behavior in the alignment algorithm of the macro DETECT_I
in H5detect.c (Issue 8147). Since the algorithm is trying to detect the alignment
diff --git a/release_docs/USING_HDF5_CMake.txt b/release_docs/USING_HDF5_CMake.txt
index 347876c..514cced 100644
--- a/release_docs/USING_HDF5_CMake.txt
+++ b/release_docs/USING_HDF5_CMake.txt
@@ -107,7 +107,7 @@ These steps are described in more detail below.
<options> is:
* BUILD_TESTING:BOOL=ON
- * USE_SHARED_LIBS:BOOL=[ON | OFF]
+ * BUILD_SHARED_LIBS:BOOL=[ON | OFF]
2. Configure the cache settings
@@ -131,7 +131,7 @@ These steps are described in more detail below.
2.2 Alternative command line example on Windows in c:\MyHDFstuff\hdf5\build directory:
- cmake -G "Visual Studio 11" -DBUILD_TESTING:BOOL=ON -DUSE_SHARED_LIBS:BOOL=ON ..
+ cmake -G "Visual Studio 11" -DBUILD_TESTING:BOOL=ON ..
3. Build HDF5 Applications
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ba345fa..e7b6b0c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -771,16 +771,8 @@ set (H5_PRIVATE_HEADERS
# Setup the H5Detect utility which generates H5Tinit with platform
# specific type checks inside
#-----------------------------------------------------------------------------
-#add_executable (H5detect ${HDF5_SRC_DIR}/H5detect.c)
-#TARGET_C_PROPERTIES (H5detect STATIC " " " ")
-IF (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
- SET (LOCAL_OPT_FLAG "-O0")
-ELSE (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
- SET (LOCAL_OPT_FLAG " ")
-ENDIF (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
-ADD_EXECUTABLE (H5detect ${HDF5_SRC_DIR}/H5detect.c)
-TARGET_C_PROPERTIES (H5detect STATIC ${LOCAL_OPT_FLAG} " ")
-
+add_executable (H5detect ${HDF5_SRC_DIR}/H5detect.c)
+TARGET_C_PROPERTIES (H5detect STATIC " " " ")
if (MSVC OR MINGW)
target_link_libraries (H5detect "ws2_32.lib")
endif (MSVC OR MINGW)
diff --git a/src/H5A.c b/src/H5A.c
index d474234..a20f730 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -21,7 +21,7 @@
#define H5O_PACKAGE /*suppress error about including H5Opkg */
/* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC H5A_init_interface
+#define H5_INTERFACE_INIT_FUNC H5A__init_interface
/***********/
@@ -125,9 +125,9 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5A_init_interface -- Initialize interface-specific information
+ H5A__init_interface -- Initialize interface-specific information
USAGE
- herr_t H5A_init_interface()
+ herr_t H5A__init_interface()
RETURNS
Non-negative on success/Negative on failure
@@ -136,11 +136,11 @@ DESCRIPTION
--------------------------------------------------------------------------*/
static herr_t
-H5A_init_interface(void)
+H5A__init_interface(void)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/*
* Create attribute ID type.
@@ -150,7 +150,7 @@ H5A_init_interface(void)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_init_interface() */
+} /* end H5A__init_interface() */
/*--------------------------------------------------------------------------
@@ -407,7 +407,7 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t UNUSED aapl_id)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from object header for attribute: '%s'", attr_name)
/* Finish initializing attribute */
- if(H5A_open_common(&loc, attr) < 0)
+ if(H5A__open_common(&loc, attr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to initialize attribute")
/* Register the attribute and get an ID for it */
@@ -595,7 +595,7 @@ H5Awrite(hid_t attr_id, hid_t dtype_id, const void *buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
/* Go write the actual data to the attribute */
- if((ret_value = H5A_write(attr, mem_type, buf, H5AC_dxpl_id)) < 0)
+ if((ret_value = H5A__write(attr, mem_type, buf, H5AC_dxpl_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute")
done:
@@ -638,7 +638,7 @@ H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
/* Go write the actual data to the attribute */
- if((ret_value = H5A_read(attr, mem_type, buf, H5AC_ind_dxpl_id)) < 0)
+ if((ret_value = H5A__read(attr, mem_type, buf, H5AC_ind_dxpl_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_READERROR, FAIL, "unable to read attribute")
done:
@@ -799,7 +799,7 @@ H5Aget_name(hid_t attr_id, size_t buf_size, char *buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid buffer")
/* Call private function in turn */
- if(0 > (ret_value = H5A_get_name(my_attr, buf_size, buf)))
+ if(0 > (ret_value = H5A__get_name(my_attr, buf_size, buf)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't get attribute name")
done:
@@ -942,7 +942,7 @@ H5Aget_info(hid_t attr_id, H5A_info_t *ainfo)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
/* Get the attribute information */
- if(H5A_get_info(attr, ainfo) < 0)
+ if(H5A__get_info(attr, ainfo) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
@@ -996,7 +996,7 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
/* Get the attribute information */
- if(H5A_get_info(attr, ainfo) < 0)
+ if(H5A__get_info(attr, ainfo) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
@@ -1058,7 +1058,7 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
/* Get the attribute information */
- if(H5A_get_info(attr, ainfo) < 0)
+ if(H5A__get_info(attr, ainfo) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to get attribute info")
done:
diff --git a/src/H5AC.c b/src/H5AC.c
index 7ed5047..e6bcbb6 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -598,7 +598,7 @@ H5AC_dest(H5F_t *f, hid_t dxpl_id)
#ifdef H5_HAVE_PARALLEL
H5AC_aux_t * aux_ptr = NULL;
#endif /* H5_HAVE_PARALLEL */
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index ccecd83..cf4c122 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -42,6 +42,7 @@
#define H5AC__TRACE_FILE_ENABLED 0
#endif /* H5_METADATA_TRACE_FILE */
+/* Global metadata tag values */
#define H5AC__INVALID_TAG (haddr_t)0
#define H5AC__IGNORE_TAG (haddr_t)1
#define H5AC__SUPERBLOCK_TAG (haddr_t)2
@@ -339,7 +340,7 @@ H5_DLLVAR hid_t H5AC_ind_dxpl_id;
H5_DLL herr_t H5AC_init(void);
H5_DLL herr_t H5AC_create(const H5F_t *f, H5AC_cache_config_t *config_ptr);
H5_DLL herr_t H5AC_get_entry_status(const H5F_t *f, haddr_t addr,
- unsigned * status_ptr);
+ unsigned *status_ptr);
H5_DLL herr_t H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
haddr_t addr, void *thing, unsigned int flags);
H5_DLL herr_t H5AC_pin_protected_entry(void *thing);
@@ -349,57 +350,35 @@ H5_DLL void * H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
H5_DLL herr_t H5AC_resize_entry(void *thing, size_t new_size);
H5_DLL herr_t H5AC_unpin_entry(void *thing);
H5_DLL herr_t H5AC_destroy_flush_dependency(void *parent_thing, void *child_thing);
-H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id,
- const H5AC_class_t *type, haddr_t addr,
- void *thing, unsigned flags);
+H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
+ haddr_t addr, void *thing, unsigned flags);
H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5AC_mark_entry_dirty(void *thing);
H5_DLL herr_t H5AC_move_entry(H5F_t *f, const H5AC_class_t *type,
- haddr_t old_addr, haddr_t new_addr);
-
+ haddr_t old_addr, haddr_t new_addr);
H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
-
H5_DLL herr_t H5AC_expunge_entry(H5F_t *f, hid_t dxpl_id,
- const H5AC_class_t *type, haddr_t addr,
- unsigned flags);
-
+ const H5AC_class_t *type, haddr_t addr, unsigned flags);
H5_DLL herr_t H5AC_set_sync_point_done_callback(H5C_t *cache_ptr,
void (*sync_point_done)(int num_writes, haddr_t *written_entries_tbl));
-
H5_DLL herr_t H5AC_set_write_done_callback(H5C_t * cache_ptr,
void (* write_done)(void));
H5_DLL herr_t H5AC_stats(const H5F_t *f);
-
H5_DLL herr_t H5AC_dump_cache(const H5F_t *f);
-
H5_DLL herr_t H5AC_get_cache_auto_resize_config(const H5AC_t * cache_ptr,
- H5AC_cache_config_t *config_ptr);
-
-H5_DLL herr_t H5AC_get_cache_size(H5AC_t * cache_ptr,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr);
-
-H5_DLL herr_t H5AC_get_cache_hit_rate(H5AC_t * cache_ptr,
- double * hit_rate_ptr);
-
-H5_DLL herr_t H5AC_reset_cache_hit_rate_stats(H5AC_t * cache_ptr);
-
+ H5AC_cache_config_t *config_ptr);
+H5_DLL herr_t H5AC_get_cache_size(H5AC_t *cache_ptr, size_t *max_size_ptr,
+ size_t *min_clean_size_ptr, size_t *cur_size_ptr, int32_t *cur_num_entries_ptr);
+H5_DLL herr_t H5AC_get_cache_hit_rate(H5AC_t *cache_ptr, double *hit_rate_ptr);
+H5_DLL herr_t H5AC_reset_cache_hit_rate_stats(H5AC_t *cache_ptr);
H5_DLL herr_t H5AC_set_cache_auto_resize_config(H5AC_t *cache_ptr,
- H5AC_cache_config_t *config_ptr);
-
-H5_DLL herr_t H5AC_validate_config(H5AC_cache_config_t * config_ptr);
-
-H5_DLL herr_t H5AC_close_trace_file( H5AC_t * cache_ptr);
-
-H5_DLL herr_t H5AC_open_trace_file(H5AC_t * cache_ptr,
- const char * trace_file_name);
+ H5AC_cache_config_t *config_ptr);
+H5_DLL herr_t H5AC_validate_config(H5AC_cache_config_t *config_ptr);
+H5_DLL herr_t H5AC_close_trace_file(H5AC_t *cache_ptr);
+H5_DLL herr_t H5AC_open_trace_file(H5AC_t *cache_ptr, const char *trace_file_name);
H5_DLL herr_t H5AC_tag(hid_t dxpl_id, haddr_t metadata_tag, haddr_t * prev_tag);
-
H5_DLL herr_t H5AC_retag_copied_metadata(H5F_t * f, haddr_t metadata_tag);
-
H5_DLL herr_t H5AC_ignore_tags(H5F_t * f);
#ifdef H5_HAVE_PARALLEL
diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c
index 9b7dba6..5e74e55 100644
--- a/src/H5Abtree2.c
+++ b/src/H5Abtree2.c
@@ -79,27 +79,27 @@ typedef struct H5A_fh_ud_cmp_t {
/* v2 B-tree function callbacks */
/* v2 B-tree driver callbacks for 'creation order' index */
-static herr_t H5A_dense_btree2_corder_store(void *native, const void *udata);
-static herr_t H5A_dense_btree2_corder_compare(const void *rec1, const void *rec2);
-static herr_t H5A_dense_btree2_corder_encode(uint8_t *raw, const void *native,
+static herr_t H5A__dense_btree2_corder_store(void *native, const void *udata);
+static herr_t H5A__dense_btree2_corder_compare(const void *rec1, const void *rec2);
+static herr_t H5A__dense_btree2_corder_encode(uint8_t *raw, const void *native,
void *ctx);
-static herr_t H5A_dense_btree2_corder_decode(const uint8_t *raw, void *native,
+static herr_t H5A__dense_btree2_corder_decode(const uint8_t *raw, void *native,
void *ctx);
-static herr_t H5A_dense_btree2_corder_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
+static herr_t H5A__dense_btree2_corder_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
int indent, int fwidth, const void *record, const void *_udata);
/* v2 B-tree driver callbacks for 'name' index */
-static herr_t H5A_dense_btree2_name_store(void *native, const void *udata);
-static herr_t H5A_dense_btree2_name_compare(const void *rec1, const void *rec2);
-static herr_t H5A_dense_btree2_name_encode(uint8_t *raw, const void *native,
+static herr_t H5A__dense_btree2_name_store(void *native, const void *udata);
+static herr_t H5A__dense_btree2_name_compare(const void *rec1, const void *rec2);
+static herr_t H5A__dense_btree2_name_encode(uint8_t *raw, const void *native,
void *ctx);
-static herr_t H5A_dense_btree2_name_decode(const uint8_t *raw, void *native,
+static herr_t H5A__dense_btree2_name_decode(const uint8_t *raw, void *native,
void *ctx);
-static herr_t H5A_dense_btree2_name_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
+static herr_t H5A__dense_btree2_name_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
int indent, int fwidth, const void *record, const void *_udata);
/* Fractal heap function callbacks */
-static herr_t H5A_dense_fh_name_cmp(const void *obj, size_t obj_len, void *op_data);
+static herr_t H5A__dense_fh_name_cmp(const void *obj, size_t obj_len, void *op_data);
/*********************/
@@ -112,11 +112,11 @@ const H5B2_class_t H5A_BT2_NAME[1]={{ /* B-tree class information */
sizeof(H5A_dense_bt2_name_rec_t), /* Size of native record */
NULL, /* Create client callback context */
NULL, /* Destroy client callback context */
- H5A_dense_btree2_name_store, /* Record storage callback */
- H5A_dense_btree2_name_compare, /* Record comparison callback */
- H5A_dense_btree2_name_encode, /* Record encoding callback */
- H5A_dense_btree2_name_decode, /* Record decoding callback */
- H5A_dense_btree2_name_debug, /* Record debugging callback */
+ H5A__dense_btree2_name_store, /* Record storage callback */
+ H5A__dense_btree2_name_compare, /* Record comparison callback */
+ H5A__dense_btree2_name_encode, /* Record encoding callback */
+ H5A__dense_btree2_name_decode, /* Record decoding callback */
+ H5A__dense_btree2_name_debug, /* Record debugging callback */
NULL, /* Create debugging context */
NULL /* Destroy debugging context */
}};
@@ -128,11 +128,11 @@ const H5B2_class_t H5A_BT2_CORDER[1]={{ /* B-tree class information */
sizeof(H5A_dense_bt2_corder_rec_t),/* Size of native record */
NULL, /* Create client callback context */
NULL, /* Destroy client callback context */
- H5A_dense_btree2_corder_store, /* Record storage callback */
- H5A_dense_btree2_corder_compare, /* Record comparison callback */
- H5A_dense_btree2_corder_encode, /* Record encoding callback */
- H5A_dense_btree2_corder_decode, /* Record decoding callback */
- H5A_dense_btree2_corder_debug, /* Record debugging callback */
+ H5A__dense_btree2_corder_store, /* Record storage callback */
+ H5A__dense_btree2_corder_compare, /* Record comparison callback */
+ H5A__dense_btree2_corder_encode, /* Record encoding callback */
+ H5A__dense_btree2_corder_decode, /* Record decoding callback */
+ H5A__dense_btree2_corder_debug, /* Record debugging callback */
NULL, /* Create debugging context */
NULL /* Destroy debugging context */
}};
@@ -150,7 +150,7 @@ const H5B2_class_t H5A_BT2_CORDER[1]={{ /* B-tree class information */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_fh_name_cmp
+ * Function: H5A__dense_fh_name_cmp
*
* Purpose: Compares the name of a attribute in a fractal heap to another
* name
@@ -164,14 +164,14 @@ const H5B2_class_t H5A_BT2_CORDER[1]={{ /* B-tree class information */
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_fh_name_cmp(const void *obj, size_t UNUSED obj_len, void *_udata)
+H5A__dense_fh_name_cmp(const void *obj, size_t UNUSED obj_len, void *_udata)
{
H5A_fh_ud_cmp_t *udata = (H5A_fh_ud_cmp_t *)_udata; /* User data for 'op' callback */
H5A_t *attr = NULL; /* Pointer to attribute created from heap object */
hbool_t took_ownership = FALSE; /* Whether the "found" operator took ownership of the attribute */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Decode attribute information */
if(NULL == (attr = (H5A_t *)H5O_msg_decode(udata->f, udata->dxpl_id, NULL, H5O_ATTR_ID, (const unsigned char *)obj)))
@@ -200,11 +200,11 @@ done:
H5O_msg_free(H5O_ATTR_ID, attr);
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_dense_fh_name_cmp() */
+} /* end H5A__dense_fh_name_cmp() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_name_store
+ * Function: H5A__dense_btree2_name_store
*
* Purpose: Store user information into native record for v2 B-tree
*
@@ -217,12 +217,12 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_name_store(void *_nrecord, const void *_udata)
+H5A__dense_btree2_name_store(void *_nrecord, const void *_udata)
{
const H5A_bt2_ud_ins_t *udata = (const H5A_bt2_ud_ins_t *)_udata;
H5A_dense_bt2_name_rec_t *nrecord = (H5A_dense_bt2_name_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Copy user information info native record */
nrecord->id = udata->id;
@@ -231,11 +231,11 @@ H5A_dense_btree2_name_store(void *_nrecord, const void *_udata)
nrecord->hash = udata->common.name_hash;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_name_store() */
+} /* H5A__dense_btree2_name_store() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_name_compare
+ * Function: H5A__dense_btree2_name_compare
*
* Purpose: Compare two native information records, according to some key
*
@@ -249,13 +249,13 @@ H5A_dense_btree2_name_store(void *_nrecord, const void *_udata)
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
{
const H5A_bt2_ud_common_t *bt2_udata = (const H5A_bt2_ud_common_t *)_bt2_udata;
const H5A_dense_bt2_name_rec_t *bt2_rec = (const H5A_dense_bt2_name_rec_t *)_bt2_rec;
herr_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(bt2_udata);
@@ -294,7 +294,7 @@ H5A_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
HDassert(fheap);
/* Check if the user's attribute and the B-tree's attribute have the same name */
- status = H5HF_op(fheap, bt2_udata->dxpl_id, &bt2_rec->id, H5A_dense_fh_name_cmp, &fh_udata);
+ status = H5HF_op(fheap, bt2_udata->dxpl_id, &bt2_rec->id, H5A__dense_fh_name_cmp, &fh_udata);
HDassert(status >= 0);
/* Callback will set comparison value */
@@ -302,11 +302,11 @@ H5A_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
} /* end else */
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_dense_btree2_name_compare() */
+} /* H5A__dense_btree2_name_compare() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_name_encode
+ * Function: H5A__dense_btree2_name_encode
*
* Purpose: Encode native information into raw form for storing on disk
*
@@ -319,11 +319,11 @@ H5A_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_name_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ctx)
+H5A__dense_btree2_name_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ctx)
{
const H5A_dense_bt2_name_rec_t *nrecord = (const H5A_dense_bt2_name_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Encode the record's fields */
HDmemcpy(raw, nrecord->id.id, (size_t)H5O_FHEAP_ID_LEN);
@@ -333,11 +333,11 @@ H5A_dense_btree2_name_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ct
UINT32ENCODE(raw, nrecord->hash)
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_name_encode() */
+} /* H5A__dense_btree2_name_encode() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_name_decode
+ * Function: H5A__dense_btree2_name_decode
*
* Purpose: Decode raw disk form of record into native form
*
@@ -350,11 +350,11 @@ H5A_dense_btree2_name_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ct
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_name_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ctx)
+H5A__dense_btree2_name_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ctx)
{
H5A_dense_bt2_name_rec_t *nrecord = (H5A_dense_bt2_name_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Decode the record's fields */
HDmemcpy(nrecord->id.id, raw, (size_t)H5O_FHEAP_ID_LEN);
@@ -364,11 +364,11 @@ H5A_dense_btree2_name_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ct
UINT32DECODE(raw, nrecord->hash)
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_name_decode() */
+} /* H5A__dense_btree2_name_decode() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_name_debug
+ * Function: H5A__dense_btree2_name_debug
*
* Purpose: Debug native form of record
*
@@ -381,23 +381,23 @@ H5A_dense_btree2_name_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ct
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_name_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
+H5A__dense_btree2_name_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
int indent, int fwidth, const void *_nrecord, const void UNUSED *_udata)
{
const H5A_dense_bt2_name_rec_t *nrecord = (const H5A_dense_bt2_name_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u, %08lx}\n", indent, "", fwidth,
"Record:",
(hsize_t)nrecord->id.val, (unsigned)nrecord->flags, (unsigned)nrecord->corder, (unsigned long)nrecord->hash);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_name_debug() */
+} /* H5A__dense_btree2_name_debug() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_corder_store
+ * Function: H5A__dense_btree2_corder_store
*
* Purpose: Store user information into native record for v2 B-tree
*
@@ -410,12 +410,12 @@ H5A_dense_btree2_name_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dx
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_corder_store(void *_nrecord, const void *_udata)
+H5A__dense_btree2_corder_store(void *_nrecord, const void *_udata)
{
const H5A_bt2_ud_ins_t *udata = (const H5A_bt2_ud_ins_t *)_udata;
H5A_dense_bt2_corder_rec_t *nrecord = (H5A_dense_bt2_corder_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Copy user information info native record */
nrecord->id = udata->id;
@@ -423,11 +423,11 @@ H5A_dense_btree2_corder_store(void *_nrecord, const void *_udata)
nrecord->corder = udata->common.corder;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_corder_store() */
+} /* H5A__dense_btree2_corder_store() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_corder_compare
+ * Function: H5A__dense_btree2_corder_compare
*
* Purpose: Compare two native information records, according to some key
*
@@ -441,13 +441,13 @@ H5A_dense_btree2_corder_store(void *_nrecord, const void *_udata)
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5A__dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
{
const H5A_bt2_ud_common_t *bt2_udata = (const H5A_bt2_ud_common_t *)_bt2_udata;
const H5A_dense_bt2_corder_rec_t *bt2_rec = (const H5A_dense_bt2_corder_rec_t *)_bt2_rec;
herr_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(bt2_udata);
@@ -462,11 +462,11 @@ H5A_dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
ret_value = 0;
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_dense_btree2_corder_compare() */
+} /* H5A__dense_btree2_corder_compare() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_corder_encode
+ * Function: H5A__dense_btree2_corder_encode
*
* Purpose: Encode native information into raw form for storing on disk
*
@@ -479,11 +479,11 @@ H5A_dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_corder_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ctx)
+H5A__dense_btree2_corder_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ctx)
{
const H5A_dense_bt2_corder_rec_t *nrecord = (const H5A_dense_bt2_corder_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Encode the record's fields */
HDmemcpy(raw, nrecord->id.id, (size_t)H5O_FHEAP_ID_LEN);
@@ -492,11 +492,11 @@ H5A_dense_btree2_corder_encode(uint8_t *raw, const void *_nrecord, void UNUSED *
UINT32ENCODE(raw, nrecord->corder)
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_corder_encode() */
+} /* H5A__dense_btree2_corder_encode() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_corder_decode
+ * Function: H5A__dense_btree2_corder_decode
*
* Purpose: Decode raw disk form of record into native form
*
@@ -509,11 +509,11 @@ H5A_dense_btree2_corder_encode(uint8_t *raw, const void *_nrecord, void UNUSED *
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_corder_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ctx)
+H5A__dense_btree2_corder_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ctx)
{
H5A_dense_bt2_corder_rec_t *nrecord = (H5A_dense_bt2_corder_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Decode the record's fields */
HDmemcpy(nrecord->id.id, raw, (size_t)H5O_FHEAP_ID_LEN);
@@ -522,11 +522,11 @@ H5A_dense_btree2_corder_decode(const uint8_t *raw, void *_nrecord, void UNUSED *
UINT32DECODE(raw, nrecord->corder)
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_corder_decode() */
+} /* H5A__dense_btree2_corder_decode() */
/*-------------------------------------------------------------------------
- * Function: H5A_dense_btree2_corder_debug
+ * Function: H5A__dense_btree2_corder_debug
*
* Purpose: Debug native form of record
*
@@ -539,17 +539,17 @@ H5A_dense_btree2_corder_decode(const uint8_t *raw, void *_nrecord, void UNUSED *
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_btree2_corder_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
+H5A__dense_btree2_corder_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
int indent, int fwidth, const void *_nrecord, const void UNUSED *_udata)
{
const H5A_dense_bt2_corder_rec_t *nrecord = (const H5A_dense_bt2_corder_rec_t *)_nrecord;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u}\n", indent, "", fwidth,
"Record:",
(hsize_t)nrecord->id.val, (unsigned)nrecord->flags, (unsigned)nrecord->corder);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5A_dense_btree2_corder_debug() */
+} /* H5A__dense_btree2_corder_debug() */
diff --git a/src/H5Adense.c b/src/H5Adense.c
index 0b73a20..674ab5d 100644
--- a/src/H5Adense.c
+++ b/src/H5Adense.c
@@ -538,7 +538,7 @@ H5A_dense_insert(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo, H5A_t *attr)
udata.common.shared_fheap = shared_fheap;
udata.common.name = attr->shared->name;
udata.common.name_hash = H5_checksum_lookup3(attr->shared->name, HDstrlen(attr->shared->name), 0);
- H5_ASSIGN_OVERFLOW(udata.common.flags, mesg_flags, unsigned, uint8_t);
+ H5_CHECKED_ASSIGN(udata.common.flags, uint8_t, mesg_flags, unsigned);
udata.common.corder = attr->shared->crt_idx;
udata.common.found_op = NULL;
udata.common.found_op_data = NULL;
@@ -1082,7 +1082,7 @@ H5A__dense_iterate_bt2_cb(const void *_record, void *_bt2_udata)
H5A_info_t ainfo; /* Info for attribute */
/* Get the attribute information */
- if(H5A_get_info(fh_udata.attr, &ainfo) < 0)
+ if(H5A__get_info(fh_udata.attr, &ainfo) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, H5_ITER_ERROR, "unable to get attribute info")
/* Make the application callback */
diff --git a/src/H5Aint.c b/src/H5Aint.c
index e28c2cc..9012f6d 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -92,7 +92,7 @@ typedef struct {
static herr_t H5A__compact_build_table_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
unsigned sequence, unsigned *oh_flags_ptr, void *_udata/*in,out*/);
-static herr_t H5A_dense_build_table_cb(const H5A_t *attr, void *_udata);
+static herr_t H5A__dense_build_table_cb(const H5A_t *attr, void *_udata);
static int H5A__attr_cmp_name_inc(const void *attr1, const void *attr2);
static int H5A__attr_cmp_name_dec(const void *attr1, const void *attr2);
static int H5A__attr_cmp_corder_inc(const void *attr1, const void *attr2);
@@ -255,7 +255,7 @@ H5A_create(const H5G_loc_t *loc, const char *name, const H5T_t *type,
/* Get # of elements for attribute's dataspace */
if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, NULL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(nelmts, size_t, snelmts, hssize_t);
HDassert(attr->shared->dt_size > 0);
HDassert(attr->shared->ds_size > 0);
@@ -283,13 +283,13 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5A_open_common
+ * Function: H5A__open_common
*
* Purpose:
* Finishes initializing an attributes the open
*
* Usage:
- * herr_t H5A_open_common(loc, name, dxpl_id)
+ * herr_t H5A__open_common(loc, name, dxpl_id)
* const H5G_loc_t *loc; IN: Pointer to group location for object
* H5A_t *attr; IN/OUT: Pointer to attribute to initialize
*
@@ -301,11 +301,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5A_open_common(const H5G_loc_t *loc, H5A_t *attr)
+H5A__open_common(const H5G_loc_t *loc, H5A_t *attr)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* check args */
HDassert(loc);
@@ -336,7 +336,7 @@ H5A_open_common(const H5G_loc_t *loc, H5A_t *attr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_open_common() */
+} /* H5A__open_common() */
/*-------------------------------------------------------------------------
@@ -383,7 +383,7 @@ H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name, H5_index_t idx_type,
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, NULL, "unable to load attribute info from object header")
/* Finish initializing attribute */
- if(H5A_open_common(&obj_loc, attr) < 0)
+ if(H5A__open_common(&obj_loc, attr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
/* Set return value */
@@ -448,7 +448,7 @@ H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name, const char *attr_na
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to load attribute info from object header")
/* Finish initializing attribute */
- if(H5A_open_common(loc, attr) < 0)
+ if(H5A__open_common(loc, attr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
/* Set return value */
@@ -470,11 +470,114 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5A_write
+ H5A__read
+ PURPOSE
+ Actually read in data from an attribute
+ USAGE
+ herr_t H5A__read (attr, mem_type, buf)
+ H5A_t *attr; IN: Attribute to read
+ const H5T_t *mem_type; IN: Memory datatype of buffer
+ void *buf; IN: Buffer for data to read
+ RETURNS
+ Non-negative on success/Negative on failure
+
+ DESCRIPTION
+ This function reads a complete attribute from disk.
+--------------------------------------------------------------------------*/
+herr_t
+H5A__read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
+{
+ uint8_t *tconv_buf = NULL; /* datatype conv buffer*/
+ uint8_t *bkg_buf = NULL; /* background buffer */
+ hssize_t snelmts; /* elements in attribute */
+ size_t nelmts; /* elements in attribute*/
+ H5T_path_t *tpath = NULL; /* type conversion info */
+ hid_t src_id = -1, dst_id = -1;/* temporary type atoms*/
+ size_t src_type_size; /* size of source type */
+ size_t dst_type_size; /* size of destination type */
+ size_t buf_size; /* desired buffer size */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ HDassert(attr);
+ HDassert(mem_type);
+ HDassert(buf);
+
+ /* Create buffer for data to store on disk */
+ if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
+ H5_CHECKED_ASSIGN(nelmts, size_t, snelmts, hssize_t);
+
+ if(nelmts > 0) {
+ /* Get the memory and file datatype sizes */
+ src_type_size = H5T_GET_SIZE(attr->shared->dt);
+ dst_type_size = H5T_GET_SIZE(mem_type);
+
+ /* Check if the attribute has any data yet, if not, fill with zeroes */
+ if(attr->obj_opened && !attr->shared->data)
+ HDmemset(buf, 0, (dst_type_size * nelmts));
+ else { /* Attribute exists and has a value */
+ /* Convert memory buffer into disk buffer */
+ /* Set up type conversion function */
+ if(NULL == (tpath = H5T_path_find(attr->shared->dt, mem_type, NULL, NULL, dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
+
+ /* Check for type conversion required */
+ if(!H5T_path_noop(tpath)) {
+ if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0 ||
+ (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+ /* Get the maximum buffer size needed and allocate it */
+ buf_size = nelmts * MAX(src_type_size, dst_type_size);
+ if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
+ if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+ /* Copy the attribute data into the buffer for conversion */
+ HDmemcpy(tconv_buf, attr->shared->data, (src_type_size * nelmts));
+
+ /* Perform datatype conversion. */
+ if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+
+ /* Copy the converted data into the user's buffer */
+ HDmemcpy(buf, tconv_buf, (dst_type_size * nelmts));
+ } /* end if */
+ /* No type conversion necessary */
+ else {
+ HDassert(dst_type_size == src_type_size);
+
+ /* Copy the attribute data into the user's buffer */
+ HDmemcpy(buf, attr->shared->data, (dst_type_size * nelmts));
+ } /* end else */
+ } /* end else */
+ } /* end if */
+
+done:
+ /* Release resources */
+ if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(tconv_buf)
+ tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
+ if(bkg_buf)
+ bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A__read() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5A__write
PURPOSE
Actually write out data to an attribute
USAGE
- herr_t H5A_write (attr, mem_type, buf)
+ herr_t H5A__write (attr, mem_type, buf)
H5A_t *attr; IN: Attribute to write
const H5T_t *mem_type; IN: Memory datatype of buffer
const void *buf; IN: Buffer of data to write
@@ -485,7 +588,7 @@ done:
This function writes a complete attribute to disk.
--------------------------------------------------------------------------*/
herr_t
-H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
+H5A__write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
{
uint8_t *tconv_buf = NULL; /* datatype conv buffer */
hbool_t tconv_owned = FALSE; /* Whether the datatype conv buffer is owned by attribute */
@@ -508,7 +611,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
/* Get # of elements for attribute's dataspace */
if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(nelmts, size_t, snelmts, hssize_t);
/* If there's actually data elements for the attribute, make a copy of the data passed in */
if(nelmts > 0) {
@@ -579,110 +682,53 @@ done:
bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
-} /* H5A_write() */
+} /* H5A__write() */
/*--------------------------------------------------------------------------
NAME
- H5A_read
+ H5A__get_name
PURPOSE
- Actually read in data from an attribute
- USAGE
- herr_t H5A_read (attr, mem_type, buf)
- H5A_t *attr; IN: Attribute to read
- const H5T_t *mem_type; IN: Memory datatype of buffer
- void *buf; IN: Buffer for data to read
+ Private function for H5Aget_name. Gets a copy of the name for an
+ attribute
RETURNS
- Non-negative on success/Negative on failure
-
+ This function returns the length of the attribute's name (which may be
+ longer than 'buf_size') on success or negative for failure.
DESCRIPTION
- This function reads a complete attribute from disk.
+ This function retrieves the name of an attribute for an attribute ID.
+ Up to 'buf_size' characters are stored in 'buf' followed by a '\0' string
+ terminator. If the name of the attribute is longer than 'buf_size'-1,
+ the string terminator is stored in the last position of the buffer to
+ properly terminate the string.
--------------------------------------------------------------------------*/
-herr_t
-H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
+ssize_t
+H5A__get_name(H5A_t *attr, size_t buf_size, char *buf)
{
- uint8_t *tconv_buf = NULL; /* datatype conv buffer*/
- uint8_t *bkg_buf = NULL; /* background buffer */
- hssize_t snelmts; /* elements in attribute */
- size_t nelmts; /* elements in attribute*/
- H5T_path_t *tpath = NULL; /* type conversion info */
- hid_t src_id = -1, dst_id = -1;/* temporary type atoms*/
- size_t src_type_size; /* size of source type */
- size_t dst_type_size; /* size of destination type */
- size_t buf_size; /* desired buffer size */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI_NOINIT
-
- HDassert(attr);
- HDassert(mem_type);
- HDassert(buf);
-
- /* Create buffer for data to store on disk */
- if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
-
- if(nelmts > 0) {
- /* Get the memory and file datatype sizes */
- src_type_size = H5T_GET_SIZE(attr->shared->dt);
- dst_type_size = H5T_GET_SIZE(mem_type);
-
- /* Check if the attribute has any data yet, if not, fill with zeroes */
- if(attr->obj_opened && !attr->shared->data)
- HDmemset(buf, 0, (dst_type_size * nelmts));
- else { /* Attribute exists and has a value */
- /* Convert memory buffer into disk buffer */
- /* Set up type conversion function */
- if(NULL == (tpath = H5T_path_find(attr->shared->dt, mem_type, NULL, NULL, dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
-
- /* Check for type conversion required */
- if(!H5T_path_noop(tpath)) {
- if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0 ||
- (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+ size_t copy_len, nbytes;
+ ssize_t ret_value;
- /* Get the maximum buffer size needed and allocate it */
- buf_size = nelmts * MAX(src_type_size, dst_type_size);
- if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
- if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
- /* Copy the attribute data into the buffer for conversion */
- HDmemcpy(tconv_buf, attr->shared->data, (src_type_size * nelmts));
+ /* get the real attribute length */
+ nbytes = HDstrlen(attr->shared->name);
+ HDassert((ssize_t)nbytes >= 0); /*overflow, pretty unlikely --rpm*/
- /* Perform datatype conversion. */
- if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+ /* compute the string length which will fit into the user's buffer */
+ copy_len = MIN(buf_size - 1, nbytes);
- /* Copy the converted data into the user's buffer */
- HDmemcpy(buf, tconv_buf, (dst_type_size * nelmts));
- } /* end if */
- /* No type conversion necessary */
- else {
- HDassert(dst_type_size == src_type_size);
+ /* Copy all/some of the name */
+ if(buf && copy_len > 0) {
+ HDmemcpy(buf, attr->shared->name, copy_len);
- /* Copy the attribute data into the user's buffer */
- HDmemcpy(buf, attr->shared->data, (dst_type_size * nelmts));
- } /* end else */
- } /* end else */
+ /* Terminate the string */
+ buf[copy_len]='\0';
} /* end if */
-done:
- /* Release resources */
- if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(tconv_buf)
- tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
- if(bkg_buf)
- bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
+ /* Set return value */
+ ret_value = (ssize_t)nbytes;
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_read() */
+} /* H5A__get_name() */
/*-------------------------------------------------------------------------
@@ -826,54 +872,8 @@ done:
} /* end H5Aget_create_plist() */
-/*--------------------------------------------------------------------------
- NAME
- H5A_get_name
- PURPOSE
- Private function for H5Aget_name. Gets a copy of the name for an
- attribute
- RETURNS
- This function returns the length of the attribute's name (which may be
- longer than 'buf_size') on success or negative for failure.
- DESCRIPTION
- This function retrieves the name of an attribute for an attribute ID.
- Up to 'buf_size' characters are stored in 'buf' followed by a '\0' string
- terminator. If the name of the attribute is longer than 'buf_size'-1,
- the string terminator is stored in the last position of the buffer to
- properly terminate the string.
---------------------------------------------------------------------------*/
-ssize_t
-H5A_get_name(H5A_t *attr, size_t buf_size, char *buf)
-{
- size_t copy_len, nbytes;
- ssize_t ret_value;
-
- FUNC_ENTER_NOAPI_NOERR
-
- /* get the real attribute length */
- nbytes = HDstrlen(attr->shared->name);
- HDassert((ssize_t)nbytes >= 0); /*overflow, pretty unlikely --rpm*/
-
- /* compute the string length which will fit into the user's buffer */
- copy_len = MIN(buf_size - 1, nbytes);
-
- /* Copy all/some of the name */
- if(buf && copy_len > 0) {
- HDmemcpy(buf, attr->shared->name, copy_len);
-
- /* Terminate the string */
- buf[copy_len]='\0';
- } /* end if */
-
- /* Set return value */
- ret_value = (ssize_t)nbytes;
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_get_name() */
-
-
/*-------------------------------------------------------------------------
- * Function: H5A_get_info
+ * Function: H5A__get_info
*
* Purpose: Retrieve information about an attribute.
*
@@ -886,7 +886,7 @@ H5A_get_name(H5A_t *attr, size_t buf_size, char *buf)
*-------------------------------------------------------------------------
*/
herr_t
-H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo)
+H5A__get_info(const H5A_t *attr, H5A_info_t *ainfo)
{
FUNC_ENTER_NOAPI_NOERR
@@ -907,7 +907,7 @@ H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo)
} /* end else */
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5A_get_info() */
+} /* end H5A__get_info() */
/*-------------------------------------------------------------------------
@@ -1347,7 +1347,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5A_dense_build_table_cb
+ * Function: H5A__dense_build_table_cb
*
* Purpose: Callback routine for building table of attributes from dense
* attribute storage.
@@ -1362,12 +1362,12 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_build_table_cb(const H5A_t *attr, void *_udata)
+H5A__dense_build_table_cb(const H5A_t *attr, void *_udata)
{
H5A_dense_bt_ud_t *udata = (H5A_dense_bt_ud_t *)_udata; /* 'User data' passed in */
herr_t ret_value = H5_ITER_CONT; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check arguments */
HDassert(attr);
@@ -1387,7 +1387,7 @@ H5A_dense_build_table_cb(const H5A_t *attr, void *_udata)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_dense_build_table_cb() */
+} /* end H5A__dense_build_table_cb() */
/*-------------------------------------------------------------------------
@@ -1453,7 +1453,7 @@ H5A_dense_build_table(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
/* Build iterator operator */
attr_op.op_type = H5A_ATTR_OP_LIB;
- attr_op.u.lib_op = H5A_dense_build_table_cb;
+ attr_op.u.lib_op = H5A__dense_build_table_cb;
/* Iterate over the links in the group, building a table of the link messages */
if(H5A_dense_iterate(f, dxpl_id, (hid_t)0, ainfo, H5_INDEX_NAME,
@@ -1680,7 +1680,7 @@ H5A_attr_iterate_table(const H5A_attr_table_t *atable, hsize_t skip,
*last_attr = skip;
/* Iterate over attribute messages */
- H5_ASSIGN_OVERFLOW(/* To: */ u, /* From: */ skip, /* From: */ hsize_t, /* To: */ size_t)
+ H5_CHECKED_ASSIGN(u, size_t, skip, hsize_t)
for(; u < atable->nattrs && !ret_value; u++) {
/* Check which type of callback to make */
switch(attr_op->op_type) {
@@ -1689,7 +1689,7 @@ H5A_attr_iterate_table(const H5A_attr_table_t *atable, hsize_t skip,
H5A_info_t ainfo; /* Info for attribute */
/* Get the attribute information */
- if(H5A_get_info(atable->attrs[u], &ainfo) < 0)
+ if(H5A__get_info(atable->attrs[u], &ainfo) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, H5_ITER_ERROR, "unable to get attribute info")
/* Make the application callback */
@@ -2012,7 +2012,11 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
*recompute_size = TRUE;
/* Compute the size of the data */
- H5_ASSIGN_OVERFLOW(attr_dst->shared->data_size, H5S_GET_EXTENT_NPOINTS(attr_dst->shared->ds) * H5T_get_size(attr_dst->shared->dt), hssize_t, size_t);
+ /* NOTE: This raises warnings. If we are going to be serious about
+ * expecting overflow here, we should implement testing similar to
+ * that described in CERT bulletins INT30-C and INT32-C.
+ */
+ H5_CHECKED_ASSIGN(attr_dst->shared->data_size, size_t, H5S_GET_EXTENT_NPOINTS(attr_dst->shared->ds) * H5T_get_size(attr_dst->shared->dt), hssize_t);
/* Copy (& convert) the data, if necessary */
if(attr_src->shared->data) {
@@ -2253,7 +2257,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5A_dense_post_copy_file_cb
+ * Function: H5A__dense_post_copy_file_cb
*
* Purpose: Callback routine for copying a dense attribute from SRC to DST.
*
@@ -2267,13 +2271,13 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5A_dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)
+H5A__dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)
{
H5A_dense_file_cp_ud_t *udata = (H5A_dense_file_cp_ud_t *)_udata;
H5A_t *attr_dst = NULL;
herr_t ret_value = H5_ITER_CONT; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check arguments */
HDassert(attr_src);
@@ -2309,7 +2313,7 @@ done:
HDONE_ERROR(H5E_ATTR, H5E_CLOSEERROR, FAIL, "can't close destination attribute")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_dense_post_copy_file_cb() */
+} /* end H5A__dense_post_copy_file_cb() */
/*-------------------------------------------------------------------------
@@ -2350,7 +2354,7 @@ H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t *ainfo
udata.oloc_dst = dst_oloc;
attr_op.op_type = H5A_ATTR_OP_LIB;
- attr_op.u.lib_op = H5A_dense_post_copy_file_cb;
+ attr_op.u.lib_op = H5A__dense_post_copy_file_cb;
if(H5A_dense_iterate(src_oloc->file, dxpl_id, (hid_t)0, ainfo_src, H5_INDEX_NAME,
diff --git a/src/H5Apkg.h b/src/H5Apkg.h
index f587f81..d3fcd53 100644
--- a/src/H5Apkg.h
+++ b/src/H5Apkg.h
@@ -192,12 +192,9 @@ H5_DLL H5A_t *H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name,
const char *attr_name, hid_t lapl_id, hid_t dxpl_id);
H5_DLL H5A_t *H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name,
H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id);
-H5_DLL herr_t H5A_open_common(const H5G_loc_t *loc, H5A_t *attr);
-H5_DLL herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
-H5_DLL herr_t H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
-H5_DLL ssize_t H5A_get_name(H5A_t *attr, size_t buf_size, char *buf);
+H5_DLL herr_t H5A__open_common(const H5G_loc_t *loc, H5A_t *attr);
H5_DLL H5A_t *H5A_copy(H5A_t *new_attr, const H5A_t *old_attr);
-H5_DLL herr_t H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo);
+H5_DLL herr_t H5A__get_info(const H5A_t *attr, H5A_info_t *ainfo);
H5_DLL hid_t H5A_get_type(H5A_t *attr);
H5_DLL hid_t H5A_get_space(H5A_t *attr);
H5_DLL hid_t H5A_get_create_plist(H5A_t* attr);
@@ -209,6 +206,9 @@ H5_DLL herr_t H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char
const char *new_attr_name, hid_t lapl_id, hid_t dxpl_id);
H5_DLL htri_t H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
hid_t lapl_id, hid_t dxpl_id);
+H5_DLL herr_t H5A__write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
+H5_DLL herr_t H5A__read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
+H5_DLL ssize_t H5A__get_name(H5A_t *attr, size_t buf_size, char *buf);
/* Attribute "dense" storage routines */
H5_DLL herr_t H5A_dense_create(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
diff --git a/src/H5B.c b/src/H5B.c
index 621209f..765a57e 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -134,7 +134,7 @@ typedef struct H5B_iter_ud_t {
} H5B_info_ud_t;
/* Convenience struct for the arguments needed to unprotect a b-tree after a
- * call to H5B_iterate_helper() or H5B_split() */
+ * call to H5B__iterate_helper() or H5B__split() */
typedef struct H5B_ins_ud_t {
H5B_t *bt; /* B-tree */
haddr_t addr; /* B-tree address */
@@ -145,7 +145,7 @@ typedef struct H5B_ins_ud_t {
/********************/
/* Local Prototypes */
/********************/
-static H5B_ins_t H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
+static H5B_ins_t H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
const H5B_class_t *type,
uint8_t *lt_key,
hbool_t *lt_key_changed,
@@ -153,13 +153,13 @@ static H5B_ins_t H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
uint8_t *rt_key,
hbool_t *rt_key_changed,
H5B_ins_ud_t *split_bt_ud/*out*/);
-static herr_t H5B_insert_child(H5B_t *bt, unsigned *bt_flags,
+static herr_t H5B__insert_child(H5B_t *bt, unsigned *bt_flags,
unsigned idx, haddr_t child,
H5B_ins_t anchor, const void *md_key);
-static herr_t H5B_split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
+static herr_t H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
unsigned idx, void *udata,
H5B_ins_ud_t *split_bt_ud/*out*/);
-static H5B_t * H5B_copy(const H5B_t *old_bt);
+static H5B_t * H5B__copy(const H5B_t *old_bt);
/*********************/
@@ -258,7 +258,7 @@ H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
if(H5AC_insert_entry(f, dxpl_id, H5AC_BT, *addr_p, bt, H5AC__NO_FLAGS_SET) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree root node to cache")
#ifdef H5B_DEBUG
- H5B_assert(f, dxpl_id, *addr_p, shared->type, udata);
+ H5B__assert(f, dxpl_id, *addr_p, shared->type, udata);
#endif
done:
@@ -269,7 +269,7 @@ done:
} /* end if */
if(bt)
/* Destroy B-tree node */
- if(H5B_node_dest(bt) < 0)
+ if(H5B__node_dest(bt) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node")
} /* end if */
@@ -375,7 +375,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5B_split
+ * Function: H5B__split
*
* Purpose: Split a single node into two nodes. The old node will
* contain the left children and the new node will contain the
@@ -397,7 +397,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
+H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
void *udata, H5B_ins_ud_t *split_bt_ud/*out*/)
{
H5P_genplist_t *dx_plist; /* Data transfer property list */
@@ -407,7 +407,7 @@ H5B_split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
double split_ratios[3]; /* B-tree split ratios */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/*
* Check arguments.
@@ -446,7 +446,7 @@ H5B_split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
side = "LEFT";
else
side = "MIDDLE";
- fprintf(H5DEBUG(B), "H5B_split: %3u {%5.3f,%5.3f,%5.3f} %6s",
+ fprintf(H5DEBUG(B), "H5B__split: %3u {%5.3f,%5.3f,%5.3f} %6s",
shared->two_k, split_ratios[0], split_ratios[1], split_ratios[2], side);
}
#endif
@@ -539,7 +539,7 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_split() */
+} /* end H5B__split() */
/*-------------------------------------------------------------------------
@@ -601,7 +601,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to locate root of B-tree")
/* Insert the object */
- if((int)(my_ins = H5B_insert_helper(f, dxpl_id, &bt_ud, type, lt_key,
+ if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &bt_ud, type, lt_key,
&lt_key_changed, md_key, udata, rt_key, &rt_key_changed,
&split_bt_ud/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to insert key")
@@ -638,7 +638,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
*/
/* Make a copy of the old root information */
- if(NULL == (new_root_bt = H5B_copy(bt_ud.bt)))
+ if(NULL == (new_root_bt = H5B__copy(bt_ud.bt)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to copy old root")
/* Unprotect the old root so we can move it. Also force it to be marked
@@ -677,7 +677,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
done:
if(ret_value < 0)
- if(new_root_bt && H5B_node_dest(new_root_bt) < 0)
+ if(new_root_bt && H5B__node_dest(new_root_bt) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, FAIL, "unable to free B-tree root node");
if(bt_ud.bt)
@@ -690,7 +690,7 @@ done:
#ifdef H5B_DEBUG
if(ret_value >= 0)
- H5B_assert(f, dxpl_id, addr, type, udata);
+ H5B__assert(f, dxpl_id, addr, type, udata);
#endif
FUNC_LEAVE_NOAPI(ret_value)
@@ -698,7 +698,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5B_insert_child
+ * Function: H5B__insert_child
*
* Purpose: Insert a child to the left or right of child[IDX] depending
* on whether ANCHOR is H5B_INS_LEFT or H5B_INS_RIGHT. The BT
@@ -713,13 +713,13 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
+H5B__insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
haddr_t child, H5B_ins_t anchor, const void *md_key)
{
H5B_shared_t *shared; /* Pointer to shared B-tree info */
uint8_t *base; /* Base offset for move */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
HDassert(bt);
HDassert(bt_flags);
@@ -771,7 +771,7 @@ H5B_insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
/*-------------------------------------------------------------------------
- * Function: H5B_insert_helper
+ * Function: H5B__insert_helper
*
* Purpose: Inserts the item UDATA into the tree rooted at ADDR and having
* the specified type.
@@ -802,7 +802,7 @@ H5B_insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
+H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
const H5B_class_t *type,
uint8_t *lt_key, hbool_t *lt_key_changed,
uint8_t *md_key, void *udata,
@@ -820,7 +820,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
H5B_ins_t my_ins = H5B_INS_ERROR;
H5B_ins_t ret_value = H5B_INS_ERROR; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/*
* Check arguments
@@ -904,7 +904,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
- if((int)(my_ins = H5B_insert_helper(f, dxpl_id, &child_bt_ud, type,
+ if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
H5B_NKEY(bt,shared,idx), lt_key_changed, md_key,
udata, H5B_NKEY(bt, shared, idx + 1), rt_key_changed,
&new_child_bt_ud/*out*/)) < 0)
@@ -950,7 +950,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
- if((int)(my_ins = H5B_insert_helper(f, dxpl_id, &child_bt_ud, type,
+ if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
H5B_NKEY(bt, shared, idx), lt_key_changed, md_key, udata,
H5B_NKEY(bt, shared, idx + 1), rt_key_changed,
&new_child_bt_ud/*out*/)) < 0)
@@ -1005,7 +1005,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
- if((int)(my_ins = H5B_insert_helper(f, dxpl_id, &child_bt_ud, type,
+ if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
H5B_NKEY(bt, shared, idx), lt_key_changed, md_key, udata,
H5B_NKEY(bt, shared, idx + 1), rt_key_changed, &new_child_bt_ud/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert subtree")
@@ -1064,7 +1064,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
* If this node is full then split it before inserting the new child.
*/
if(bt->nchildren == shared->two_k) {
- if(H5B_split(f, dxpl_id, bt_ud, idx, udata, split_bt_ud/*out*/) < 0)
+ if(H5B__split(f, dxpl_id, bt_ud, idx, udata, split_bt_ud/*out*/) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, H5B_INS_ERROR, "unable to split node")
if(idx < bt->nchildren) {
tmp_bt = bt;
@@ -1081,7 +1081,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
} /* end else */
/* Insert the child */
- if(H5B_insert_child(tmp_bt, tmp_bt_flags_ptr, idx, new_child_bt_ud.addr, my_ins, md_key) < 0)
+ if(H5B__insert_child(tmp_bt, tmp_bt_flags_ptr, idx, new_child_bt_ud.addr, my_ins, md_key) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert child")
} /* end else-if */
@@ -1119,7 +1119,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5B_iterate_helper
+ * Function: H5B__iterate_helper
*
* Purpose: Calls the list callback for each leaf node of the
* B-tree, passing it the caller's UDATA structure.
@@ -1133,7 +1133,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+H5B__iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
H5B_operator_t op, void *udata)
{
H5B_t *bt = NULL; /* Pointer to current B-tree node */
@@ -1143,7 +1143,7 @@ H5B_iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t add
unsigned u; /* Local index variable */
herr_t ret_value = H5_ITER_CONT; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/*
* Check arguments.
@@ -1170,7 +1170,7 @@ H5B_iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t add
/* Iterate over node's children */
for(u = 0; u < bt->nchildren && ret_value == H5_ITER_CONT; u++) {
if(bt->level > 0)
- ret_value = H5B_iterate_helper(f, dxpl_id, type, bt->child[u], op, udata);
+ ret_value = H5B__iterate_helper(f, dxpl_id, type, bt->child[u], op, udata);
else
ret_value = (*op)(f, dxpl_id, H5B_NKEY(bt, shared, u), bt->child[u], H5B_NKEY(bt, shared, u + 1), udata);
if(ret_value < 0)
@@ -1182,7 +1182,7 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5_ITER_ERROR, "unable to release B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_iterate_helper() */
+} /* end H5B__iterate_helper() */
/*-------------------------------------------------------------------------
@@ -1217,7 +1217,7 @@ H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
HDassert(udata);
/* Iterate over the B-tree records */
- if((ret_value = H5B_iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
+ if((ret_value = H5B__iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed");
FUNC_LEAVE_NOAPI(ret_value)
@@ -1225,7 +1225,7 @@ H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
/*-------------------------------------------------------------------------
- * Function: H5B_remove_helper
+ * Function: H5B__remove_helper
*
* Purpose: The recursive part of removing an item from a B-tree. The
* sub B-tree that is being considered is located at ADDR and
@@ -1249,7 +1249,7 @@ H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
int level, uint8_t *lt_key/*out*/,
hbool_t *lt_key_changed/*out*/, void *udata,
uint8_t *rt_key/*out*/, hbool_t *rt_key_changed/*out*/)
@@ -1263,7 +1263,7 @@ H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type
int cmp = 1; /* Key comparison value */
H5B_ins_t ret_value = H5B_INS_ERROR;
- FUNC_ENTER_NOAPI(H5B_INS_ERROR)
+ FUNC_ENTER_STATIC
HDassert(f);
HDassert(H5F_addr_defined(addr));
@@ -1308,7 +1308,7 @@ H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type
HDassert(idx < bt->nchildren);
if(bt->level > 0) {
/* We're at an internal node -- call recursively */
- if((int)(ret_value = H5B_remove_helper(f, dxpl_id,
+ if((int)(ret_value = H5B__remove_helper(f, dxpl_id,
bt->child[idx], type, level + 1, H5B_NKEY(bt, shared, idx)/*out*/,
lt_key_changed/*out*/, udata, H5B_NKEY(bt, shared, idx + 1)/*out*/,
rt_key_changed/*out*/)) < 0)
@@ -1555,7 +1555,7 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_remove_helper() */
+} /* end H5B__remove_helper() */
/*-------------------------------------------------------------------------
@@ -1594,12 +1594,12 @@ H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
HDassert(H5F_addr_defined(addr));
/* The actual removal */
- if(H5B_remove_helper(f, dxpl_id, addr, type, 0, lt_key, &lt_key_changed,
+ if(H5B__remove_helper(f, dxpl_id, addr, type, 0, lt_key, &lt_key_changed,
udata, rt_key, &rt_key_changed) == H5B_INS_ERROR)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to remove entry from B-tree")
#ifdef H5B_DEBUG
- H5B_assert(f, dxpl_id, addr, type, udata);
+ H5B__assert(f, dxpl_id, addr, type, udata);
#endif
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -1789,7 +1789,7 @@ H5B_shared_free(void *_shared)
/*-------------------------------------------------------------------------
- * Function: H5B_copy
+ * Function: H5B__copy
*
* Purpose: Deep copies an existing H5B_t node.
*
@@ -1804,13 +1804,13 @@ H5B_shared_free(void *_shared)
*-------------------------------------------------------------------------
*/
static H5B_t *
-H5B_copy(const H5B_t *old_bt)
+H5B__copy(const H5B_t *old_bt)
{
H5B_t *new_node = NULL;
H5B_shared_t *shared; /* Pointer to shared B-tree info */
H5B_t *ret_value;
- FUNC_ENTER_NOAPI(NULL)
+ FUNC_ENTER_STATIC
/*
* Check arguments.
@@ -1853,11 +1853,11 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_copy() */
+} /* end H5B__copy() */
/*-------------------------------------------------------------------------
- * Function: H5B_get_info_helper
+ * Function: H5B__get_info_helper
*
* Purpose: Walks the B-tree nodes, getting information for all of them.
*
@@ -1870,7 +1870,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
const H5B_info_ud_t *info_udata)
{
H5B_t *bt = NULL; /* Pointer to current B-tree node */
@@ -1883,7 +1883,7 @@ H5B_get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t ad
haddr_t left_child; /* Address of left-most child in node */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/*
* Check arguments.
@@ -1951,7 +1951,7 @@ H5B_get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t ad
/* Check for another "row" of B-tree nodes to iterate over */
if(level > 0) {
/* Keep following the left-most child until we reach a leaf node. */
- if(H5B_get_info_helper(f, dxpl_id, type, left_child, info_udata) < 0)
+ if(H5B__get_info_helper(f, dxpl_id, type, left_child, info_udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node")
} /* end if */
@@ -1960,7 +1960,7 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_get_info_helper() */
+} /* end H5B__get_info_helper() */
/*-------------------------------------------------------------------------
@@ -2001,13 +2001,13 @@ H5B_get_info(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
info_udata.udata = udata;
/* Iterate over the B-tree nodes */
- if(H5B_get_info_helper(f, dxpl_id, type, addr, &info_udata) < 0)
+ if(H5B__get_info_helper(f, dxpl_id, type, addr, &info_udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_BADITER, FAIL, "B-tree iteration failed")
/* Iterate over the B-tree records, making any "leaf" callbacks */
/* (Only if operator defined) */
if(op)
- if((ret_value = H5B_iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
+ if((ret_value = H5B__iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed");
done:
@@ -2072,7 +2072,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5B_node_dest
+ * Function: H5B__node_dest
*
* Purpose: Destroy/release a B-tree node
*
@@ -2086,9 +2086,9 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_node_dest(H5B_t *bt)
+H5B__node_dest(H5B_t *bt)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_PACKAGE_NOERR
/* check arguments */
HDassert(bt);
@@ -2100,5 +2100,5 @@ H5B_node_dest(H5B_t *bt)
bt = H5FL_FREE(H5B_t, bt);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5B_node_dest() */
+} /* end H5B__node_dest() */
diff --git a/src/H5B2.c b/src/H5B2.c
index 7d7345e..0c0f24f 100644
--- a/src/H5B2.c
+++ b/src/H5B2.c
@@ -146,7 +146,7 @@ H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udat
HDcompile_assert(H5B2_NUM_BTREE_ID == NELMTS(H5B2_client_class_g));
/* Create shared v2 B-tree header */
- if(HADDR_UNDEF == (hdr_addr = H5B2_hdr_create(f, dxpl_id, cparam, ctx_udata)))
+ if(HADDR_UNDEF == (hdr_addr = H5B2__hdr_create(f, dxpl_id, cparam, ctx_udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, NULL, "can't create v2 B-tree header")
/* Create v2 B-tree wrapper */
@@ -161,11 +161,11 @@ H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udat
/* Point v2 B-tree wrapper at header and bump it's ref count */
bt2->hdr = hdr;
- if(H5B2_hdr_incr(bt2->hdr) < 0)
+ if(H5B2__hdr_incr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment reference count on shared v2 B-tree header")
/* Increment # of files using this v2 B-tree header */
- if(H5B2_hdr_fuse_incr(bt2->hdr) < 0)
+ if(H5B2__hdr_fuse_incr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment file reference count on shared v2 B-tree header")
/* Set file pointer for this v2 B-tree open context */
@@ -229,11 +229,11 @@ H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata)
/* Point v2 B-tree wrapper at header */
bt2->hdr = hdr;
- if(H5B2_hdr_incr(bt2->hdr) < 0)
+ if(H5B2__hdr_incr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment reference count on shared v2 B-tree header")
/* Increment # of files using this v2 B-tree header */
- if(H5B2_hdr_fuse_incr(bt2->hdr) < 0)
+ if(H5B2__hdr_fuse_incr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment file reference count on shared v2 B-tree header")
/* Set file pointer for this v2 B-tree open context */
@@ -287,28 +287,28 @@ H5B2_insert(H5B2_t *bt2, hid_t dxpl_id, void *udata)
/* Check if the root node is allocated yet */
if(!H5F_addr_defined(hdr->root.addr)) {
/* Create root node as leaf node in B-tree */
- if(H5B2_create_leaf(hdr, dxpl_id, &(hdr->root)) < 0)
+ if(H5B2__create_leaf(hdr, dxpl_id, &(hdr->root)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
} /* end if */
/* Check if we need to split the root node (equiv. to a 1->2 node split) */
else if(hdr->root.node_nrec == hdr->node_info[hdr->depth].split_nrec) {
/* Split root node */
- if(H5B2_split_root(hdr, dxpl_id) < 0)
+ if(H5B2__split_root(hdr, dxpl_id) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split root node")
} /* end if */
/* Attempt to insert record into B-tree */
if(hdr->depth > 0) {
- if(H5B2_insert_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, udata) < 0)
+ if(H5B2__insert_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
} /* end if */
else {
- if(H5B2_insert_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, udata) < 0)
+ if(H5B2__insert_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
} /* end else */
/* Mark B-tree header as dirty */
- if(H5B2_hdr_dirty(hdr) < 0)
+ if(H5B2__hdr_dirty(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
done:
@@ -385,7 +385,7 @@ H5B2_iterate(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op, void *op_data)
/* Iterate through records */
if(hdr->root.node_nrec > 0) {
/* Iterate through nodes */
- if((ret_value = H5B2_iterate_node(hdr, dxpl_id, hdr->depth, &hdr->root, op, op_data)) < 0)
+ if((ret_value = H5B2__iterate_node(hdr, dxpl_id, hdr->depth, &hdr->root, op, op_data)) < 0)
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
@@ -422,7 +422,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
{
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
- unsigned depth; /* Current depth of the tree */
+ uint16_t depth; /* Current depth of the tree */
int cmp; /* Comparison value of records */
unsigned idx; /* Location of record which matches key */
H5B2_nodepos_t curr_pos; /* Position of the current node */
@@ -479,11 +479,11 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
/* Lock B-tree current node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
/* Locate node pointer for child */
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp > 0)
idx++;
@@ -542,11 +542,11 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
/* Lock B-tree leaf node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Locate record */
- cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
if(cmp != 0) {
/* Unlock leaf node */
@@ -622,7 +622,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
{
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
- unsigned depth; /* Current depth of the tree */
+ uint16_t depth; /* Current depth of the tree */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -662,7 +662,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
unsigned u; /* Local index variable */
/* Lock B-tree current node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
/* Search for record with correct index */
@@ -734,7 +734,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
/* Lock B-tree leaf node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Sanity check index */
@@ -798,7 +798,7 @@ H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
if(hdr->depth > 0) {
hbool_t depth_decreased = FALSE; /* Flag to indicate whether the depth of the B-tree decreased */
- if(H5B2_remove_internal(hdr, dxpl_id, &depth_decreased, NULL, hdr->depth,
+ if(H5B2__remove_internal(hdr, dxpl_id, &depth_decreased, NULL, hdr->depth,
&(hdr->cache_info), NULL, H5B2_POS_ROOT, &hdr->root, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
@@ -817,7 +817,7 @@ H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
} /* end for */
} /* end if */
else {
- if(H5B2_remove_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, udata, op, op_data) < 0)
+ if(H5B2__remove_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
} /* end else */
@@ -825,7 +825,7 @@ H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
hdr->root.all_nrec--;
/* Mark B-tree header as dirty */
- if(H5B2_hdr_dirty(hdr) < 0)
+ if(H5B2__hdr_dirty(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
done:
@@ -880,7 +880,7 @@ H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
if(hdr->depth > 0) {
hbool_t depth_decreased = FALSE; /* Flag to indicate whether the depth of the B-tree decreased */
- if(H5B2_remove_internal_by_idx(hdr, dxpl_id, &depth_decreased, NULL, hdr->depth,
+ if(H5B2__remove_internal_by_idx(hdr, dxpl_id, &depth_decreased, NULL, hdr->depth,
&(hdr->cache_info), NULL, &hdr->root, H5B2_POS_ROOT, idx, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
@@ -899,7 +899,7 @@ H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
} /* end for */
} /* end if */
else {
- if(H5B2_remove_leaf_by_idx(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, (unsigned)idx, op, op_data) < 0)
+ if(H5B2__remove_leaf_by_idx(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, (unsigned)idx, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
} /* end else */
@@ -907,7 +907,7 @@ H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
hdr->root.all_nrec--;
/* Mark B-tree header as dirty */
- if(H5B2_hdr_dirty(hdr) < 0)
+ if(H5B2__hdr_dirty(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
done:
@@ -994,11 +994,11 @@ H5B2_neighbor(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range, void *udata,
/* Attempt to find neighbor record in B-tree */
if(hdr->depth > 0) {
- if(H5B2_neighbor_internal(hdr, dxpl_id, hdr->depth, &hdr->root, NULL, range, udata, op, op_data) < 0)
+ if(H5B2__neighbor_internal(hdr, dxpl_id, hdr->depth, &hdr->root, NULL, range, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree internal node")
} /* end if */
else {
- if(H5B2_neighbor_leaf(hdr, dxpl_id, &hdr->root, NULL, range, udata, op, op_data) < 0)
+ if(H5B2__neighbor_leaf(hdr, dxpl_id, &hdr->root, NULL, range, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree leaf node")
} /* end else */
@@ -1034,7 +1034,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
H5B2_nodepos_t curr_pos; /* Position of current node */
- unsigned depth; /* Current depth of the tree */
+ uint16_t depth; /* Current depth of the tree */
int cmp; /* Comparison value of records */
unsigned idx; /* Location of record which matches key */
herr_t ret_value = SUCCEED; /* Return value */
@@ -1070,11 +1070,11 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
/* Lock B-tree current node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_WRITE)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
/* Locate node pointer for child */
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp > 0)
idx++;
@@ -1142,11 +1142,11 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
hbool_t changed = FALSE;/* Whether the 'modify' callback changed the record */
/* Lock B-tree leaf node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_WRITE)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Locate record */
- cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
if(cmp != 0) {
/* Unlock leaf node */
@@ -1238,7 +1238,7 @@ H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
HDassert(bt2->f);
/* Decrement file reference & check if this is the last open v2 B-tree using the shared B-tree header */
- if(0 == H5B2_hdr_fuse_decr(bt2->hdr)) {
+ if(0 == H5B2__hdr_fuse_decr(bt2->hdr)) {
/* Set the shared v2 B-tree header's file context for this operation */
bt2->hdr->f = bt2->f;
@@ -1283,22 +1283,22 @@ H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
hdr->f = bt2->f;
/* Decrement the reference count on the B-tree header */
- /* (don't put in H5B2_hdr_fuse_decr() as the B-tree header may be evicted
+ /* (don't put in H5B2__hdr_fuse_decr() as the B-tree header may be evicted
* immediately -QAK)
*/
- if(H5B2_hdr_decr(bt2->hdr) < 0)
+ if(H5B2__hdr_decr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement reference count on shared v2 B-tree header")
/* Delete v2 B-tree, starting with header (unprotects header) */
- if(H5B2_hdr_delete(hdr, dxpl_id) < 0)
+ if(H5B2__hdr_delete(hdr, dxpl_id) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete v2 B-tree")
} /* end if */
else {
/* Decrement the reference count on the B-tree header */
- /* (don't put in H5B2_hdr_fuse_decr() as the B-tree header may be evicted
+ /* (don't put in H5B2__hdr_fuse_decr() as the B-tree header may be evicted
* immediately -QAK)
*/
- if(H5B2_hdr_decr(bt2->hdr) < 0)
+ if(H5B2__hdr_decr(bt2->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement reference count on shared v2 B-tree header")
} /* end else */
@@ -1368,7 +1368,7 @@ HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
hdr->f = f;
/* Delete v2 B-tree now, starting with header (unprotects header) */
- if(H5B2_hdr_delete(hdr, dxpl_id) < 0)
+ if(H5B2__hdr_delete(hdr, dxpl_id) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete v2 B-tree")
hdr = NULL;
} /* end if */
diff --git a/src/H5B2cache.c b/src/H5B2cache.c
index 1e2a6a3..9e01c03 100644
--- a/src/H5B2cache.c
+++ b/src/H5B2cache.c
@@ -173,7 +173,7 @@ H5B2__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HDassert(udata);
/* Allocate new B-tree header and reset cache info */
- if(NULL == (hdr = H5B2_hdr_alloc(udata->f)))
+ if(NULL == (hdr = H5B2__hdr_alloc(udata->f)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "allocation failed for B-tree header")
/* Wrap the local buffer for serialized header info */
@@ -238,7 +238,7 @@ H5B2__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Initialize B-tree header info */
cparam.cls = H5B2_client_class_g[id];
- if(H5B2_hdr_init(hdr, &cparam, udata->ctx_udata, depth) < 0)
+ if(H5B2__hdr_init(hdr, &cparam, udata->ctx_udata, depth) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, NULL, "can't initialize B-tree header info")
/* Set the B-tree header's address */
@@ -252,7 +252,7 @@ done:
if(wb && H5WB_unwrap(wb) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CLOSEERROR, NULL, "can't close wrapped buffer")
if(!ret_value && hdr)
- if(H5B2_hdr_free(hdr) < 0)
+ if(H5B2__hdr_free(hdr) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, NULL, "can't release v2 B-tree header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -282,7 +282,7 @@ H5B2__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
FUNC_ENTER_STATIC
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(hdr);
@@ -399,7 +399,7 @@ H5B2__cache_hdr_dest(H5F_t *f, H5B2_hdr_t *hdr)
} /* end if */
/* Release B-tree header info */
- if(H5B2_hdr_free(hdr) < 0)
+ if(H5B2__hdr_free(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to free v2 B-tree header info")
done:
@@ -464,7 +464,7 @@ H5B2__cache_hdr_size(const H5F_t UNUSED *f, const H5B2_hdr_t *hdr, size_t *size_
{
FUNC_ENTER_STATIC_NOERR
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(hdr);
HDassert(size_ptr);
@@ -519,7 +519,7 @@ H5B2__cache_internal_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
udata->hdr->f = f;
/* Increment ref. count on B-tree header */
- if(H5B2_hdr_incr(udata->hdr) < 0)
+ if(H5B2__hdr_incr(udata->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment ref. count on B-tree header")
/* Share B-tree information */
@@ -601,7 +601,7 @@ H5B2__cache_internal_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
done:
if(!ret_value && internal)
- if(H5B2_internal_free(internal) < 0)
+ if(H5B2__internal_free(internal) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, NULL, "unable to destroy B-tree internal node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -628,7 +628,7 @@ H5B2__cache_internal_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t add
FUNC_ENTER_STATIC
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(internal);
@@ -742,7 +742,7 @@ H5B2__cache_internal_dest(H5F_t *f, H5B2_internal_t *internal)
} /* end if */
/* Release v2 b-tree internal node */
- if(H5B2_internal_free(internal) < 0)
+ if(H5B2__internal_free(internal) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release v2 B-tree internal node")
done:
@@ -807,7 +807,7 @@ H5B2__cache_internal_size(const H5F_t UNUSED *f, const H5B2_internal_t *internal
{
FUNC_ENTER_STATIC_NOERR
- /* check arguments */
+ /* Check arguments */
HDassert(internal);
HDassert(internal->hdr);
HDassert(size_ptr);
@@ -854,14 +854,14 @@ H5B2__cache_leaf_load(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, void *_udata
/* Allocate new leaf node and reset cache info */
if(NULL == (leaf = H5FL_MALLOC(H5B2_leaf_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed")
HDmemset(&leaf->cache_info, 0, sizeof(H5AC_info_t));
/* Set the B-tree header's file context for this operation */
udata->hdr->f = udata->f;
/* Increment ref. count on B-tree header */
- if(H5B2_hdr_incr(udata->hdr) < 0)
+ if(H5B2__hdr_incr(udata->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, NULL, "can't increment ref. count on B-tree header")
/* Share B-tree header information */
@@ -875,12 +875,12 @@ H5B2__cache_leaf_load(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, void *_udata
/* Magic number */
if(HDmemcmp(p, H5B2_LEAF_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree leaf node signature")
+ HGOTO_ERROR(H5E_BTREE, H5E_BADVALUE, NULL, "wrong B-tree leaf node signature")
p += H5_SIZEOF_MAGIC;
/* Version */
if(*p++ != H5B2_LEAF_VERSION)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree leaf node version")
+ HGOTO_ERROR(H5E_BTREE, H5E_BADRANGE, NULL, "wrong B-tree leaf node version")
/* B-tree type */
if(*p++ != (uint8_t)udata->hdr->cls->id)
@@ -888,7 +888,7 @@ H5B2__cache_leaf_load(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, void *_udata
/* Allocate space for the native keys in memory */
if(NULL == (leaf->leaf_native = (uint8_t *)H5FL_FAC_MALLOC(udata->hdr->node_info[0].nat_rec_fac)))
- HGOTO_ERROR(H5E_BTREE, H5E_NOSPACE, NULL, "memory allocation failed for B-tree leaf native keys")
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for B-tree leaf native keys")
/* Set the number of records in the leaf */
leaf->nrec = udata->nrec;
@@ -905,7 +905,7 @@ H5B2__cache_leaf_load(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, void *_udata
native += udata->hdr->cls->nrec_size;
} /* end for */
- /* Compute checksum on internal node */
+ /* Compute checksum on leaf node */
computed_chksum = H5_checksum_metadata(udata->hdr->page, (size_t)(p - (const uint8_t *)udata->hdr->page), 0);
/* Metadata checksum */
@@ -923,7 +923,7 @@ H5B2__cache_leaf_load(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, void *_udata
done:
if(!ret_value && leaf)
- if(H5B2_leaf_free(leaf) < 0)
+ if(H5B2__leaf_free(leaf) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, NULL, "unable to destroy B-tree leaf node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -950,7 +950,7 @@ H5B2__cache_leaf_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H
FUNC_ENTER_STATIC
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(leaf);
@@ -1050,7 +1050,7 @@ H5B2__cache_leaf_dest(H5F_t *f, H5B2_leaf_t *leaf)
} /* end if */
/* Destroy v2 b-tree leaf node */
- if(H5B2_leaf_free(leaf) < 0)
+ if(H5B2__leaf_free(leaf) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree leaf node")
done:
diff --git a/src/H5B2dbg.c b/src/H5B2dbg.c
index 3e5d55a..50283f8 100644
--- a/src/H5B2dbg.c
+++ b/src/H5B2dbg.c
@@ -74,7 +74,7 @@
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_debug
+ * Function: H5B2__hdr_debug
*
* Purpose: Prints debugging info about a B-tree header.
*
@@ -87,7 +87,7 @@
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
+H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5B2_class_t *type, haddr_t obj_addr)
{
H5B2_hdr_t *hdr = NULL; /* B-tree header info */
@@ -97,7 +97,7 @@ H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
H5B2_hdr_cache_ud_t cache_udata; /* User-data for callback */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -185,11 +185,11 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_debug() */
+} /* end H5B2__hdr_debug() */
/*-------------------------------------------------------------------------
- * Function: H5B2_int_debug
+ * Function: H5B2__int_debug
*
* Purpose: Prints debugging info about a B-tree internal node
*
@@ -202,7 +202,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
+H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, unsigned depth, haddr_t obj_addr)
{
H5B2_hdr_t *hdr = NULL; /* B-tree header */
@@ -213,7 +213,7 @@ H5B2_int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
H5B2_hdr_cache_ud_t cache_udata; /* User-data for callback */
herr_t ret_value=SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -251,7 +251,9 @@ H5B2_int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
/*
* Load the B-tree internal node
*/
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, addr, nrec, depth, H5AC_READ)))
+ H5_CHECK_OVERFLOW(nrec, unsigned, uint16_t);
+ H5_CHECK_OVERFLOW(depth, unsigned, uint16_t);
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, addr, (uint16_t)nrec, (uint16_t)depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree internal node")
/* Print opening message */
@@ -317,11 +319,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree internal node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_int_debug() */
+} /* end H5B2__int_debug() */
/*-------------------------------------------------------------------------
- * Function: H5B2_leaf_debug
+ * Function: H5B2__leaf_debug
*
* Purpose: Prints debugging info about a B-tree leaf node
*
@@ -334,7 +336,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
+H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr)
{
H5B2_hdr_t *hdr = NULL; /* B-tree header */
@@ -345,7 +347,7 @@ H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
char temp_str[128]; /* Temporary string, for formatting */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -383,7 +385,8 @@ H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
/*
* Load the B-tree leaf node
*/
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, addr, nrec, H5AC_READ)))
+ H5_CHECK_OVERFLOW(nrec, unsigned, uint16_t);
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, addr, (uint16_t)nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Print opening message */
@@ -430,5 +433,5 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree leaf node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_leaf_debug() */
+} /* end H5B2__leaf_debug() */
diff --git a/src/H5B2hdr.c b/src/H5B2hdr.c
index 452a35d..97b979e 100644
--- a/src/H5B2hdr.c
+++ b/src/H5B2hdr.c
@@ -94,7 +94,7 @@ H5FL_SEQ_DEFINE(H5B2_node_info_t);
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_init
+ * Function: H5B2__hdr_init
*
* Purpose: Allocate & initialize B-tree header info
*
@@ -107,7 +107,7 @@ H5FL_SEQ_DEFINE(H5B2_node_info_t);
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam, void *ctx_udata,
+H5B2__hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam, void *ctx_udata,
uint16_t depth)
{
size_t sz_max_nrec; /* Temporary variable for range checking */
@@ -115,7 +115,7 @@ H5B2_hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam, void *ctx_udata,
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -160,7 +160,7 @@ HDmemset(hdr->page, 0, hdr->node_size);
/* Initialize leaf node info */
sz_max_nrec = H5B2_NUM_LEAF_REC(hdr->node_size, hdr->rrec_size);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->node_info[0].max_nrec, /* From: */ sz_max_nrec, /* From: */ size_t, /* To: */ unsigned)
+ H5_CHECKED_ASSIGN(hdr->node_info[0].max_nrec, unsigned, sz_max_nrec, size_t)
hdr->node_info[0].split_nrec = (hdr->node_info[0].max_nrec * hdr->split_percent) / 100;
hdr->node_info[0].merge_nrec = (hdr->node_info[0].max_nrec * hdr->merge_percent) / 100;
hdr->node_info[0].cum_max_nrec = hdr->node_info[0].max_nrec;
@@ -182,14 +182,14 @@ HDmemset(hdr->page, 0, hdr->node_size);
/* Compute size to store # of records in each node */
/* (uses leaf # of records because its the largest) */
u_max_nrec_size = H5VM_limit_enc_size((uint64_t)hdr->node_info[0].max_nrec);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->max_nrec_size, /* From: */ u_max_nrec_size, /* From: */ unsigned, /* To: */ uint8_t)
+ H5_CHECKED_ASSIGN(hdr->max_nrec_size, uint8_t, u_max_nrec_size, unsigned)
HDassert(hdr->max_nrec_size <= H5B2_SIZEOF_RECORDS_PER_NODE);
/* Initialize internal node info */
if(depth > 0) {
for(u = 1; u < (unsigned)(depth + 1); u++) {
sz_max_nrec = H5B2_NUM_INT_REC(hdr, u);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->node_info[u].max_nrec, /* From: */ sz_max_nrec, /* From: */ size_t, /* To: */ unsigned)
+ H5_CHECKED_ASSIGN(hdr->node_info[u].max_nrec, unsigned, sz_max_nrec, size_t)
HDassert(hdr->node_info[u].max_nrec <= hdr->node_info[u - 1].max_nrec);
hdr->node_info[u].split_nrec = (hdr->node_info[u].max_nrec * hdr->split_percent) / 100;
@@ -198,7 +198,7 @@ HDmemset(hdr->page, 0, hdr->node_size);
hdr->node_info[u].cum_max_nrec = ((hdr->node_info[u].max_nrec + 1) *
hdr->node_info[u - 1].cum_max_nrec) + hdr->node_info[u].max_nrec;
u_max_nrec_size = H5VM_limit_enc_size((uint64_t)hdr->node_info[u].cum_max_nrec);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->node_info[u].cum_max_nrec_size, /* From: */ u_max_nrec_size, /* From: */ unsigned, /* To: */ uint8_t)
+ H5_CHECKED_ASSIGN(hdr->node_info[u].cum_max_nrec_size, uint8_t, u_max_nrec_size, unsigned)
if(NULL == (hdr->node_info[u].nat_rec_fac = H5FL_fac_init(hdr->cls->nrec_size * hdr->node_info[u].max_nrec)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't create node native key block factory")
@@ -215,15 +215,15 @@ HDmemset(hdr->page, 0, hdr->node_size);
done:
if(ret_value < 0)
- if(H5B2_hdr_free(hdr) < 0)
+ if(H5B2__hdr_free(hdr) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to free shared v2 B-tree info")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_init() */
+} /* end H5B2__hdr_init() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_alloc
+ * Function: H5B2__hdr_alloc
*
* Purpose: Allocate B-tree header
*
@@ -236,12 +236,12 @@ done:
*-------------------------------------------------------------------------
*/
H5B2_hdr_t *
-H5B2_hdr_alloc(H5F_t *f)
+H5B2__hdr_alloc(H5F_t *f)
{
H5B2_hdr_t *hdr = NULL; /* v2 B-tree header */
H5B2_hdr_t *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -265,11 +265,11 @@ H5B2_hdr_alloc(H5F_t *f)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_alloc() */
+} /* end H5B2__hdr_alloc() */
/*-------------------------------------------------------------------------
- * Function: H5HF_hdr_create
+ * Function: H5B2__hdr_create
*
* Purpose: Create new fractal heap header
*
@@ -282,13 +282,13 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5B2_hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
+H5B2__hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
void *ctx_udata)
{
H5B2_hdr_t *hdr = NULL; /* The new v2 B-tree header information */
haddr_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -297,11 +297,11 @@ H5B2_hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
HDassert(cparam);
/* Allocate v2 B-tree header */
- if(NULL == (hdr = H5B2_hdr_alloc(f)))
+ if(NULL == (hdr = H5B2__hdr_alloc(f)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, HADDR_UNDEF, "allocation failed for B-tree header")
/* Initialize shared B-tree info */
- if(H5B2_hdr_init(hdr, cparam, ctx_udata, (uint16_t)0) < 0)
+ if(H5B2__hdr_init(hdr, cparam, ctx_udata, (uint16_t)0) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, HADDR_UNDEF, "can't create shared B-tree info")
/* Allocate space for the header on disk */
@@ -317,15 +317,15 @@ H5B2_hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
done:
if(!H5F_addr_defined(ret_value) && hdr)
- if(H5B2_hdr_free(hdr) < 0)
+ if(H5B2__hdr_free(hdr) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, HADDR_UNDEF, "unable to release v2 B-tree header")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_create() */
+} /* end H5B2__hdr_create() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_incr
+ * Function: H5B2__hdr_incr
*
* Purpose: Increment reference count on B-tree header
*
@@ -338,11 +338,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_incr(H5B2_hdr_t *hdr)
+H5B2__hdr_incr(H5B2_hdr_t *hdr)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Sanity checks */
HDassert(hdr);
@@ -357,11 +357,11 @@ H5B2_hdr_incr(H5B2_hdr_t *hdr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_incr_hdr() */
+} /* end H5B2__hdr_incr() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_decr
+ * Function: H5B2__hdr_decr
*
* Purpose: Decrement reference count on B-tree header
*
@@ -374,11 +374,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_decr(H5B2_hdr_t *hdr)
+H5B2__hdr_decr(H5B2_hdr_t *hdr)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -394,11 +394,11 @@ H5B2_hdr_decr(H5B2_hdr_t *hdr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_decr() */
+} /* end H5B2__hdr_decr() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_fuse_incr
+ * Function: H5B2__hdr_fuse_incr
*
* Purpose: Increment file reference count on shared v2 B-tree header
*
@@ -411,7 +411,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr)
+H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr)
{
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -422,11 +422,11 @@ H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr)
hdr->file_rc++;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5B2_hdr_fuse_incr() */
+} /* end H5B2__hdr_fuse_incr() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_fuse_decr
+ * Function: H5B2__hdr_fuse_decr
*
* Purpose: Decrement file reference count on shared v2 B-tree header
*
@@ -439,7 +439,7 @@ H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr)
*-------------------------------------------------------------------------
*/
size_t
-H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr)
+H5B2__hdr_fuse_decr(H5B2_hdr_t *hdr)
{
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -451,11 +451,11 @@ H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr)
hdr->file_rc--;
FUNC_LEAVE_NOAPI(hdr->file_rc)
-} /* end H5B2_hdr_fuse_decr() */
+} /* end H5B2__hdr_fuse_decr() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_dirty
+ * Function: H5B2__hdr_dirty
*
* Purpose: Mark B-tree header as dirty
*
@@ -468,11 +468,11 @@ H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr)
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_dirty(H5B2_hdr_t *hdr)
+H5B2__hdr_dirty(H5B2_hdr_t *hdr)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -483,11 +483,11 @@ H5B2_hdr_dirty(H5B2_hdr_t *hdr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_dirty() */
+} /* end H5B2__hdr_dirty() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_free
+ * Function: H5B2__hdr_free
*
* Purpose: Free B-tree header info
*
@@ -500,11 +500,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_free(H5B2_hdr_t *hdr)
+H5B2__hdr_free(H5B2_hdr_t *hdr)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -557,11 +557,11 @@ H5B2_hdr_free(H5B2_hdr_t *hdr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_free() */
+} /* end H5B2__hdr_free() */
/*-------------------------------------------------------------------------
- * Function: H5B2_hdr_delete
+ * Function: H5B2__hdr_delete
*
* Purpose: Delete a v2 B-tree, starting with the header
*
@@ -574,12 +574,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
+H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
{
unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting v2 B-tree header */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -600,7 +600,7 @@ H5B2_hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
/* Delete all nodes in B-tree */
if(H5F_addr_defined(hdr->root.addr))
- if(H5B2_delete_node(hdr, dxpl_id, hdr->depth, &hdr->root, hdr->remove_op, hdr->remove_op_data) < 0)
+ if(H5B2__delete_node(hdr, dxpl_id, hdr->depth, &hdr->root, hdr->remove_op, hdr->remove_op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete B-tree nodes")
/* Indicate that the heap header should be deleted & file space freed */
@@ -612,5 +612,5 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree header")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_hdr_delete() */
+} /* end H5B2__hdr_delete() */
diff --git a/src/H5B2int.c b/src/H5B2int.c
index ef83e93..96636d5 100644
--- a/src/H5B2int.c
+++ b/src/H5B2int.c
@@ -61,29 +61,29 @@
/********************/
/* Helper functions */
-static herr_t H5B2_create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
- H5B2_node_ptr_t *node_ptr, unsigned depth);
-static herr_t H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
-static herr_t H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned idx);
-static herr_t H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
-static herr_t H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
-static herr_t H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
-static herr_t H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+static herr_t H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned *internal_flags_ptr,
unsigned idx, void *swap_loc);
+static herr_t H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ H5B2_node_ptr_t *node_ptr, uint16_t depth);
#ifdef H5B2_DEBUG
-static herr_t H5B2_assert_leaf(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf);
-static herr_t H5B2_assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf, const H5B2_leaf_t *leaf2);
-static herr_t H5B2_assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal);
-static herr_t H5B2_assert_internal2(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal, const H5B2_internal_t *internal2);
+static herr_t H5B2__assert_leaf(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf);
+static herr_t H5B2__assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf, const H5B2_leaf_t *leaf2);
+static herr_t H5B2__assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal);
+static herr_t H5B2__assert_internal2(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal, const H5B2_internal_t *internal2);
#endif /* H5B2_DEBUG */
/*********************/
@@ -112,7 +112,7 @@ H5FL_SEQ_EXTERN(H5B2_node_info_t);
/*-------------------------------------------------------------------------
- * Function: H5B2_locate_record
+ * Function: H5B2__locate_record
*
* Purpose: Performs a binary search to locate a record in a sorted
* array of records.
@@ -133,14 +133,14 @@ H5FL_SEQ_EXTERN(H5B2_node_info_t);
*-------------------------------------------------------------------------
*/
int
-H5B2_locate_record(const H5B2_class_t *type, unsigned nrec, size_t *rec_off,
+H5B2__locate_record(const H5B2_class_t *type, unsigned nrec, size_t *rec_off,
const uint8_t *native, const void *udata, unsigned *idx)
{
unsigned lo = 0, hi; /* Low & high index values */
unsigned my_idx = 0; /* Final index value */
int cmp = -1; /* Key comparison value */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_PACKAGE_NOERR
hi = nrec;
while(lo < hi && cmp) {
@@ -154,11 +154,11 @@ H5B2_locate_record(const H5B2_class_t *type, unsigned nrec, size_t *rec_off,
*idx = my_idx;
FUNC_LEAVE_NOAPI(cmp)
-} /* end H5B2_locate_record */
+} /* end H5B2__locate_record */
/*-------------------------------------------------------------------------
- * Function: H5B2_split1
+ * Function: H5B2__split1
*
* Purpose: Perform a 1->2 node split
*
@@ -172,7 +172,7 @@ H5B2_locate_record(const H5B2_class_t *type, unsigned nrec, size_t *rec_off,
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
{
@@ -187,7 +187,7 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned left_child_flags = H5AC__NO_FLAGS_SET, right_child_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting child nodes */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -206,7 +206,7 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Create new internal node */
internal->node_ptrs[idx + 1].all_nrec = internal->node_ptrs[idx + 1].node_nrec = 0;
- if(H5B2_create_internal(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), (depth - 1)) < 0)
+ if(H5B2__create_internal(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), (uint16_t)(depth - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new internal node")
/* Setup information for unlocking child nodes */
@@ -215,9 +215,9 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Protect both leaves */
- if(NULL == (left_int = H5B2_protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (left_int = H5B2__protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (right_int = H5B2_protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (right_int = H5B2__protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* More setup for child nodes */
@@ -235,7 +235,7 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Create new leaf node */
internal->node_ptrs[idx + 1].all_nrec = internal->node_ptrs[idx + 1].node_nrec = 0;
- if(H5B2_create_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1])) < 0)
+ if(H5B2__create_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1])) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new leaf node")
/* Setup information for unlocking child nodes */
@@ -244,9 +244,9 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Protect both leaves */
- if(NULL == (left_leaf = H5B2_protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_leaf = H5B2_protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for child nodes */
@@ -322,14 +322,14 @@ H5B2_split1(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
*parent_cache_info_flags_ptr |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1) {
- H5B2_assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
- H5B2_assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
} /* end if */
else {
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)right_child);
} /* end else */
#endif /* H5B2_DEBUG */
@@ -341,11 +341,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree leaf node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_split1() */
+} /* end H5B2__split1() */
/*-------------------------------------------------------------------------
- * Function: H5B2_split_root
+ * Function: H5B2__split_root
*
* Purpose: Split the root node
*
@@ -359,7 +359,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
+H5B2__split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
{
H5B2_internal_t *new_root = NULL; /* Pointer to new root node */
unsigned new_root_flags = H5AC__NO_FLAGS_SET; /* Cache flags for new root node */
@@ -368,7 +368,7 @@ H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
unsigned u_max_nrec_size; /* Temporary variable for range checking */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -382,13 +382,13 @@ H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
/* Update node info for new depth of tree */
sz_max_nrec = H5B2_NUM_INT_REC(hdr, hdr->depth);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->node_info[hdr->depth].max_nrec, /* From: */ sz_max_nrec, /* From: */ size_t, /* To: */ unsigned)
+ H5_CHECKED_ASSIGN(hdr->node_info[hdr->depth].max_nrec, unsigned, sz_max_nrec, size_t)
hdr->node_info[hdr->depth].split_nrec = (hdr->node_info[hdr->depth].max_nrec * hdr->split_percent) / 100;
hdr->node_info[hdr->depth].merge_nrec = (hdr->node_info[hdr->depth].max_nrec * hdr->merge_percent) / 100;
hdr->node_info[hdr->depth].cum_max_nrec = ((hdr->node_info[hdr->depth].max_nrec + 1) *
hdr->node_info[hdr->depth - 1].cum_max_nrec) + hdr->node_info[hdr->depth].max_nrec;
u_max_nrec_size = H5VM_limit_enc_size((uint64_t)hdr->node_info[hdr->depth].cum_max_nrec);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->node_info[hdr->depth].cum_max_nrec_size, /* From: */ u_max_nrec_size, /* From: */ unsigned, /* To: */ uint8_t)
+ H5_CHECKED_ASSIGN(hdr->node_info[hdr->depth].cum_max_nrec_size, uint8_t, u_max_nrec_size, unsigned)
if(NULL == (hdr->node_info[hdr->depth].nat_rec_fac = H5FL_fac_init(hdr->cls->nrec_size * hdr->node_info[hdr->depth].max_nrec)))
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create node native key block factory")
if(NULL == (hdr->node_info[hdr->depth].node_ptr_fac = H5FL_fac_init(sizeof(H5B2_node_ptr_t) * (hdr->node_info[hdr->depth].max_nrec + 1))))
@@ -399,18 +399,18 @@ H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
/* Create new internal node to use as root */
hdr->root.node_nrec = 0;
- if(H5B2_create_internal(hdr, dxpl_id, &(hdr->root), hdr->depth) < 0)
+ if(H5B2__create_internal(hdr, dxpl_id, &(hdr->root), hdr->depth) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new internal node")
/* Protect new root node */
- if(NULL == (new_root = H5B2_protect_internal(hdr, dxpl_id, hdr->root.addr, hdr->root.node_nrec, hdr->depth, H5AC_WRITE)))
+ if(NULL == (new_root = H5B2__protect_internal(hdr, dxpl_id, hdr->root.addr, hdr->root.node_nrec, hdr->depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Set first node pointer in root node to old root node pointer info */
new_root->node_ptrs[0] = old_root_ptr;
/* Split original root node */
- if(H5B2_split1(hdr, dxpl_id, hdr->depth, &(hdr->root), NULL, new_root, &new_root_flags, 0) < 0)
+ if(H5B2__split1(hdr, dxpl_id, hdr->depth, &(hdr->root), NULL, new_root, &new_root_flags, 0) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split old root node")
done:
@@ -419,11 +419,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree internal node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_split_root() */
+} /* end H5B2__split_root() */
/*-------------------------------------------------------------------------
- * Function: H5B2_redistribute2
+ * Function: H5B2__redistribute2
*
* Purpose: Redistribute records between two nodes
*
@@ -437,7 +437,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned idx)
{
const H5AC_class_t *child_class; /* Pointer to child node's class info */
@@ -450,7 +450,7 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned left_child_flags = H5AC__NO_FLAGS_SET, right_child_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting child nodes */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -467,9 +467,9 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock left & right B-tree child nodes */
- if(NULL == (left_internal = H5B2_protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_internal = H5B2_protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for child nodes */
@@ -492,9 +492,9 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock left & right B-tree child nodes */
- if(NULL == (left_leaf = H5B2_protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_leaf = H5B2_protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for child nodes */
@@ -507,14 +507,14 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
} /* end else */
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1) {
- H5B2_assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
- H5B2_assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
} /* end if */
else {
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)right_child);
} /* end else */
#endif /* H5B2_DEBUG */
@@ -546,7 +546,7 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Count the number of records being moved */
for(u = 0; u < move_nrec; u++)
moved_nrec += right_node_ptrs[u].all_nrec;
- H5_ASSIGN_OVERFLOW(/* To: */ left_moved_nrec, /* From: */ moved_nrec, /* From: */ hsize_t, /* To: */ hssize_t)
+ H5_CHECKED_ASSIGN(left_moved_nrec, hssize_t, moved_nrec, hsize_t)
right_moved_nrec -= (hssize_t)moved_nrec;
/* Copy node pointers from right node to left */
@@ -600,7 +600,7 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
for(u = 0; u < move_nrec; u++)
moved_nrec += right_node_ptrs[u].all_nrec;
left_moved_nrec -= (hssize_t)moved_nrec;
- H5_ASSIGN_OVERFLOW(/* To: */ right_moved_nrec, /* From: */ moved_nrec, /* From: */ hsize_t, /* To: */ hssize_t)
+ H5_CHECKED_ASSIGN(right_moved_nrec, hssize_t, moved_nrec, hsize_t)
} /* end if */
/* Update number of records in child nodes */
@@ -627,14 +627,14 @@ H5B2_redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
} /* end else */
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1) {
- H5B2_assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
- H5B2_assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)right_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)left_child);
} /* end if */
else {
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)right_child);
} /* end else */
#endif /* H5B2_DEBUG */
@@ -646,11 +646,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_redistribute2() */
+} /* end H5B2__redistribute2() */
/*-------------------------------------------------------------------------
- * Function: H5B2_redistribute3
+ * Function: H5B2__redistribute3
*
* Purpose: Redistribute records between three nodes
*
@@ -664,7 +664,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
{
H5B2_node_ptr_t *left_node_ptrs = NULL, *right_node_ptrs = NULL; /* Pointers to childs' node pointer info */
@@ -684,7 +684,7 @@ H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned middle_child_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting child nodes */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -704,11 +704,11 @@ H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock B-tree child nodes */
- if(NULL == (left_internal = H5B2_protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (middle_internal = H5B2_protect_internal(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (middle_internal = H5B2__protect_internal(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (right_internal = H5B2_protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* More setup for child nodes */
@@ -737,11 +737,11 @@ H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock B-tree child nodes */
- if(NULL == (left_leaf = H5B2_protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (middle_leaf = H5B2_protect_leaf(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_leaf = H5B2_protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for child nodes */
@@ -1009,17 +1009,17 @@ H5B2_redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
}
#endif /* QAK */
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1) {
- H5B2_assert_internal2(internal->node_ptrs[idx - 1].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)middle_child);
- H5B2_assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child, (H5B2_internal_t *)left_child);
- H5B2_assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child, (H5B2_internal_t *)right_child);
- H5B2_assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)middle_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx - 1].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)middle_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child, (H5B2_internal_t *)left_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child, (H5B2_internal_t *)right_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx + 1].all_nrec, hdr, (H5B2_internal_t *)right_child, (H5B2_internal_t *)middle_child);
} /* end if */
else {
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)middle_child);
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)middle_child, (H5B2_leaf_t *)right_child);
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)middle_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)middle_child, (H5B2_leaf_t *)right_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)right_child);
} /* end else */
#endif /* H5B2_DEBUG */
@@ -1033,11 +1033,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_redistribute3() */
+} /* end H5B2__redistribute3() */
/*-------------------------------------------------------------------------
- * Function: H5B2_merge2
+ * Function: H5B2__merge2
*
* Purpose: Perform a 2->1 node merge
*
@@ -1052,7 +1052,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
{
@@ -1065,7 +1065,7 @@ H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned left_child_flags = H5AC__NO_FLAGS_SET, right_child_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting child nodes */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -1084,9 +1084,9 @@ H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock left & right B-tree child nodes */
- if(NULL == (left_internal = H5B2_protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (right_internal = H5B2_protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* More setup for accessing child node information */
@@ -1109,9 +1109,9 @@ H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock left & right B-tree child nodes */
- if(NULL == (left_leaf = H5B2_protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_leaf = H5B2_protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for accessing child node information */
@@ -1169,11 +1169,11 @@ H5B2_merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
*parent_cache_info_flags_ptr |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1)
- H5B2_assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child);
+ H5B2__assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)left_child);
else
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)left_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)left_child);
#endif /* H5B2_DEBUG */
done:
@@ -1186,11 +1186,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_merge2() */
+} /* end H5B2__merge2() */
/*-------------------------------------------------------------------------
- * Function: H5B2_merge3
+ * Function: H5B2__merge3
*
* Purpose: Perform a 3->2 node merge
*
@@ -1205,7 +1205,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
{
@@ -1225,7 +1225,7 @@ H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned middle_child_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting child nodes */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -1246,11 +1246,11 @@ H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock B-tree child nodes */
- if(NULL == (left_internal = H5B2_protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (middle_internal = H5B2_protect_internal(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (middle_internal = H5B2__protect_internal(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
- if(NULL == (right_internal = H5B2_protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* More setup for accessing child node information */
@@ -1279,11 +1279,11 @@ H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
right_addr = internal->node_ptrs[idx + 1].addr;
/* Lock B-tree child nodes */
- if(NULL == (left_leaf = H5B2_protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, left_addr, internal->node_ptrs[idx - 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (middle_leaf = H5B2_protect_leaf(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, dxpl_id, middle_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
- if(NULL == (right_leaf = H5B2_protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
+ if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, right_addr, internal->node_ptrs[idx + 1].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for accessing child node information */
@@ -1391,14 +1391,14 @@ H5B2_merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
*parent_cache_info_flags_ptr |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1) {
- H5B2_assert_internal2(internal->node_ptrs[idx - 1].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)middle_child);
- H5B2_assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child);
+ H5B2__assert_internal2(internal->node_ptrs[idx - 1].all_nrec, hdr, (H5B2_internal_t *)left_child, (H5B2_internal_t *)middle_child);
+ H5B2__assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)middle_child);
} /* end if */
else {
- H5B2_assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)middle_child);
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)middle_child);
+ H5B2__assert_leaf2(hdr, (H5B2_leaf_t *)left_child, (H5B2_leaf_t *)middle_child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)middle_child);
} /* end else */
#endif /* H5B2_DEBUG */
@@ -1414,11 +1414,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_merge3() */
+} /* end H5B2__merge3() */
/*-------------------------------------------------------------------------
- * Function: H5B2_swap_leaf
+ * Function: H5B2__swap_leaf
*
* Purpose: Swap a record in a node with a record in a leaf node
*
@@ -1433,7 +1433,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_internal_t *internal, unsigned *internal_flags_ptr,
unsigned idx, void *swap_loc)
{
@@ -1443,7 +1443,7 @@ H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
uint8_t *child_native; /* Pointer to child's native records */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -1460,7 +1460,7 @@ H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
child_addr = internal->node_ptrs[idx].addr;
/* Lock B-tree child nodes */
- if(NULL == (child_internal = H5B2_protect_internal(hdr, dxpl_id, child_addr, internal->node_ptrs[idx].node_nrec, (depth - 1), H5AC_WRITE)))
+ if(NULL == (child_internal = H5B2__protect_internal(hdr, dxpl_id, child_addr, internal->node_ptrs[idx].node_nrec, (uint16_t)(depth - 1), H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* More setup for accessing child node information */
@@ -1475,7 +1475,7 @@ H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
child_addr = internal->node_ptrs[idx].addr;
/* Lock B-tree child node */
- if(NULL == (child_leaf = H5B2_protect_leaf(hdr, dxpl_id, child_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
+ if(NULL == (child_leaf = H5B2__protect_leaf(hdr, dxpl_id, child_addr, internal->node_ptrs[idx].node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* More setup for accessing child node information */
@@ -1492,11 +1492,11 @@ H5B2_swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
*internal_flags_ptr |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((hsize_t)0, hdr, internal);
+ H5B2__assert_internal((hsize_t)0, hdr, internal);
if(depth > 1)
- H5B2_assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)child);
+ H5B2__assert_internal(internal->node_ptrs[idx].all_nrec, hdr, (H5B2_internal_t *)child);
else
- H5B2_assert_leaf(hdr, (H5B2_leaf_t *)child);
+ H5B2__assert_leaf(hdr, (H5B2_leaf_t *)child);
#endif /* H5B2_DEBUG */
done:
@@ -1505,11 +1505,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_swap_leaf() */
+} /* end H5B2__swap_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_insert_leaf
+ * Function: H5B2__insert_leaf
*
* Purpose: Adds a new record to a B-tree leaf node.
*
@@ -1522,7 +1522,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
+H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
H5B2_nodepos_t curr_pos, void *udata)
{
H5B2_leaf_t *leaf; /* Pointer to leaf node */
@@ -1530,7 +1530,7 @@ H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
unsigned idx; /* Location of record which matches key */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -1538,7 +1538,7 @@ H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
HDassert(H5F_addr_defined(curr_node_ptr->addr));
/* Lock current B-tree node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Must have a leaf node with enough space to insert a record now */
@@ -1553,7 +1553,7 @@ H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
idx = 0;
else {
/* Find correct location to insert this record */
- if((cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx)) == 0)
+ if((cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx)) == 0)
HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
if(cmp > 0)
idx++;
@@ -1601,11 +1601,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_insert_leaf() */
+} /* H5B2__insert_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_insert_internal
+ * Function: H5B2__insert_internal
*
* Purpose: Adds a new record to a B-tree node.
*
@@ -1618,7 +1618,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
H5B2_nodepos_t curr_pos, void *udata)
{
@@ -1628,7 +1628,7 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
H5B2_nodepos_t next_pos = H5B2_POS_MIDDLE; /* Position of node */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -1637,7 +1637,7 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
HDassert(H5F_addr_defined(curr_node_ptr->addr));
/* Lock current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Split or redistribute child node pointers, if necessary */
@@ -1647,7 +1647,7 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
size_t split_nrec; /* Number of records to split node at */
/* Locate node pointer for child */
- if((cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
+ if((cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
if(cmp > 0)
idx++;
@@ -1668,22 +1668,22 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Attempt to redistribute records among children */
if(idx == 0) { /* Left-most child */
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec < split_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_split1(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
} /* end else */
} /* end if */
else if(idx == internal->nrec) { /* Right-most child */
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec < split_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_split1(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
} /* end else */
@@ -1691,11 +1691,11 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
else { /* Middle child */
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec < split_nrec) ||
(internal->node_ptrs[idx - 1].node_nrec < split_nrec))) {
- if(H5B2_redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
+ if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_split1(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
} /* end else */
@@ -1703,7 +1703,7 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Locate node pointer for child (after split/redistribute) */
/* Actually, this can be easily updated (for 2-node redistrib.) and shouldn't require re-searching */
- if((cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
+ if((cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
if(cmp > 0)
idx++;
@@ -1727,11 +1727,11 @@ H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Attempt to insert node */
if(depth > 1) {
- if(H5B2_insert_internal(hdr, dxpl_id, (depth - 1), &internal_flags, &internal->node_ptrs[idx], next_pos, udata) < 0)
+ if(H5B2__insert_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], next_pos, udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
} /* end if */
else {
- if(H5B2_insert_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], next_pos, udata) < 0)
+ if(H5B2__insert_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], next_pos, udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
} /* end else */
@@ -1747,11 +1747,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_insert_internal() */
+} /* H5B2__insert_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_create_leaf
+ * Function: H5B2__create_leaf
*
* Purpose: Creates empty leaf node of a B-tree and update node pointer
* to point to it.
@@ -1765,12 +1765,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr)
+H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr)
{
H5B2_leaf_t *leaf = NULL; /* Pointer to new leaf node created */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -1784,7 +1784,7 @@ H5B2_create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr)
HDmemset(&leaf->cache_info, 0, sizeof(H5AC_info_t));
/* Increment ref. count on B-tree header */
- if(H5B2_hdr_incr(hdr) < 0)
+ if(H5B2__hdr_incr(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, FAIL, "can't increment ref. count on B-tree header")
/* Share B-tree header information */
@@ -1811,16 +1811,16 @@ HDmemset(leaf->leaf_native, 0, hdr->cls->nrec_size * hdr->node_info[0].max_nrec)
done:
if(ret_value < 0) {
if(leaf)
- if(H5B2_leaf_free(leaf) < 0)
+ if(H5B2__leaf_free(leaf) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release v2 B-tree leaf node")
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_create_leaf() */
+} /* H5B2__create_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_protect_leaf
+ * Function: H5B2__protect_leaf
*
* Purpose: "Protect" an leaf node in the metadata cache
*
@@ -1833,13 +1833,13 @@ done:
*-------------------------------------------------------------------------
*/
H5B2_leaf_t *
-H5B2_protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr, unsigned nrec,
+H5B2__protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr, uint16_t nrec,
H5AC_protect_t rw)
{
H5B2_leaf_cache_ud_t udata; /* User-data for callback */
H5B2_leaf_t *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -1848,7 +1848,7 @@ H5B2_protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr, unsigned nrec,
/* Set up user data for callback */
udata.f = hdr->f;
udata.hdr = hdr;
- H5_ASSIGN_OVERFLOW(/* To: */ udata.nrec, /* From: */ nrec, /* From: */ unsigned, /* To: */ uint16_t)
+ H5_CHECKED_ASSIGN(udata.nrec, uint16_t, nrec, unsigned)
/* Protect the leaf node */
if(NULL == (ret_value = (H5B2_leaf_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_BT2_LEAF, addr, &udata, rw)))
@@ -1856,11 +1856,11 @@ H5B2_protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr, unsigned nrec,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_protect_leaf() */
+} /* H5B2__protect_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_create_internal
+ * Function: H5B2__create_internal
*
* Purpose: Creates empty internal node of a B-tree and update node pointer
* to point to it.
@@ -1874,13 +1874,13 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr,
- unsigned depth)
+H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr,
+ uint16_t depth)
{
H5B2_internal_t *internal = NULL; /* Pointer to new internal node created */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments. */
HDassert(hdr);
@@ -1895,7 +1895,7 @@ H5B2_create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *node_ptr,
HDmemset(&internal->cache_info, 0, sizeof(H5AC_info_t));
/* Increment ref. count on B-tree header */
- if(H5B2_hdr_incr(hdr) < 0)
+ if(H5B2__hdr_incr(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, FAIL, "can't increment ref. count on B-tree header")
/* Share B-tree header information */
@@ -1917,7 +1917,7 @@ HDmemset(internal->node_ptrs, 0, sizeof(H5B2_node_ptr_t) * (hdr->node_info[depth
/* Set number of records & depth of the node */
internal->nrec = 0;
- internal->depth = (uint16_t)depth;
+ internal->depth = depth;
/* Allocate space on disk for the internal node */
if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
@@ -1930,16 +1930,16 @@ HDmemset(internal->node_ptrs, 0, sizeof(H5B2_node_ptr_t) * (hdr->node_info[depth
done:
if(ret_value < 0) {
if(internal)
- if(H5B2_internal_free(internal) < 0)
+ if(H5B2__internal_free(internal) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release v2 B-tree internal node")
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_create_internal() */
+} /* H5B2__create_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_protect_internal
+ * Function: H5B2__protect_internal
*
* Purpose: "Protect" an internal node in the metadata cache
*
@@ -1952,13 +1952,13 @@ done:
*-------------------------------------------------------------------------
*/
H5B2_internal_t *
-H5B2_protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
- unsigned nrec, unsigned depth, H5AC_protect_t rw)
+H5B2__protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
+ uint16_t nrec, uint16_t depth, H5AC_protect_t rw)
{
H5B2_internal_cache_ud_t udata; /* User data to pass through to cache 'deserialize' callback */
H5B2_internal_t *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -1968,8 +1968,8 @@ H5B2_protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
/* Set up user data for callback */
udata.f = hdr->f;
udata.hdr = hdr;
- H5_ASSIGN_OVERFLOW(/* To: */ udata.nrec, /* From: */ nrec, /* From: */ unsigned, /* To: */ uint16_t)
- H5_ASSIGN_OVERFLOW(/* To: */ udata.depth, /* From: */ depth, /* From: */ unsigned, /* To: */ uint16_t)
+ udata.nrec = nrec;
+ udata.depth = depth;
/* Protect the internal node */
if(NULL == (ret_value = (H5B2_internal_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_BT2_INT, addr, &udata, rw)))
@@ -1977,11 +1977,11 @@ H5B2_protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_protect_internal() */
+} /* H5B2__protect_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_iterate_node
+ * Function: H5B2__iterate_node
*
* Purpose: Iterate over all the records from a B-tree node, in "in-order"
* order, making a callback for each record.
@@ -1998,7 +1998,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
const H5B2_node_ptr_t *curr_node, H5B2_operator_t op, void *op_data)
{
const H5AC_class_t *curr_node_class = NULL; /* Pointer to current node's class info */
@@ -2009,7 +2009,7 @@ H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned u; /* Local index */
herr_t ret_value = H5_ITER_CONT; /* Iterator return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2021,7 +2021,7 @@ H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
H5B2_internal_t *internal; /* Pointer to internal node */
/* Lock the current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Set up information about current node */
@@ -2040,7 +2040,7 @@ H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
H5B2_leaf_t *leaf; /* Pointer to leaf node */
/* Lock the current B-tree node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, H5AC_READ)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Set up information about current node */
@@ -2065,7 +2065,7 @@ H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
for(u = 0; u < curr_node->node_nrec && !ret_value; u++) {
/* Descend into child node, if current node is an internal node */
if(depth > 0) {
- if((ret_value = H5B2_iterate_node(hdr, dxpl_id, (depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
+ if((ret_value = H5B2__iterate_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
@@ -2078,7 +2078,7 @@ H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Descend into last child node, if current node is an internal node */
if(!ret_value && depth > 0) {
- if((ret_value = H5B2_iterate_node(hdr, dxpl_id, (depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
+ if((ret_value = H5B2__iterate_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
@@ -2090,11 +2090,11 @@ done:
native = (uint8_t *)H5FL_FAC_FREE(hdr->node_info[depth].nat_rec_fac, native);
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_iterate_node() */
+} /* H5B2__iterate_node() */
/*-------------------------------------------------------------------------
- * Function: H5B2_remove_leaf
+ * Function: H5B2__remove_leaf
*
* Purpose: Removes a record from a B-tree leaf node.
*
@@ -2107,7 +2107,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
+H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
H5B2_nodepos_t curr_pos, void *udata, H5B2_remove_t op, void *op_data)
{
H5B2_leaf_t *leaf; /* Pointer to leaf node */
@@ -2116,7 +2116,7 @@ H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
unsigned idx; /* Location of record which matches key */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2125,7 +2125,7 @@ H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
/* Lock current B-tree node */
leaf_addr = curr_node_ptr->addr;
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, leaf_addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, leaf_addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Sanity check number of records */
@@ -2133,7 +2133,7 @@ H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
HDassert(leaf->nrec == curr_node_ptr->node_nrec);
/* Find correct location to remove this record */
- if(H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx) != 0)
+ if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx) != 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "record is not in B-tree")
/* Check for invalidating the min/max record for the tree */
@@ -2190,11 +2190,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_remove_leaf() */
+} /* H5B2__remove_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_remove_internal
+ * Function: H5B2__remove_internal
*
* Purpose: Removes a record from a B-tree node.
*
@@ -2207,8 +2207,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
- void *swap_loc, unsigned depth, H5AC_info_t *parent_cache_info,
+H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
+ void *swap_loc, uint16_t depth, H5AC_info_t *parent_cache_info,
unsigned *parent_cache_info_flags_ptr, H5B2_nodepos_t curr_pos,
H5B2_node_ptr_t *curr_node_ptr, void *udata, H5B2_remove_t op, void *op_data)
{
@@ -2223,7 +2223,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
hbool_t collapsed_root = FALSE; /* Whether the root was collapsed */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2234,7 +2234,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
/* Lock current B-tree node */
internal_addr = curr_node_ptr->addr;
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, internal_addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, internal_addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Determine the correct number of records to merge at */
@@ -2246,7 +2246,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
((internal->node_ptrs[0].node_nrec + internal->node_ptrs[1].node_nrec) <= ((merge_nrec * 2) + 1))) {
/* Merge children of root node */
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
@@ -2281,7 +2281,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
if(swap_loc)
idx = 0;
else {
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp >= 0)
idx++;
} /* end else */
@@ -2300,27 +2300,27 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
/* (NOTE: These 2-node redistributions should actually get the
* record to promote from the node with more records. - QAK)
*/
- /* (NOTE: This code is the same in both H5B2_remove_internal() and
- * H5B2_remove_internal_by_idx(), fix bugs in both places! - QAK)
+ /* (NOTE: This code is the same in both H5B2__remove_internal() and
+ * H5B2__remove_internal_by_idx(), fix bugs in both places! - QAK)
*/
if(idx == 0) { /* Left-most child */
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec > merge_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
} /* end if */
else if(idx == internal->nrec) { /* Right-most child */
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec > merge_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
@@ -2328,11 +2328,11 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
else { /* Middle child */
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec > merge_nrec) ||
(internal->node_ptrs[idx - 1].node_nrec > merge_nrec))) {
- if(H5B2_redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
+ if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge3(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge3(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
@@ -2343,7 +2343,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
idx = 0;
else {
/* Actually, this can be easily updated (for 2-node redistrib.) and shouldn't require re-searching */
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp >= 0)
idx++;
} /* end else */
@@ -2358,7 +2358,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
/* Swap record to delete with record from leaf, if we are the last internal node */
if(swap_loc && depth == 1)
- if(H5B2_swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
+ if(H5B2__swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSWAP, FAIL, "Can't swap records in B-tree")
/* Set pointers for advancing to child node */
@@ -2381,12 +2381,12 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
/* Attempt to remove record from child node */
if(depth > 1) {
- if(H5B2_remove_internal(hdr, dxpl_id, depth_decreased, swap_loc, depth - 1,
+ if(H5B2__remove_internal(hdr, dxpl_id, depth_decreased, swap_loc, (uint16_t)(depth - 1),
new_cache_info, new_cache_info_flags_ptr, next_pos, new_node_ptr, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
} /* end if */
else {
- if(H5B2_remove_leaf(hdr, dxpl_id, new_node_ptr, next_pos, udata, op, op_data) < 0)
+ if(H5B2__remove_leaf(hdr, dxpl_id, new_node_ptr, next_pos, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
} /* end else */
@@ -2398,7 +2398,7 @@ H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
internal_flags |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((!collapsed_root ? (curr_node_ptr->all_nrec - 1) : new_node_ptr->all_nrec), hdr, internal);
+ H5B2__assert_internal((!collapsed_root ? (curr_node_ptr->all_nrec - 1) : new_node_ptr->all_nrec), hdr, internal);
#endif /* H5B2_DEBUG */
done:
@@ -2407,11 +2407,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_remove_internal() */
+} /* H5B2__remove_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_remove_leaf_by_idx
+ * Function: H5B2__remove_leaf_by_idx
*
* Purpose: Removes a record from a B-tree leaf node, according to the
* offset in the B-tree records.
@@ -2425,7 +2425,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos,
unsigned idx, H5B2_remove_t op, void *op_data)
{
@@ -2434,7 +2434,7 @@ H5B2_remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
unsigned leaf_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting leaf node */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2443,7 +2443,7 @@ H5B2_remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
/* Lock B-tree leaf node */
leaf_addr = curr_node_ptr->addr;
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, leaf_addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, leaf_addr, curr_node_ptr->node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Sanity check number of records */
@@ -2505,11 +2505,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_remove_leaf_by_idx() */
+} /* H5B2__remove_leaf_by_idx() */
/*-------------------------------------------------------------------------
- * Function: H5B2_remove_internal_by_idx
+ * Function: H5B2__remove_internal_by_idx
*
* Purpose: Removes a record from a B-tree node, according to the offset
* in the B-tree records
@@ -2523,8 +2523,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
- hbool_t *depth_decreased, void *swap_loc, unsigned depth,
+H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ hbool_t *depth_decreased, void *swap_loc, uint16_t depth,
H5AC_info_t *parent_cache_info, unsigned *parent_cache_info_flags_ptr,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, hsize_t n,
H5B2_remove_t op, void *op_data)
@@ -2540,7 +2540,7 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
hbool_t collapsed_root = FALSE; /* Whether the root was collapsed */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2551,7 +2551,7 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
/* Lock current B-tree node */
internal_addr = curr_node_ptr->addr;
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, internal_addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, internal_addr, curr_node_ptr->node_nrec, depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
HDassert(internal->nrec == curr_node_ptr->node_nrec);
HDassert(depth == hdr->depth || internal->nrec > 1);
@@ -2566,7 +2566,7 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
HDassert(depth == hdr->depth);
/* Merge children of root node */
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
@@ -2643,27 +2643,27 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
/* (NOTE: These 2-node redistributions should actually get the
* record to promote from the node with more records. - QAK)
*/
- /* (NOTE: This code is the same in both H5B2_remove_internal() and
- * H5B2_remove_internal_by_idx(), fix bugs in both places! - QAK)
+ /* (NOTE: This code is the same in both H5B2__remove_internal() and
+ * H5B2__remove_internal_by_idx(), fix bugs in both places! - QAK)
*/
if(idx == 0) { /* Left-most child */
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec > merge_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
} /* end if */
else if(idx == internal->nrec) { /* Right-most child */
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec > merge_nrec)) {
- if(H5B2_redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
+ if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge2(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
@@ -2671,11 +2671,11 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
else { /* Middle child */
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec > merge_nrec) ||
(internal->node_ptrs[idx - 1].node_nrec > merge_nrec))) {
- if(H5B2_redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
+ if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
} /* end if */
else {
- if(H5B2_merge3(hdr, dxpl_id, depth, curr_node_ptr,
+ if(H5B2__merge3(hdr, dxpl_id, depth, curr_node_ptr,
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
} /* end else */
@@ -2730,7 +2730,7 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
/* Swap record to delete with record from leaf, if we are the last internal node */
if(swap_loc && depth == 1)
- if(H5B2_swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
+ if(H5B2__swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSWAP, FAIL, "can't swap records in B-tree")
/* Set pointers for advancing to child node */
@@ -2753,12 +2753,12 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
/* Attempt to remove record from child node */
if(depth > 1) {
- if(H5B2_remove_internal_by_idx(hdr, dxpl_id, depth_decreased, swap_loc, depth - 1,
+ if(H5B2__remove_internal_by_idx(hdr, dxpl_id, depth_decreased, swap_loc, (uint16_t)(depth - 1),
new_cache_info, new_cache_info_flags_ptr, new_node_ptr, next_pos, n, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
} /* end if */
else {
- if(H5B2_remove_leaf_by_idx(hdr, dxpl_id, new_node_ptr, next_pos, (unsigned)n, op, op_data) < 0)
+ if(H5B2__remove_leaf_by_idx(hdr, dxpl_id, new_node_ptr, next_pos, (unsigned)n, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
} /* end else */
@@ -2770,7 +2770,7 @@ H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
internal_flags |= H5AC__DIRTIED_FLAG;
#ifdef H5B2_DEBUG
- H5B2_assert_internal((!collapsed_root ? (curr_node_ptr->all_nrec - 1) : new_node_ptr->all_nrec), hdr, internal);
+ H5B2__assert_internal((!collapsed_root ? (curr_node_ptr->all_nrec - 1) : new_node_ptr->all_nrec), hdr, internal);
#endif /* H5B2_DEBUG */
done:
@@ -2779,11 +2779,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_remove_internal_by_idx() */
+} /* H5B2__remove_internal_by_idx() */
/*-------------------------------------------------------------------------
- * Function: H5B2_neighbor_leaf
+ * Function: H5B2__neighbor_leaf
*
* Purpose: Locate a record relative to the specified information in a
* B-tree leaf node and return that information by filling in
@@ -2809,7 +2809,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
+H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
void *neighbor_loc, H5B2_compare_t comp, void *udata, H5B2_found_t op,
void *op_data)
{
@@ -2818,7 +2818,7 @@ H5B2_neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_pt
int cmp = 0; /* Comparison value of records */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2827,11 +2827,11 @@ H5B2_neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_pt
HDassert(op);
/* Lock current B-tree node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, H5AC_READ)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Locate node pointer for child */
- cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
if(cmp > 0)
idx++;
else
@@ -2865,11 +2865,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree leaf node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_neighbor_leaf() */
+} /* H5B2__neighbor_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_neighbor_internal
+ * Function: H5B2__neighbor_internal
*
* Purpose: Locate a record relative to the specified information in a
* B-tree internal node and return that information by filling in
@@ -2895,7 +2895,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc, H5B2_compare_t comp,
void *udata, H5B2_found_t op, void *op_data)
{
@@ -2904,7 +2904,7 @@ H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
int cmp = 0; /* Comparison value of records */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2914,11 +2914,11 @@ H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
HDassert(op);
/* Lock current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr->addr, curr_node_ptr->node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Locate node pointer for child */
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp > 0)
idx++;
@@ -2936,11 +2936,11 @@ H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Attempt to find neighboring record */
if(depth > 1) {
- if(H5B2_neighbor_internal(hdr, dxpl_id, depth - 1, &internal->node_ptrs[idx], neighbor_loc, comp, udata, op, op_data) < 0)
+ if(H5B2__neighbor_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal->node_ptrs[idx], neighbor_loc, comp, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree internal node")
} /* end if */
else {
- if(H5B2_neighbor_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], neighbor_loc, comp, udata, op, op_data) < 0)
+ if(H5B2__neighbor_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], neighbor_loc, comp, udata, op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree leaf node")
} /* end else */
@@ -2950,11 +2950,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_neighbor_internal() */
+} /* H5B2__neighbor_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_delete_node
+ * Function: H5B2__delete_node
*
* Purpose: Iterate over all the nodes in a B-tree node deleting them
* after they no longer have any children
@@ -2968,7 +2968,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
const H5B2_node_ptr_t *curr_node, H5B2_remove_t op, void *op_data)
{
const H5AC_class_t *curr_node_class = NULL; /* Pointer to current node's class info */
@@ -2976,7 +2976,7 @@ H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
uint8_t *native; /* Pointers to node's native records */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -2987,7 +2987,7 @@ H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
unsigned u; /* Local index */
/* Lock the current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_WRITE)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Set up information about current node */
@@ -2997,14 +2997,14 @@ H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Descend into children */
for(u = 0; u < internal->nrec + (unsigned)1; u++)
- if(H5B2_delete_node(hdr, dxpl_id, (depth - 1), &(internal->node_ptrs[u]), op, op_data) < 0)
+ if(H5B2__delete_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), op, op_data) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node descent failed")
} /* end if */
else {
H5B2_leaf_t *leaf; /* Pointer to leaf node */
/* Lock the current B-tree node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, H5AC_WRITE)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, H5AC_WRITE)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Set up information about current node */
@@ -3031,11 +3031,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_delete_node() */
+} /* H5B2__delete_node() */
/*-------------------------------------------------------------------------
- * Function: H5B2_node_size
+ * Function: H5B2__node_size
*
* Purpose: Iterate over all the records from a B-tree node, collecting
* btree storage info.
@@ -3048,13 +3048,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
const H5B2_node_ptr_t *curr_node, hsize_t *btree_size)
{
H5B2_internal_t *internal = NULL; /* Pointer to internal node */
herr_t ret_value = SUCCEED; /* Iterator return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(hdr);
@@ -3063,7 +3063,7 @@ H5B2_node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
HDassert(depth > 0);
/* Lock the current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
/* Recursively descend into child nodes, if we are above the "twig" level in the B-tree */
@@ -3072,7 +3072,7 @@ H5B2_node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
/* Descend into children */
for(u = 0; u < internal->nrec + (unsigned)1; u++)
- if(H5B2_node_size(hdr, dxpl_id, (depth - 1), &(internal->node_ptrs[u]), btree_size) < 0)
+ if(H5B2__node_size(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), btree_size) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
} /* end if */
else /* depth is 1: count all the leaf nodes from this node */
@@ -3086,11 +3086,11 @@ done:
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_node_size() */
+} /* H5B2__node_size() */
/*-------------------------------------------------------------------------
- * Function: H5B2_internal_free
+ * Function: H5B2__internal_free
*
* Purpose: Destroys a B-tree internal node in memory.
*
@@ -3103,11 +3103,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_internal_free(H5B2_internal_t *internal)
+H5B2__internal_free(H5B2_internal_t *internal)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -3123,7 +3123,7 @@ H5B2_internal_free(H5B2_internal_t *internal)
internal->node_ptrs = (H5B2_node_ptr_t *)H5FL_FAC_FREE(internal->hdr->node_info[internal->depth].node_ptr_fac, internal->node_ptrs);
/* Decrement ref. count on B-tree header */
- if(H5B2_hdr_decr(internal->hdr) < 0)
+ if(H5B2__hdr_decr(internal->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement ref. count on B-tree header")
/* Free B-tree internal node info */
@@ -3131,11 +3131,11 @@ H5B2_internal_free(H5B2_internal_t *internal)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_internal_free() */
+} /* end H5B2__internal_free() */
/*-------------------------------------------------------------------------
- * Function: H5B2_leaf_free
+ * Function: H5B2__leaf_free
*
* Purpose: Destroys a B-tree leaf node in memory.
*
@@ -3148,11 +3148,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_leaf_free(H5B2_leaf_t *leaf)
+H5B2__leaf_free(H5B2_leaf_t *leaf)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -3164,7 +3164,7 @@ H5B2_leaf_free(H5B2_leaf_t *leaf)
leaf->leaf_native = (uint8_t *)H5FL_FAC_FREE(leaf->hdr->node_info[0].nat_rec_fac, leaf->leaf_native);
/* Decrement ref. count on B-tree header */
- if(H5B2_hdr_decr(leaf->hdr) < 0)
+ if(H5B2__hdr_decr(leaf->hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement ref. count on B-tree header")
/* Free B-tree leaf node info */
@@ -3172,12 +3172,12 @@ H5B2_leaf_free(H5B2_leaf_t *leaf)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B2_leaf_free() */
+} /* end H5B2__leaf_free() */
#ifdef H5B2_DEBUG
/*-------------------------------------------------------------------------
- * Function: H5B2_assert_leaf
+ * Function: H5B2__assert_leaf
*
* Purpose: Verify than a leaf node is mostly sane
*
@@ -3190,17 +3190,17 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_assert_leaf(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf)
+H5B2__assert_leaf(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf)
{
/* General sanity checking on node */
HDassert(leaf->nrec <= hdr->node_info->split_nrec);
return(0);
-} /* end H5B2_assert_leaf() */
+} /* end H5B2__assert_leaf() */
/*-------------------------------------------------------------------------
- * Function: H5B2_assert_leaf2
+ * Function: H5B2__assert_leaf2
*
* Purpose: Verify than a leaf node is mostly sane
*
@@ -3213,17 +3213,17 @@ H5B2_assert_leaf(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf, const H5B2_leaf_t UNUSED *leaf2)
+H5B2__assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf, const H5B2_leaf_t UNUSED *leaf2)
{
/* General sanity checking on node */
HDassert(leaf->nrec <= hdr->node_info->split_nrec);
return(0);
-} /* end H5B2_assert_leaf2() */
+} /* end H5B2__assert_leaf2() */
/*-------------------------------------------------------------------------
- * Function: H5B2_assert_internal
+ * Function: H5B2__assert_internal
*
* Purpose: Verify than an internal node is mostly sane
*
@@ -3236,7 +3236,7 @@ H5B2_assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf, const H5B2_lea
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal)
+H5B2__assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal)
{
hsize_t tot_all_nrec; /* Total number of records at or below this node */
uint16_t u, v; /* Local index variables */
@@ -3260,11 +3260,11 @@ H5B2_assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_
HDassert(tot_all_nrec == parent_all_nrec);
return(0);
-} /* end H5B2_assert_internal() */
+} /* end H5B2__assert_internal() */
/*-------------------------------------------------------------------------
- * Function: H5B2_assert_internal2
+ * Function: H5B2__assert_internal2
*
* Purpose: Verify than internal nodes are mostly sane
*
@@ -3277,7 +3277,7 @@ H5B2_assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_assert_internal2(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal, const H5B2_internal_t *internal2)
+H5B2__assert_internal2(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2_internal_t *internal, const H5B2_internal_t *internal2)
{
hsize_t tot_all_nrec; /* Total number of records at or below this node */
uint16_t u, v; /* Local index variables */
@@ -3303,6 +3303,6 @@ H5B2_assert_internal2(hsize_t parent_all_nrec, const H5B2_hdr_t *hdr, const H5B2
HDassert(tot_all_nrec == parent_all_nrec);
return(0);
-} /* end H5B2_assert_internal2() */
+} /* end H5B2__assert_internal2() */
#endif /* H5B2_DEBUG */
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h
index 7a538bd..72476eb 100644
--- a/src/H5B2pkg.h
+++ b/src/H5B2pkg.h
@@ -228,15 +228,15 @@ typedef struct H5B2_hdr_cache_ud_t {
typedef struct H5B2_internal_cache_ud_t {
H5F_t *f; /* File that v2 b-tree header is within */
H5B2_hdr_t *hdr; /* v2 B-tree header */
- unsigned nrec; /* Number of records in node to load */
- unsigned depth; /* Depth of node to load */
+ uint16_t nrec; /* Number of records in node to load */
+ uint16_t depth; /* Depth of node to load */
} H5B2_internal_cache_ud_t;
/* Callback info for loading a free space leaf node into the cache */
typedef struct H5B2_leaf_cache_ud_t {
H5F_t *f; /* File that v2 b-tree header is within */
H5B2_hdr_t *hdr; /* v2 B-tree header */
- unsigned nrec; /* Number of records in node to load */
+ uint16_t nrec; /* Number of records in node to load */
} H5B2_leaf_cache_ud_t;
#ifdef H5B2_TESTING
@@ -281,88 +281,88 @@ extern const H5B2_class_t *const H5B2_client_class_g[H5B2_NUM_BTREE_ID];
/******************************/
/* Routines for managing B-tree header info */
-H5_DLL H5B2_hdr_t *H5B2_hdr_alloc(H5F_t *f);
-H5_DLL haddr_t H5B2_hdr_create(H5F_t *f, hid_t dxpl_id,
+H5_DLL H5B2_hdr_t *H5B2__hdr_alloc(H5F_t *f);
+H5_DLL haddr_t H5B2__hdr_create(H5F_t *f, hid_t dxpl_id,
const H5B2_create_t *cparam, void *ctx_udata);
-H5_DLL herr_t H5B2_hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam,
+H5_DLL herr_t H5B2__hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam,
void *ctx_udata, uint16_t depth);
-H5_DLL herr_t H5B2_hdr_incr(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_decr(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr);
-H5_DLL size_t H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_dirty(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5B2__hdr_incr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2__hdr_decr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr);
+H5_DLL size_t H5B2__hdr_fuse_decr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2__hdr_dirty(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id);
/* Routines for operating on leaf nodes */
-H5B2_leaf_t *H5B2_protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
- unsigned nrec, H5AC_protect_t rw);
+H5B2_leaf_t *H5B2__protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, haddr_t addr,
+ uint16_t nrec, H5AC_protect_t rw);
/* Routines for operating on internal nodes */
-H5_DLL H5B2_internal_t *H5B2_protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
- haddr_t addr, unsigned nrec, unsigned depth, H5AC_protect_t rw);
+H5_DLL H5B2_internal_t *H5B2__protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ haddr_t addr, uint16_t nrec, uint16_t depth, H5AC_protect_t rw);
/* Routines for allocating nodes */
-H5_DLL herr_t H5B2_split_root(H5B2_hdr_t *hdr, hid_t dxpl_id);
-H5_DLL herr_t H5B2_create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL herr_t H5B2__split_root(H5B2_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL herr_t H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *node_ptr);
/* Routines for releasing structures */
-H5_DLL herr_t H5B2_hdr_free(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_leaf_free(H5B2_leaf_t *l);
-H5_DLL herr_t H5B2_internal_free(H5B2_internal_t *i);
+H5_DLL herr_t H5B2__hdr_free(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2__leaf_free(H5B2_leaf_t *l);
+H5_DLL herr_t H5B2__internal_free(H5B2_internal_t *i);
/* Routines for inserting records */
-H5_DLL herr_t H5B2_insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
- unsigned depth, unsigned *parent_cache_info_flags_ptr,
+H5_DLL herr_t H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ uint16_t depth, unsigned *parent_cache_info_flags_ptr,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *udata);
-H5_DLL herr_t H5B2_insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL herr_t H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *udata);
/* Routines for iterating over nodes/records */
-H5_DLL herr_t H5B2_iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5_DLL herr_t H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
const H5B2_node_ptr_t *curr_node, H5B2_operator_t op, void *op_data);
-H5_DLL herr_t H5B2_node_size(H5B2_hdr_t *hdr, hid_t dxpl_id,
- unsigned depth, const H5B2_node_ptr_t *curr_node, hsize_t *op_data);
+H5_DLL herr_t H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ uint16_t depth, const H5B2_node_ptr_t *curr_node, hsize_t *op_data);
/* Routines for locating records */
-H5_DLL int H5B2_locate_record(const H5B2_class_t *type, unsigned nrec,
+H5_DLL int H5B2__locate_record(const H5B2_class_t *type, unsigned nrec,
size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx);
-H5_DLL herr_t H5B2_neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
- unsigned depth, H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
+H5_DLL herr_t H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ uint16_t depth, H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
H5B2_compare_t comp, void *udata, H5B2_found_t op, void *op_data);
-H5_DLL herr_t H5B2_neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL herr_t H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
H5B2_compare_t comp, void *udata, H5B2_found_t op, void *op_data);
/* Routines for removing records */
-H5_DLL herr_t H5B2_remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
- hbool_t *depth_decreased, void *swap_loc, unsigned depth,
- H5AC_info_t *parent_cache_info, hbool_t * parent_cache_info_dirtied_ptr,
+H5_DLL herr_t H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ hbool_t *depth_decreased, void *swap_loc, uint16_t depth,
+ H5AC_info_t *parent_cache_info, hbool_t *parent_cache_info_dirtied_ptr,
H5B2_nodepos_t curr_pos, H5B2_node_ptr_t *curr_node_ptr, void *udata,
H5B2_remove_t op, void *op_data);
-H5_DLL herr_t H5B2_remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL herr_t H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos,
void *udata, H5B2_remove_t op, void *op_data);
-H5_DLL herr_t H5B2_remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
- hbool_t *depth_decreased, void *swap_loc, unsigned depth,
- H5AC_info_t *parent_cache_info, hbool_t * parent_cache_info_dirtied_ptr,
+H5_DLL herr_t H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+ hbool_t *depth_decreased, void *swap_loc, uint16_t depth,
+ H5AC_info_t *parent_cache_info, hbool_t *parent_cache_info_dirtied_ptr,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, hsize_t idx,
H5B2_remove_t op, void *op_data);
-H5_DLL herr_t H5B2_remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL herr_t H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos,
unsigned idx, H5B2_remove_t op, void *op_data);
/* Routines for deleting nodes */
-H5_DLL herr_t H5B2_delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
+H5_DLL herr_t H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
const H5B2_node_ptr_t *curr_node, H5B2_remove_t op, void *op_data);
/* Debugging routines for dumping file structures */
-H5_DLL herr_t H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+H5_DLL herr_t H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
FILE *stream, int indent, int fwidth, const H5B2_class_t *type, haddr_t obj_addr);
-H5_DLL herr_t H5B2_int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+H5_DLL herr_t H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
haddr_t hdr_addr, unsigned nrec, unsigned depth, haddr_t obj_addr);
-H5_DLL herr_t H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+H5_DLL herr_t H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr);
diff --git a/src/H5B2stat.c b/src/H5B2stat.c
index 5d159ed..bdb4a1f 100644
--- a/src/H5B2stat.c
+++ b/src/H5B2stat.c
@@ -139,7 +139,7 @@ H5B2_size(H5B2_t *bt2, hid_t dxpl_id, hsize_t *btree_size)
*btree_size += hdr->node_size;
else
/* Iterate through nodes */
- if(H5B2_node_size(hdr, dxpl_id, hdr->depth, &hdr->root, btree_size) < 0)
+ if(H5B2__node_size(hdr, dxpl_id, hdr->depth, &hdr->root, btree_size) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
} /* end if */
diff --git a/src/H5B2test.c b/src/H5B2test.c
index 8507d6e..d3149a7 100644
--- a/src/H5B2test.c
+++ b/src/H5B2test.c
@@ -61,15 +61,15 @@ typedef struct H5B2_test_ctx_t {
/* Local Prototypes */
/********************/
-static void *H5B2_test_crt_context(void *udata);
-static herr_t H5B2_test_dst_context(void *ctx);
-static herr_t H5B2_test_store(void *nrecord, const void *udata);
-static herr_t H5B2_test_compare(const void *rec1, const void *rec2);
-static herr_t H5B2_test_encode(uint8_t *raw, const void *nrecord, void *ctx);
-static herr_t H5B2_test_decode(const uint8_t *raw, void *nrecord, void *ctx);
-static herr_t H5B2_test_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
+static void *H5B2__test_crt_context(void *udata);
+static herr_t H5B2__test_dst_context(void *ctx);
+static herr_t H5B2__test_store(void *nrecord, const void *udata);
+static herr_t H5B2__test_compare(const void *rec1, const void *rec2);
+static herr_t H5B2__test_encode(uint8_t *raw, const void *nrecord, void *ctx);
+static herr_t H5B2__test_decode(const uint8_t *raw, void *nrecord, void *ctx);
+static herr_t H5B2__test_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id,
int indent, int fwidth, const void *record, const void *_udata);
-static void *H5B2_test_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+static void *H5B2__test_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t addr);
/*********************/
@@ -80,15 +80,15 @@ const H5B2_class_t H5B2_TEST[1]={{ /* B-tree class information */
H5B2_TEST_ID, /* Type of B-tree */
"H5B2_TEST_ID", /* Name of B-tree class */
sizeof(hsize_t), /* Size of native record */
- H5B2_test_crt_context, /* Create client callback context */
- H5B2_test_dst_context, /* Destroy client callback context */
- H5B2_test_store, /* Record storage callback */
- H5B2_test_compare, /* Record comparison callback */
- H5B2_test_encode, /* Record encoding callback */
- H5B2_test_decode, /* Record decoding callback */
- H5B2_test_debug, /* Record debugging callback */
- H5B2_test_crt_dbg_context, /* Create debugging context */
- H5B2_test_dst_context /* Destroy debugging context */
+ H5B2__test_crt_context, /* Create client callback context */
+ H5B2__test_dst_context, /* Destroy client callback context */
+ H5B2__test_store, /* Record storage callback */
+ H5B2__test_compare, /* Record comparison callback */
+ H5B2__test_encode, /* Record encoding callback */
+ H5B2__test_decode, /* Record decoding callback */
+ H5B2__test_debug, /* Record debugging callback */
+ H5B2__test_crt_dbg_context, /* Create debugging context */
+ H5B2__test_dst_context /* Destroy debugging context */
}};
@@ -107,7 +107,7 @@ H5FL_DEFINE_STATIC(H5B2_test_ctx_t);
/*-------------------------------------------------------------------------
- * Function: H5B2_test_crt_context
+ * Function: H5B2__test_crt_context
*
* Purpose: Create client callback context
*
@@ -120,13 +120,13 @@ H5FL_DEFINE_STATIC(H5B2_test_ctx_t);
*-------------------------------------------------------------------------
*/
static void *
-H5B2_test_crt_context(void *_f)
+H5B2__test_crt_context(void *_f)
{
H5F_t *f = (H5F_t *)_f; /* User data for building callback context */
H5B2_test_ctx_t *ctx; /* Callback context structure */
void *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Sanity check */
HDassert(f);
@@ -143,11 +143,11 @@ H5B2_test_crt_context(void *_f)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_test_crt_context() */
+} /* H5B2__test_crt_context() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_dst_context
+ * Function: H5B2__test_dst_context
*
* Purpose: Destroy client callback context
*
@@ -160,11 +160,11 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_dst_context(void *_ctx)
+H5B2__test_dst_context(void *_ctx)
{
H5B2_test_ctx_t *ctx = (H5B2_test_ctx_t *)_ctx; /* Callback context structure */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(ctx);
@@ -173,11 +173,11 @@ H5B2_test_dst_context(void *_ctx)
ctx = H5FL_FREE(H5B2_test_ctx_t, ctx);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5B2_test_dst_context() */
+} /* H5B2__test_dst_context() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_store
+ * Function: H5B2__test_store
*
* Purpose: Store native information into record for B-tree
*
@@ -190,18 +190,18 @@ H5B2_test_dst_context(void *_ctx)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_store(void *nrecord, const void *udata)
+H5B2__test_store(void *nrecord, const void *udata)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
*(hsize_t *)nrecord = *(const hsize_t *)udata;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5B2_test_store() */
+} /* H5B2__test_store() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_compare
+ * Function: H5B2__test_compare
*
* Purpose: Compare two native information records, according to some key
*
@@ -215,16 +215,16 @@ H5B2_test_store(void *nrecord, const void *udata)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_compare(const void *rec1, const void *rec2)
+H5B2__test_compare(const void *rec1, const void *rec2)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
FUNC_LEAVE_NOAPI((herr_t)(*(const hssize_t *)rec1 - *(const hssize_t *)rec2))
-} /* H5B2_test_compare() */
+} /* H5B2__test_compare() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_encode
+ * Function: H5B2__test_encode
*
* Purpose: Encode native information into raw form for storing on disk
*
@@ -237,11 +237,11 @@ H5B2_test_compare(const void *rec1, const void *rec2)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_encode(uint8_t *raw, const void *nrecord, void *_ctx)
+H5B2__test_encode(uint8_t *raw, const void *nrecord, void *_ctx)
{
H5B2_test_ctx_t *ctx = (H5B2_test_ctx_t *)_ctx; /* Callback context structure */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(ctx);
@@ -249,11 +249,11 @@ H5B2_test_encode(uint8_t *raw, const void *nrecord, void *_ctx)
H5F_ENCODE_LENGTH_LEN(raw, *(const hsize_t *)nrecord, ctx->sizeof_size);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5B2_test_encode() */
+} /* H5B2__test_encode() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_decode
+ * Function: H5B2__test_decode
*
* Purpose: Decode raw disk form of record into native form
*
@@ -266,11 +266,11 @@ H5B2_test_encode(uint8_t *raw, const void *nrecord, void *_ctx)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_decode(const uint8_t *raw, void *nrecord, void *_ctx)
+H5B2__test_decode(const uint8_t *raw, void *nrecord, void *_ctx)
{
H5B2_test_ctx_t *ctx = (H5B2_test_ctx_t *)_ctx; /* Callback context structure */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(ctx);
@@ -278,11 +278,11 @@ H5B2_test_decode(const uint8_t *raw, void *nrecord, void *_ctx)
H5F_DECODE_LENGTH_LEN(raw, *(hsize_t *)nrecord, ctx->sizeof_size);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5B2_test_decode() */
+} /* H5B2__test_decode() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_debug
+ * Function: H5B2__test_debug
*
* Purpose: Debug native form of record
*
@@ -295,11 +295,11 @@ H5B2_test_decode(const uint8_t *raw, void *nrecord, void *_ctx)
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
+H5B2__test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
int indent, int fwidth, const void *record,
const void UNUSED *_udata)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
HDassert (record);
@@ -307,11 +307,11 @@ H5B2_test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
*(const hsize_t *)record);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5B2_test_debug() */
+} /* H5B2__test_debug() */
/*-------------------------------------------------------------------------
- * Function: H5B2_test_crt_dbg_context
+ * Function: H5B2__test_crt_dbg_context
*
* Purpose: Create context for debugging callback
*
@@ -324,12 +324,12 @@ H5B2_test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
*-------------------------------------------------------------------------
*/
static void *
-H5B2_test_crt_dbg_context(H5F_t *f, hid_t UNUSED dxpl_id, haddr_t UNUSED addr)
+H5B2__test_crt_dbg_context(H5F_t *f, hid_t UNUSED dxpl_id, haddr_t UNUSED addr)
{
H5B2_test_ctx_t *ctx; /* Callback context structure */
void *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Sanity check */
HDassert(f);
@@ -346,7 +346,7 @@ H5B2_test_crt_dbg_context(H5F_t *f, hid_t UNUSED dxpl_id, haddr_t UNUSED addr)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_test_crt_dbg_context() */
+} /* H5B2__test_crt_dbg_context() */
/*-------------------------------------------------------------------------
@@ -397,7 +397,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
{
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
- unsigned depth; /* Current depth of the tree */
+ uint16_t depth; /* Current depth of the tree */
int cmp; /* Comparison value of records */
unsigned idx; /* Location of record which matches key */
herr_t ret_value = SUCCEED; /* Return value */
@@ -430,11 +430,11 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
/* Lock B-tree current node */
- if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
+ if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
/* Locate node pointer for child */
- cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
if(cmp > 0)
idx++;
@@ -470,11 +470,11 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
/* Lock B-tree leaf node */
- if(NULL == (leaf = H5B2_protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
+ if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
/* Locate record */
- cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+ cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
/* Unlock current node */
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
@@ -499,7 +499,7 @@ done:
*
* Purpose: Determine the depth of a node holding a record in the B-tree
*
- * Note: Just a simple wrapper around the H5B2_get_node_info_test() routine
+ * Note: Just a simple wrapper around the H5B2__get_node_info_test() routine
*
* Return: Success: non-negative depth of the node where the record
* was found
diff --git a/src/H5Bcache.c b/src/H5Bcache.c
index 2992986..07b594d 100644
--- a/src/H5Bcache.c
+++ b/src/H5Bcache.c
@@ -115,6 +115,7 @@ H5B__load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HDassert(H5F_addr_defined(addr));
HDassert(udata);
+ /* Allocate the B-tree node in memory */
if(NULL == (bt = H5FL_MALLOC(H5B_t)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "can't allocate B-tree struct")
HDmemset(&bt->cache_info, 0, sizeof(H5AC_info_t));
@@ -141,7 +142,7 @@ H5B__load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* magic number */
if(HDmemcmp(p, H5B_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree signature")
+ HGOTO_ERROR(H5E_BTREE, H5E_BADVALUE, NULL, "wrong B-tree signature")
p += 4;
/* node type and level */
@@ -185,7 +186,7 @@ H5B__load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
done:
if(!ret_value && bt)
- if(H5B_node_dest(bt) < 0)
+ if(H5B__node_dest(bt) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, NULL, "unable to destroy B-tree node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -328,7 +329,7 @@ H5B__dest(H5F_t *f, H5B_t *bt)
} /* end if */
/* Destroy B-tree node */
- if(H5B_node_dest(bt) < 0)
+ if(H5B__node_dest(bt) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node")
done:
diff --git a/src/H5Bdbg.c b/src/H5Bdbg.c
index 3c81c26..526a647 100644
--- a/src/H5Bdbg.c
+++ b/src/H5Bdbg.c
@@ -156,7 +156,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5B_assert
+ * Function: H5B__assert
*
* Purpose: Verifies that the tree is structured correctly.
*
@@ -171,7 +171,7 @@ done:
*/
#ifdef H5B_DEBUG
herr_t
-H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void *udata)
+H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void *udata)
{
H5B_t *bt = NULL;
H5UC_t *rc_shared; /* Ref-counted shared info */
@@ -189,7 +189,7 @@ H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
struct child_t *next;
} *head = NULL, *tail = NULL, *prev = NULL, *cur = NULL, *tmp = NULL;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
if(0 == ncalls++) {
if(H5DEBUG(B))
@@ -285,6 +285,6 @@ H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_assert() */
+} /* end H5B__assert() */
#endif /* H5B_DEBUG */
diff --git a/src/H5Bpkg.h b/src/H5Bpkg.h
index 598b122..374fcb5 100644
--- a/src/H5Bpkg.h
+++ b/src/H5Bpkg.h
@@ -88,9 +88,9 @@ H5FL_EXTERN(H5B_t);
/******************************/
/* Package Private Prototypes */
/******************************/
-H5_DLL herr_t H5B_node_dest(H5B_t *bt);
+H5_DLL herr_t H5B__node_dest(H5B_t *bt);
#ifdef H5B_DEBUG
-herr_t H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+herr_t H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
void *udata);
#endif
diff --git a/src/H5Bprivate.h b/src/H5Bprivate.h
index 9e95c15..02fb82c 100644
--- a/src/H5Bprivate.h
+++ b/src/H5Bprivate.h
@@ -100,6 +100,7 @@ typedef struct H5B_shared_t {
size_t sizeof_len; /* Size of file lengths (in bytes) */
uint8_t *page; /* Disk page */
size_t *nkey; /* Offsets of each native key in native key buffer */
+ void *udata; /* 'Local' info for a B-tree */
} H5B_shared_t;
/*
diff --git a/src/H5C.c b/src/H5C.c
index a28364a..3f11493 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -229,6 +229,8 @@ const H5C_class_t epoch_marker_class =
/* size = */ &H5C_epoch_marker_size
};
+
+
/***************************************************************************
* Class functions for H5C__EPOCH_MAKER_TYPE:
*
@@ -255,6 +257,8 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
}
+
+
static herr_t
H5C_epoch_marker_flush(H5F_t UNUSED *f,
hid_t UNUSED dxpl_id,
@@ -274,6 +278,8 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
}
+
+
static herr_t
H5C_epoch_marker_dest(H5F_t UNUSED * f,
void UNUSED * thing)
@@ -784,7 +790,7 @@ H5C_apply_candidate_list(H5F_t * f,
entries_flushed++;
#if ( H5C_APPLY_CANDIDATE_LIST__DEBUG > 1 )
- HDfprintf(stdout, "%s:%d: flushing 0x%llx.\n", FUNC, mpi_rank,
+ HDfprintf(stdout, "%s:%d: flushing 0x%llx.\n", FUNC, mpi_rank,
(long long)flush_ptr->addr);
#endif /* H5C_APPLY_CANDIDATE_LIST__DEBUG */
@@ -1604,48 +1610,38 @@ H5C_expunge_entry(H5F_t * f,
FUNC_ENTER_NOAPI(FAIL)
- HDassert( f );
- HDassert( f->shared );
+ HDassert(f);
+ HDassert(f->shared);
cache_ptr = f->shared->cache;
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
- HDassert( type );
- HDassert( type->clear );
- HDassert( type->dest );
- HDassert( H5F_addr_defined(addr) );
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(type);
+ HDassert(type->clear);
+ HDassert(type->dest);
+ HDassert(H5F_addr_defined(addr));
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU extreme sanity check failed on entry.\n");
- }
+ if(H5C_validate_lru_list(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "LRU extreme sanity check failed on entry.\n");
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+ /* Look for entry in cache */
H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
-
- if ( ( entry_ptr == NULL ) || ( entry_ptr->type != type ) ) {
-
+ if((entry_ptr == NULL) || (entry_ptr->type != type))
/* the target doesn't exist in the cache, so we are done. */
HGOTO_DONE(SUCCEED)
- }
-
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->type == type );
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "Target entry is protected.")
- }
- if ( entry_ptr->is_pinned ) {
+ HDassert(entry_ptr->addr == addr);
+ HDassert(entry_ptr->type == type);
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "Target entry is pinned.")
- }
+ /* Check for entry being pinned or protected */
+ if(entry_ptr->is_protected)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "Target entry is protected.")
+ if(entry_ptr->is_pinned)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "Target entry is pinned.")
/* Pass along 'free file space' flag to cache client */
entry_ptr->free_file_space_on_destroy = ( (flags & H5C__FREE_FILE_SPACE_FLAG) != 0 );
@@ -1670,17 +1666,13 @@ H5C_expunge_entry(H5F_t * f,
}
done:
-
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU extreme sanity check failed on exit.\n");
- }
+ if(H5C_validate_lru_list(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "LRU extreme sanity check failed on exit.\n");
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
FUNC_LEAVE_NOAPI(ret_value)
-
} /* H5C_expunge_entry() */
@@ -1965,8 +1957,8 @@ H5C_flush_cache(H5F_t *f, hid_t primary_dxpl_id, hid_t secondary_dxpl_id, unsign
FALSE);
if ( status < 0 ) {
- /* This shouldn't happen -- if it does, we are toast
- * so just scream and die.
+ /* This shouldn't happen -- if it does,
+ * we are toast so just scream and die.
*/
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
"dirty pinned entry flush failed.")
@@ -1983,7 +1975,7 @@ H5C_flush_cache(H5F_t *f, hid_t primary_dxpl_id, hid_t secondary_dxpl_id, unsign
* aren't trying to do a destroy here, so that
* is not an issue.
*/
- if(entry_ptr->flush_dep_height == curr_flush_dep_height ){
+ if(entry_ptr->flush_dep_height == curr_flush_dep_height ) {
#if H5C_DO_SANITY_CHECKS
flushed_entries_count++;
flushed_entries_size += entry_ptr->size;
@@ -1998,8 +1990,8 @@ H5C_flush_cache(H5F_t *f, hid_t primary_dxpl_id, hid_t secondary_dxpl_id, unsign
FALSE);
if ( status < 0 ) {
- /* This shouldn't happen -- if it does, we are
- * toast so just scream and die.
+ /* This shouldn't happen -- if it does,
+ * we are toast so just scream and die.
*/
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
"Can't flush entry.")
@@ -2111,7 +2103,7 @@ H5C_flush_to_min_clean(H5F_t * f,
hid_t primary_dxpl_id,
hid_t secondary_dxpl_id)
{
- H5C_t * cache_ptr;
+ H5C_t * cache_ptr;
herr_t result;
hbool_t first_flush = TRUE;
hbool_t write_permitted;
@@ -2396,41 +2388,28 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5C_get_cache_hit_rate(H5C_t * cache_ptr,
- double * hit_rate_ptr)
-
+H5C_get_cache_hit_rate(H5C_t * cache_ptr, double * hit_rate_ptr)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ) {
-
+ if((cache_ptr == NULL ) || (cache_ptr->magic != H5C__H5C_T_MAGIC))
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( hit_rate_ptr == NULL ) {
-
+ if(hit_rate_ptr == NULL)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad hit_rate_ptr on entry.")
- }
- HDassert( cache_ptr->cache_hits >= 0 );
- HDassert( cache_ptr->cache_accesses >= cache_ptr->cache_hits );
-
- if ( cache_ptr->cache_accesses > 0 ) {
+ HDassert(cache_ptr->cache_hits >= 0);
+ HDassert(cache_ptr->cache_accesses >= cache_ptr->cache_hits);
+ if(cache_ptr->cache_accesses > 0)
*hit_rate_ptr = ((double)(cache_ptr->cache_hits)) /
((double)(cache_ptr->cache_accesses));
-
- } else {
-
+ else
*hit_rate_ptr = 0.0f;
- }
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
} /* H5C_get_cache_hit_rate() */
@@ -2686,10 +2665,10 @@ H5C_insert_entry(H5F_t * f,
herr_t result;
hbool_t first_flush = TRUE;
hbool_t insert_pinned;
- hbool_t flush_last;
+ hbool_t flush_last;
#ifdef H5_HAVE_PARALLEL
- hbool_t flush_collectively;
-#endif
+ hbool_t flush_collectively;
+#endif /* H5_HAVE_PARALLEL */
hbool_t set_flush_marker;
hbool_t write_permitted = TRUE;
size_t empty_space;
@@ -2731,7 +2710,7 @@ H5C_insert_entry(H5F_t * f,
flush_last = ( (flags & H5C__FLUSH_LAST_FLAG) != 0 );
#ifdef H5_HAVE_PARALLEL
flush_collectively = ( (flags & H5C__FLUSH_COLLECTIVELY_FLAG) != 0 );
-#endif
+#endif /* H5_HAVE_PARALLEL */
entry_ptr = (H5C_cache_entry_t *)thing;
@@ -2741,19 +2720,12 @@ H5C_insert_entry(H5F_t * f,
H5C__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
- if ( test_entry_ptr != NULL ) {
-
- if ( test_entry_ptr == entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "entry already in cache.")
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "duplicate entry in cache.")
- }
- }
+ if(test_entry_ptr != NULL) {
+ if(test_entry_ptr == entry_ptr)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "entry already in cache.")
+ else
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "duplicate entry in cache.")
+ } /* end if */
#ifndef NDEBUG
entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_MAGIC;
@@ -2829,28 +2801,17 @@ H5C_insert_entry(H5F_t * f,
}
}
- if ( cache_ptr->index_size >= cache_ptr->max_cache_size ) {
-
+ if(cache_ptr->index_size >= cache_ptr->max_cache_size)
empty_space = 0;
-
- } else {
-
+ else
empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- }
-
- if ( ( cache_ptr->evictions_enabled )
- &&
+ if ( ( cache_ptr->evictions_enabled ) &&
( ( (cache_ptr->index_size + entry_ptr->size) >
- cache_ptr->max_cache_size
- )
+ cache_ptr->max_cache_size)
||
- (
- ( ( empty_space + cache_ptr->clean_index_size ) <
- cache_ptr->min_clean_size )
- )
- )
- ) {
+ ( ( ( empty_space + cache_ptr->clean_index_size ) <
+ cache_ptr->min_clean_size ) ) ) ) {
size_t space_needed;
@@ -3364,11 +3325,6 @@ done:
* Programmer: John Mainzer
* 6/2/04
*
- * JRM -- 11/5/08
- * On review this function looks like no change is needed to
- * support the new clean_index_size and dirty_index_size
- * fields of H5C_t.
- *
*-------------------------------------------------------------------------
*/
herr_t
@@ -3377,11 +3333,11 @@ H5C_move_entry(H5C_t * cache_ptr,
haddr_t old_addr,
haddr_t new_addr)
{
+ H5C_cache_entry_t * entry_ptr = NULL;
+ H5C_cache_entry_t * test_entry_ptr = NULL;
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
hbool_t was_dirty;
#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
- H5C_cache_entry_t * entry_ptr = NULL;
- H5C_cache_entry_t * test_entry_ptr = NULL;
#if H5C_DO_SANITY_CHECKS
hbool_t removed_entry_from_slist = FALSE;
#endif /* H5C_DO_SANITY_CHECKS */
@@ -3881,10 +3837,7 @@ H5C_protect(H5F_t * f,
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
- if ( (flags & H5C__READ_ONLY_FLAG) != 0 )
- {
- read_only = TRUE;
- }
+ read_only = ( (flags & H5C__READ_ONLY_FLAG) != 0 );
/* first check to see if the target is in cache */
H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, NULL)
@@ -3895,7 +3848,7 @@ H5C_protect(H5F_t * f,
if(entry_ptr->type != type)
HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, NULL, "incorrect cache entry type")
- #if H5C_DO_TAGGING_SANITY_CHECKS
+#if H5C_DO_TAGGING_SANITY_CHECKS
/* The entry is already in the cache, but make sure that the tag value
being passed in via dxpl is still legal. This will ensure that had
the entry NOT been in the cache, tagging was still set up correctly
@@ -3918,8 +3871,8 @@ H5C_protect(H5F_t * f,
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "tag verification failed");
} /* end if */
- #endif
-
+#endif
+
hit = TRUE;
thing = (void *)entry_ptr;
@@ -3958,21 +3911,15 @@ H5C_protect(H5F_t * f,
}
}
- if ( cache_ptr->index_size >= cache_ptr->max_cache_size ) {
-
+ if(cache_ptr->index_size >= cache_ptr->max_cache_size)
empty_space = 0;
-
- } else {
-
+ else
empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- }
-
/* try to free up if necceary and if evictions are permitted. Note
* that if evictions are enabled, we will call H5C_make_space_in_cache()
* regardless if the min_free_space requirement is not met.
*/
-
if ( ( cache_ptr->evictions_enabled ) &&
( ( (cache_ptr->index_size + entry_ptr->size) >
cache_ptr->max_cache_size)
@@ -3984,12 +3931,9 @@ H5C_protect(H5F_t * f,
size_t space_needed;
- if ( empty_space <= entry_ptr->size ) {
-
+ if(empty_space <= entry_ptr->size)
cache_ptr->cache_full = TRUE;
- }
-
if ( cache_ptr->check_write_permitted != NULL ) {
result = (cache_ptr->check_write_permitted)(f,
@@ -4195,25 +4139,18 @@ H5C_protect(H5F_t * f,
* into complience.
*/
- if ( cache_ptr->index_size >= cache_ptr->max_cache_size ) {
-
+ if(cache_ptr->index_size >= cache_ptr->max_cache_size)
empty_space = 0;
-
- } else {
-
+ else
empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- }
-
if ( ( cache_ptr->index_size > cache_ptr->max_cache_size )
||
( ( empty_space + cache_ptr->clean_index_size ) <
cache_ptr->min_clean_size) ) {
- if ( cache_ptr->index_size > cache_ptr->max_cache_size ) {
-
+ if(cache_ptr->index_size > cache_ptr->max_cache_size)
cache_ptr->cache_full = TRUE;
- }
result = H5C_make_space_in_cache(f, primary_dxpl_id,
secondary_dxpl_id,
@@ -4651,9 +4588,7 @@ H5C_set_prefix(H5C_t * cache_ptr, char * prefix)
cache_ptr->prefix[H5C__PREFIX_LEN - 1] = '\0';
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
} /* H5C_set_prefix() */
@@ -5564,7 +5499,7 @@ H5C_unprotect(H5F_t * f,
void * thing,
unsigned int flags)
{
- H5C_t * cache_ptr;
+ H5C_t * cache_ptr;
hbool_t deleted;
hbool_t dirtied;
hbool_t set_flush_marker;
@@ -5582,13 +5517,13 @@ H5C_unprotect(H5F_t * f,
FUNC_ENTER_NOAPI(FAIL)
- deleted = ( (flags & H5C__DELETED_FLAG) != 0 );
- dirtied = ( (flags & H5C__DIRTIED_FLAG) != 0 );
- set_flush_marker = ( (flags & H5C__SET_FLUSH_MARKER_FLAG) != 0 );
- pin_entry = ( (flags & H5C__PIN_ENTRY_FLAG) != 0 );
- unpin_entry = ( (flags & H5C__UNPIN_ENTRY_FLAG) != 0 );
- free_file_space = ( (flags & H5C__FREE_FILE_SPACE_FLAG) != 0 );
- take_ownership = ( (flags & H5C__TAKE_OWNERSHIP_FLAG) != 0 );
+ deleted = ((flags & H5C__DELETED_FLAG) != 0);
+ dirtied = ((flags & H5C__DIRTIED_FLAG) != 0);
+ set_flush_marker = ((flags & H5C__SET_FLUSH_MARKER_FLAG) != 0);
+ pin_entry = ((flags & H5C__PIN_ENTRY_FLAG) != 0);
+ unpin_entry = ((flags & H5C__UNPIN_ENTRY_FLAG) != 0);
+ free_file_space = ((flags & H5C__FREE_FILE_SPACE_FLAG) != 0);
+ take_ownership = ((flags & H5C__TAKE_OWNERSHIP_FLAG) != 0);
HDassert( f );
HDassert( f->shared );
@@ -5632,49 +5567,39 @@ H5C_unprotect(H5F_t * f,
* the ro_ref_counter. Don't actually unprotect until the ref count
* drops to zero.
*/
- if ( entry_ptr->ro_ref_count > 1 ) {
-
- HDassert( entry_ptr->is_protected );
- HDassert( entry_ptr->is_read_only );
-
- if ( dirtied ) {
+ if(entry_ptr->ro_ref_count > 1) {
+ /* Sanity check */
+ HDassert(entry_ptr->is_protected);
+ HDassert(entry_ptr->is_read_only);
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Read only entry modified(1)??")
- }
+ if(dirtied)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Read only entry modified??")
+ /* Reduce the RO ref count */
(entry_ptr->ro_ref_count)--;
/* Pin or unpin the entry as requested. */
- if ( pin_entry ) {
-
+ if(pin_entry) {
/* Pin the entry from a client */
if(H5C_pin_entry_from_client(cache_ptr, entry_ptr) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Can't pin entry by client")
-
- } else if ( unpin_entry ) {
-
+ } else if(unpin_entry) {
/* Unpin the entry from a client */
if(H5C_unpin_entry_from_client(cache_ptr, entry_ptr, FALSE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry by client")
-
- }
+ } /* end if */
} else {
+ if(entry_ptr->is_read_only) {
+ /* Sanity check */
+ HDassert(entry_ptr->ro_ref_count == 1);
- if ( entry_ptr->is_read_only ) {
-
- HDassert( entry_ptr->ro_ref_count == 1 );
-
- if ( dirtied ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Read only entry modified(2)??")
- }
+ if(dirtied)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Read only entry modified??")
entry_ptr->is_read_only = FALSE;
entry_ptr->ro_ref_count = 0;
- }
+ } /* end if */
#ifdef H5_HAVE_PARALLEL
/* When the H5C code is used to implement the metadata cache in the
@@ -5692,47 +5617,36 @@ H5C_unprotect(H5F_t * f,
* are contiguous, with only one dirty flag, we have to let the supplied
* functions deal with the reseting the is_dirty flag.
*/
- if ( entry_ptr->clear_on_unprotect ) {
-
- HDassert( entry_ptr->is_dirty );
+ if(entry_ptr->clear_on_unprotect) {
+ /* Sanity check */
+ HDassert(entry_ptr->is_dirty);
entry_ptr->clear_on_unprotect = FALSE;
-
- if ( ! dirtied ) {
-
+ if(!dirtied)
clear_entry = TRUE;
- }
- }
+ } /* end if */
#endif /* H5_HAVE_PARALLEL */
- if ( ! (entry_ptr->is_protected) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Entry already unprotected??")
- }
-
- /* mark the entry as dirty if appropriate */
- entry_ptr->is_dirty = ( (entry_ptr->is_dirty) || dirtied );
+ if(!entry_ptr->is_protected)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Entry already unprotected??")
- if ( ( was_clean ) && ( entry_ptr->is_dirty ) ) {
+ /* Mark the entry as dirty if appropriate */
+ entry_ptr->is_dirty = (entry_ptr->is_dirty || dirtied);
+ /* Update index for newly dirtied entry */
+ if(was_clean && entry_ptr->is_dirty)
H5C__UPDATE_INDEX_FOR_ENTRY_DIRTY(cache_ptr, entry_ptr)
- }
/* Pin or unpin the entry as requested. */
- if ( pin_entry ) {
-
+ if(pin_entry) {
/* Pin the entry from a client */
if(H5C_pin_entry_from_client(cache_ptr, entry_ptr) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Can't pin entry by client")
-
- } else if ( unpin_entry ) {
-
+ } else if(unpin_entry) {
/* Unpin the entry from a client */
if(H5C_unpin_entry_from_client(cache_ptr, entry_ptr, FALSE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry by client")
-
- }
+ } /* end if */
/* H5C__UPDATE_RP_FOR_UNPROTECT will place the unprotected entry on
* the pinned entry list if entry_ptr->is_pinned is TRUE.
@@ -5744,16 +5658,11 @@ H5C_unprotect(H5F_t * f,
/* if the entry is dirty, 'or' its flush_marker with the set flush flag,
* and then add it to the skip list if it isn't there already.
*/
-
- if ( entry_ptr->is_dirty ) {
-
+ if(entry_ptr->is_dirty) {
entry_ptr->flush_marker |= set_flush_marker;
-
- if ( ! (entry_ptr->in_slist) ) {
-
+ if(!entry_ptr->in_slist)
H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
- }
- }
+ } /* end if */
/* this implementation of the "deleted" option is a bit inefficient, as
* we re-insert the entry to be deleted into the replacement policy
@@ -5798,10 +5707,8 @@ H5C_unprotect(H5F_t * f,
entry_ptr->free_file_space_on_destroy = free_file_space;
/* Set the "take ownership" flag for the flush, if needed */
- if ( take_ownership) {
-
+ if(take_ownership)
flush_flags |= H5C__TAKE_OWNERSHIP_FLAG;
- }
if ( H5C_flush_single_entry(f,
primary_dxpl_id,
@@ -7854,7 +7761,6 @@ H5C_flush_invalidate_cache(H5F_t * f,
* may be created by the flush call backs. Thus it is possible
* that the slist will not be empty after we finish the scan.
*/
-
if ( cache_ptr->slist_len == 0 ) {
node_ptr = NULL;
@@ -7875,7 +7781,6 @@ H5C_flush_invalidate_cache(H5F_t * f,
HDassert( next_entry_ptr->in_slist );
}
-
#if H5C_DO_SANITY_CHECKS
/* Depending on circumstances, H5C_flush_single_entry() will
* remove dirty entries from the slist as it flushes them.
@@ -7886,10 +7791,12 @@ H5C_flush_invalidate_cache(H5F_t * f,
initial_slist_size = cache_ptr->slist_size;
/* There is also the possibility that entries will be
- * dirtied, resized, and/or moved as the result of
- * calls to the flush callbacks. We use the slist_len_increase
- * and slist_size_increase increase fields in struct H5C_t
- * to track these changes for purpose of sanity checking.
+ * dirtied, resized, moved, and/or removed from the cache
+ * as the result of calls to the flush callbacks. We use
+ * the slist_len_increase and slist_size_increase increase
+ * fields in struct H5C_t to track these changes for purpose
+ * of sanity checking.
+ *
* To this end, we must zero these fields before we start
* the pass through the slist.
*/
@@ -7988,7 +7895,7 @@ H5C_flush_invalidate_cache(H5F_t * f,
( cache_ptr->num_last_entries >=
cache_ptr->slist_len ) ) ) {
- #if H5C_DO_SANITY_CHECKS
+#if H5C_DO_SANITY_CHECKS
/* update actual_slist_len & actual_slist_size before
* the flush. Note that the entry will be removed
* from the slist after the flush, and thus may be
@@ -8001,7 +7908,7 @@ H5C_flush_invalidate_cache(H5F_t * f,
*/
actual_slist_len++;
actual_slist_size += entry_ptr->size;
- #endif /* H5C_DO_SANITY_CHECKS */
+#endif /* H5C_DO_SANITY_CHECKS */
if ( entry_ptr->is_protected ) {
@@ -8028,8 +7935,8 @@ H5C_flush_invalidate_cache(H5F_t * f,
FALSE);
if ( status < 0 ) {
- /* This shouldn't happen -- if it does, we are toast
- * so just scream and die.
+ /* This shouldn't happen -- if it does, we
+ * are toast so just scream and die.
*/
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
@@ -8054,8 +7961,8 @@ H5C_flush_invalidate_cache(H5F_t * f,
TRUE);
if ( status < 0 ) {
- /* This shouldn't happen -- if it does, we are toast so
- * just scream and die.
+ /* This shouldn't happen -- if it does, we
+ * are toast so just scream and die.
*/
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
@@ -8123,8 +8030,9 @@ H5C_flush_invalidate_cache(H5F_t * f,
if ( entry_ptr->is_protected ) {
- /* we have major problems -- but lets flush and destroy
- * everything we can before we flag an error.
+ /* we have major problems -- but lets flush and
+ * destroy everything we can before we flag an
+ * error.
*/
protected_entries++;
@@ -8148,8 +8056,8 @@ H5C_flush_invalidate_cache(H5F_t * f,
TRUE);
if ( status < 0 ) {
- /* This shouldn't happen -- if it does, we are toast so
- * just scream and die.
+ /* This shouldn't happen -- if it does,
+ * we are toast so just scream and die.
*/
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
@@ -8304,10 +8212,10 @@ done:
* primary_dxpl_id, and secondary_dxpl_id are all irrelevent,
* and the call can't be part of a sequence of flushes.
*
- * If the caller knows the address of the TBBT node at
+ * If the caller knows the address of the skip list node at
* which the target entry resides, it can avoid a lookup
* by supplying that address in the tgt_node_ptr parameter.
- * If this parameter is NULL, the function will do a TBBT
+ * If this parameter is NULL, the function will do a skip list
* search for the entry instead.
*
* The function does nothing silently if there is no entry
@@ -8332,9 +8240,9 @@ H5C_flush_single_entry(H5F_t * f,
hbool_t del_entry_from_slist_on_destroy)
{
H5C_t * cache_ptr = f->shared->cache;
- hbool_t destroy;
- hbool_t clear_only;
- hbool_t take_ownership;
+ hbool_t destroy; /* external flag */
+ hbool_t clear_only; /* external flag */
+ hbool_t take_ownership; /* external flag */
hbool_t was_dirty;
hbool_t destroy_entry;
herr_t status;
@@ -8351,12 +8259,13 @@ H5C_flush_single_entry(H5F_t * f,
HDassert( H5F_addr_defined(addr) );
HDassert( first_flush_ptr );
- destroy = ( (flags & H5C__FLUSH_INVALIDATE_FLAG) != 0 );
- clear_only = ( (flags & H5C__FLUSH_CLEAR_ONLY_FLAG) != 0);
- take_ownership = ( (flags & H5C__TAKE_OWNERSHIP_FLAG) != 0);
+ /* setup external flags from the flags parameter */
+ destroy = ((flags & H5C__FLUSH_INVALIDATE_FLAG) != 0);
+ clear_only = ((flags & H5C__FLUSH_CLEAR_ONLY_FLAG) != 0);
+ take_ownership = ((flags & H5C__TAKE_OWNERSHIP_FLAG) != 0);
/* Set the flag for destroying the entry, based on the 'take ownership'
- * and 'destroy' flags
+ * and 'destroy' flags
*/
if(take_ownership)
destroy_entry = FALSE;
@@ -8366,6 +8275,7 @@ H5C_flush_single_entry(H5F_t * f,
/* attempt to find the target entry in the hash table */
H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
+ /* run initial sanity checks */
#if H5C_DO_SANITY_CHECKS
if ( entry_ptr != NULL ) {
@@ -8526,11 +8436,10 @@ H5C_flush_single_entry(H5F_t * f,
#if H5C_DO_SANITY_CHECKS
if ( ( entry_ptr->is_dirty ) &&
( cache_ptr->check_write_permitted == NULL ) &&
- ( ! (cache_ptr->write_permitted) ) ) {
+ ( ! (cache_ptr->write_permitted) ) )
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
"Write when writes are always forbidden!?!?!")
- }
#endif /* H5C_DO_SANITY_CHECKS */
if ( destroy ) {
@@ -8598,12 +8507,11 @@ H5C_flush_single_entry(H5F_t * f,
* If that ceases to be the case, further
* tests will be necessary.
*/
- if ( cache_ptr->aux_ptr != NULL ) {
+ if ( cache_ptr->aux_ptr != NULL )
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
"resize/move in serialize occured in parallel case.")
- }
}
#endif /* H5_HAVE_PARALLEL */
}
@@ -8701,6 +8609,7 @@ H5C_flush_single_entry(H5F_t * f,
}
+ /* reset the flush_in progress flag */
entry_ptr->flush_in_progress = FALSE;
}
@@ -8740,10 +8649,6 @@ done:
*
* Programmer: John Mainzer, 5/18/04
*
- * QAK -- 1/31/08
- * Added initialization for the new free_file_space_on_destroy
- * field.
- *
*-------------------------------------------------------------------------
*/
static void *
@@ -8941,7 +8846,6 @@ H5C_make_space_in_cache(H5F_t * f,
if ( write_permitted ) {
initial_list_len = cache_ptr->LRU_list_len;
-
entry_ptr = cache_ptr->LRU_tail_ptr;
if ( cache_ptr->index_size >= cache_ptr->max_cache_size ) {
@@ -8997,6 +8901,7 @@ H5C_make_space_in_cache(H5F_t * f,
cache_ptr->entries_scanned_to_make_space++;
}
#endif /* H5C_COLLECT_CACHE_STATS */
+
result = H5C_flush_single_entry(f,
primary_dxpl_id,
secondary_dxpl_id,
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index 0fdaa79..ae6bdad 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -177,8 +177,8 @@
* entry is flushed to disk.
*
*
- * In cases where memory is plentiful, and performance is an issue, it
- * is useful to disable all cache evictions, and thereby postpone metadata
+ * In cases where memory is plentiful, and performance is an issue, it may
+ * be useful to disable all cache evictions, and thereby postpone metadata
* writes. The following field is used to implement this.
*
* evictions_enabled: Boolean flag that is initialized to TRUE. When
@@ -283,14 +283,14 @@
* some optimizations when I get to it.
*
* num_last_entries: The number of entries in the cache that can only be
- * flushed after all other entries in the cache have
- * been flushed. At this time, this will only ever be
- * one entry (the superblock), and the code has been
- * protected with HDasserts to enforce this. This restraint
- * can certainly be relaxed in the future if the need for
- * multiple entries being flushed last arises, though
- * explicit tests for that case should be added when said
- * HDasserts are removed.
+ * flushed after all other entries in the cache have
+ * been flushed. At this time, this will only ever be
+ * one entry (the superblock), and the code has been
+ * protected with HDasserts to enforce this. This restraint
+ * can certainly be relaxed in the future if the need for
+ * multiple entries being flushed last arises, though
+ * explicit tests for that case should be added when said
+ * HDasserts are removed.
*
* With the addition of the fractal heap, the cache must now deal with
* the case in which entries may be dirtied, moved, or have their sizes
@@ -354,7 +354,8 @@
* flush.
*
* Since pinned entries cannot be evicted, they must be kept on a pinned
- * entry list, instead of being entrusted to the replacement policy code.
+ * entry list (pel), instead of being entrusted to the replacement policy
+ * code.
*
* Maintaining the pinned entry list requires the following fields:
*
@@ -382,7 +383,8 @@
*
* While there has been interest in several replacement policies for
* this cache, the initial development schedule is tight. Thus I have
- * elected to support only a modified LRU policy for the first cut.
+ * elected to support only a modified LRU (least recently used) policy
+ * for the first cut.
*
* To further simplify matters, I have simply included the fields needed
* by the modified LRU in this structure. When and if we add support for
@@ -679,7 +681,7 @@
* equal to the array index has been evicted from the cache in
* the current epoch.
*
- * moves: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. The cells
+ * moves: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. The cells
* are used to record the number of times an entry with type
* id equal to the array index has been moved in the current
* epoch.
@@ -714,7 +716,7 @@
* with type id equal to the array index has been flushed while
* pinned in the current epoch.
*
- * pinned_cleared: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. The
+ * pinned_clears: Array of int64 of length H5C__MAX_NUM_TYPE_IDS + 1. The
* cells are used to record the number of times an entry
* with type id equal to the array index has been cleared while
* pinned in the current epoch.
@@ -2350,7 +2352,7 @@ if ( (cache_ptr)->index_size != \
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
-} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+} /* H5C__UPDATE_SLIST_FOR_SIZE_CHANGE */
#else /* H5C_DO_SANITY_CHECKS */
@@ -2371,7 +2373,7 @@ if ( (cache_ptr)->index_size != \
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
-} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+} /* H5C__UPDATE_SLIST_FOR_SIZE_CHANGE */
#endif /* H5C_DO_SANITY_CHECKS */
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 38b9469..c9679f4 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -292,16 +292,15 @@ typedef herr_t (*H5C_log_flush_func_t)(H5C_t * cache_ptr,
* dirtied while protected.
*
* This field is set to FALSE in the protect call, and may
- * be set to TRUE by the
- * H5C_mark_entry_dirty()
- * call at an time prior to the unprotect call.
+ * be set to TRUE by the H5C_mark_entry_dirty() call at any
+ * time prior to the unprotect call.
*
- * The H5C_mark_entry_dirty() call exists
- * as a convenience function for the fractal heap code which
- * may not know if an entry is protected or pinned, but knows
- * that is either protected or pinned. The dirtied field was
- * added as in the parallel case, it is necessary to know
- * whether a protected entry was dirty prior to the protect call.
+ * The H5C_mark_entry_dirty() call exists as a convenience
+ * function for the fractal heap code which may not know if
+ * an entry is protected or pinned, but knows that is either
+ * protected or pinned. The dirtied field was added as in
+ * the parallel case, it is necessary to know whether a
+ * protected entry is dirty prior to the protect call.
*
* is_protected: Boolean flag indicating whether this entry is protected
* (or locked, to use more conventional terms). When it is
@@ -372,21 +371,22 @@ typedef herr_t (*H5C_log_flush_func_t)(H5C_t * cache_ptr,
* the entry is flushed for whatever reason.
*
* flush_me_last: Boolean flag indicating that this entry should not be
- * flushed from the cache until all other entries without
- * the flush_me_last flag set have been flushed.
+ * flushed from the cache until all other entries without
+ * the flush_me_last flag set have been flushed.
*
* flush_me_collectively: Boolean flag indicating that this entry needs
- * to be flushed collectively when in a parallel
- * situation.
+ * to be flushed collectively when in a parallel situation.
*
- * Note: At this time, the flush_me_last and flush_me_collectively
- * flags will only be applied to one entry, the superblock,
- * and the code utilizing these flags is protected with HDasserts
- * to enforce this. This restraint can certainly be relaxed in
- * the future if the the need for multiple entries getting flushed
- * last or collectively arises, though the code allowing for that
- * will need to be expanded and tested appropriately if that
- * functionality is desired.
+ * Note:
+ *
+ * At this time, the flush_me_last and flush_me_collectively
+ * flags will only be applied to one entry, the superblock,
+ * and the code utilizing these flags is protected with HDasserts
+ * to enforce this. This restraint can certainly be relaxed in
+ * the future if the the need for multiple entries getting flushed
+ * last or collectively arises, though the code allowing for that
+ * will need to be expanded and tested appropriately if that
+ * functionality is desired.
*
* clear_on_unprotect: Boolean flag used only in PHDF5. When H5C is used
* to implement the metadata cache In the parallel case, only
@@ -608,7 +608,7 @@ typedef struct H5C_cache_entry_t
#ifdef H5_HAVE_PARALLEL
hbool_t flush_me_collectively;
hbool_t clear_on_unprotect;
- hbool_t flush_immediately;
+ hbool_t flush_immediately;
#endif /* H5_HAVE_PARALLEL */
hbool_t flush_in_progress;
hbool_t destroy_in_progress;
@@ -617,10 +617,10 @@ typedef struct H5C_cache_entry_t
/* fields supporting the 'flush dependency' feature: */
struct H5C_cache_entry_t * flush_dep_parent;
- uint64_t child_flush_dep_height_rc[H5C__NUM_FLUSH_DEP_HEIGHTS];
- unsigned flush_dep_height;
- hbool_t pinned_from_client;
- hbool_t pinned_from_cache;
+ uint64_t child_flush_dep_height_rc[H5C__NUM_FLUSH_DEP_HEIGHTS];
+ unsigned flush_dep_height;
+ hbool_t pinned_from_client;
+ hbool_t pinned_from_cache;
/* fields supporting the hash table: */
diff --git a/src/H5Dbtree.c b/src/H5Dbtree.c
index 75080f7..2933e5e 100644
--- a/src/H5Dbtree.c
+++ b/src/H5Dbtree.c
@@ -49,11 +49,6 @@
/* Local Macros */
/****************/
-/*
- * Given a B-tree node return the dimensionality of the chunks pointed to by
- * that node.
- */
-#define H5D_BTREE_NDIMS(X) (((X)->sizeof_rkey-8)/8)
/******************/
/* Local Typedefs */
@@ -74,8 +69,8 @@
* The chunk's file address is part of the B-tree and not part of the key.
*/
typedef struct H5D_btree_key_t {
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /*logical offset to start*/
uint32_t nbytes; /*size of stored data */
- hsize_t offset[H5O_LAYOUT_NDIMS]; /*logical offset to start*/
unsigned filter_mask; /*excluded filters */
} H5D_btree_key_t;
@@ -97,8 +92,9 @@ typedef struct H5D_btree_dbg_t {
/* Local Prototypes */
/********************/
+static herr_t H5D__btree_shared_free(void *_shared);
static herr_t H5D__btree_shared_create(const H5F_t *f, H5O_storage_chunk_t *store,
- unsigned ndims);
+ const H5O_layout_chunk_t *layout);
/* B-tree iterator callbacks */
static int H5D__btree_idx_iterate_cb(H5F_t *f, hid_t dxpl_id, const void *left_key,
@@ -203,6 +199,10 @@ H5B_class_t H5B_BTREE[1] = {{
/* Local Variables */
/*******************/
+/* Declare a free list to manage H5O_layout_chunk_t objects */
+H5FL_DEFINE_STATIC(H5O_layout_chunk_t);
+
+
/*-------------------------------------------------------------------------
* Function: H5D__btree_get_shared
@@ -255,7 +255,7 @@ H5D__btree_get_shared(const H5F_t UNUSED *f, const void *_udata)
*-------------------------------------------------------------------------
*/
static herr_t
-H5D__btree_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
+H5D__btree_new_node(H5F_t *f, hid_t UNUSED dxpl_id, H5B_ins_t op,
void *_lt_key, void *_udata, void *_rt_key,
haddr_t *addr_p/*out*/)
{
@@ -265,7 +265,7 @@ H5D__btree_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
unsigned u;
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC_NOERR
/* check args */
HDassert(f);
@@ -275,21 +275,19 @@ H5D__btree_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
HDassert(udata->common.layout->ndims > 0 && udata->common.layout->ndims < H5O_LAYOUT_NDIMS);
HDassert(addr_p);
- /* Allocate new storage */
- HDassert(udata->nbytes > 0);
- H5_CHECK_OVERFLOW(udata->nbytes, uint32_t, hsize_t);
- if(HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->nbytes)))
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "couldn't allocate new file storage")
- udata->addr = *addr_p;
+ /* Set address */
+ HDassert(H5F_addr_defined(udata->chunk_block.offset));
+ HDassert(udata->chunk_block.length > 0);
+ *addr_p = udata->chunk_block.offset;
/*
* The left key describes the storage of the UDATA chunk being
* inserted into the tree.
*/
- lt_key->nbytes = udata->nbytes;
+ H5_CHECKED_ASSIGN(lt_key->nbytes, uint32_t, udata->chunk_block.length, hsize_t);
lt_key->filter_mask = udata->filter_mask;
for(u = 0; u < udata->common.layout->ndims; u++)
- lt_key->offset[u] = udata->common.offset[u];
+ lt_key->scaled[u] = udata->common.scaled[u];
/*
* The right key might already be present. If not, then add a zero-width
@@ -299,13 +297,11 @@ H5D__btree_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
rt_key->nbytes = 0;
rt_key->filter_mask = 0;
for(u = 0; u < udata->common.layout->ndims; u++) {
- HDassert(udata->common.offset[u] + udata->common.layout->dim[u] >
- udata->common.offset[u]);
- rt_key->offset[u] = udata->common.offset[u] + udata->common.layout->dim[u];
+ HDassert(udata->common.scaled[u] + 1 > udata->common.scaled[u]);
+ rt_key->scaled[u] = udata->common.scaled[u] + 1;
} /* end if */
} /* end if */
-done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__btree_new_node() */
@@ -345,7 +341,7 @@ H5D__btree_cmp2(void *_lt_key, void *_udata, void *_rt_key)
HDassert(udata->layout->ndims > 0 && udata->layout->ndims <= H5O_LAYOUT_NDIMS);
/* Compare the offsets but ignore the other fields */
- ret_value = H5VM_vector_cmp_u(udata->layout->ndims, lt_key->offset, rt_key->offset);
+ ret_value = H5VM_vector_cmp_u(udata->layout->ndims, lt_key->scaled, rt_key->scaled);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__btree_cmp2() */
@@ -400,18 +396,18 @@ H5D__btree_cmp3(void *_lt_key, void *_udata, void *_rt_key)
/* indexed storage B-tree... */
/* (Dump the B-tree with h5debug to look at it) -QAK */
if(udata->layout->ndims == 2) {
- if(udata->offset[0] > rt_key->offset[0])
+ if(udata->scaled[0] > rt_key->scaled[0])
ret_value = 1;
- else if(udata->offset[0] == rt_key->offset[0] &&
- udata->offset[1] >= rt_key->offset[1])
+ else if(udata->scaled[0] == rt_key->scaled[0] &&
+ udata->scaled[1] >= rt_key->scaled[1])
ret_value = 1;
- else if(udata->offset[0] < lt_key->offset[0])
+ else if(udata->scaled[0] < lt_key->scaled[0])
ret_value = (-1);
} /* end if */
else {
- if(H5VM_vector_ge_u(udata->layout->ndims, udata->offset, rt_key->offset))
+ if(H5VM_vector_ge_u(udata->layout->ndims, udata->scaled, rt_key->scaled))
ret_value = 1;
- else if(H5VM_vector_lt_u(udata->layout->ndims, udata->offset, lt_key->offset))
+ else if(H5VM_vector_lt_u(udata->layout->ndims, udata->scaled, lt_key->scaled))
ret_value = (-1);
} /* end else */
@@ -463,13 +459,13 @@ H5D__btree_found(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t addr, const void
/* Is this *really* the requested chunk? */
for(u = 0; u < udata->common.layout->ndims; u++)
- if(udata->common.offset[u] >= lt_key->offset[u] + udata->common.layout->dim[u])
+ if(udata->common.scaled[u] >= (lt_key->scaled[u] + 1))
HGOTO_DONE(FALSE)
/* Initialize return values */
HDassert(lt_key->nbytes > 0);
- udata->addr = addr;
- udata->nbytes = lt_key->nbytes;
+ udata->chunk_block.offset = addr;
+ udata->chunk_block.length = lt_key->nbytes;
udata->filter_mask = lt_key->filter_mask;
done:
@@ -478,6 +474,44 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5D__chunk_disjoint
+ *
+ * Purpose: Determines if two chunks are disjoint.
+ *
+ * Return: Success: FALSE if they are not disjoint.
+ * TRUE if they are disjoint.
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, May 6, 2015
+ *
+ * Note: Assumes that the chunk offsets are scaled coordinates
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+H5D__chunk_disjoint(unsigned n, const hsize_t *scaled1, const hsize_t *scaled2)
+{
+ unsigned u; /* Local index variable */
+ hbool_t ret_value = FALSE; /* Return value */
+
+ FUNC_ENTER_STATIC_NOERR
+
+ /* Sanity checks */
+ HDassert(n);
+ HDassert(scaled1);
+ HDassert(scaled2);
+
+ /* Loop over two chunks, detecting disjointness and getting out quickly */
+ for(u = 0; u < n; u++)
+ if((scaled1[u] + 1) <= scaled2[u] || (scaled2[u] + 1) <= scaled1[u])
+ HGOTO_DONE(TRUE)
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D__chunk_disjoint() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5D__btree_insert
*
* Purpose: This function is called when the B-tree insert engine finds
@@ -507,7 +541,7 @@ done:
*/
/* ARGSUSED */
static H5B_ins_t
-H5D__btree_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
+H5D__btree_insert(H5F_t *f, hid_t UNUSED dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed,
void *_md_key, void *_udata, void *_rt_key,
hbool_t UNUSED *rt_key_changed,
@@ -541,68 +575,40 @@ H5D__btree_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
HGOTO_ERROR(H5E_STORAGE, H5E_UNSUPPORTED, H5B_INS_ERROR, "internal error")
} else if(H5VM_vector_eq_u(udata->common.layout->ndims,
- udata->common.offset, lt_key->offset) &&
- lt_key->nbytes > 0) {
+ udata->common.scaled, lt_key->scaled) && lt_key->nbytes > 0) {
/*
* Already exists. If the new size is not the same as the old size
* then we should reallocate storage.
*/
- if(lt_key->nbytes != udata->nbytes) {
-/* Currently, the old chunk data is "thrown away" after the space is reallocated,
- * so avoid data copy in H5MF_realloc() call by just free'ing the space and
- * allocating new space.
- *
- * This should keep the file smaller also, by freeing the space and then
- * allocating new space, instead of vice versa (in H5MF_realloc).
- *
- * QAK - 11/19/2002
- */
-#ifdef OLD_WAY
- if(HADDR_UNDEF == (*new_node_p = H5MF_realloc(f, H5FD_MEM_DRAW, addr,
- (hsize_t)lt_key->nbytes, (hsize_t)udata->nbytes)))
- HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk storage")
-#else /* OLD_WAY */
- H5_CHECK_OVERFLOW(lt_key->nbytes, uint32_t, hsize_t);
- if(H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes) < 0)
- HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk")
- H5_CHECK_OVERFLOW(udata->nbytes, uint32_t, hsize_t);
- if(HADDR_UNDEF == (*new_node_p = H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->nbytes)))
- HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk")
-#endif /* OLD_WAY */
- lt_key->nbytes = udata->nbytes;
+ if(lt_key->nbytes != udata->chunk_block.length) {
+ /* Set node's address (already re-allocated by main chunk routines) */
+ HDassert(H5F_addr_defined(udata->chunk_block.offset));
+ *new_node_p = udata->chunk_block.offset;
+ H5_CHECKED_ASSIGN(lt_key->nbytes, uint32_t, udata->chunk_block.length, hsize_t);
lt_key->filter_mask = udata->filter_mask;
*lt_key_changed = TRUE;
- udata->addr = *new_node_p;
ret_value = H5B_INS_CHANGE;
} else {
- udata->addr = addr;
+ /* Already have address in udata, from main chunk routines */
+ HDassert(H5F_addr_defined(udata->chunk_block.offset));
ret_value = H5B_INS_NOOP;
}
- } else if (H5VM_hyper_disjointp(udata->common.layout->ndims,
- lt_key->offset, udata->common.layout->dim,
- udata->common.offset, udata->common.layout->dim)) {
- HDassert(H5VM_hyper_disjointp(udata->common.layout->ndims,
- rt_key->offset, udata->common.layout->dim,
- udata->common.offset, udata->common.layout->dim));
+ } else if (H5D__chunk_disjoint(udata->common.layout->ndims,
+ lt_key->scaled, udata->common.scaled)) {
+ HDassert(H5D__chunk_disjoint(udata->common.layout->ndims,
+ rt_key->scaled, udata->common.scaled));
/*
* Split this node, inserting the new new node to the right of the
* current node. The MD_KEY is where the split occurs.
*/
- md_key->nbytes = udata->nbytes;
+ H5_CHECKED_ASSIGN(md_key->nbytes, uint32_t, udata->chunk_block.length, hsize_t);
md_key->filter_mask = udata->filter_mask;
- for(u = 0; u < udata->common.layout->ndims; u++) {
- HDassert(0 == udata->common.offset[u] % udata->common.layout->dim[u]);
- md_key->offset[u] = udata->common.offset[u];
- } /* end for */
+ for(u = 0; u < udata->common.layout->ndims; u++)
+ md_key->scaled[u] = udata->common.scaled[u];
- /*
- * Allocate storage for the new chunk
- */
- H5_CHECK_OVERFLOW(udata->nbytes, uint32_t, hsize_t);
- if(HADDR_UNDEF == (*new_node_p = H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->nbytes)))
- HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "file allocation failed")
- udata->addr = *new_node_p;
+ HDassert(H5F_addr_defined(udata->chunk_block.offset));
+ *new_node_p = udata->chunk_block.offset;
ret_value = H5B_INS_RIGHT;
} else {
@@ -669,9 +675,10 @@ done:
static herr_t
H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw, void *_key)
{
- H5D_btree_key_t *key = (H5D_btree_key_t *) _key;
- size_t ndims;
- unsigned u;
+ const H5O_layout_chunk_t *layout; /* Chunk layout description */
+ H5D_btree_key_t *key = (H5D_btree_key_t *) _key; /* Pointer to decoded key */
+ hsize_t tmp_offset; /* Temporary coordinate offset, from file */
+ unsigned u; /* Local index variable */
FUNC_ENTER_STATIC_NOERR
@@ -679,14 +686,21 @@ H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw, void *_key
HDassert(shared);
HDassert(raw);
HDassert(key);
- ndims = H5D_BTREE_NDIMS(shared);
- HDassert(ndims <= H5O_LAYOUT_NDIMS);
+ layout = (const H5O_layout_chunk_t *)shared->udata;
+ HDassert(layout);
+ HDassert(layout->ndims > 0 && layout->ndims <= H5O_LAYOUT_NDIMS);
/* decode */
UINT32DECODE(raw, key->nbytes);
UINT32DECODE(raw, key->filter_mask);
- for(u = 0; u < ndims; u++)
- UINT64DECODE(raw, key->offset[u]);
+ for(u = 0; u < layout->ndims; u++) {
+ /* Retrieve coordinate offset */
+ UINT64DECODE(raw, tmp_offset);
+ HDassert(0 == (tmp_offset % layout->dim[u]));
+
+ /* Convert to a scaled offset */
+ key->scaled[u] = tmp_offset / layout->dim[u];
+ } /* end for */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__btree_decode_key() */
@@ -707,9 +721,10 @@ H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw, void *_key
static herr_t
H5D__btree_encode_key(const H5B_shared_t *shared, uint8_t *raw, const void *_key)
{
+ const H5O_layout_chunk_t *layout; /* Chunk layout description */
const H5D_btree_key_t *key = (const H5D_btree_key_t *)_key;
- size_t ndims;
- unsigned u;
+ hsize_t tmp_offset; /* Temporary coordinate offset, from file */
+ unsigned u; /* Local index variable */
FUNC_ENTER_STATIC_NOERR
@@ -717,14 +732,18 @@ H5D__btree_encode_key(const H5B_shared_t *shared, uint8_t *raw, const void *_key
HDassert(shared);
HDassert(raw);
HDassert(key);
- ndims = H5D_BTREE_NDIMS(shared);
- HDassert(ndims <= H5O_LAYOUT_NDIMS);
+ layout = (const H5O_layout_chunk_t *)shared->udata;
+ HDassert(layout);
+ HDassert(layout->ndims > 0 && layout->ndims <= H5O_LAYOUT_NDIMS);
/* encode */
UINT32ENCODE(raw, key->nbytes);
UINT32ENCODE(raw, key->filter_mask);
- for(u = 0; u < ndims; u++)
- UINT64ENCODE(raw, key->offset[u]);
+ for(u = 0; u < layout->ndims; u++) {
+ /* Compute coordinate offset from scaled offset */
+ tmp_offset = key->scaled[u] * layout->dim[u];
+ UINT64ENCODE(raw, tmp_offset);
+ } /* end for */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__btree_encode_key() */
@@ -759,7 +778,7 @@ H5D__btree_debug_key(FILE *stream, int indent, int fwidth, const void *_key,
HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth, "Filter mask:", key->filter_mask);
HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
for(u = 0; u < udata->ndims; u++)
- HDfprintf(stream, "%s%Hd", u?", ":"", key->offset[u]);
+ HDfprintf(stream, "%s%Hd", u?", ":"", (key->scaled[u] * udata->common.layout->dim[u]));
HDfputs("}\n", stream);
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -767,6 +786,38 @@ H5D__btree_debug_key(FILE *stream, int indent, int fwidth, const void *_key,
/*-------------------------------------------------------------------------
+ * Function: H5D__btree_shared_free
+ *
+ * Purpose: Free "local" B-tree shared info
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, May 7, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D__btree_shared_free(void *_shared)
+{
+ H5B_shared_t *shared = (H5B_shared_t *)_shared;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Free the chunk layout information */
+ shared->udata = H5FL_FREE(H5O_layout_chunk_t, shared->udata);
+
+ /* Chain up to the generic B-tree shared info free routine */
+ if(H5B_shared_free(shared) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "can't free shared B-tree info")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D__btree_shared_free() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5D__btree_shared_create
*
* Purpose: Create & initialize B-tree shared info
@@ -779,9 +830,11 @@ H5D__btree_debug_key(FILE *stream, int indent, int fwidth, const void *_key,
*-------------------------------------------------------------------------
*/
static herr_t
-H5D__btree_shared_create(const H5F_t *f, H5O_storage_chunk_t *store, unsigned ndims)
+H5D__btree_shared_create(const H5F_t *f, H5O_storage_chunk_t *store,
+ const H5O_layout_chunk_t *layout)
{
H5B_shared_t *shared; /* Shared B-tree node info */
+ H5O_layout_chunk_t *my_layout = NULL; /* Pointer to copy of layout info */
size_t sizeof_rkey; /* Size of raw (disk) key */
herr_t ret_value = SUCCEED; /* Return value */
@@ -790,20 +843,27 @@ H5D__btree_shared_create(const H5F_t *f, H5O_storage_chunk_t *store, unsigned nd
/* Set the raw key size */
sizeof_rkey = 4 + /*storage size */
4 + /*filter mask */
- ndims * 8; /*dimension indices */
+ layout->ndims * 8; /*dimension indices */
/* Allocate & initialize global info for the shared structure */
if(NULL == (shared = H5B_shared_new(f, H5B_BTREE, sizeof_rkey)))
- HGOTO_ERROR(H5E_BTREE, H5E_NOSPACE, FAIL, "memory allocation failed for shared B-tree info")
+ HGOTO_ERROR(H5E_DATASET, H5E_NOSPACE, FAIL, "memory allocation failed for shared B-tree info")
/* Set up the "local" information for this dataset's chunks */
- /* <none> */
+ if(NULL == (my_layout = H5FL_MALLOC(H5O_layout_chunk_t)))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "can't allocate chunk layout")
+ HDmemcpy(my_layout, layout, sizeof(H5O_layout_chunk_t));
+ shared->udata = my_layout;
/* Make shared B-tree info reference counted */
- if(NULL == (store->u.btree.shared = H5UC_create(shared, H5B_shared_free)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
+ if(NULL == (store->u.btree.shared = H5UC_create(shared, H5D__btree_shared_free)))
+ HGOTO_ERROR(H5E_DATASET, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
done:
+ if(ret_value < 0)
+ if(my_layout)
+ my_layout = H5FL_FREE(H5O_layout_chunk_t, my_layout);
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__btree_shared_create() */
@@ -839,7 +899,7 @@ H5D__btree_idx_init(const H5D_chk_idx_info_t *idx_info, const H5S_t UNUSED *spac
idx_info->storage->u.btree.dset_ohdr_addr = dset_ohdr_addr;
/* Allocate the shared structure */
- if(H5D__btree_shared_create(idx_info->f, idx_info->storage, idx_info->layout->ndims) < 0)
+ if(H5D__btree_shared_create(idx_info->f, idx_info->storage, idx_info->layout) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
done:
@@ -1032,8 +1092,8 @@ H5D__btree_idx_iterate_cb(H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
/* Sanity check for memcpy() */
HDcompile_assert(offsetof(H5D_chunk_rec_t, nbytes) == offsetof(H5D_btree_key_t, nbytes));
HDcompile_assert(sizeof(chunk_rec.nbytes) == sizeof(lt_key->nbytes));
- HDcompile_assert(offsetof(H5D_chunk_rec_t, offset) == offsetof(H5D_btree_key_t, offset));
- HDcompile_assert(sizeof(chunk_rec.offset) == sizeof(lt_key->offset));
+ HDcompile_assert(offsetof(H5D_chunk_rec_t, scaled) == offsetof(H5D_btree_key_t, scaled));
+ HDcompile_assert(sizeof(chunk_rec.scaled) == sizeof(lt_key->scaled));
HDcompile_assert(offsetof(H5D_chunk_rec_t, filter_mask) == offsetof(H5D_btree_key_t, filter_mask));
HDcompile_assert(sizeof(chunk_rec.filter_mask) == sizeof(lt_key->filter_mask));
@@ -1170,7 +1230,7 @@ H5D__btree_idx_delete(const H5D_chk_idx_info_t *idx_info)
tmp_storage = *idx_info->storage;
/* Set up the shared structure */
- if(H5D__btree_shared_create(idx_info->f, &tmp_storage, idx_info->layout->ndims) < 0)
+ if(H5D__btree_shared_create(idx_info->f, &tmp_storage, idx_info->layout) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
/* Set up B-tree user data */
@@ -1227,9 +1287,9 @@ H5D__btree_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
HDassert(!H5F_addr_defined(idx_info_dst->storage->idx_addr));
/* Create shared B-tree info for each file */
- if(H5D__btree_shared_create(idx_info_src->f, idx_info_src->storage, idx_info_src->layout->ndims) < 0)
+ if(H5D__btree_shared_create(idx_info_src->f, idx_info_src->storage, idx_info_src->layout) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for source shared B-tree info")
- if(H5D__btree_shared_create(idx_info_dst->f, idx_info_dst->storage, idx_info_dst->layout->ndims) < 0)
+ if(H5D__btree_shared_create(idx_info_dst->f, idx_info_dst->storage, idx_info_dst->layout) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for destination shared B-tree info")
/* Create the root of the B-tree that describes chunked storage in the dest. file */
@@ -1309,7 +1369,7 @@ H5D__btree_idx_size(const H5D_chk_idx_info_t *idx_info, hsize_t *index_size)
HDassert(index_size);
/* Initialize the shared info for the B-tree traversal */
- if(H5D__btree_shared_create(idx_info->f, idx_info->storage, idx_info->layout->ndims) < 0)
+ if(H5D__btree_shared_create(idx_info->f, idx_info->storage, idx_info->layout) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
shared_init = TRUE;
@@ -1441,11 +1501,13 @@ done:
*/
herr_t
H5D_btree_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
- int fwidth, unsigned ndims)
+ int fwidth, unsigned ndims, const uint32_t *dim)
{
H5D_btree_dbg_t udata; /* User data for B-tree callback */
H5O_storage_chunk_t storage; /* Storage information for B-tree callback */
+ H5O_layout_chunk_t layout; /* Layout information for B-tree callback */
hbool_t shared_init = FALSE; /* Whether B-tree shared info is initialized */
+ unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -1454,15 +1516,21 @@ H5D_btree_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent
HDmemset(&storage, 0, sizeof(storage));
storage.idx_type = H5D_CHUNK_IDX_BTREE;
+ /* Reset "fake" layout info */
+ HDmemset(&layout, 0, sizeof(layout));
+ layout.ndims = ndims;
+ for(u = 0; u < ndims; u++)
+ layout.dim[u] = dim[u];
+
/* Allocate the shared structure */
- if(H5D__btree_shared_create(f, &storage, ndims) < 0)
+ if(H5D__btree_shared_create(f, &storage, &layout) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
shared_init = TRUE;
/* Set up user data for callback */
- udata.common.layout = NULL;
+ udata.common.layout = &layout;
udata.common.storage = &storage;
- udata.common.offset = NULL;
+ udata.common.scaled = NULL;
udata.ndims = ndims;
/* Dump the records for the B-tree */
@@ -1472,10 +1540,10 @@ done:
if(shared_init) {
/* Free the raw B-tree node buffer */
if(NULL == storage.u.btree.shared)
- HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
+ HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "ref-counted shared info nil")
else
if(H5UC_DEC(storage.u.btree.shared) < 0)
- HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
+ HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted shared info")
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index a284cee..5d8ea4a 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -59,6 +59,7 @@
#include "H5FLprivate.h" /* Free Lists */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
+#include "H5MFprivate.h" /* File memory management */
#include "H5VMprivate.h" /* Vector and array functions */
@@ -159,6 +160,7 @@ typedef struct H5D_chunk_it_ud4_t {
FILE *stream; /* Output stream */
hbool_t header_displayed; /* Node's header is displayed? */
unsigned ndims; /* Number of dimensions for chunk/dataset */
+ uint32_t *chunk_dim; /* Chunk dimensions */
} H5D_chunk_it_ud4_t;
/* Callback info for nonexistent readvv operation */
@@ -211,9 +213,9 @@ H5D__nonexistent_readvv(const H5D_io_info_t *io_info,
/* Helper routines */
static herr_t H5D__chunk_set_info_real(H5O_layout_chunk_t *layout, unsigned ndims,
const hsize_t *curr_dims);
-static void *H5D__chunk_alloc(size_t size, const H5O_pline_t *pline);
-static void *H5D__chunk_xfree(void *chk, const H5O_pline_t *pline);
-static void *H5D__chunk_realloc(void *chk, size_t size,
+static void *H5D__chunk_mem_alloc(size_t size, const H5O_pline_t *pline);
+static void *H5D__chunk_mem_xfree(void *chk, const H5O_pline_t *pline);
+static void *H5D__chunk_mem_realloc(void *chk, size_t size,
const H5O_pline_t *pline);
static herr_t H5D__chunk_cinfo_cache_reset(H5D_chunk_cached_t *last);
static herr_t H5D__chunk_cinfo_cache_update(H5D_chunk_cached_t *last,
@@ -230,6 +232,7 @@ static herr_t H5D__chunk_file_cb(void *elem, hid_t type_id, unsigned ndims,
const hsize_t *coords, void *fm);
static herr_t H5D__chunk_mem_cb(void *elem, hid_t type_id, unsigned ndims,
const hsize_t *coords, void *fm);
+static unsigned H5D__chunk_hash_val(const H5D_shared_t *shared, const hsize_t *scaled);
static herr_t H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id,
const H5D_dxpl_cache_t *dxpl_cache, H5D_rdcc_ent_t *ent, hbool_t reset);
static herr_t H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id,
@@ -237,6 +240,8 @@ static herr_t H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id,
static herr_t H5D__chunk_cache_prune(const H5D_t *dset, hid_t dxpl_id,
const H5D_dxpl_cache_t *dxpl_cache, size_t size);
static herr_t H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata);
+static herr_t H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info,
+ const H5F_block_t *old_chunk, H5F_block_t *new_chunk, hbool_t *need_insert);
#ifdef H5_HAVE_PARALLEL
static herr_t H5D__chunk_collective_fill(const H5D_t *dset, hid_t dxpl_id,
H5D_chunk_coll_info_t *chunk_info, size_t chunk_size, const void *fill_buf);
@@ -314,83 +319,94 @@ H5FL_BLK_DEFINE_STATIC(chunk);
*-------------------------------------------------------------------------
*/
herr_t
-H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters, hsize_t *offset,
- uint32_t data_size, const void *buf)
+H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
+ hsize_t *offset, uint32_t data_size, const void *buf)
{
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset layout */
H5D_chunk_ud_t udata; /* User data for querying chunk info */
- hsize_t chunk_idx;
- H5D_dxpl_cache_t _dxpl_cache; /* Data transfer property cache buffer */
- H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
- const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk); /*raw data chunk cache */
- int space_ndims; /* Dataset's space rank */
- hsize_t space_dim[H5O_LAYOUT_NDIMS]; /* Dataset's dataspace dimensions */
+ H5F_block_t old_chunk; /* Offset/length of old chunk */
+ H5D_chk_idx_info_t idx_info; /* Chunked index info */
+ hsize_t scaled[H5S_MAX_RANK]; /* Scaled coordinates for this chunk */
+ hbool_t need_insert = FALSE; /* Whether the chunk needs to be inserted into the index */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC_TAG(dxpl_id, dset->oloc.addr, FAIL)
/* Allocate dataspace and initialize it if it hasn't been. */
- if(!(*dset->shared->layout.ops->is_space_alloc)(&dset->shared->layout.storage))
+ if(!(*layout->ops->is_space_alloc)(&layout->storage))
/* Allocate storage */
if(H5D__alloc_storage(dset, dxpl_id, H5D_ALLOC_WRITE, FALSE, NULL) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
- /* Retrieve the dataset dimensions */
- if((space_ndims = H5S_get_simple_extent_dims(dset->shared->space, space_dim, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get simple dataspace info")
-
/* Calculate the index of this chunk */
- if(H5VM_chunk_index((unsigned)space_ndims, offset,
- layout->u.chunk.dim, layout->u.chunk.down_chunks, &chunk_idx) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't get chunk index")
+ H5VM_chunk_scaled(dset->shared->ndims, offset, layout->u.chunk.dim, scaled);
+ scaled[dset->shared->ndims] = 0;
/* Find out the file address of the chunk (if any) */
- if(H5D__chunk_lookup(dset, dxpl_id, offset, chunk_idx, &udata) < 0)
+ if(H5D__chunk_lookup(dset, dxpl_id, scaled, &udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
- udata.filter_mask = filters;
+ /* Sanity check */
+ HDassert((H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length > 0) ||
+ (!H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length == 0));
+
+ /* Set the file block information for the old chunk */
+ /* (Which is only defined when overwriting an existing chunk) */
+ old_chunk.offset = udata.chunk_block.offset;
+ old_chunk.length = udata.chunk_block.length;
- /* Check if the chunk needs to be 'inserted' (could exist already and
- * the 'insert' operation could resize it)
+ /* Check if the chunk needs to be inserted (it also could exist already
+ * and the chunk allocate operation could resize it)
*/
- {
- H5D_chk_idx_info_t idx_info; /* Chunked index info */
- /* Compose chunked index info struct */
- idx_info.f = dset->oloc.file;
- idx_info.dxpl_id = dxpl_id;
- idx_info.pline = &(dset->shared->dcpl_cache.pline);
- idx_info.layout = &(dset->shared->layout.u.chunk);
- idx_info.storage = &(dset->shared->layout.storage.u.chunk);
-
- /* Set up the size of chunk for user data */
- udata.nbytes = data_size;
+ /* Compose chunked index info struct */
+ idx_info.f = dset->oloc.file;
+ idx_info.dxpl_id = dxpl_id;
+ idx_info.pline = &(dset->shared->dcpl_cache.pline);
+ idx_info.layout = &(dset->shared->layout.u.chunk);
+ idx_info.storage = &(dset->shared->layout.storage.u.chunk);
- /* Create the chunk it if it doesn't exist, or reallocate the chunk
- * if its size changed.
- */
- if((dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk")
+ /* Set up the size of chunk for user data */
+ udata.chunk_block.length = data_size;
- /* Make sure the address of the chunk is returned. */
- if(!H5F_addr_defined(udata.addr))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "chunk address isn't defined")
- } /* end if */
+ /* Create the chunk it if it doesn't exist, or reallocate the chunk
+ * if its size changed.
+ */
+ if(H5D__chunk_file_alloc(&idx_info, &old_chunk, &udata.chunk_block, &need_insert) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "unable to allocate chunk")
- /* Fill the DXPL cache values for later use */
- if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+ /* Make sure the address of the chunk is returned. */
+ if(!H5F_addr_defined(udata.chunk_block.offset))
+ HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk address isn't defined")
/* Evict the (old) entry from the cache if present, but do not flush
* it to disk */
- if(UINT_MAX != udata.idx_hint)
+ if(UINT_MAX != udata.idx_hint) {
+ H5D_dxpl_cache_t _dxpl_cache; /* Data transfer property cache buffer */
+ H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
+ const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk); /*raw data chunk cache */
+
+ /* Fill the DXPL cache values for later use */
+ if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
if(H5D__chunk_cache_evict(dset, dxpl_id, dxpl_cache, rdcc->slot[udata.idx_hint], FALSE) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTREMOVE, FAIL, "unable to evict chunk")
+ } /* end if */
/* Write the data to the file */
- if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, data_size, dxpl_id, buf) < 0)
+ if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, data_size, dxpl_id, buf) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+ /* Insert the chunk record into the index */
+ if(need_insert && layout->storage.u.chunk.ops->insert) {
+ /* Set the chunk's filter mask to the new settings */
+ udata.filter_mask = filters;
+
+ if((layout->storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
+ } /* end if */
+
done:
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
} /* end H5D__chunk_direct_write() */
@@ -454,23 +470,15 @@ done:
herr_t
H5D__chunk_set_info(const H5D_t *dset)
{
- hsize_t curr_dims[H5O_LAYOUT_NDIMS]; /* Curr. size of dataset dimensions */
- int sndims; /* Rank of dataspace */
- unsigned ndims; /* Rank of dataspace */
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity checks */
HDassert(dset);
- /* Get the dim info for dataset */
- if((sndims = H5S_get_simple_extent_dims(dset->shared->space, curr_dims, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions")
- H5_ASSIGN_OVERFLOW(ndims, sndims, int, unsigned);
-
/* Set the base layout information */
- if(H5D__chunk_set_info_real(&dset->shared->layout.u.chunk, ndims, curr_dims) < 0)
+ if(H5D__chunk_set_info_real(&dset->shared->layout.u.chunk, dset->shared->ndims, dset->shared->curr_dims) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set layout's chunk info")
/* Call the index's "resize" callback */
@@ -498,10 +506,7 @@ static herr_t
H5D__chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
{
const H5T_t *type = dset->shared->type; /* Convenience pointer to dataset's datatype */
- hsize_t max_dims[H5O_LAYOUT_NDIMS]; /* Maximum size of data in elements */
- hsize_t dims[H5O_LAYOUT_NDIMS]; /* Dimension size of data in elements */
uint64_t chunk_size; /* Size of chunk in bytes */
- int ndims; /* Rank of dataspace */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@@ -516,9 +521,7 @@ H5D__chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "no chunk information set?")
/* Set up layout information */
- if((ndims = H5S_GET_EXTENT_NDIMS(dset->shared->space)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to get rank")
- if(dset->shared->layout.u.chunk.ndims != (unsigned)ndims)
+ if(dset->shared->layout.u.chunk.ndims != dset->shared->ndims)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "dimensionality of chunks doesn't match the dataspace")
/* Increment # of chunk dimensions, to account for datatype size as last element */
@@ -532,10 +535,6 @@ H5D__chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
/* Set the last dimension of the chunk size to the size of the datatype */
dset->shared->layout.u.chunk.dim[dset->shared->layout.u.chunk.ndims - 1] = (uint32_t)H5T_GET_SIZE(type);
- /* Get local copy of dataset dimensions (for sanity checking) */
- if(H5S_get_simple_extent_dims(dset->shared->space, dims, max_dims) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to query maximum dimensions")
-
/* Sanity check dimensions */
for(u = 0; u < dset->shared->layout.u.chunk.ndims - 1; u++) {
/* Don't allow zero-sized chunk dimensions */
@@ -547,7 +546,7 @@ H5D__chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
* the maximum dimension size. If any dimension size is zero, there
* will be no such restriction.
*/
- if(dims[u] && max_dims[u] != H5S_UNLIMITED && max_dims[u] < dset->shared->layout.u.chunk.dim[u])
+ if(dset->shared->curr_dims[u] && dset->shared->max_dims[u] != H5S_UNLIMITED && dset->shared->max_dims[u] < dset->shared->layout.u.chunk.dim[u])
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "chunk size must be <= maximum dimension size for fixed-sized dimensions")
} /* end for */
@@ -562,7 +561,7 @@ H5D__chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "chunk size must be < 4GB")
/* Retain computed chunk size */
- H5_ASSIGN_OVERFLOW(dset->shared->layout.u.chunk.size, chunk_size, uint64_t, uint32_t);
+ H5_CHECKED_ASSIGN(dset->shared->layout.u.chunk.size, uint32_t, chunk_size, uint64_t);
/* Reset address and pointer of the array struct for the chunked storage index */
if(H5D_chunk_idx_reset(&dset->shared->layout.storage.u.chunk, TRUE) < 0)
@@ -631,6 +630,22 @@ H5D__chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset, hid_t dapl_id)
H5D__chunk_cinfo_cache_reset(&(rdcc->last));
} /* end else */
+ /* Compute scaled dimension info, if dataset dims > 1 */
+ if(dset->shared->ndims > 1) {
+ unsigned u; /* Local index value */
+
+ for(u = 0; u < dset->shared->ndims; u++) {
+ /* Initial scaled dimension sizes */
+ rdcc->scaled_dims[u] = dset->shared->curr_dims[u] / dset->shared->layout.u.chunk.dim[u];
+
+ /* Inital 'power2up' values for scaled dimensions */
+ rdcc->scaled_power2up[u] = H5VM_power2up(rdcc->scaled_dims[u]);
+
+ /* Number of bits required to encode scaled dimension size */
+ rdcc->scaled_encode_bits[u] = H5VM_log2_gen(rdcc->scaled_power2up[u]);
+ } /* end for */
+ } /* end if */
+
/* Compose chunked index info struct */
idx_info.f = f;
idx_info.dxpl_id = dxpl_id;
@@ -722,12 +737,10 @@ H5D__chunk_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
if((sm_ndims = H5S_GET_EXTENT_NDIMS(mem_space)) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimension number")
/* Set the number of dimensions for the memory dataspace */
- H5_ASSIGN_OVERFLOW(fm->m_ndims, sm_ndims, int, unsigned);
+ H5_CHECKED_ASSIGN(fm->m_ndims, unsigned, sm_ndims, int);
- /* Get dim number and dimensionality for each dataspace */
+ /* Get rank for file dataspace */
fm->f_ndims = f_ndims = dataset->shared->layout.u.chunk.ndims - 1;
- if(H5S_get_simple_extent_dims(file_space, fm->f_dims, NULL) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimensionality")
/* Normalize hyperslab selections by adjusting them by the offset */
/* (It might be worthwhile to normalize both the file and memory dataspaces
@@ -974,7 +987,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5D__chunk_alloc
+ * Function: H5D__chunk_mem_alloc
*
* Purpose: Allocate space for a chunk in memory. This routine allocates
* memory space for non-filtered chunks from a block free list
@@ -988,7 +1001,7 @@ done:
*-------------------------------------------------------------------------
*/
static void *
-H5D__chunk_alloc(size_t size, const H5O_pline_t *pline)
+H5D__chunk_mem_alloc(size_t size, const H5O_pline_t *pline)
{
void *ret_value = NULL; /* Return value */
@@ -1003,11 +1016,11 @@ H5D__chunk_alloc(size_t size, const H5O_pline_t *pline)
ret_value = H5FL_BLK_MALLOC(chunk, size);
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5D__chunk_alloc() */
+} /* H5D__chunk_mem_alloc() */
/*-------------------------------------------------------------------------
- * Function: H5D__chunk_xfree
+ * Function: H5D__chunk_mem_xfree
*
* Purpose: Free space for a chunk in memory. This routine allocates
* memory space for non-filtered chunks from a block free list
@@ -1021,7 +1034,7 @@ H5D__chunk_alloc(size_t size, const H5O_pline_t *pline)
*-------------------------------------------------------------------------
*/
static void *
-H5D__chunk_xfree(void *chk, const H5O_pline_t *pline)
+H5D__chunk_mem_xfree(void *chk, const H5O_pline_t *pline)
{
FUNC_ENTER_STATIC_NOERR
@@ -1035,11 +1048,11 @@ H5D__chunk_xfree(void *chk, const H5O_pline_t *pline)
} /* end if */
FUNC_LEAVE_NOAPI(NULL)
-} /* H5D__chunk_xfree() */
+} /* H5D__chunk_mem_xfree() */
/*-------------------------------------------------------------------------
- * Function: H5D__chunk_realloc
+ * Function: H5D__chunk_mem_realloc
*
* Purpose: Reallocate space for a chunk in memory. This routine allocates
* memory space for non-filtered chunks from a block free list
@@ -1053,7 +1066,7 @@ H5D__chunk_xfree(void *chk, const H5O_pline_t *pline)
*-------------------------------------------------------------------------
*/
static void *
-H5D__chunk_realloc(void *chk, size_t size, const H5O_pline_t *pline)
+H5D__chunk_mem_realloc(void *chk, size_t size, const H5O_pline_t *pline)
{
void *ret_value = NULL; /* Return value */
@@ -1068,7 +1081,7 @@ H5D__chunk_realloc(void *chk, size_t size, const H5O_pline_t *pline)
ret_value = H5FL_BLK_REALLOC(chunk, chk, size);
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5D__chunk_realloc() */
+} /* H5D__chunk_mem_realloc() */
/*--------------------------------------------------------------------------
@@ -1134,6 +1147,7 @@ H5D__create_chunk_map_single(H5D_chunk_map_t *fm, const H5D_io_info_t
*io_info)
{
H5D_chunk_info_t *chunk_info; /* Chunk information to insert into skip list */
+ hsize_t coords[H5O_LAYOUT_NDIMS]; /* Coordinates of chunk */
hsize_t sel_start[H5O_LAYOUT_NDIMS]; /* Offset of low bound of file selection */
hsize_t sel_end[H5O_LAYOUT_NDIMS]; /* Offset of high bound of file selection */
unsigned u; /* Local index variable */
@@ -1155,20 +1169,20 @@ H5D__create_chunk_map_single(H5D_chunk_map_t *fm, const H5D_io_info_t
/* Set chunk location & hyperslab size */
for(u = 0; u < fm->f_ndims; u++) {
HDassert(sel_start[u] == sel_end[u]);
- chunk_info->coords[u] = (sel_start[u] / fm->layout->u.chunk.dim[u]) * fm->layout->u.chunk.dim[u];
+ chunk_info->scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
+ coords[u] = chunk_info->scaled[u] * fm->layout->u.chunk.dim[u];
} /* end for */
- chunk_info->coords[fm->f_ndims] = 0;
+ chunk_info->scaled[fm->f_ndims] = 0;
/* Calculate the index of this chunk */
- if(H5VM_chunk_index(fm->f_ndims, chunk_info->coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, &chunk_info->index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+ chunk_info->index = H5VM_array_offset_pre(fm->f_ndims, fm->layout->u.chunk.down_chunks, chunk_info->scaled);
/* Copy selection for file's dataspace into chunk dataspace */
if(H5S_select_copy(fm->single_space, fm->file_space, FALSE) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy file selection")
/* Move selection back to have correct offset in chunk */
- if(H5S_SELECT_ADJUST_U(fm->single_space, chunk_info->coords) < 0)
+ if(H5S_SELECT_ADJUST_U(fm->single_space, coords) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "can't adjust chunk selection")
#ifdef H5_HAVE_PARALLEL
@@ -1219,8 +1233,10 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
hsize_t sel_points; /* Number of elements in file selection */
hsize_t start_coords[H5O_LAYOUT_NDIMS]; /* Starting coordinates of selection */
hsize_t coords[H5O_LAYOUT_NDIMS]; /* Current coordinates of chunk */
- hsize_t end[H5O_LAYOUT_NDIMS]; /* Current coordinates of chunk */
+ hsize_t end[H5O_LAYOUT_NDIMS]; /* Final coordinates of chunk */
hsize_t chunk_index; /* Index of chunk */
+ hsize_t start_scaled[H5S_MAX_RANK]; /* Starting scaled coordinates of selection */
+ hsize_t scaled[H5S_MAX_RANK]; /* Scaled coordinates for this chunk */
int curr_dim; /* Current dimension to increment */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@@ -1239,14 +1255,13 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
/* Set initial chunk location & hyperslab size */
for(u = 0; u < fm->f_ndims; u++) {
- start_coords[u] = (sel_start[u] / fm->layout->u.chunk.dim[u]) * fm->layout->u.chunk.dim[u];
- coords[u] = start_coords[u];
+ scaled[u] = start_scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
+ coords[u] = start_coords[u] = scaled[u] * fm->layout->u.chunk.dim[u];
end[u] = (coords[u] + fm->chunk_dim[u]) - 1;
} /* end for */
/* Calculate the index of this chunk */
- if(H5VM_chunk_index(fm->f_ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, &chunk_index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+ chunk_index = H5VM_array_offset_pre(fm->f_ndims, fm->layout->u.chunk.down_chunks, scaled);
/* Iterate through each chunk in the dataset */
while(sel_points) {
@@ -1312,9 +1327,9 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
new_chunk_info->mspace=NULL;
new_chunk_info->mspace_shared = FALSE;
- /* Copy the chunk's coordinates */
- HDmemcpy(new_chunk_info->coords, coords, sizeof(hsize_t) * fm->f_ndims);
- new_chunk_info->coords[fm->f_ndims] = 0;
+ /* Copy the chunk's scaled coordinates */
+ HDmemcpy(new_chunk_info->scaled, scaled, sizeof(hsize_t) * fm->f_ndims);
+ new_chunk_info->scaled[fm->f_ndims] = 0;
/* Insert the new chunk into the skip list */
if(H5SL_insert(fm->sel_chunks, new_chunk_info, &new_chunk_info->index) < 0) {
@@ -1325,7 +1340,7 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
/* Get number of elements selected in chunk */
if((schunk_points = H5S_GET_SELECT_NPOINTS(tmp_fchunk)) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection # of elements")
- H5_ASSIGN_OVERFLOW(new_chunk_info->chunk_points, schunk_points, hssize_t, uint32_t);
+ H5_CHECKED_ASSIGN(new_chunk_info->chunk_points, uint32_t, schunk_points, hssize_t);
/* Decrement # of points left in file selection */
sel_points -= (hsize_t)schunk_points;
@@ -1345,11 +1360,13 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
H5_CHECK_OVERFLOW(fm->chunk_dim[curr_dim],hsize_t,hssize_t);
coords[curr_dim]+=fm->chunk_dim[curr_dim];
end[curr_dim]+=fm->chunk_dim[curr_dim];
+ scaled[curr_dim]++;
/* Bring chunk location back into bounds, if necessary */
if(coords[curr_dim] > sel_end[curr_dim]) {
do {
/* Reset current dimension's location to 0 */
+ scaled[curr_dim] = start_scaled[curr_dim];
coords[curr_dim] = start_coords[curr_dim]; /*lint !e771 The start_coords will always be initialized */
end[curr_dim] = (coords[curr_dim] + fm->chunk_dim[curr_dim]) - 1;
@@ -1357,13 +1374,13 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
curr_dim--;
/* Increment chunk location in current dimension */
+ scaled[curr_dim]++;
coords[curr_dim] += fm->chunk_dim[curr_dim];
end[curr_dim] = (coords[curr_dim] + fm->chunk_dim[curr_dim]) - 1;
} while(coords[curr_dim] > sel_end[curr_dim]);
/* Re-calculate the index of this chunk */
- if(H5VM_chunk_index(fm->f_ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, &chunk_index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+ chunk_index = H5VM_array_offset_pre(fm->f_ndims, fm->layout->u.chunk.down_chunks, scaled);
} /* end if */
} /* end while */
@@ -1464,10 +1481,16 @@ H5D__create_chunk_mem_map_hyper(const H5D_chunk_map_t *fm)
if(H5S_select_copy(chunk_info->mspace,chunk_info->fspace,FALSE) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy selection")
- /* Compensate for the chunk offset */
- for(u=0; u<fm->f_ndims; u++) {
- H5_CHECK_OVERFLOW(chunk_info->coords[u],hsize_t,hssize_t);
- chunk_adjust[u]=adjust[u]-(hssize_t)chunk_info->coords[u]; /*lint !e771 The adjust array will always be initialized */
+ /* Compute the adjustment for this chunk */
+ for(u = 0; u < fm->f_ndims; u++) {
+ hsize_t coords[H5O_LAYOUT_NDIMS]; /* Current coordinates of chunk */
+
+ /* Compute the chunk coordinates from the scaled coordinates */
+ coords[u] = chunk_info->scaled[u] * fm->layout->u.chunk.dim[u];
+
+ /* Compensate for the chunk offset */
+ H5_CHECK_OVERFLOW(coords[u], hsize_t, hssize_t);
+ chunk_adjust[u] = adjust[u] - (hssize_t)coords[u]; /*lint !e771 The adjust array will always be initialized */
} /* end for */
/* Adjust the selection */
@@ -1505,14 +1528,14 @@ H5D__chunk_file_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, cons
H5D_chunk_info_t *chunk_info; /* Chunk information for current chunk */
hsize_t coords_in_chunk[H5O_LAYOUT_NDIMS]; /* Coordinates of element in chunk */
hsize_t chunk_index; /* Chunk index */
+ hsize_t scaled[H5S_MAX_RANK]; /* Scaled coordinates for this chunk */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Calculate the index of this chunk */
- if(H5VM_chunk_index(ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, &chunk_index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+ chunk_index = H5VM_chunk_index_scaled(ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, scaled);
/* Find correct chunk in file & memory skip list */
if(chunk_index==fm->last_index) {
@@ -1562,12 +1585,9 @@ H5D__chunk_file_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, cons
/* Set the number of selected elements in chunk to zero */
chunk_info->chunk_points = 0;
- /* Compute the chunk's coordinates */
- for(u = 0; u < fm->f_ndims; u++) {
- H5_CHECK_OVERFLOW(fm->layout->u.chunk.dim[u], hsize_t, hssize_t);
- chunk_info->coords[u] = (coords[u] / (hssize_t)fm->layout->u.chunk.dim[u]) * (hssize_t)fm->layout->u.chunk.dim[u];
- } /* end for */
- chunk_info->coords[fm->f_ndims] = 0;
+ /* Set the chunk's scaled coordinates */
+ HDmemcpy(chunk_info->scaled, scaled, sizeof(hsize_t) * fm->f_ndims);
+ chunk_info->scaled[fm->f_ndims] = 0;
/* Insert the new chunk into the skip list */
if(H5SL_insert(fm->sel_chunks,chunk_info,&chunk_info->index) < 0) {
@@ -1589,7 +1609,7 @@ H5D__chunk_file_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, cons
/* Get the offset of the element within the chunk */
for(u = 0; u < fm->f_ndims; u++)
- coords_in_chunk[u] = coords[u] - chunk_info->coords[u];
+ coords_in_chunk[u] = coords[u] - (scaled[u] * fm->layout->u.chunk.dim[u]);
/* Add point to file selection for chunk */
if(H5S_select_elements(chunk_info->fspace, H5S_SELECT_APPEND, (size_t)1, coords_in_chunk) < 0)
@@ -1629,8 +1649,7 @@ H5D__chunk_mem_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, const
FUNC_ENTER_STATIC
/* Calculate the index of this chunk */
- if(H5VM_chunk_index(ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks, &chunk_index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+ chunk_index = H5VM_chunk_index(ndims, coords, fm->layout->u.chunk.dim, fm->layout->u.chunk.down_chunks);
/* Find correct chunk in file & memory skip list */
if(chunk_index == fm->last_index) {
@@ -1803,7 +1822,7 @@ H5D__chunk_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
ctg_io_info.layout_ops = *H5D_LOPS_CONTIG;
/* Initialize temporary contiguous storage info */
- H5_ASSIGN_OVERFLOW(ctg_store.contig.dset_size, io_info->dset->shared->layout.u.chunk.size, uint32_t, hsize_t);
+ H5_CHECKED_ASSIGN(ctg_store.contig.dset_size, hsize_t, io_info->dset->shared->layout.u.chunk.size, uint32_t);
/* Set up compact I/O info object */
HDmemcpy(&cpt_io_info, io_info, sizeof(cpt_io_info));
@@ -1835,33 +1854,39 @@ H5D__chunk_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
chunk_node = H5D_CHUNK_GET_FIRST_NODE(fm);
while(chunk_node) {
H5D_chunk_info_t *chunk_info; /* Chunk information */
- H5D_io_info_t *chk_io_info; /* Pointer to I/O info object for this chunk */
- void *chunk; /* Pointer to locked chunk buffer */
- H5D_chunk_ud_t udata; /* B-tree pass-through */
- htri_t cacheable; /* Whether the chunk is cacheable */
+ H5D_chunk_ud_t udata; /* Chunk index pass-through */
/* Get the actual chunk information from the skip list node */
chunk_info = H5D_CHUNK_GET_NODE_INFO(fm, chunk_node);
/* Get the info for the chunk in the file */
- if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->coords, chunk_info->index, &udata) < 0)
+ if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
+ /* Sanity check */
+ HDassert((H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length > 0) ||
+ (!H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length == 0));
+
/* Check for non-existant chunk & skip it if appropriate */
- if(H5F_addr_defined(udata.addr) || UINT_MAX != udata.idx_hint
+ if(H5F_addr_defined(udata.chunk_block.offset) || UINT_MAX != udata.idx_hint
|| !skip_missing_chunks) {
- /* Load the chunk into cache and lock it. */
- if((cacheable = H5D__chunk_cacheable(io_info, udata.addr, FALSE)) < 0)
+ H5D_io_info_t *chk_io_info; /* Pointer to I/O info object for this chunk */
+ void *chunk = NULL; /* Pointer to locked chunk buffer */
+ htri_t cacheable; /* Whether the chunk is cacheable */
+
+ /* Determine if we should use the chunk cache */
+ if((cacheable = H5D__chunk_cacheable(io_info, udata.chunk_block.offset, FALSE)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't tell if chunk is cacheable")
if(cacheable) {
- /* Pass in chunk's coordinates in a union. */
- io_info->store->chunk.offset = chunk_info->coords;
- io_info->store->chunk.index = chunk_info->index;
+ /* Load the chunk into cache and lock it. */
/* Compute # of bytes accessed in chunk */
H5_CHECK_OVERFLOW(type_info->src_type_size, /*From:*/ size_t, /*To:*/ uint32_t);
src_accessed_bytes = chunk_info->chunk_points * (uint32_t)type_info->src_type_size;
+ /* Set chunk's [scaled] coordinates */
+ io_info->store->chunk.scaled = chunk_info->scaled;
+
/* Lock the chunk into the cache */
if(NULL == (chunk = H5D__chunk_lock(io_info, &udata, FALSE)))
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to read raw data chunk")
@@ -1872,20 +1897,14 @@ H5D__chunk_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
/* Point I/O info at contiguous I/O info for this chunk */
chk_io_info = &cpt_io_info;
} /* end if */
- else if(H5F_addr_defined(udata.addr)) {
+ else if(H5F_addr_defined(udata.chunk_block.offset)) {
/* Set up the storage address information for this chunk */
- ctg_store.contig.dset_addr = udata.addr;
-
- /* No chunk cached */
- chunk = NULL;
+ ctg_store.contig.dset_addr = udata.chunk_block.offset;
/* Point I/O info at temporary I/O info for this chunk */
chk_io_info = &ctg_io_info;
} /* end else if */
else {
- /* No chunk cached */
- chunk = NULL;
-
/* Point I/O info at "nonexistent" I/O info for this chunk */
chk_io_info = &nonexistent_io_info;
} /* end else */
@@ -1949,7 +1968,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
ctg_io_info.layout_ops = *H5D_LOPS_CONTIG;
/* Initialize temporary contiguous storage info */
- H5_ASSIGN_OVERFLOW(ctg_store.contig.dset_size, io_info->dset->shared->layout.u.chunk.size, uint32_t, hsize_t);
+ H5_CHECKED_ASSIGN(ctg_store.contig.dset_size, hsize_t, io_info->dset->shared->layout.u.chunk.size, uint32_t);
/* Set up compact I/O info object */
HDmemcpy(&cpt_io_info, io_info, sizeof(cpt_io_info));
@@ -1963,27 +1982,32 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
chunk_node = H5D_CHUNK_GET_FIRST_NODE(fm);
while(chunk_node) {
H5D_chunk_info_t *chunk_info; /* Chunk information */
+ H5D_chk_idx_info_t idx_info; /* Chunked index info */
H5D_io_info_t *chk_io_info; /* Pointer to I/O info object for this chunk */
void *chunk; /* Pointer to locked chunk buffer */
H5D_chunk_ud_t udata; /* Index pass-through */
htri_t cacheable; /* Whether the chunk is cacheable */
+ hbool_t need_insert = FALSE; /* Whether the chunk needs to be inserted into the index */
/* Get the actual chunk information from the skip list node */
chunk_info = H5D_CHUNK_GET_NODE_INFO(fm, chunk_node);
- /* Load the chunk into cache. But if the whole chunk is written,
- * simply allocate space instead of load the chunk. */
- if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->coords, chunk_info->index, &udata) < 0)
+ /* Look up the chunk */
+ if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
- if((cacheable = H5D__chunk_cacheable(io_info, udata.addr, TRUE)) < 0)
+
+ /* Sanity check */
+ HDassert((H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length > 0) ||
+ (!H5F_addr_defined(udata.chunk_block.offset) && udata.chunk_block.length == 0));
+
+ /* Determine if we should use the chunk cache */
+ if((cacheable = H5D__chunk_cacheable(io_info, udata.chunk_block.offset, TRUE)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't tell if chunk is cacheable")
if(cacheable) {
+ /* Load the chunk into cache. But if the whole chunk is written,
+ * simply allocate space instead of load the chunk. */
hbool_t entire_chunk = TRUE; /* Whether whole chunk is selected */
- /* Pass in chunk's coordinates in a union. */
- io_info->store->chunk.offset = chunk_info->coords;
- io_info->store->chunk.index = chunk_info->index;
-
/* Compute # of bytes accessed in chunk */
H5_CHECK_OVERFLOW(type_info->dst_type_size, /*From:*/ size_t, /*To:*/ uint32_t);
dst_accessed_bytes = chunk_info->chunk_points * (uint32_t)type_info->dst_type_size;
@@ -1993,6 +2017,9 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
(chunk_info->chunk_points * type_info->src_type_size) != ctg_store.contig.dset_size)
entire_chunk = FALSE;
+ /* Set chunk's [scaled] coordinates */
+ io_info->store->chunk.scaled = chunk_info->scaled;
+
/* Lock the chunk into the cache */
if(NULL == (chunk = H5D__chunk_lock(io_info, &udata, entire_chunk)))
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to read raw data chunk")
@@ -2005,9 +2032,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
} /* end if */
else {
/* If the chunk hasn't been allocated on disk, do so now. */
- if(!H5F_addr_defined(udata.addr)) {
- H5D_chk_idx_info_t idx_info; /* Chunked index info */
-
+ if(!H5F_addr_defined(udata.chunk_block.offset)) {
/* Compose chunked index info struct */
idx_info.f = io_info->dset->oloc.file;
idx_info.dxpl_id = io_info->dxpl_id;
@@ -2016,14 +2041,14 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
idx_info.storage = &(io_info->dset->shared->layout.storage.u.chunk);
/* Set up the size of chunk for user data */
- udata.nbytes = io_info->dset->shared->layout.u.chunk.size;
+ udata.chunk_block.length = io_info->dset->shared->layout.u.chunk.size;
- /* Create the chunk */
- if((io_info->dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk")
+ /* Allocate the chunk */
+ if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
/* Make sure the address of the chunk is returned. */
- if(!H5F_addr_defined(udata.addr))
+ if(!H5F_addr_defined(udata.chunk_block.offset))
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "chunk address isn't defined")
/* Cache the new chunk information */
@@ -2031,7 +2056,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
} /* end if */
/* Set up the storage address information for this chunk */
- ctg_store.contig.dset_addr = udata.addr;
+ ctg_store.contig.dset_addr = udata.chunk_block.offset;
/* No chunk cached */
chunk = NULL;
@@ -2045,9 +2070,16 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
(hsize_t)chunk_info->chunk_points, chunk_info->fspace, chunk_info->mspace) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "chunked write failed")
- /* Release the cache lock on the chunk. */
- if(chunk && H5D__chunk_unlock(io_info, &udata, TRUE, chunk, dst_accessed_bytes) < 0)
- HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk")
+ /* Release the cache lock on the chunk, or insert chunk into index. */
+ if(chunk) {
+ if(H5D__chunk_unlock(io_info, &udata, TRUE, chunk, dst_accessed_bytes) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk")
+ } /* end if */
+ else {
+ if(need_insert && io_info->dset->shared->layout.storage.u.chunk.ops->insert)
+ if((io_info->dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
+ } /* end else */
/* Advance to next chunk in list */
chunk_node = H5D_CHUNK_GET_NEXT_NODE(fm, chunk_node);
@@ -2239,13 +2271,12 @@ H5D__chunk_cinfo_cache_update(H5D_chunk_cached_t *last, const H5D_chunk_ud_t *ud
HDassert(last);
HDassert(udata);
HDassert(udata->common.layout);
- HDassert(udata->common.storage);
- HDassert(udata->common.offset);
+ HDassert(udata->common.scaled);
/* Stored the information to cache */
- HDmemcpy(last->offset, udata->common.offset, sizeof(hsize_t) * udata->common.layout->ndims);
- last->addr = udata->addr;
- last->nbytes = udata->nbytes;
+ HDmemcpy(last->scaled, udata->common.scaled, sizeof(hsize_t) * udata->common.layout->ndims);
+ last->addr = udata->chunk_block.offset;
+ H5_CHECKED_ASSIGN(last->nbytes, uint32_t, udata->chunk_block.length, hsize_t);
last->filter_mask = udata->filter_mask;
/* Indicate that the cached info is valid */
@@ -2278,21 +2309,20 @@ H5D__chunk_cinfo_cache_found(const H5D_chunk_cached_t *last, H5D_chunk_ud_t *uda
HDassert(last);
HDassert(udata);
HDassert(udata->common.layout);
- HDassert(udata->common.storage);
- HDassert(udata->common.offset);
+ HDassert(udata->common.scaled);
/* Check if the cached information is what is desired */
if(last->valid) {
unsigned u; /* Local index variable */
- /* Check that the offset is the same */
+ /* Check that the scaled offset is the same */
for(u = 0; u < udata->common.layout->ndims; u++)
- if(last->offset[u] != udata->common.offset[u])
+ if(last->scaled[u] != udata->common.scaled[u])
HGOTO_DONE(FALSE)
/* Retrieve the information from the cache */
- udata->addr = last->addr;
- udata->nbytes = last->nbytes;
+ udata->chunk_block.offset = last->addr;
+ udata->chunk_block.length = last->nbytes;
udata->filter_mask = last->filter_mask;
/* Indicate that the data was found */
@@ -2357,6 +2387,53 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5D__chunk_hash_val
+ *
+ * Purpose: To calculate an index based on the dataset's scaled coordinates and
+ * sizes of the faster dimensions.
+ *
+ * Return: Hash value index
+ *
+ * Programmer: Vailin Choi; Nov 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5D__chunk_hash_val(const H5D_shared_t *shared, const hsize_t *scaled)
+{
+ hsize_t val; /* Intermediate value */
+ unsigned ndims = shared->ndims; /* Rank of dataset */
+ unsigned ret; /* Value to return */
+
+ FUNC_ENTER_STATIC_NOERR
+
+ /* Sanity check */
+ HDassert(shared);
+ HDassert(scaled);
+
+ /* If the fastest changing dimension doesn't have enough entropy, use
+ * other dimensions too
+ */
+ if(ndims > 1 && shared->cache.chunk.scaled_dims[ndims - 1] <= shared->cache.chunk.nslots) {
+ unsigned u; /* Local index variable */
+
+ val = scaled[0];
+ for(u = 1; u < ndims; u++) {
+ val <<= shared->cache.chunk.scaled_encode_bits[u];
+ val ^= scaled[u];
+ } /* end for */
+ } /* end if */
+ else
+ val = scaled[ndims - 1];
+
+ /* Modulo value against the number of array slots */
+ ret = (unsigned)(val % shared->cache.chunk.nslots);
+
+ FUNC_LEAVE_NOAPI(ret)
+} /* H5D__chunk_hash_val() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5D__chunk_lookup
*
* Purpose: Loops up a chunk in cache and on disk, and retrieves
@@ -2370,8 +2447,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *chunk_offset,
- hsize_t chunk_idx, H5D_chunk_ud_t *udata)
+H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
+ H5D_chunk_ud_t *udata)
{
H5D_rdcc_ent_t *ent = NULL; /* Cache entry */
hbool_t found = FALSE; /* In cache? */
@@ -2382,36 +2459,37 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *chunk_offset,
HDassert(dset);
HDassert(dset->shared->layout.u.chunk.ndims > 0);
- HDassert(chunk_offset);
+ HDassert(scaled);
HDassert(udata);
/* Initialize the query information about the chunk we are looking for */
udata->common.layout = &(dset->shared->layout.u.chunk);
udata->common.storage = &(dset->shared->layout.storage.u.chunk);
- udata->common.offset = chunk_offset;
- udata->common.rdcc = &(dset->shared->cache.chunk);
+ udata->common.scaled = scaled;
/* Reset information about the chunk we are looking for */
- udata->addr = HADDR_UNDEF;
- udata->nbytes = 0;
+ udata->chunk_block.offset = HADDR_UNDEF;
+ udata->chunk_block.length = 0;
udata->filter_mask = 0;
/* Check for chunk in cache */
if(dset->shared->cache.chunk.nslots > 0) {
- udata->idx_hint = H5D_CHUNK_HASH(dset->shared, chunk_idx);
+ udata->idx_hint = H5D__chunk_hash_val(dset->shared, scaled);
ent = dset->shared->cache.chunk.slot[udata->idx_hint];
if(ent)
- for(u = 0, found = TRUE; u < dset->shared->layout.u.chunk.ndims - 1; u++)
- if(chunk_offset[u] != ent->offset[u]) {
+ for(u = 0, found = TRUE; u < dset->shared->ndims; u++)
+ if(scaled[u] != ent->scaled[u]) {
found = FALSE;
break;
} /* end if */
} /* end if */
/* Find chunk addr */
- if(found)
- udata->addr = ent->chunk_addr;
+ if(found) {
+ udata->chunk_block.offset = ent->chunk_block.offset;
+ udata->chunk_block.length = ent->chunk_block.length;;
+ } /* end if */
else {
/* Invalidate idx_hint, to signal that the chunk is not in cache */
udata->idx_hint = UINT_MAX;
@@ -2473,22 +2551,23 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
HDassert(!ent->locked);
buf = ent->chunk;
- if(ent->dirty && !ent->deleted) {
+ if(ent->dirty) {
+ H5D_chk_idx_info_t idx_info; /* Chunked index info */
H5D_chunk_ud_t udata; /* pass through B-tree */
- hbool_t must_insert = FALSE; /* Whether the chunk must go through the "insert" method */
+ hbool_t must_alloc = FALSE; /* Whether the chunk must be allocated */
+ hbool_t need_insert = FALSE; /* Whether the chunk needs to be inserted into the index */
/* Set up user data for index callbacks */
udata.common.layout = &dset->shared->layout.u.chunk;
udata.common.storage = &dset->shared->layout.storage.u.chunk;
- udata.common.offset = ent->offset;
- udata.common.rdcc = &(dset->shared->cache.chunk);
+ udata.common.scaled = ent->scaled;
+ udata.chunk_block.offset = ent->chunk_block.offset;
+ udata.chunk_block.length = dset->shared->layout.u.chunk.size;
udata.filter_mask = 0;
- udata.nbytes = dset->shared->layout.u.chunk.size;
- udata.addr = ent->chunk_addr;
/* Should the chunk be filtered before writing it to disk? */
if(dset->shared->dcpl_cache.pline.nused) {
- size_t alloc = udata.nbytes; /* Bytes allocated for BUF */
+ size_t alloc = udata.chunk_block.length; /* Bytes allocated for BUF */
size_t nbytes; /* Chunk size (in bytes) */
if(!reset) {
@@ -2497,10 +2576,9 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
* the pipeline because we'll want to save the original buffer
* for later.
*/
- H5_ASSIGN_OVERFLOW(alloc, udata.nbytes, uint32_t, size_t);
if(NULL == (buf = H5MM_malloc(alloc)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for pipeline")
- HDmemcpy(buf, ent->chunk, udata.nbytes);
+ HDmemcpy(buf, ent->chunk, alloc);
} /* end if */
else {
/*
@@ -2513,7 +2591,7 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
point_of_no_return = TRUE;
ent->chunk = NULL;
} /* end else */
- H5_ASSIGN_OVERFLOW(nbytes, udata.nbytes, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(nbytes, size_t, udata.chunk_block.length, hsize_t);
if(H5Z_pipeline(&(dset->shared->dcpl_cache.pline), 0, &(udata.filter_mask), dxpl_cache->err_detect,
dxpl_cache->filter_cb, &nbytes, &alloc, &buf) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "output pipeline failed")
@@ -2522,21 +2600,19 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
if(nbytes > ((size_t)0xffffffff))
HGOTO_ERROR(H5E_DATASET, H5E_BADRANGE, FAIL, "chunk too large for 32-bit length")
#endif /* H5_SIZEOF_SIZE_T > 4 */
- H5_ASSIGN_OVERFLOW(udata.nbytes, nbytes, size_t, uint32_t);
+ H5_CHECKED_ASSIGN(udata.chunk_block.length, hsize_t, nbytes, size_t);
- /* Indicate that the chunk must go through 'insert' method */
- must_insert = TRUE;
+ /* Indicate that the chunk must be allocated */
+ must_alloc = TRUE;
} /* end if */
- else if(!H5F_addr_defined(udata.addr))
- /* Indicate that the chunk must go through 'insert' method */
- must_insert = TRUE;
+ else if(!H5F_addr_defined(udata.chunk_block.offset))
+ /* Indicate that the chunk must be allocated */
+ must_alloc = TRUE;
- /* Check if the chunk needs to be 'inserted' (could exist already and
- * the 'insert' operation could resize it)
+ /* Check if the chunk needs to be allocated (it also could exist already
+ * and the chunk alloc operation could resize it)
*/
- if(must_insert) {
- H5D_chk_idx_info_t idx_info; /* Chunked index info */
-
+ if(must_alloc) {
/* Compose chunked index info struct */
idx_info.f = dset->oloc.file;
idx_info.dxpl_id = dxpl_id;
@@ -2547,18 +2623,25 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
/* Create the chunk it if it doesn't exist, or reallocate the chunk
* if its size changed.
*/
- if((dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk")
+ if(H5D__chunk_file_alloc(&idx_info, &(ent->chunk_block), &udata.chunk_block, &need_insert) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
- /* Update the chunk entry's address, in case it was allocated or relocated */
- ent->chunk_addr = udata.addr;
+ /* Update the chunk entry's info, in case it was allocated or relocated */
+ ent->chunk_block.offset = udata.chunk_block.offset;
+ ent->chunk_block.length = udata.chunk_block.length;
} /* end if */
/* Write the data to the file */
- HDassert(H5F_addr_defined(udata.addr));
- if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, udata.nbytes, dxpl_id, buf) < 0)
+ HDassert(H5F_addr_defined(udata.chunk_block.offset));
+ H5_CHECK_OVERFLOW(udata.chunk_block.length, hsize_t, size_t);
+ if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, (size_t)udata.chunk_block.length, dxpl_id, buf) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+ /* Insert the chunk record into the index */
+ if(need_insert && dset->shared->layout.storage.u.chunk.ops->insert)
+ if((dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
+
/* Cache the chunk's info, in case it's accessed again shortly */
H5D__chunk_cinfo_cache_update(&dset->shared->cache.chunk.last, &udata);
@@ -2575,7 +2658,7 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
if(buf == ent->chunk)
buf = NULL;
if(ent->chunk != NULL)
- ent->chunk = (uint8_t *)H5D__chunk_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
+ ent->chunk = (uint8_t *)H5D__chunk_mem_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
} /* end if */
done:
@@ -2591,7 +2674,7 @@ done:
*/
if(ret_value < 0 && point_of_no_return)
if(ent->chunk)
- ent->chunk = (uint8_t *)H5D__chunk_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
+ ent->chunk = (uint8_t *)H5D__chunk_mem_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
} /* end H5D__chunk_flush_entry() */
@@ -2633,7 +2716,7 @@ H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
else {
/* Don't flush, just free chunk */
if(ent->chunk != NULL)
- ent->chunk = (uint8_t *)H5D__chunk_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
+ ent->chunk = (uint8_t *)H5D__chunk_mem_xfree(ent->chunk, &(dset->shared->dcpl_cache.pline));
} /* end else */
/* Unlink from list */
@@ -2647,8 +2730,12 @@ H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
rdcc->tail = ent->prev;
ent->prev = ent->next = NULL;
+ /* Only clear hash table slot if chunk was not marked as deleted already */
+ if(!ent->deleted)
+ rdcc->slot[ent->idx] = NULL;
+
/* Remove from cache */
- rdcc->slot[ent->idx] = NULL;
+ HDassert(rdcc->slot[ent->idx] != ent);
ent->idx = UINT_MAX;
rdcc->nbytes_used -= dset->shared->layout.u.chunk.size;
--rdcc->nused;
@@ -2800,14 +2887,13 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
hbool_t relax)
{
const H5D_t *dset = io_info->dset; /* Local pointer to the dataset info */
- const H5O_pline_t *pline = &(dset->shared->dcpl_cache.pline); /* I/O pipeline info - always equal to the pline passed to H5D__chunk_alloc */
+ const H5O_pline_t *pline = &(dset->shared->dcpl_cache.pline); /* I/O pipeline info - always equal to the pline passed to H5D__chunk_mem_alloc */
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset layout */
const H5O_fill_t *fill = &(dset->shared->dcpl_cache.fill); /* Fill value info */
H5D_fill_buf_info_t fb_info; /* Dataset's fill buffer info */
hbool_t fb_info_init = FALSE; /* Whether the fill value buffer has been initialized */
H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk); /*raw data chunk cache*/
- H5D_rdcc_ent_t *ent = NULL; /*cache entry */
- haddr_t chunk_addr = HADDR_UNDEF; /* Address of chunk on disk */
+ H5D_rdcc_ent_t *ent; /*cache entry */
size_t chunk_size; /*size of a chunk */
void *chunk = NULL; /*the file chunk */
void *ret_value; /*return value */
@@ -2823,7 +2909,7 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
/* Get the chunk's size */
HDassert(layout->u.chunk.size > 0);
- H5_ASSIGN_OVERFLOW(chunk_size, layout->u.chunk.size, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(chunk_size, size_t, layout->u.chunk.size, uint32_t);
/* Check if the chunk is in the cache */
if(UINT_MAX != udata->idx_hint) {
@@ -2840,7 +2926,7 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
/* Make sure this is the right chunk */
for(u = 0; u < layout->u.chunk.ndims; u++)
- HDassert(io_info->store->chunk.offset[u] == ent->offset[u]);
+ HDassert(io_info->store->chunk.scaled[u] == ent->scaled[u]);
}
#endif /* NDEBUG */
@@ -2848,110 +2934,12 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
* Already in the cache. Count a hit.
*/
rdcc->stats.nhits++;
- } /* end if */
- else if(relax) {
- /*
- * Not in the cache, but we're about to overwrite the whole thing
- * anyway, so just allocate a buffer for it but don't initialize that
- * buffer with the file contents. Count this as a hit instead of a
- * miss because we saved ourselves lots of work.
- */
- rdcc->stats.nhits++;
-
- /* Still save the chunk address so the cache stays consistent */
- chunk_addr = udata->addr;
- if(NULL == (chunk = H5D__chunk_alloc(chunk_size, pline)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
-
- /* In the case that some dataset functions look through this data,
- * clear it to all 0s. */
- HDmemset(chunk, 0, chunk_size);
- } /* end if */
- else {
/*
- * Not in the cache. Count this as a miss if it's in the file
- * or an init if it isn't.
- */
-
- /* Save the chunk address */
- chunk_addr = udata->addr;
-
- /* Check if the chunk exists on disk */
- if(H5F_addr_defined(chunk_addr)) {
- size_t chunk_alloc = 0; /*allocated chunk size */
-
- /* Chunk size on disk isn't [likely] the same size as the final chunk
- * size in memory, so allocate memory big enough. */
- H5_ASSIGN_OVERFLOW(chunk_alloc, udata->nbytes, uint32_t, size_t);
- if(NULL == (chunk = H5D__chunk_alloc(chunk_alloc, pline)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
- if(H5F_block_read(dset->oloc.file, H5FD_MEM_DRAW, chunk_addr, chunk_alloc, io_info->dxpl_id, chunk) < 0)
- HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk")
-
- if(pline->nused) {
- if(H5Z_pipeline(pline, H5Z_FLAG_REVERSE, &(udata->filter_mask), io_info->dxpl_cache->err_detect,
- io_info->dxpl_cache->filter_cb, &chunk_alloc, &chunk_alloc, &chunk) < 0)
- HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, NULL, "data pipeline read failed")
- H5_ASSIGN_OVERFLOW(udata->nbytes, chunk_alloc, size_t, uint32_t);
- } /* end if */
-
- /* Increment # of cache misses */
- rdcc->stats.nmisses++;
- } /* end if */
- else {
- H5D_fill_value_t fill_status;
-
- /* Sanity check */
- HDassert(fill->alloc_time != H5D_ALLOC_TIME_EARLY);
-
- /* Chunk size on disk isn't [likely] the same size as the final chunk
- * size in memory, so allocate memory big enough. */
- if(NULL == (chunk = H5D__chunk_alloc(chunk_size, pline)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
-
- if(H5P_is_fill_value_defined(fill, &fill_status) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't tell if fill value defined")
-
- if(fill->fill_time == H5D_FILL_TIME_ALLOC ||
- (fill->fill_time == H5D_FILL_TIME_IFSET &&
- (fill_status == H5D_FILL_VALUE_USER_DEFINED ||
- fill_status == H5D_FILL_VALUE_DEFAULT))) {
- /*
- * The chunk doesn't exist in the file. Replicate the fill
- * value throughout the chunk, if the fill value is defined.
- */
-
- /* Initialize the fill value buffer */
- /* (use the compact dataset storage buffer as the fill value buffer) */
- if(H5D__fill_init(&fb_info, chunk, NULL, NULL, NULL, NULL,
- &dset->shared->dcpl_cache.fill, dset->shared->type,
- dset->shared->type_id, (size_t)0, chunk_size, io_info->dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't initialize fill buffer info")
- fb_info_init = TRUE;
-
- /* Check for VL datatype & non-default fill value */
- if(fb_info.has_vlen_fill_type)
- /* Fill the buffer with VL datatype fill values */
- if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, io_info->dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, NULL, "can't refill fill value buffer")
- } /* end if */
- else
- HDmemset(chunk, 0, chunk_size);
-
- /* Increment # of creations */
- rdcc->stats.ninits++;
- } /* end else */
- } /* end else */
- HDassert(chunk_size > 0);
-
- if(ent) {
- /*
- * The chunk is not at the beginning of the cache; move it backward
+ * If the chunk is not at the beginning of the cache; move it backward
* by one slot. This is how we implement the LRU preemption
* algorithm.
*/
- HDassert(ent);
if(ent->next) {
if(ent->next->next)
ent->next->next->prev = ent;
@@ -2967,67 +2955,166 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
ent->prev->next = ent;
} /* end if */
} /* end if */
- else if(rdcc->nslots > 0 && chunk_size <= rdcc->nbytes_max) {
- /* Calculate the index */
- udata->idx_hint = H5D_CHUNK_HASH(dset->shared, io_info->store->chunk.index);
+ else {
+ haddr_t chunk_addr; /* Address of chunk on disk */
+ hsize_t chunk_alloc; /* Length of chunk on disk */
+
+ /* Save the chunk info so the cache stays consistent */
+ chunk_addr = udata->chunk_block.offset;
+ chunk_alloc = udata->chunk_block.length;
+
+ if(relax) {
+ /*
+ * Not in the cache, but we're about to overwrite the whole thing
+ * anyway, so just allocate a buffer for it but don't initialize that
+ * buffer with the file contents. Count this as a hit instead of a
+ * miss because we saved ourselves lots of work.
+ */
+ rdcc->stats.nhits++;
- /* Add the chunk to the cache only if the slot is not already locked */
- ent = rdcc->slot[udata->idx_hint];
- if(!ent || !ent->locked) {
- /* Preempt enough things from the cache to make room */
- if(ent) {
- if(H5D__chunk_cache_evict(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, ent, TRUE) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache")
+ if(NULL == (chunk = H5D__chunk_mem_alloc(chunk_size, pline)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+
+ /* In the case that some dataset functions look through this data,
+ * clear it to all 0s. */
+ HDmemset(chunk, 0, chunk_size);
+ } /* end if */
+ else {
+ /*
+ * Not in the cache. Count this as a miss if it's in the file
+ * or an init if it isn't.
+ */
+
+ /* Check if the chunk exists on disk */
+ if(H5F_addr_defined(chunk_addr)) {
+ size_t my_chunk_alloc = chunk_alloc; /* Allocated buffer size */
+ size_t buf_alloc = chunk_alloc; /* [Re-]allocated buffer size */
+
+ /* Chunk size on disk isn't [likely] the same size as the final chunk
+ * size in memory, so allocate memory big enough. */
+ if(NULL == (chunk = H5D__chunk_mem_alloc(my_chunk_alloc, pline)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+ if(H5F_block_read(dset->oloc.file, H5FD_MEM_DRAW, chunk_addr, my_chunk_alloc, io_info->dxpl_id, chunk) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk")
+
+ if(pline->nused)
+ if(H5Z_pipeline(pline, H5Z_FLAG_REVERSE, &(udata->filter_mask), io_info->dxpl_cache->err_detect,
+ io_info->dxpl_cache->filter_cb, &my_chunk_alloc, &buf_alloc, &chunk) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, NULL, "data pipeline read failed")
+
+ /* Increment # of cache misses */
+ rdcc->stats.nmisses++;
} /* end if */
- if(H5D__chunk_cache_prune(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, chunk_size) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache")
-
- /* Create a new entry */
- if(NULL == (ent = H5FL_CALLOC(H5D_rdcc_ent_t)))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, NULL, "can't allocate raw data chunk entry")
-
- /* Initialize the new entry */
- ent->chunk_addr = chunk_addr;
- HDmemcpy(ent->offset, io_info->store->chunk.offset, sizeof(hsize_t) * layout->u.chunk.ndims);
- H5_ASSIGN_OVERFLOW(ent->rd_count, chunk_size, size_t, uint32_t);
- H5_ASSIGN_OVERFLOW(ent->wr_count, chunk_size, size_t, uint32_t);
- ent->chunk = (uint8_t *)chunk;
-
- /* Add it to the cache */
- HDassert(NULL == rdcc->slot[udata->idx_hint]);
- rdcc->slot[udata->idx_hint] = ent;
- ent->idx = udata->idx_hint;
- rdcc->nbytes_used += chunk_size;
- rdcc->nused++;
-
- /* Add it to the linked list */
- if(rdcc->tail) {
- rdcc->tail->next = ent;
- ent->prev = rdcc->tail;
- rdcc->tail = ent;
+ else {
+ H5D_fill_value_t fill_status;
+
+ /* Sanity check */
+ HDassert(fill->alloc_time != H5D_ALLOC_TIME_EARLY);
+
+ /* Chunk size on disk isn't [likely] the same size as the final chunk
+ * size in memory, so allocate memory big enough. */
+ if(NULL == (chunk = H5D__chunk_mem_alloc(chunk_size, pline)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+
+ if(H5P_is_fill_value_defined(fill, &fill_status) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't tell if fill value defined")
+
+ if(fill->fill_time == H5D_FILL_TIME_ALLOC ||
+ (fill->fill_time == H5D_FILL_TIME_IFSET &&
+ (fill_status == H5D_FILL_VALUE_USER_DEFINED ||
+ fill_status == H5D_FILL_VALUE_DEFAULT))) {
+ /*
+ * The chunk doesn't exist in the file. Replicate the fill
+ * value throughout the chunk, if the fill value is defined.
+ */
+
+ /* Initialize the fill value buffer */
+ /* (use the compact dataset storage buffer as the fill value buffer) */
+ if(H5D__fill_init(&fb_info, chunk, NULL, NULL, NULL, NULL,
+ &dset->shared->dcpl_cache.fill, dset->shared->type,
+ dset->shared->type_id, (size_t)0, chunk_size, io_info->dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't initialize fill buffer info")
+ fb_info_init = TRUE;
+
+ /* Check for VL datatype & non-default fill value */
+ if(fb_info.has_vlen_fill_type)
+ /* Fill the buffer with VL datatype fill values */
+ if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, io_info->dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, NULL, "can't refill fill value buffer")
+ } /* end if */
+ else
+ HDmemset(chunk, 0, chunk_size);
+
+ /* Increment # of creations */
+ rdcc->stats.ninits++;
+ } /* end else */
+ } /* end else */
+
+ /* See if the chunk can be cached */
+ if(rdcc->nslots > 0 && chunk_size <= rdcc->nbytes_max) {
+ /* Calculate the index */
+ udata->idx_hint = H5D__chunk_hash_val(io_info->dset->shared, udata->common.scaled);
+
+ /* Add the chunk to the cache only if the slot is not already locked */
+ ent = rdcc->slot[udata->idx_hint];
+ if(!ent || !ent->locked) {
+ /* Preempt enough things from the cache to make room */
+ if(ent) {
+ if(H5D__chunk_cache_evict(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, ent, TRUE) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache")
+ } /* end if */
+ if(H5D__chunk_cache_prune(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, chunk_size) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache")
+
+ /* Create a new entry */
+ if(NULL == (ent = H5FL_CALLOC(H5D_rdcc_ent_t)))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, NULL, "can't allocate raw data chunk entry")
+
+ /* Initialize the new entry */
+ ent->chunk_block.offset = chunk_addr;
+ ent->chunk_block.length = chunk_alloc;
+ HDmemcpy(ent->scaled, udata->common.scaled, sizeof(hsize_t) * layout->u.chunk.ndims);
+ H5_CHECKED_ASSIGN(ent->rd_count, uint32_t, chunk_size, size_t);
+ H5_CHECKED_ASSIGN(ent->wr_count, uint32_t, chunk_size, size_t);
+ ent->chunk = (uint8_t *)chunk;
+
+ /* Add it to the cache */
+ HDassert(NULL == rdcc->slot[udata->idx_hint]);
+ rdcc->slot[udata->idx_hint] = ent;
+ ent->idx = udata->idx_hint;
+ rdcc->nbytes_used += chunk_size;
+ rdcc->nused++;
+
+ /* Add it to the linked list */
+ if(rdcc->tail) {
+ rdcc->tail->next = ent;
+ ent->prev = rdcc->tail;
+ rdcc->tail = ent;
+ } /* end if */
+ else
+ rdcc->head = rdcc->tail = ent;
} /* end if */
else
- rdcc->head = rdcc->tail = ent;
- } /* end if */
- else
- /* We did not add the chunk to cache */
+ /* We did not add the chunk to cache */
+ ent = NULL;
+ } /* end else */
+ else /* No cache set up, or chunk is too large: chunk is uncacheable */
ent = NULL;
} /* end else */
- if(!ent)
- /*
- * The chunk cannot be placed in cache so we don't cache it. This is the
- * reason all those arguments have to be repeated for the unlock
- * function.
- */
- udata->idx_hint = UINT_MAX;
-
/* Lock the chunk into the cache */
if(ent) {
HDassert(!ent->locked);
ent->locked = TRUE;
chunk = ent->chunk;
} /* end if */
+ else
+ /*
+ * The chunk cannot be placed in cache so we don't cache it. This is the
+ * reason all those arguments have to be repeated for the unlock
+ * function.
+ */
+ udata->idx_hint = UINT_MAX;
/* Set return value */
ret_value = chunk;
@@ -3040,7 +3127,7 @@ done:
/* Release the chunk allocated, on error */
if(!ret_value)
if(chunk)
- chunk = H5D__chunk_xfree(chunk, pline);
+ chunk = H5D__chunk_mem_xfree(chunk, pline);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__chunk_lock() */
@@ -3093,9 +3180,10 @@ H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata,
HDmemset(&fake_ent, 0, sizeof(fake_ent));
fake_ent.dirty = TRUE;
- HDmemcpy(fake_ent.offset, io_info->store->chunk.offset, layout->u.chunk.ndims * sizeof(fake_ent.offset[0]));
+ HDmemcpy(fake_ent.scaled, udata->common.scaled, sizeof(hsize_t) * layout->u.chunk.ndims);
HDassert(layout->u.chunk.size > 0);
- fake_ent.chunk_addr = udata->addr;
+ fake_ent.chunk_block.offset = udata->chunk_block.offset;
+ fake_ent.chunk_block.length = udata->chunk_block.length;
fake_ent.chunk = (uint8_t *)chunk;
if(H5D__chunk_flush_entry(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, &fake_ent, TRUE) < 0)
@@ -3103,7 +3191,7 @@ H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata,
} /* end if */
else {
if(chunk)
- chunk = H5D__chunk_xfree(chunk, &(io_info->dset->shared->dcpl_cache.pline));
+ chunk = H5D__chunk_mem_xfree(chunk, &(io_info->dset->shared->dcpl_cache.pline));
} /* end else */
} /* end if */
else {
@@ -3240,9 +3328,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
{
H5D_chk_idx_info_t idx_info; /* Chunked index info */
const H5D_chunk_ops_t *ops = dset->shared->layout.storage.u.chunk.ops; /* Chunk operations */
- hsize_t min_unalloc[H5O_LAYOUT_NDIMS]; /* First chunk in each dimension that is unallocated */
- hsize_t max_unalloc[H5O_LAYOUT_NDIMS]; /* Last chunk in each dimension that is unallocated */
- hsize_t chunk_offset[H5O_LAYOUT_NDIMS]; /* Offset of current chunk */
+ hsize_t min_unalloc[H5O_LAYOUT_NDIMS]; /* First chunk in each dimension that is unallocated (in scaled coordinates) */
+ hsize_t max_unalloc[H5O_LAYOUT_NDIMS]; /* Last chunk in each dimension that is unallocated (in scaled coordinates) */
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /* Offset of current chunk (in scaled coordinates) */
size_t orig_chunk_size; /* Original size of chunk in bytes */
size_t chunk_size; /* Actual size of chunk in bytes, possibly filtered */
unsigned filter_mask = 0; /* Filter mask for chunks that have them */
@@ -3259,8 +3347,8 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
H5D_chunk_coll_info_t chunk_info; /* chunk address information for doing I/O */
#endif /* H5_HAVE_PARALLEL */
hbool_t carry; /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
- int space_ndims; /* Dataset's space rank */
- hsize_t space_dim[H5O_LAYOUT_NDIMS]; /* Dataset's dataspace dimensions */
+ unsigned space_ndims; /* Dataset's space rank */
+ const hsize_t *space_dim; /* Dataset's dataspace dimensions */
const uint32_t *chunk_dim = layout->u.chunk.dim; /* Convenience pointer to chunk dimensions */
unsigned op_dim; /* Current operating dimension */
H5D_fill_buf_info_t fb_info; /* Dataset's fill buffer info */
@@ -3275,12 +3363,11 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
/* Retrieve the dataset dimensions */
- if((space_ndims = H5S_get_simple_extent_dims(dset->shared->space, space_dim, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get simple dataspace info")
- space_dim[space_ndims] = layout->u.chunk.dim[space_ndims];
+ space_dim = dset->shared->curr_dims;
+ space_ndims = dset->shared->ndims;
- /* The last dimension in chunk_offset is always 0 */
- chunk_offset[space_ndims] = (hsize_t)0;
+ /* The last dimension in scaled chunk coordinates is always 0 */
+ scaled[space_ndims] = (hsize_t)0;
/* Check if any space dimensions are 0, if so we do not have to do anything
*/
@@ -3308,7 +3395,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
/* Get original chunk size */
- H5_ASSIGN_OVERFLOW(orig_chunk_size, layout->u.chunk.size, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(orig_chunk_size, size_t, layout->u.chunk.size, uint32_t);
/* Check the dataset's fill-value status */
if(H5P_is_fill_value_defined(fill, &fill_status) < 0)
@@ -3331,8 +3418,8 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
/* Initialize the fill value buffer */
/* (delay allocating fill buffer for VL datatypes until refilling) */
/* (casting away const OK - QAK) */
- if(H5D__fill_init(&fb_info, NULL, (H5MM_allocate_t)H5D__chunk_alloc,
- (void *)pline, (H5MM_free_t)H5D__chunk_xfree, (void *)pline,
+ if(H5D__fill_init(&fb_info, NULL, (H5MM_allocate_t)H5D__chunk_mem_alloc,
+ (void *)pline, (H5MM_free_t)H5D__chunk_mem_xfree, (void *)pline,
&dset->shared->dcpl_cache.fill, dset->shared->type,
dset->shared->type_id, (size_t)0, orig_chunk_size, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
@@ -3365,12 +3452,10 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
/* Calculate the minimum and maximum chunk offsets in each dimension. Note
* that we assume here that all elements of space_dim are > 0. This is
- * checked at the top of this function */
- for(op_dim=0; op_dim<space_ndims; op_dim++) {
- min_unalloc[op_dim] = ((old_dim[op_dim] + chunk_dim[op_dim] - 1)
- / chunk_dim[op_dim]) * chunk_dim[op_dim];
- max_unalloc[op_dim] = ((space_dim[op_dim] - 1) / chunk_dim[op_dim])
- * chunk_dim[op_dim];
+ * checked at the top of this function. */
+ for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
+ min_unalloc[op_dim] = (old_dim[op_dim] + chunk_dim[op_dim] - 1) / chunk_dim[op_dim];
+ max_unalloc[op_dim] = (space_dim[op_dim] - 1) / chunk_dim[op_dim];
} /* end for */
/* Loop over all chunks */
@@ -3390,8 +3475,11 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
* Every time the algorithm finishes allocating chunks allocated beyond a
* certain dimension, max_unalloc is updated in order to avoid allocating
* those chunks again.
+ *
+ * Note that min_unalloc & max_unalloc are in scaled coordinates.
+ *
*/
- for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
+ for(op_dim = 0; op_dim < space_ndims; op_dim++) {
H5D_chunk_ud_t udata; /* User data for querying chunk info */
int i; /* Local index variable */
@@ -3400,31 +3488,26 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
continue;
else {
/* Reset the chunk offset indices */
- HDmemset(chunk_offset, 0, ((unsigned)space_ndims * sizeof(chunk_offset[0])));
- chunk_offset[op_dim] = min_unalloc[op_dim];
+ HDmemset(scaled, 0, (space_ndims * sizeof(scaled[0])));
+ scaled[op_dim] = min_unalloc[op_dim];
carry = FALSE;
} /* end else */
while(!carry) {
+ hbool_t need_insert = FALSE; /* Whether the chunk needs to be inserted into the index */
+
/* Reset size of chunk in bytes, in case filtered size changes */
chunk_size = orig_chunk_size;
#ifndef NDEBUG
/* None of the chunks should be allocated */
{
- hsize_t chunk_idx;
-
- /* Calculate the index of this chunk */
- if(H5VM_chunk_index((unsigned)space_ndims, chunk_offset,
- layout->u.chunk.dim, layout->u.chunk.down_chunks,
- &chunk_idx) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't get chunk index")
-
- if(H5D__chunk_lookup(dset, dxpl_id, chunk_offset, chunk_idx, &udata) < 0)
+ /* Look up this chunk */
+ if(H5D__chunk_lookup(dset, dxpl_id, scaled, &udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
- HDassert(!H5F_addr_defined(udata.addr));
+ HDassert(!H5F_addr_defined(udata.chunk_block.offset));
} /* end block */
/* Make sure the chunk is really in the dataset and outside the
@@ -3433,9 +3516,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
unsigned u; /* Local index variable */
hbool_t outside_orig = FALSE;
- for(u = 0; u < (unsigned)space_ndims; u++) {
- HDassert(chunk_offset[u] < space_dim[u]);
- if(chunk_offset[u] >= old_dim[u])
+ for(u = 0; u < space_ndims; u++) {
+ HDassert((scaled[u] * chunk_dim[u]) < space_dim[u]);
+ if((scaled[u] * chunk_dim[u]) >= old_dim[u])
outside_orig = TRUE;
} /* end for */
HDassert(outside_orig);
@@ -3454,7 +3537,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
* possible (though ill-advised) for the filter to shrink the
* buffer. */
if(fb_info.fill_buf_size < orig_chunk_size) {
- if(NULL == (fb_info.fill_buf = H5D__chunk_realloc(fb_info.fill_buf, orig_chunk_size, pline)))
+ if(NULL == (fb_info.fill_buf = H5D__chunk_mem_realloc(fb_info.fill_buf, orig_chunk_size, pline)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory reallocation failed for raw data chunk")
fb_info.fill_buf_size = orig_chunk_size;
} /* end if */
@@ -3485,22 +3568,21 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
/* Initialize the chunk information */
udata.common.layout = &layout->u.chunk;
udata.common.storage = &layout->storage.u.chunk;
- udata.common.offset = chunk_offset;
- udata.common.rdcc = NULL;
- udata.addr = HADDR_UNDEF;
- H5_ASSIGN_OVERFLOW(udata.nbytes, chunk_size, size_t, uint32_t);
+ udata.common.scaled = scaled;
+ udata.chunk_block.offset = HADDR_UNDEF;
+ H5_CHECKED_ASSIGN(udata.chunk_block.length, uint32_t, chunk_size, size_t);
udata.filter_mask = filter_mask;
/* Allocate the chunk (with all processes) */
- if((ops->insert)(&idx_info, &udata) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert record into chunk index")
- HDassert(H5F_addr_defined(udata.addr));
+ if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
+ HDassert(H5F_addr_defined(udata.chunk_block.offset));
/* Check if fill values should be written to chunks */
if(should_fill) {
/* Sanity check */
HDassert(fb_info_init);
- HDassert(udata.nbytes == chunk_size);
+ HDassert(udata.chunk_block.length == chunk_size);
#ifdef H5_HAVE_PARALLEL
/* Check if this file is accessed with an MPI-capable file driver */
@@ -3513,7 +3595,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "memory allocation failed for chunk addresses")
/* Store the chunk's address for later */
- chunk_info.addr[chunk_info.num_io] = udata.addr;
+ chunk_info.addr[chunk_info.num_io] = udata.chunk_block.offset;
chunk_info.num_io++;
/* Indicate that blocks will be written */
@@ -3521,22 +3603,30 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
} /* end if */
else {
#endif /* H5_HAVE_PARALLEL */
- if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, chunk_size, dxpl_id, fb_info.fill_buf) < 0)
+ if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, chunk_size, dxpl_id, fb_info.fill_buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
#ifdef H5_HAVE_PARALLEL
} /* end else */
#endif /* H5_HAVE_PARALLEL */
} /* end if */
- /* Increment indices */
+ /* Insert the chunk record into the index */
+ /* (Note that this isn't safe, from a SWMR perspective, unlike
+ * serial operation. -QAK
+ */
+ if(need_insert && ops->insert)
+ if((ops->insert)(&idx_info, &udata) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
+
+ /* Increment indices and adjust the edge chunk state */
carry = TRUE;
for(i = ((int)space_ndims - 1); i >= 0; --i) {
- chunk_offset[i] += chunk_dim[i];
- if(chunk_offset[i] > max_unalloc[i]) {
+ scaled[i]++;
+ if(scaled[i] > max_unalloc[i]) {
if((unsigned)i == op_dim)
- chunk_offset[i] = min_unalloc[i];
+ scaled[i] = min_unalloc[i];
else
- chunk_offset[i] = 0;
+ scaled[i] = 0;
} /* end if */
else {
carry = FALSE;
@@ -3551,7 +3641,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
if(min_unalloc[op_dim] == 0)
break;
else
- max_unalloc[op_dim] = min_unalloc[op_dim] - chunk_dim[op_dim];
+ max_unalloc[op_dim] = min_unalloc[op_dim] - 1;
} /* end for(op_dim=0...) */
#ifdef H5_HAVE_PARALLEL
@@ -3638,9 +3728,9 @@ H5D__chunk_collective_fill(const H5D_t *dset, hid_t dxpl_id,
leftover_blocks = chunk_info->num_io % mpi_size;
/* Cast values to types needed by MPI */
- H5_ASSIGN_OVERFLOW(blocks, num_blocks, size_t, int);
- H5_ASSIGN_OVERFLOW(leftover, leftover_blocks, size_t, int);
- H5_ASSIGN_OVERFLOW(block_len, chunk_size, size_t, int);
+ H5_CHECKED_ASSIGN(blocks, int, num_blocks, size_t);
+ H5_CHECKED_ASSIGN(leftover, int, leftover_blocks, size_t);
+ H5_CHECKED_ASSIGN(block_len, int, chunk_size, size_t);
/* Allocate buffers */
/* (MSC - should not need block_lens if MPI_type_create_hindexed_block is working) */
@@ -3753,7 +3843,7 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
const H5D_t *dset = io_info->dset; /* Local pointer to the dataset info */
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset's layout */
unsigned rank = udata->common.layout->ndims - 1; /* Dataset rank */
- const hsize_t *chunk_offset = io_info->store->chunk.offset; /* Chunk offset */
+ const hsize_t *scaled = udata->common.scaled; /* Scaled chunk offset */
H5S_sel_iter_t chunk_iter; /* Memory selection iteration info */
hssize_t sel_nelmts; /* Number of elements in selection */
hsize_t count[H5O_LAYOUT_NDIMS]; /* Element count of hyperslab */
@@ -3769,14 +3859,14 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
/* Get the chunk's size */
HDassert(layout->u.chunk.size > 0);
- H5_ASSIGN_OVERFLOW(chunk_size, layout->u.chunk.size, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(chunk_size, size_t, layout->u.chunk.size, uint32_t);
/* Get the info for the chunk in the file */
- if(H5D__chunk_lookup(dset, io_info->dxpl_id, chunk_offset, io_info->store->chunk.index, &chk_udata) < 0)
+ if(H5D__chunk_lookup(dset, io_info->dxpl_id, scaled, &chk_udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
/* If this chunk does not exist in cache or on disk, no need to do anything */
- if(!H5F_addr_defined(chk_udata.addr) && UINT_MAX == chk_udata.idx_hint)
+ if(!H5F_addr_defined(chk_udata.chunk_block.offset) && UINT_MAX == chk_udata.idx_hint)
HGOTO_DONE(SUCCEED)
/* Initialize the fill value buffer, if necessary */
@@ -3792,7 +3882,7 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
/* Compute the # of elements to leave with existing value, in each dimension */
for(u = 0; u < rank; u++) {
- count[u] = MIN(layout->u.chunk.dim[u], (udata->space_dim[u] - chunk_offset[u]));
+ count[u] = MIN(layout->u.chunk.dim[u], (udata->space_dim[u] - (scaled[u] * layout->u.chunk.dim[u])));
HDassert(count[u] > 0);
} /* end for */
@@ -3955,13 +4045,10 @@ done:
herr_t
H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
{
- hsize_t min_mod_chunk_off[H5O_LAYOUT_NDIMS]; /* Offset of first chunk to modify in each dimension */
- hsize_t max_mod_chunk_off[H5O_LAYOUT_NDIMS]; /* Offset of last chunk to modify in each dimension */
- hssize_t max_fill_chunk_off[H5O_LAYOUT_NDIMS]; /* Offset of last chunk that might be filled in each dimension */
+ hsize_t min_mod_chunk_off[H5O_LAYOUT_NDIMS]; /* Scaled offset of first chunk to modify in each dimension */
+ hsize_t max_mod_chunk_off[H5O_LAYOUT_NDIMS]; /* Scaled offset of last chunk to modify in each dimension */
+ hssize_t max_fill_chunk_off[H5O_LAYOUT_NDIMS]; /* Scaled offset of last chunk that might be filled in each dimension */
hbool_t fill_dim[H5O_LAYOUT_NDIMS]; /* Whether the plane of edge chunks in this dimension needs to be filled */
- hbool_t dims_outside_fill[H5O_LAYOUT_NDIMS]; /* Dimensions in chunk offset outside fill dimensions */
- int ndims_outside_fill = 0; /* Number of dimensions in chunk offset outside fill dimensions */
- hbool_t has_fill = FALSE; /* Whether there are chunks that must be filled */
H5D_chk_idx_info_t idx_info; /* Chunked index info */
H5D_io_info_t chk_io_info; /* Chunked I/O info object */
H5D_storage_t chk_store; /* Chunk storage information */
@@ -3969,21 +4056,18 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset's layout */
const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk); /*raw data chunk cache */
- H5D_rdcc_ent_t *ent = NULL; /* Cache entry */
- int space_ndims; /* Dataset's space rank */
- hsize_t space_dim[H5O_LAYOUT_NDIMS]; /* Current dataspace dimensions */
+ unsigned space_ndims; /* Dataset's space rank */
+ const hsize_t *space_dim; /* Current dataspace dimensions */
unsigned op_dim; /* Current operating dimension */
hbool_t shrunk_dim[H5O_LAYOUT_NDIMS]; /* Dimensions which have shrunk */
H5D_chunk_it_ud1_t udata; /* Chunk index iterator user data */
hbool_t udata_init = FALSE; /* Whether the chunk index iterator user data has been initialized */
H5D_chunk_common_ud_t idx_udata; /* User data for index removal routine */
- H5D_chunk_ud_t chk_udata; /* User data for getting chunk info */
H5S_t *chunk_space = NULL; /* Dataspace for a chunk */
hsize_t chunk_dim[H5O_LAYOUT_NDIMS]; /* Chunk dimensions */
- hsize_t chunk_offset[H5O_LAYOUT_NDIMS]; /* Offset of current chunk */
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /* Scaled offset of current chunk */
hsize_t hyper_start[H5O_LAYOUT_NDIMS]; /* Starting location of hyperslab */
uint32_t elmts_per_chunk; /* Elements in chunk */
- hbool_t carry; /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@@ -3999,13 +4083,11 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
/* Go get the rank & dimensions (including the element size) */
- if((space_ndims = H5S_get_simple_extent_dims(dset->shared->space, space_dim,
- NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
- space_dim[space_ndims] = layout->u.chunk.dim[space_ndims];
+ space_dim = dset->shared->curr_dims;
+ space_ndims = dset->shared->ndims;
- /* The last dimension in chunk_offset is always 0 */
- chunk_offset[space_ndims] = (hsize_t)0;
+ /* The last dimension in scaled is always 0 */
+ scaled[space_ndims] = (hsize_t)0;
/* Check if any old dimensions are 0, if so we do not have to do anything */
for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++)
@@ -4021,14 +4103,14 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
/* (also copy the chunk dimensions into 'hsize_t' array for creating dataspace) */
/* (also compute the dimensions which have been shrunk) */
elmts_per_chunk = 1;
- for(u = 0; u < (unsigned)space_ndims; u++) {
+ for(u = 0; u < space_ndims; u++) {
elmts_per_chunk *= layout->u.chunk.dim[u];
chunk_dim[u] = layout->u.chunk.dim[u];
- shrunk_dim[u] = space_dim[u] < old_dim[u];
+ shrunk_dim[u] = (space_dim[u] < old_dim[u]);
} /* end for */
/* Create a dataspace for a chunk & set the extent */
- if(NULL == (chunk_space = H5S_create_simple((unsigned)space_ndims, chunk_dim, NULL)))
+ if(NULL == (chunk_space = H5S_create_simple(space_ndims, chunk_dim, NULL)))
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace")
/* Reset hyperslab start array */
@@ -4036,9 +4118,9 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
HDmemset(hyper_start, 0, sizeof(hyper_start));
/* Set up chunked I/O info object, for operations on chunks (in callback)
- * Note that we only need to set chunk_offset once, as the array's address
+ * Note that we only need to set scaled once, as the array's address
* will never change. */
- chk_store.chunk.offset = chunk_offset;
+ chk_store.chunk.scaled = scaled;
H5D_BUILD_IO_INFO_RD(&chk_io_info, dset, dxpl_cache, dxpl_id, &chk_store, NULL);
/* Compose chunked index info struct */
@@ -4052,7 +4134,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
HDmemset(&udata, 0, sizeof udata);
udata.common.layout = &layout->u.chunk;
udata.common.storage = &layout->storage.u.chunk;
- udata.common.rdcc = rdcc;
+ udata.common.scaled = scaled;
udata.io_info = &chk_io_info;
udata.idx_info = &idx_info;
udata.space_dim = space_dim;
@@ -4074,16 +4156,14 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
/* Calculate the largest offset of chunks that might need to be
* modified in this dimension */
- max_mod_chunk_off[op_dim] = chunk_dim[op_dim] * ((old_dim[op_dim] - 1)
- / chunk_dim[op_dim]);
+ max_mod_chunk_off[op_dim] = (old_dim[op_dim] - 1) / chunk_dim[op_dim];
/* Calculate the largest offset of chunks that might need to be
* filled in this dimension */
if(0 == space_dim[op_dim])
max_fill_chunk_off[op_dim] = -1;
else
- max_fill_chunk_off[op_dim] = (hssize_t)(chunk_dim[op_dim]
- * ((MIN(space_dim[op_dim], old_dim[op_dim]) - 1)
+ max_fill_chunk_off[op_dim] = (hssize_t)(((MIN(space_dim[op_dim], old_dim[op_dim]) - 1)
/ chunk_dim[op_dim]));
if(shrunk_dim[op_dim]) {
@@ -4091,14 +4171,11 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
* modified in this dimension. Note that this array contains
* garbage for all dimensions which are not shrunk. These locations
* must not be read from! */
- min_mod_chunk_off[op_dim] = chunk_dim[op_dim] * (space_dim[op_dim]
- / chunk_dim[op_dim]);
+ min_mod_chunk_off[op_dim] = space_dim[op_dim] / chunk_dim[op_dim];
/* Determine if we need to fill chunks in this dimension */
- if((hssize_t)min_mod_chunk_off[op_dim] == max_fill_chunk_off[op_dim]) {
+ if((hssize_t)min_mod_chunk_off[op_dim] == max_fill_chunk_off[op_dim])
fill_dim[op_dim] = TRUE;
- has_fill = TRUE;
- } /* end if */
else
fill_dim[op_dim] = FALSE;
} /* end if */
@@ -4106,69 +4183,55 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
fill_dim[op_dim] = FALSE;
} /* end for */
- /* Check the cache for any entries that are outside the bounds. Mark these
- * entries as deleted so they are not flushed to disk accidentally. This is
- * only necessary if there are chunks that need to be filled. */
- if(has_fill)
- for(ent = rdcc->head; ent; ent = ent->next)
- /* Check for chunk offset outside of new dimensions */
- for(u = 0; u < (unsigned)space_ndims; u++)
- if((hsize_t)ent->offset[u] >= space_dim[u]) {
- /* Mark the entry as "deleted" */
- ent->deleted = TRUE;
- break;
- } /* end if */
-
/* Main loop: fill or remove chunks */
for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
+ hbool_t dims_outside_fill[H5O_LAYOUT_NDIMS]; /* Dimensions in chunk offset outside fill dimensions */
+ int ndims_outside_fill; /* Number of dimensions in chunk offset outside fill dimensions */
+ hbool_t carry; /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
+
/* Check if modification along this dimension is really necessary */
if(!shrunk_dim[op_dim])
continue;
else {
- HDassert((hsize_t) max_mod_chunk_off[op_dim] >= min_mod_chunk_off[op_dim]);
+ HDassert(max_mod_chunk_off[op_dim] >= min_mod_chunk_off[op_dim]);
/* Reset the chunk offset indices */
- HDmemset(chunk_offset, 0, ((unsigned)space_ndims * sizeof(chunk_offset[0])));
- chunk_offset[op_dim] = min_mod_chunk_off[op_dim];
+ HDmemset(scaled, 0, (space_ndims * sizeof(scaled[0])));
+ scaled[op_dim] = min_mod_chunk_off[op_dim];
/* Initialize "dims_outside_fill" array */
ndims_outside_fill = 0;
- for(u = 0; u < (unsigned)space_ndims; u++)
- if((hssize_t)chunk_offset[u] > max_fill_chunk_off[u]) {
+ for(u = 0; u < space_ndims; u++)
+ if((hssize_t)scaled[u] > max_fill_chunk_off[u]) {
dims_outside_fill[u] = TRUE;
ndims_outside_fill++;
} /* end if */
else
dims_outside_fill[u] = FALSE;
-
- carry = FALSE;
} /* end if */
+ carry = FALSE;
while(!carry) {
int i; /* Local index variable */
- /* Calculate the index of this chunk */
- if(H5VM_chunk_index((unsigned)space_ndims, chunk_offset,
- layout->u.chunk.dim, layout->u.chunk.down_chunks,
- &(chk_io_info.store->chunk.index)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't get chunk index")
-
if(0 == ndims_outside_fill) {
HDassert(fill_dim[op_dim]);
- HDassert(chunk_offset[op_dim] == min_mod_chunk_off[op_dim]);
+ HDassert(scaled[op_dim] == min_mod_chunk_off[op_dim]);
/* Fill the unused parts of the chunk */
if(H5D__chunk_prune_fill(&udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write fill value")
} /* end if */
else {
+ H5D_chunk_ud_t chk_udata; /* User data for getting chunk info */
+
#ifndef NDEBUG
/* Make sure this chunk is really outside the new dimensions */
{
hbool_t outside_dim = FALSE;
- for(u = 0; u < (unsigned)space_ndims; u++)
- if(chunk_offset[u] >= space_dim[u]) {
+ for(u = 0; u < space_ndims; u++)
+ if((scaled[u] * chunk_dim[u]) >= space_dim[u]) {
outside_dim = TRUE;
break;
} /* end if */
@@ -4177,7 +4240,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
#endif /* NDEBUG */
/* Check if the chunk exists in cache or on disk */
- if(H5D__chunk_lookup(dset, dxpl_id, chunk_offset, chk_io_info.store->chunk.index, &chk_udata) < 0)
+ if(H5D__chunk_lookup(dset, dxpl_id, scaled, &chk_udata) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk")
/* Evict the entry from the cache if present, but do not flush
@@ -4187,9 +4250,9 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
HGOTO_ERROR(H5E_DATASET, H5E_CANTREMOVE, FAIL, "unable to evict chunk")
/* Remove the chunk from disk, if present */
- if(H5F_addr_defined(chk_udata.addr)) {
+ if(H5F_addr_defined(chk_udata.chunk_block.offset)) {
/* Update the offset in idx_udata */
- idx_udata.offset = chunk_offset;
+ idx_udata.scaled = scaled;
/* Remove the chunk from disk */
if((layout->storage.u.chunk.ops->remove)(&idx_info, &idx_udata) < 0)
@@ -4200,19 +4263,19 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
/* Increment indices */
carry = TRUE;
for(i = (int)(space_ndims - 1); i >= 0; --i) {
- chunk_offset[i] += chunk_dim[i];
- if(chunk_offset[i] > (hsize_t) max_mod_chunk_off[i]) {
+ scaled[i]++;
+ if(scaled[i] > max_mod_chunk_off[i]) {
/* Left maximum dimensions, "wrap around" and check if this
* dimension is no longer outside the fill dimension */
if((unsigned)i == op_dim) {
- chunk_offset[i] = min_mod_chunk_off[i];
+ scaled[i] = min_mod_chunk_off[i];
if(dims_outside_fill[i] && fill_dim[i]) {
dims_outside_fill[i] = FALSE;
ndims_outside_fill--;
} /* end if */
} /* end if */
else {
- chunk_offset[i] = 0;
+ scaled[i] = 0;
if(dims_outside_fill[i] && max_fill_chunk_off[i] >= 0) {
dims_outside_fill[i] = FALSE;
ndims_outside_fill--;
@@ -4221,7 +4284,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
} /* end if */
else {
/* Check if we just went outside the fill dimension */
- if(!dims_outside_fill[i] && (hssize_t)chunk_offset[i] > max_fill_chunk_off[i]) {
+ if(!dims_outside_fill[i] && (hssize_t)scaled[i] > max_fill_chunk_off[i]) {
dims_outside_fill[i] = TRUE;
ndims_outside_fill++;
} /* end if */
@@ -4239,7 +4302,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
if(min_mod_chunk_off[op_dim] == 0)
break;
else
- max_mod_chunk_off[op_dim] = min_mod_chunk_off[op_dim] - chunk_dim[op_dim];
+ max_mod_chunk_off[op_dim] = min_mod_chunk_off[op_dim] - 1;
} /* end for(op_dim=0...) */
/* Reset any cached chunk info for this dataset */
@@ -4282,8 +4345,7 @@ H5D__chunk_addrmap_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
FUNC_ENTER_STATIC
/* Compute the index for this chunk */
- if(H5VM_chunk_index(rank, chunk_rec->offset, udata->common.layout->dim, udata->common.layout->down_chunks, &chunk_index) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, H5_ITER_ERROR, "can't get chunk index")
+ chunk_index = H5VM_array_offset_pre(rank, udata->common.layout->down_chunks, chunk_rec->scaled);
/* Set it in the userdata to return */
udata->chunk_addr[chunk_index] = chunk_rec->chunk_addr;
@@ -4324,7 +4386,6 @@ H5D__chunk_addrmap(const H5D_io_info_t *io_info, haddr_t chunk_addr[])
HDmemset(&udata, 0, sizeof(udata));
udata.common.layout = &dset->shared->layout.u.chunk;
udata.common.storage = &dset->shared->layout.storage.u.chunk;
- udata.common.rdcc = &(dset->shared->cache.chunk);
udata.chunk_addr = chunk_addr;
/* Compose chunked index info struct */
@@ -4440,10 +4501,8 @@ H5D__chunk_update_cache(H5D_t *dset, hid_t dxpl_id)
{
H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk); /*raw data chunk cache */
H5D_rdcc_ent_t *ent, *next; /*cache entry */
- H5D_rdcc_ent_t *old_ent; /* Old cache entry */
H5D_dxpl_cache_t _dxpl_cache; /* Data transfer property cache buffer */
H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
- unsigned rank; /* Current # of dimensions */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@@ -4452,13 +4511,8 @@ H5D__chunk_update_cache(H5D_t *dset, hid_t dxpl_id)
HDassert(dset && H5D_CHUNKED == dset->shared->layout.type);
HDassert(dset->shared->layout.u.chunk.ndims > 0 && dset->shared->layout.u.chunk.ndims <= H5O_LAYOUT_NDIMS);
- /* Get the rank */
- rank = dset->shared->layout.u.chunk.ndims-1;
- HDassert(rank > 0);
-
- /* 1-D dataset's chunks can't have their index change */
- if(rank == 1)
- HGOTO_DONE(SUCCEED)
+ /* Check the rank */
+ HDassert((dset->shared->layout.u.chunk.ndims - 1) > 1);
/* Fill the DXPL cache values for later use */
if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
@@ -4466,43 +4520,54 @@ H5D__chunk_update_cache(H5D_t *dset, hid_t dxpl_id)
/* Recompute the index for each cached chunk that is in a dataset */
for(ent = rdcc->head; ent; ent = next) {
- hsize_t idx; /* Chunk index */
unsigned old_idx; /* Previous index number */
/* Get the pointer to the next cache entry */
next = ent->next;
- /* Calculate the index of this chunk */
- if(H5VM_chunk_index(rank, ent->offset, dset->shared->layout.u.chunk.dim, dset->shared->layout.u.chunk.down_chunks, &idx) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
-
/* Compute the index for the chunk entry */
old_idx = ent->idx; /* Save for later */
- ent->idx = H5D_CHUNK_HASH(dset->shared, idx);
+ ent->idx = H5D__chunk_hash_val(dset->shared, ent->scaled);
if(old_idx != ent->idx) {
+ H5D_rdcc_ent_t *old_ent; /* Old cache entry */
+
/* Check if there is already a chunk at this chunk's new location */
old_ent = rdcc->slot[ent->idx];
if(old_ent != NULL) {
- HDassert(old_ent->locked == 0);
-
- /* Check if we are removing the entry we would walk to next */
- if(old_ent == next)
- next = old_ent->next;
+ HDassert(old_ent->locked == FALSE);
+ HDassert(old_ent->deleted == FALSE);
- /* Remove the old entry from the cache */
- if(H5D__chunk_cache_evict(dset, dxpl_id, dxpl_cache, old_ent, TRUE) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
+ /* Mark the old entry as deleted, but do not evict (yet).
+ * Make sure we do not make any calls to the index
+ * until all chunks have updated indices! */
+ old_ent->deleted = TRUE;
} /* end if */
/* Insert this chunk into correct location in hash table */
rdcc->slot[ent->idx] = ent;
- /* Null out previous location */
- rdcc->slot[old_idx] = NULL;
+ /* If this chunk was previously marked as deleted and therefore
+ * not in the hash table, reset the deleted flag.
+ * Otherwise clear the old hash table slot. */
+ if(ent->deleted)
+ ent->deleted = FALSE;
+ else
+ rdcc->slot[old_idx] = NULL;
} /* end if */
} /* end for */
+ /* Evict chunks that are still marked as deleted */
+ for(ent = rdcc->head; ent; ent = next) {
+ /* Get the pointer to the next cache entry */
+ next = ent->next;
+
+ /* Remove the old entry from the cache */
+ if(ent->deleted)
+ if(H5D__chunk_cache_evict(dset, dxpl_id, dxpl_cache, ent, TRUE) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
+ } /* end for */
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__chunk_update_cache() */
@@ -4528,6 +4593,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
H5D_chunk_ud_t udata_dst; /* User data about new destination chunk */
hbool_t is_vlen = FALSE; /* Whether datatype is variable-length */
hbool_t fix_ref = FALSE; /* Whether to fix up references in the dest. file */
+ hbool_t need_insert = FALSE; /* Whether the chunk needs to be inserted into the index */
/* General information about chunk copy */
void *bkg = udata->bkg; /* Background buffer for datatype conversion */
@@ -4545,7 +4611,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
FUNC_ENTER_STATIC
/* Get 'size_t' local value for number of bytes in chunk */
- H5_ASSIGN_OVERFLOW(nbytes, chunk_rec->nbytes, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(nbytes, size_t, chunk_rec->nbytes, uint32_t);
/* Check parameter for type conversion */
if(udata->do_convert) {
@@ -4648,10 +4714,9 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
/* Set up destination chunk callback information for insertion */
udata_dst.common.layout = udata->idx_info_dst->layout;
udata_dst.common.storage = udata->idx_info_dst->storage;
- udata_dst.common.offset = chunk_rec->offset;
- udata_dst.common.rdcc = NULL;
- udata_dst.addr = HADDR_UNDEF;
- udata_dst.nbytes = chunk_rec->nbytes;
+ udata_dst.common.scaled = chunk_rec->scaled;
+ udata_dst.chunk_block.offset = HADDR_UNDEF;
+ udata_dst.chunk_block.length = chunk_rec->nbytes;
udata_dst.filter_mask = chunk_rec->filter_mask;
/* Need to compress variable-length & reference data elements before writing to file */
@@ -4663,27 +4728,31 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
if(nbytes > ((size_t)0xffffffff))
HGOTO_ERROR(H5E_DATASET, H5E_BADRANGE, H5_ITER_ERROR, "chunk too large for 32-bit length")
#endif /* H5_SIZEOF_SIZE_T > 4 */
- H5_ASSIGN_OVERFLOW(udata_dst.nbytes, nbytes, size_t, uint32_t);
+ H5_CHECKED_ASSIGN(udata_dst.chunk_block.length, uint32_t, nbytes, size_t);
udata->buf = buf;
udata->buf_size = buf_size;
} /* end if */
+ /* Allocate chunk in the file */
+ if(H5D__chunk_file_alloc(udata->idx_info_dst, NULL, &udata_dst.chunk_block, &need_insert) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
+
+ /* Write chunk data to destination file */
+ HDassert(H5F_addr_defined(udata_dst.chunk_block.offset));
+ if(H5F_block_write(udata->idx_info_dst->f, H5FD_MEM_DRAW, udata_dst.chunk_block.offset, nbytes, udata->idx_info_dst->dxpl_id, buf) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, H5_ITER_ERROR, "unable to write raw data to file")
+
/* Set metadata tag in dxpl_id */
H5_BEGIN_TAG(udata->idx_info_dst->dxpl_id, H5AC__COPIED_TAG, H5_ITER_ERROR);
- /* Insert chunk into the destination index */
- if(udata->idx_info_dst->storage->ops->insert)
+ /* Insert chunk record into index */
+ if(need_insert && udata->idx_info_dst->storage->ops->insert)
if((udata->idx_info_dst->storage->ops->insert)(udata->idx_info_dst, &udata_dst) < 0)
HGOTO_ERROR_TAG(H5E_DATASET, H5E_CANTINSERT, H5_ITER_ERROR, "unable to insert chunk addr into index")
/* Reset metadata tag in dxpl_id */
H5_END_TAG(H5_ITER_ERROR);
- /* Write chunk data to destination file */
- HDassert(H5F_addr_defined(udata_dst.addr));
- if(H5F_block_write(udata->idx_info_dst->f, H5FD_MEM_DRAW, udata_dst.addr, nbytes, udata->idx_info_dst->dxpl_id, buf) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, H5_ITER_ERROR, "unable to write raw data to file")
-
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__chunk_copy_cb() */
@@ -4761,7 +4830,7 @@ H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
/* Get the dim info for dataset */
if((sndims = H5S_extent_get_dims(ds_extent_src, curr_dims, NULL)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions")
- H5_ASSIGN_OVERFLOW(ndims, sndims, int, unsigned);
+ H5_CHECKED_ASSIGN(ndims, unsigned, sndims, int);
/* Set the source layout chunk information */
if(H5D__chunk_set_info_real(layout_src, ndims, curr_dims) < 0)
@@ -4869,7 +4938,7 @@ H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
do_convert = TRUE;
} /* end if */
- H5_ASSIGN_OVERFLOW(buf_size, layout_src->size, uint32_t, size_t);
+ H5_CHECKED_ASSIGN(buf_size, size_t, layout_src->size, uint32_t);
reclaim_buf_size = 0;
} /* end else */
@@ -4894,7 +4963,6 @@ H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
HDmemset(&udata, 0, sizeof udata);
udata.common.layout = layout_src;
udata.common.storage = storage_src;
- udata.common.rdcc = NULL;
udata.file_src = f_src;
udata.idx_info_dst = &idx_info_dst;
udata.buf = buf;
@@ -5029,7 +5097,7 @@ H5D__chunk_dump_index_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
/* Print information about this chunk */
HDfprintf(udata->stream, " 0x%08x %8Zu %10a [", chunk_rec->filter_mask, chunk_rec->nbytes, chunk_rec->chunk_addr);
for(u = 0; u < udata->ndims; u++)
- HDfprintf(udata->stream, "%s%Hd", (u ? ", " : ""), chunk_rec->offset[u]);
+ HDfprintf(udata->stream, "%s%Hu", (u ? ", " : ""), (chunk_rec->scaled[u] * udata->chunk_dim[u]));
HDfputs("]\n", udata->stream);
} /* end if */
@@ -5081,6 +5149,7 @@ H5D__chunk_dump_index(H5D_t *dset, hid_t dxpl_id, FILE *stream)
udata.stream = stream;
udata.header_displayed = FALSE;
udata.ndims = dset->shared->layout.u.chunk.ndims;
+ udata.chunk_dim = dset->shared->layout.u.chunk.dim;
/* Iterate over index and dump chunk info */
if((dset->shared->layout.storage.u.chunk.ops->iterate)(&idx_info, H5D__chunk_dump_index_cb, &udata) < 0)
@@ -5325,3 +5394,114 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5D__nonexistent_readvv() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5D__chunk_file_alloc()
+ *
+ * Purpose: Chunk allocation:
+ * Create the chunk if it doesn't exist, or reallocate the
+ * chunk if its size changed.
+ * The coding is moved and modified from each index structure.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi; June 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old_chunk,
+ H5F_block_t *new_chunk, hbool_t *need_insert)
+{
+ hbool_t alloc_chunk = FALSE; /* Whether to allocate chunk */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity check */
+ HDassert(idx_info);
+ HDassert(idx_info->f);
+ HDassert(idx_info->pline);
+ HDassert(idx_info->layout);
+ HDassert(idx_info->storage);
+ HDassert(H5F_addr_defined(idx_info->storage->idx_addr));
+ HDassert(new_chunk);
+ HDassert(need_insert);
+
+ /* Check for filters on chunks */
+ if(idx_info->pline->nused > 0) {
+ /* Sanity/error checking block */
+ {
+ unsigned allow_chunk_size_len; /* Allowed size of encoded chunk size */
+ unsigned new_chunk_size_len; /* Size of encoded chunk size */
+
+ /* Compute the size required for encoding the size of a chunk, allowing
+ * for an extra byte, in case the filter makes the chunk larger.
+ */
+ allow_chunk_size_len = 1 + ((H5VM_log2_gen((uint64_t)(idx_info->layout->size)) + 8) / 8);
+ if(allow_chunk_size_len > 8)
+ allow_chunk_size_len = 8;
+
+ /* Compute encoded size of chunk */
+ new_chunk_size_len = (H5VM_log2_gen((uint64_t)(new_chunk->length)) + 8) / 8;
+ if(new_chunk_size_len > 8)
+ HGOTO_ERROR(H5E_DATASET, H5E_BADRANGE, FAIL, "encoded chunk size is more than 8 bytes?!?")
+
+ /* Check if the chunk became too large to be encoded */
+ if(new_chunk_size_len > allow_chunk_size_len)
+ HGOTO_ERROR(H5E_DATASET, H5E_BADRANGE, FAIL, "chunk size can't be encoded")
+ } /* end block */
+
+ if(old_chunk && H5F_addr_defined(old_chunk->offset)) {
+ /* Sanity check */
+ HDassert(!H5F_addr_defined(new_chunk->offset) || H5F_addr_eq(new_chunk->offset, old_chunk->offset));
+
+ /* Check for chunk being same size */
+ if(new_chunk->length != old_chunk->length) {
+ /* Release previous chunk */
+ if(H5MF_xfree(idx_info->f, H5FD_MEM_DRAW, idx_info->dxpl_id, old_chunk->offset, old_chunk->length) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to free chunk")
+ alloc_chunk = TRUE;
+ } /* end if */
+ else {
+ /* Don't need to reallocate chunk, but send its address back up */
+ if(!H5F_addr_defined(new_chunk->offset))
+ new_chunk->offset = old_chunk->offset;
+ } /* end else */
+ } /* end if */
+ else {
+ HDassert(!H5F_addr_defined(new_chunk->offset));
+ alloc_chunk = TRUE;
+ } /* end else */
+ } /* end if */
+ else {
+ HDassert(!H5F_addr_defined(new_chunk->offset));
+ HDassert(new_chunk->length == idx_info->layout->size);
+ alloc_chunk = TRUE;
+ } /* end else */
+
+ /* Actually allocate space for the chunk in the file */
+ if(alloc_chunk) {
+ switch(idx_info->storage->idx_type) {
+ case H5D_CHUNK_IDX_BTREE:
+ HDassert(new_chunk->length > 0);
+ H5_CHECK_OVERFLOW(new_chunk->length, /*From: */uint32_t, /*To: */hsize_t);
+ new_chunk->offset = H5MF_alloc(idx_info->f, H5FD_MEM_DRAW, idx_info->dxpl_id, (hsize_t)new_chunk->length);
+ if(!H5F_addr_defined(new_chunk->offset))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "file allocation failed")
+ *need_insert = TRUE;
+ break;
+
+ case H5D_CHUNK_IDX_NTYPES:
+ default:
+ HDassert(0 && "This should never be executed!");
+ break;
+ } /* end switch */
+ } /* end if */
+
+ HDassert(H5F_addr_defined(new_chunk->offset));
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D__chunk_file_alloc() */
+
diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c
index 789beab..af70c07 100644
--- a/src/H5Dcompact.c
+++ b/src/H5Dcompact.c
@@ -174,11 +174,8 @@ H5D__compact_construct(H5F_t *f, H5D_t *dset)
hssize_t stmp_size; /* Temporary holder for raw data size */
hsize_t tmp_size; /* Temporary holder for raw data size */
hsize_t max_comp_data_size; /* Max. allowed size of compact data */
- hsize_t dim[H5O_LAYOUT_NDIMS]; /* Current size of data in elements */
- hsize_t max_dim[H5O_LAYOUT_NDIMS]; /* Maximum size of data in elements */
- int ndims; /* Rank of dataspace */
- int i; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -187,11 +184,9 @@ H5D__compact_construct(H5F_t *f, H5D_t *dset)
HDassert(dset);
/* Check for invalid dataset dimensions */
- if((ndims = H5S_get_simple_extent_dims(dset->shared->space, dim, max_dim)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions")
- for(i = 0; i < ndims; i++)
- if(max_dim[i] > dim[i])
- HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "extendible compact dataset")
+ for(u = 0; u < dset->shared->ndims; u++)
+ if(dset->shared->max_dims[u] > dset->shared->curr_dims[u])
+ HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "extendible compact dataset not allowed")
/*
* Compact dataset is stored in dataset object header message of
@@ -202,7 +197,7 @@ H5D__compact_construct(H5F_t *f, H5D_t *dset)
tmp_size = H5T_get_size(dset->shared->type);
HDassert(tmp_size > 0);
tmp_size = tmp_size * (hsize_t)stmp_size;
- H5_ASSIGN_OVERFLOW(dset->shared->layout.storage.u.compact.size, tmp_size, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(dset->shared->layout.storage.u.compact.size, size_t, tmp_size, hssize_t);
/* Verify data size is smaller than maximum header message size
* (64KB) minus other layout message fields.
diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c
index dc09768..898b46d 100644
--- a/src/H5Dcontig.c
+++ b/src/H5Dcontig.c
@@ -259,7 +259,7 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
/* Get the number of elements in the dataset's dataspace */
if((snpoints = H5S_GET_EXTENT_NPOINTS(dset->shared->space)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "dataset has negative number of elements")
- H5_ASSIGN_OVERFLOW(npoints, snpoints, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(npoints, size_t, snpoints, hssize_t);
/* Initialize the fill value buffer */
if(H5D__fill_init(&fb_info, NULL, NULL, NULL, NULL, NULL,
@@ -396,10 +396,7 @@ H5D__contig_construct(H5F_t *f, H5D_t *dset)
size_t dt_size; /* Size of datatype */
hsize_t tmp_size; /* Temporary holder for raw data size */
size_t tmp_sieve_buf_size; /* Temporary holder for sieve buffer size */
- hsize_t dim[H5O_LAYOUT_NDIMS]; /* Current size of data in elements */
- hsize_t max_dim[H5O_LAYOUT_NDIMS]; /* Maximum size of data in elements */
- int ndims; /* Rank of dataspace */
- int i; /* Local index variable */
+ unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -415,11 +412,9 @@ H5D__contig_construct(H5F_t *f, H5D_t *dset)
*/
/* Check for invalid dataset dimensions */
- if((ndims = H5S_get_simple_extent_dims(dset->shared->space, dim, max_dim)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize contiguous storage")
- for(i = 0; i < ndims; i++)
- if(max_dim[i] > dim[i])
- HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "extendible contiguous non-external dataset")
+ for(u = 0; u < dset->shared->ndims; u++)
+ if(dset->shared->max_dims[u] > dset->shared->curr_dims[u])
+ HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "extendible contiguous non-external dataset not allowed")
/* Retrieve the number of elements in the dataspace */
if((snelmts = H5S_GET_EXTENT_NPOINTS(dset->shared->space)) < 0)
@@ -649,6 +644,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
size_t sieve_size = (size_t)-1; /* Size of sieve buffer */
haddr_t rel_eoa; /* Relative end of file address */
hsize_t max_data; /* Actual maximum size of data to cache */
+ hsize_t min; /* temporary minimum value (avoids some ugly macro nesting) */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -689,7 +685,8 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
max_data = store_contig->dset_size - dst_off;
/* Compute the size of the sieve buffer */
- H5_ASSIGN_OVERFLOW(dset_contig->sieve_size, MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size), hsize_t, size_t);
+ min = MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size);
+ H5_CHECKED_ASSIGN(dset_contig->sieve_size, size_t, min, hsize_t);
/* Read the new sieve buffer */
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
@@ -762,9 +759,13 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
/* Only need this when resizing sieve buffer */
max_data = store_contig->dset_size - dst_off;
- /* Compute the size of the sieve buffer */
- /* Don't read off the end of the file, don't read past the end of the data element and don't read more than the buffer size */
- H5_ASSIGN_OVERFLOW(dset_contig->sieve_size, MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size), hsize_t, size_t);
+ /* Compute the size of the sieve buffer.
+ * Don't read off the end of the file, don't read past
+ * the end of the data element, and don't read more than
+ * the buffer size.
+ */
+ min = MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size);
+ H5_CHECKED_ASSIGN(dset_contig->sieve_size, size_t, min, hsize_t);
/* Update local copies of sieve information */
sieve_start = dset_contig->sieve_loc;
@@ -920,6 +921,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
size_t sieve_size = (size_t)-1; /* size of sieve buffer */
haddr_t rel_eoa; /* Relative end of file address */
hsize_t max_data; /* Actual maximum size of data to cache */
+ hsize_t min; /* temporary minimum value (avoids some ugly macro nesting) */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -965,7 +967,8 @@ if(dset_contig->sieve_size > len)
max_data = store_contig->dset_size - dst_off;
/* Compute the size of the sieve buffer */
- H5_ASSIGN_OVERFLOW(dset_contig->sieve_size, MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size), hsize_t, size_t);
+ min = MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size);
+ H5_CHECKED_ASSIGN(dset_contig->sieve_size, size_t, min, hsize_t);
/* Check if there is any point in reading the data from the file */
if(dset_contig->sieve_size > len) {
@@ -1080,9 +1083,13 @@ if(dset_contig->sieve_size > len)
/* Only need this when resizing sieve buffer */
max_data = store_contig->dset_size - dst_off;
- /* Compute the size of the sieve buffer */
- /* Don't read off the end of the file, don't read past the end of the data element and don't read more than the buffer size */
- H5_ASSIGN_OVERFLOW(dset_contig->sieve_size, MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size), hsize_t, size_t);
+ /* Compute the size of the sieve buffer.
+ * Don't read off the end of the file, don't read past
+ * the end of the data element, and don't read more than
+ * the buffer size.
+ */
+ min = MIN3(rel_eoa - dset_contig->sieve_loc, max_data, dset_contig->sieve_buf_size);
+ H5_CHECKED_ASSIGN(dset_contig->sieve_size, size_t, min, hsize_t);
/* Update local copies of sieve information */
sieve_start = dset_contig->sieve_loc;
diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c
index f4bde4b..cd2bc84 100644
--- a/src/H5Ddeprec.c
+++ b/src/H5Ddeprec.c
@@ -313,9 +313,7 @@ static herr_t
H5D__extend(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
{
htri_t changed; /* Flag to indicate that the dataspace was successfully extended */
- H5S_t *space; /* Dataset's dataspace */
- int rank; /* Dataspace # of dimensions */
- hsize_t curr_dims[H5O_LAYOUT_NDIMS];/* Current dimension sizes */
+ hsize_t old_dims[H5S_MAX_RANK]; /* Current (i.e. old, if changed) dimension sizes */
H5O_fill_t *fill; /* Dataset's fill value */
herr_t ret_value = SUCCEED; /* Return value */
@@ -336,29 +334,82 @@ H5D__extend(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
*/
/* Retrieve the current dimensions */
- space = dataset->shared->space;
- if((rank = H5S_get_simple_extent_dims(space, curr_dims, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+ HDcompile_assert(sizeof(old_dims) == sizeof(dataset->shared->curr_dims));
+ HDmemcpy(old_dims, dataset->shared->curr_dims, H5S_MAX_RANK * sizeof(old_dims[0]));
/* Increase the size of the data space */
- if((changed = H5S_extend(space, size)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to increase size of data space")
+ if((changed = H5S_extend(dataset->shared->space, size)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to increase size of dataspace")
/* Updated the dataset's info if the dataspace was successfully extended */
if(changed) {
+ /* Get the extended dimension sizes */
+ /* (Need to retrieve this here, since the 'size' dimensions could
+ * extend one dimension but be smaller in a different dimension,
+ * and the dataspace's extent is the larger of the current and
+ * 'size' dimension values. - QAK)
+ */
+ if(H5S_get_simple_extent_dims(dataset->shared->space, dataset->shared->curr_dims, NULL) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+
/* Update the index values for the cached chunks for this dataset */
if(H5D_CHUNKED == dataset->shared->layout.type) {
+ hbool_t update_chunks = FALSE; /* Flag to indicate chunk cache update is needed */
+
+ /* Check if we need to track & update scaled dimension information */
+ if(dataset->shared->ndims > 1) {
+ unsigned u; /* Local indicate variable */
+
+ /* Update scaled chunk information */
+ for(u = 0; u < dataset->shared->ndims; u++) {
+ hsize_t scaled; /* Scaled value */
+
+ /* Compute the scaled dimension size value */
+ scaled = size[u] / dataset->shared->layout.u.chunk.dim[u];
+
+ /* Check if scaled dimension size changed */
+ if(scaled != dataset->shared->cache.chunk.scaled_dims[u]) {
+ hsize_t scaled_power2up; /* New size value, rounded to next power of 2 */
+
+ /* Update the scaled dimension size value for the current dimension */
+ dataset->shared->cache.chunk.scaled_dims[u] = scaled;
+
+ /* Check if algorithm for computing hash values will change */
+ if((scaled > dataset->shared->cache.chunk.nslots &&
+ dataset->shared->cache.chunk.scaled_dims[u] <= dataset->shared->cache.chunk.nslots)
+ || (scaled <= dataset->shared->cache.chunk.nslots &&
+ dataset->shared->cache.chunk.scaled_dims[u] > dataset->shared->cache.chunk.nslots))
+ update_chunks = TRUE;
+
+ /* Check if the number of bits required to encode the scaled size value changed */
+ if(dataset->shared->cache.chunk.scaled_power2up[u] != (scaled_power2up = H5VM_power2up(scaled))) {
+ /* Update the 'power2up' & 'encode_bits' values for the current dimension */
+ dataset->shared->cache.chunk.scaled_power2up[u] = scaled_power2up;
+ dataset->shared->cache.chunk.scaled_encode_bits[u] = H5VM_log2_gen(scaled_power2up);
+
+ /* Indicate that the chunk cache indices should be updated */
+ update_chunks = TRUE;
+ } /* end if */
+ } /* end if */
+ } /* end for */
+ } /* end if */
+
+ /* Update general information for chunks */
if(H5D__chunk_set_info(dataset) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to update # of chunks")
- if(H5D__chunk_update_cache(dataset, dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
+
+ /* Check for updating chunk cache indices */
+ if(update_chunks) {
+ /* Update the chunk cache indices */
+ if(H5D__chunk_update_cache(dataset, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
+ } /* end if */
} /* end if */
/* Allocate space for the new parts of the dataset, if appropriate */
fill = &dataset->shared->dcpl_cache.fill;
if(fill->alloc_time == H5D_ALLOC_TIME_EARLY)
- if(H5D__alloc_storage(dataset, dxpl_id, H5D_ALLOC_EXTEND, FALSE,
- curr_dims) < 0)
+ if(H5D__alloc_storage(dataset, dxpl_id, H5D_ALLOC_EXTEND, FALSE, old_dims) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
/* Mark the dataspace as dirty, for later writing to the file */
diff --git a/src/H5Defl.c b/src/H5Defl.c
index 38c8ccd..1ae7a23 100644
--- a/src/H5Defl.c
+++ b/src/H5Defl.c
@@ -126,14 +126,11 @@ static herr_t
H5D__efl_construct(H5F_t *f, H5D_t *dset)
{
size_t dt_size; /* Size of datatype */
- hsize_t dim[H5O_LAYOUT_NDIMS]; /* Current size of data in elements */
- hsize_t max_dim[H5O_LAYOUT_NDIMS]; /* Maximum size of data in elements */
hssize_t stmp_size; /* Temporary holder for raw data size */
hsize_t tmp_size; /* Temporary holder for raw data size */
hsize_t max_points; /* Maximum elements */
hsize_t max_storage; /* Maximum storage size */
- int ndims; /* Rank of dataspace */
- int i; /* Local index variable */
+ unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -149,11 +146,9 @@ H5D__efl_construct(H5F_t *f, H5D_t *dset)
*/
/* Check for invalid dataset dimensions */
- if((ndims = H5S_get_simple_extent_dims(dset->shared->space, dim, max_dim)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize contiguous storage")
- for(i = 1; i < ndims; i++)
- if(max_dim[i] > dim[i])
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "only the first dimension can be extendible")
+ for(u = 1; u < dset->shared->ndims; u++)
+ if(dset->shared->max_dims[u] > dset->shared->curr_dims[u])
+ HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "only the first dimension can be extendible")
/* Retrieve the size of the dataset's datatype */
if(0 == (dt_size = H5T_get_size(dset->shared->type)))
@@ -175,7 +170,7 @@ H5D__efl_construct(H5F_t *f, H5D_t *dset)
stmp_size = H5S_GET_EXTENT_NPOINTS(dset->shared->space);
HDassert(stmp_size >= 0);
tmp_size = (hsize_t)stmp_size * dt_size;
- H5_ASSIGN_OVERFLOW(dset->shared->layout.storage.u.contig.size, tmp_size, hssize_t, hsize_t);
+ H5_CHECKED_ASSIGN(dset->shared->layout.storage.u.contig.size, hsize_t, tmp_size, hssize_t);
/* Get the sieve buffer size for this dataset */
dset->shared->cache.contig.sieve_buf_size = H5F_SIEVE_BUF_SIZE(f);
@@ -293,7 +288,7 @@ H5D__efl_read(const H5O_efl_t *efl, haddr_t addr, size_t size, uint8_t *buf)
HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
if((fd = HDopen(efl->slot[u].name, O_RDONLY, 0)) < 0)
HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
- if(HDlseek(fd, (off_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
+ if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
#ifndef NDEBUG
tempto_read = MIN(efl->slot[u].size-skip, (hsize_t)size);
@@ -383,7 +378,7 @@ H5D__efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *b
else
HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
} /* end if */
- if(HDlseek(fd, (off_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
+ if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
#ifndef NDEBUG
tempto_write = MIN(efl->slot[u].size - skip, (hsize_t)size);
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 39b3eaf..c1e3ad0 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -62,6 +62,7 @@ static H5D_shared_t *H5D__new(hid_t dcpl_id, hbool_t creating,
hbool_t vl_type);
static herr_t H5D__init_type(H5F_t *file, const H5D_t *dset, hid_t type_id,
const H5T_t *type);
+static herr_t H5D__cache_dataspace_info(const H5D_t *dset);
static herr_t H5D__init_space(H5F_t *file, const H5D_t *dset, const H5S_t *space);
static herr_t H5D__update_oh_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset,
hid_t dapl_id);
@@ -665,6 +666,40 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5D__cache_dataspace_info
+ *
+ * Purpose: Cache dataspace info for a dataset
+ *
+ * Return: Success: SUCCEED
+ * Failure: FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, November 19, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D__cache_dataspace_info(const H5D_t *dset)
+{
+ int sndims; /* Signed number of dimensions of dataspace rank */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity checking */
+ HDassert(dset);
+
+ /* Cache info for dataset's dataspace */
+ if((sndims = H5S_get_simple_extent_dims(dset->shared->space, dset->shared->curr_dims, dset->shared->max_dims)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't cache dataspace dimensions")
+ dset->shared->ndims = (unsigned)sndims;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D__cache_dataspace_info() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5D__init_space
*
* Purpose: Copy a dataspace for a dataset's use, performing all the
@@ -698,6 +733,10 @@ H5D__init_space(H5F_t *file, const H5D_t *dset, const H5S_t *space)
if(NULL == (dset->shared->space = H5S_copy(space, FALSE, TRUE)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't copy dataspace")
+ /* Cache the dataset's dataspace info */
+ if(H5D__cache_dataspace_info(dset) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't cache dataspace info")
+
/* Set the latest format, if requested */
if(use_latest_format)
if(H5S_set_latest_version(dset->shared->space) < 0)
@@ -1314,6 +1353,10 @@ H5D__open_oid(H5D_t *dataset, hid_t dapl_id, hid_t dxpl_id)
if(NULL == (dataset->shared->space = H5S_read(&(dataset->oloc), dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to load dataspace info from dataset header")
+ /* Cache the dataset's dataspace info */
+ if(H5D__cache_dataspace_info(dataset) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't cache dataspace info")
+
/* Get a datatype ID for the dataset's datatype */
if((dataset->shared->type_id = H5I_register(H5I_DATATYPE, dataset->shared->type, FALSE)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register type")
@@ -2260,9 +2303,7 @@ done:
herr_t
H5D__set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
{
- H5S_t *space; /* Dataset's dataspace */
- int rank; /* Dataspace # of dimensions */
- hsize_t curr_dims[H5O_LAYOUT_NDIMS];/* Current dimension sizes */
+ hsize_t curr_dims[H5S_MAX_RANK]; /* Current dimension sizes */
htri_t changed; /* Whether the dataspace changed size */
herr_t ret_value = SUCCEED; /* Return value */
@@ -2286,29 +2327,64 @@ H5D__set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
if(H5D__check_filters(dset) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't apply filters")
- /* Get the data space */
- space = dset->shared->space;
-
- /* Check if we are shrinking or expanding any of the dimensions */
- if((rank = H5S_get_simple_extent_dims(space, curr_dims, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+ /* Keep the current dataspace dimensions for later */
+ HDcompile_assert(sizeof(curr_dims) == sizeof(dset->shared->curr_dims));
+ HDmemcpy(curr_dims, dset->shared->curr_dims, H5S_MAX_RANK * sizeof(curr_dims[0]));
- /* Modify the size of the data space */
- if((changed = H5S_set_extent(space, size)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to modify size of data space")
+ /* Modify the size of the dataspace */
+ if((changed = H5S_set_extent(dset->shared->space, size)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to modify size of dataspace")
/* Don't bother updating things, unless they've changed */
if(changed) {
- hbool_t shrink = FALSE; /* Flag to indicate a dimension has shrank */
- hbool_t expand = FALSE; /* Flag to indicate a dimension has grown */
- unsigned u; /* Local index variable */
+ hbool_t shrink = FALSE; /* Flag to indicate a dimension has shrank */
+ hbool_t expand = FALSE; /* Flag to indicate a dimension has grown */
+ hbool_t update_chunks = FALSE; /* Flag to indicate chunk cache update is needed */
+ unsigned u; /* Local index variable */
/* Determine if we are shrinking and/or expanding any dimensions */
- for(u = 0; u < (unsigned)rank; u++) {
+ for(u = 0; u < dset->shared->ndims; u++) {
+ /* Check for various status changes */
if(size[u] < curr_dims[u])
shrink = TRUE;
if(size[u] > curr_dims[u])
expand = TRUE;
+
+ /* Chunked storage specific checks */
+ if(H5D_CHUNKED == dset->shared->layout.type && dset->shared->ndims > 1) {
+ hsize_t scaled; /* Scaled value */
+
+ /* Compute the scaled dimension size value */
+ scaled = size[u] / dset->shared->layout.u.chunk.dim[u];
+
+ /* Check if scaled dimension size changed */
+ if(scaled != dset->shared->cache.chunk.scaled_dims[u]) {
+ hsize_t scaled_power2up; /* Scaled value, rounded to next power of 2 */
+
+ /* Update the scaled dimension size value for the current dimension */
+ dset->shared->cache.chunk.scaled_dims[u] = scaled;
+
+ /* Check if algorithm for computing hash values will change */
+ if((scaled > dset->shared->cache.chunk.nslots &&
+ dset->shared->cache.chunk.scaled_dims[u] <= dset->shared->cache.chunk.nslots)
+ || (scaled <= dset->shared->cache.chunk.nslots &&
+ dset->shared->cache.chunk.scaled_dims[u] > dset->shared->cache.chunk.nslots))
+ update_chunks = TRUE;
+
+ /* Check if the number of bits required to encode the scaled size value changed */
+ if(dset->shared->cache.chunk.scaled_power2up[u] != (scaled_power2up = H5VM_power2up(scaled))) {
+ /* Update the 'power2up' & 'encode_bits' values for the current dimension */
+ dset->shared->cache.chunk.scaled_power2up[u] = scaled_power2up;
+ dset->shared->cache.chunk.scaled_encode_bits[u] = H5VM_log2_gen(scaled_power2up);
+
+ /* Indicate that the cached chunk indices need to be updated */
+ update_chunks = TRUE;
+ } /* end if */
+ } /* end if */
+ } /* end if */
+
+ /* Update the cached copy of the dataset's dimensions */
+ dset->shared->curr_dims[u] = size[u];
} /* end for */
/*-------------------------------------------------------------------------
@@ -2317,11 +2393,15 @@ H5D__set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
*/
/* Update the index values for the cached chunks for this dataset */
if(H5D_CHUNKED == dset->shared->layout.type) {
- /* Update the cached chunk info */
+ /* Set the cached chunk info */
if(H5D__chunk_set_info(dset) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to update # of chunks")
- if(H5D__chunk_update_cache(dset, dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
+
+ /* Check if updating the chunk cache indices is necessary */
+ if(update_chunks)
+ /* Update the chunk cache indices */
+ if(H5D__chunk_update_cache(dset, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
} /* end if */
/* Allocate space for the new parts of the dataset, if appropriate */
diff --git a/src/H5Dio.c b/src/H5Dio.c
index d21612a..3126b92 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -299,8 +299,6 @@ H5D__pre_write(H5D_t *dset, hbool_t direct_write, hid_t mem_type_id,
uint32_t direct_filters;
hsize_t *direct_offset;
uint32_t direct_datasize;
- int ndims = 0;
- hsize_t dims[H5O_LAYOUT_NDIMS];
hsize_t internal_offset[H5O_LAYOUT_NDIMS];
unsigned u; /* Local index variable */
@@ -321,12 +319,9 @@ H5D__pre_write(H5D_t *dset, hbool_t direct_write, hid_t mem_type_id,
/* The library's chunking code requires the offset terminates with a zero. So transfer the
* offset array to an internal offset array */
- if((ndims = H5S_get_simple_extent_dims(dset->shared->space, dims, NULL)) < 0)
- HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't retrieve dataspace extent dims")
-
- for(u = 0; u < (unsigned)ndims; u++) {
+ for(u = 0; u < dset->shared->ndims; u++) {
/* Make sure the offset doesn't exceed the dataset's dimensions */
- if(direct_offset[u] > dims[u])
+ if(direct_offset[u] > dset->shared->curr_dims[u])
HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL, "offset exceeds dimensions of dataset")
/* Make sure the offset fall right on a chunk's boundary */
@@ -337,7 +332,7 @@ H5D__pre_write(H5D_t *dset, hbool_t direct_write, hid_t mem_type_id,
} /* end for */
/* Terminate the offset with a zero */
- internal_offset[ndims] = 0;
+ internal_offset[dset->shared->ndims] = 0;
/* write raw data */
if(H5D__chunk_direct_write(dset, dxpl_id, direct_filters, internal_offset, direct_datasize, buf) < 0)
@@ -411,7 +406,7 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
mem_space = file_space;
if((snelmts = H5S_GET_SELECT_NPOINTS(mem_space)) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dst dataspace has invalid selection")
- H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,hsize_t);
+ H5_CHECKED_ASSIGN(nelmts, hsize_t, snelmts, hssize_t);
/* Fill the DXPL cache values for later use */
if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
@@ -681,7 +676,7 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
if((snelmts = H5S_GET_SELECT_NPOINTS(mem_space)) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "src dataspace has invalid selection")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, hsize_t);
+ H5_CHECKED_ASSIGN(nelmts, hsize_t, snelmts, hssize_t);
/* Make certain that the number of elements in each selection is the same */
if(nelmts != (hsize_t)H5S_GET_SELECT_NPOINTS(file_space))
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 01d2288..63faa5d 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -438,7 +438,7 @@ H5D__mpio_get_sum_chunk(const H5D_io_info_t *io_info, const H5D_chunk_map_t *fm,
/* Get the number of chunks to perform I/O on */
num_chunkf = 0;
ori_num_chunkf = H5SL_count(fm->sel_chunks);
- H5_ASSIGN_OVERFLOW(num_chunkf, ori_num_chunkf, size_t, int);
+ H5_CHECKED_ASSIGN(num_chunkf, int, ori_num_chunkf, size_t);
/* Determine the summation of number of chunks for all processes */
if(MPI_SUCCESS != (mpi_code = MPI_Allreduce(&num_chunkf, sum_chunkf, 1, MPI_INT, MPI_SUM, io_info->comm)))
@@ -826,7 +826,7 @@ H5D__link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
} /* end if */
/* Retrieve total # of chunks in dataset */
- H5_ASSIGN_OVERFLOW(total_chunks, fm->layout->u.chunk.nchunks, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(total_chunks, size_t, fm->layout->u.chunk.nchunks, hsize_t);
/* Handle special case when dataspace dimensions only allow one chunk in
* the dataset. [This sometimes is used by developers who want the
@@ -860,10 +860,9 @@ H5D__link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
mspace = chunk_info->mspace;
/* Look up address of chunk */
- if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->coords,
- chunk_info->index, &udata) < 0)
+ if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk address")
- ctg_store.contig.dset_addr = udata.addr;
+ ctg_store.contig.dset_addr = udata.chunk_block.offset;
} /* end else */
/* Set up the base storage address for this chunk */
@@ -1149,7 +1148,7 @@ H5D__multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *ty
#endif
/* Retrieve total # of chunks in dataset */
- H5_ASSIGN_OVERFLOW(total_chunk, fm->layout->u.chunk.nchunks, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(total_chunk, size_t, fm->layout->u.chunk.nchunks, hsize_t);
HDassert(total_chunk != 0);
/* Allocate memories */
@@ -1201,8 +1200,7 @@ if(H5DEBUG(D))
HDassert(chunk_info->index == u);
/* Pass in chunk's coordinates in a union. */
- store.chunk.offset = chunk_info->coords;
- store.chunk.index = chunk_info->index;
+ store.chunk.scaled = chunk_info->scaled;
} /* end if */
/* Collective IO for this chunk,
@@ -1589,10 +1587,9 @@ if(H5DEBUG(D))
H5D_chunk_ud_t udata; /* User data for querying chunk info */
/* Get address of chunk */
- if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id,
- chunk_info->coords, chunk_info->index, &udata) < 0)
+ if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
- chunk_addr = udata.addr;
+ chunk_addr = udata.chunk_block.offset;
} /* end if */
else
chunk_addr = total_chunk_addr_array[chunk_info->index];
@@ -1700,7 +1697,7 @@ H5D__obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
HGOTO_ERROR(H5E_IO, H5E_MPI, FAIL, "unable to obtain mpi size")
/* Setup parameters */
- H5_ASSIGN_OVERFLOW(total_chunks, fm->layout->u.chunk.nchunks, hsize_t, int);
+ H5_CHECKED_ASSIGN(total_chunks, int, fm->layout->u.chunk.nchunks, hsize_t);
percent_nproc_per_chunk = H5P_peek_unsigned(dx_plist, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME);
/* if ratio is 0, perform collective io */
if(0 == percent_nproc_per_chunk) {
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index d3cea4c..6af79e9 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -33,6 +33,7 @@
/* Other private headers needed by this file */
#include "H5ACprivate.h" /* Metadata cache */
+#include "H5Fprivate.h" /* File access */
#include "H5Gprivate.h" /* Groups */
#include "H5SLprivate.h" /* Skip lists */
#include "H5Tprivate.h" /* Datatypes */
@@ -60,8 +61,6 @@
(io_info)->op_type = H5D_IO_OP_READ; \
(io_info)->u.rbuf = buf
-#define H5D_CHUNK_HASH(D, ADDR) H5F_addr_hash(ADDR, (D)->cache.chunk.nslots)
-
/* Flags for marking aspects of a dataset dirty */
#define H5D_MARK_SPACE 0x01
#define H5D_MARK_LAYOUT 0x02
@@ -82,7 +81,7 @@ typedef struct H5D_type_info_t {
/* Computed/derived values */
size_t src_type_size; /* Size of source type */
- size_t dst_type_size; /* Size of destination type*/
+ size_t dst_type_size; /* Size of destination type */
size_t max_type_size; /* Size of largest source/destination type */
hbool_t is_conv_noop; /* Whether the type conversion is a NOOP */
hbool_t is_xform_noop; /* Whether the data transform is a NOOP */
@@ -164,8 +163,7 @@ typedef struct {
} H5D_contig_storage_t;
typedef struct {
- hsize_t index; /* "Index" of chunk in dataset (must be first for TBBT routines) */
- hsize_t *offset; /* Chunk's coordinates in elements */
+ hsize_t *scaled; /* Scaled coordinates for a chunk */
} H5D_chunk_storage_t;
typedef struct {
@@ -242,8 +240,8 @@ typedef struct H5D_chk_idx_info_t {
* The chunk's file address, filter mask and size on disk are not key values.
*/
typedef struct H5D_chunk_rec_t {
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /* Logical offset to start */
uint32_t nbytes; /* Size of stored data */
- hsize_t offset[H5O_LAYOUT_NDIMS]; /* Logical offset to start */
unsigned filter_mask; /* Excluded filters */
haddr_t chunk_addr; /* Address of chunk in file */
} H5D_chunk_rec_t;
@@ -257,10 +255,7 @@ typedef struct H5D_chunk_common_ud_t {
/* downward */
const H5O_layout_chunk_t *layout; /* Chunk layout description */
const H5O_storage_chunk_t *storage; /* Chunk storage description */
- const hsize_t *offset; /* Logical offset of chunk */
- const struct H5D_rdcc_t *rdcc; /* Chunk cache. Only necessary if the index may
- * be modified, and if any chunks in the dset
- * may be cached */
+ const hsize_t *scaled; /* Scaled coordinates for a chunk */
} H5D_chunk_common_ud_t;
/* B-tree callback info for various operations */
@@ -269,8 +264,7 @@ typedef struct H5D_chunk_ud_t {
/* Upward */
unsigned idx_hint; /*index of chunk in cache, if present */
- haddr_t addr; /*file address of chunk */
- uint32_t nbytes; /*size of stored data */
+ H5F_block_t chunk_block; /*offset/length of chunk in file */
unsigned filter_mask; /*excluded filters */
} H5D_chunk_ud_t;
@@ -327,11 +321,11 @@ typedef struct H5D_chunk_ops_t {
typedef struct H5D_chunk_info_t {
hsize_t index; /* "Index" of chunk in dataset */
uint32_t chunk_points; /* Number of elements selected in chunk */
- hsize_t coords[H5O_LAYOUT_NDIMS]; /* Coordinates of chunk in file dataset's dataspace */
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /* Scaled coordinates of chunk (in file dataset's dataspace) */
H5S_t *fspace; /* Dataspace describing chunk & selection in it */
- unsigned fspace_shared; /* Indicate that the file space for a chunk is shared and shouldn't be freed */
+ hbool_t fspace_shared; /* Indicate that the file space for a chunk is shared and shouldn't be freed */
H5S_t *mspace; /* Dataspace describing selection in memory corresponding to this chunk */
- unsigned mspace_shared; /* Indicate that the memory space for a chunk is shared and shouldn't be freed */
+ hbool_t mspace_shared; /* Indicate that the memory space for a chunk is shared and shouldn't be freed */
} H5D_chunk_info_t;
/* Main structure holding the mapping between file chunks and memory */
@@ -341,7 +335,6 @@ typedef struct H5D_chunk_map_t {
const H5S_t *file_space; /* Pointer to the file dataspace */
unsigned f_ndims; /* Number of dimensions for file dataspace */
- hsize_t f_dims[H5O_LAYOUT_NDIMS]; /* File dataspace dimensions */
const H5S_t *mem_space; /* Pointer to the memory dataspace */
H5S_t *mchunk_tmpl; /* Dataspace template for new memory chunks */
@@ -368,7 +361,7 @@ typedef struct H5D_chunk_map_t {
/* Cached information about a particular chunk */
typedef struct H5D_chunk_cached_t {
hbool_t valid; /*whether cache info is valid*/
- hsize_t offset[H5O_LAYOUT_NDIMS]; /*logical offset to start*/
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /*scaled offset of chunk*/
haddr_t addr; /*file address of chunk */
uint32_t nbytes; /*size of stored data */
unsigned filter_mask; /*excluded filters */
@@ -393,7 +386,12 @@ typedef struct H5D_rdcc_t {
struct H5D_rdcc_ent_t **slot; /* Chunk slots, each points to a chunk*/
H5SL_t *sel_chunks; /* Skip list containing information for each chunk selected */
H5S_t *single_space; /* Dataspace for single element I/O on chunks */
- H5D_chunk_info_t *single_chunk_info; /* Pointer to single chunk's info */
+ H5D_chunk_info_t *single_chunk_info; /* Pointer to single chunk's info */
+
+ /* Cached information about scaled dataspace dimensions */
+ hsize_t scaled_dims[H5S_MAX_RANK]; /* The scaled dim sizes */
+ hsize_t scaled_power2up[H5S_MAX_RANK]; /* The scaled dim sizes, rounded up to next power of 2 */
+ unsigned scaled_encode_bits[H5S_MAX_RANK]; /* The number of bits needed to encode the scaled dim sizes */
} H5D_rdcc_t;
/* The raw data contiguous data cache */
@@ -423,6 +421,11 @@ typedef struct H5D_shared_t {
H5O_layout_t layout; /* Data layout */
hbool_t checked_filters;/* TRUE if dataset passes can_apply check */
+ /* Cached dataspace info */
+ unsigned ndims; /* The dataset's dataspace rank */
+ hsize_t curr_dims[H5S_MAX_RANK]; /* The curr. size of dataset dimensions */
+ hsize_t max_dims[H5S_MAX_RANK]; /* The max. size of dataset dimensions */
+
/* Buffered/cached information for types of raw data storage*/
struct {
H5D_rdcdc_t contig; /* Information about contiguous data */
@@ -496,11 +499,11 @@ typedef struct {
typedef struct H5D_rdcc_ent_t {
hbool_t locked; /*entry is locked in cache */
hbool_t dirty; /*needs to be written to disk? */
- hbool_t deleted; /*chunk about to be deleted (do not flush) */
- hsize_t offset[H5O_LAYOUT_NDIMS]; /*chunk name */
+ hbool_t deleted; /*chunk about to be deleted */
+ hsize_t scaled[H5O_LAYOUT_NDIMS]; /*scaled chunk 'name' (coordinates) */
uint32_t rd_count; /*bytes remaining to be read */
uint32_t wr_count; /*bytes remaining to be written */
- haddr_t chunk_addr; /*address of chunk in file */
+ H5F_block_t chunk_block; /*offset/length of chunk in file */
uint8_t *chunk; /*the unfiltered chunk data */
unsigned idx; /*index in hash table */
struct H5D_rdcc_ent_t *next;/*next item in doubly-linked list */
@@ -620,7 +623,7 @@ H5_DLL herr_t H5D__chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
hid_t dapl_id);
H5_DLL hbool_t H5D__chunk_is_space_alloc(const H5O_storage_t *storage);
H5_DLL herr_t H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id,
- const hsize_t *chunk_offset, hsize_t chunk_idx, H5D_chunk_ud_t *udata);
+ const hsize_t *scaled, H5D_chunk_ud_t *udata);
H5_DLL void *H5D__chunk_lock(const H5D_io_info_t *io_info,
H5D_chunk_ud_t *udata, hbool_t relax);
H5_DLL herr_t H5D__chunk_unlock(const H5D_io_info_t *io_info,
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 88a04ec..35927ff 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -183,7 +183,7 @@ H5_DLL herr_t H5D_virtual_update_min_dims(H5O_layout_t *layout, size_t idx);
/* Functions that operate on indexed storage */
H5_DLL herr_t H5D_btree_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
- int indent, int fwidth, unsigned ndims);
+ int indent, int fwidth, unsigned ndims, const uint32_t *dim);
#endif /* _H5Dprivate_H */
diff --git a/src/H5EA.c b/src/H5EA.c
index b790590..37682e7 100644
--- a/src/H5EA.c
+++ b/src/H5EA.c
@@ -148,7 +148,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array info")
/* Lock the array header into memory */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, ctx_udata, H5AC_WRITE)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, ea_addr, ctx_udata, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
/* Point extensible array wrapper at header and bump it's ref count */
@@ -168,7 +168,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
CATCH
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
if(!ret_value)
if(ea && H5EA_close(ea, dxpl_id) < 0)
@@ -209,7 +209,7 @@ H5EA_open(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr, void *ctx_udata))
#ifdef QAK
HDfprintf(stderr, "%s: ea_addr = %a\n", FUNC, ea_addr);
#endif /* QAK */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, ctx_udata, H5AC_READ)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, ea_addr, ctx_udata, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header, address = %llu", (unsigned long long)ea_addr)
/* Check for pending array deletion */
@@ -237,7 +237,7 @@ HDfprintf(stderr, "%s: ea_addr = %a\n", FUNC, ea_addr);
CATCH
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
if(!ret_value)
if(ea && H5EA_close(ea, dxpl_id) < 0)
@@ -1048,7 +1048,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Lock the array header into memory */
/* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(ea->f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, NULL, H5AC_WRITE)))
+ if(NULL == (hdr = H5EA__hdr_protect(ea->f, dxpl_id, ea_addr, NULL, H5AC_WRITE)))
H5E_THROW(H5E_CANTLOAD, "unable to load extensible array header")
/* Set the shared array header's file context for this operation */
@@ -1112,7 +1112,7 @@ H5EA_delete(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr, void *ctx_udata))
#ifdef QAK
HDfprintf(stderr, "%s: ea_addr = %a\n", FUNC, ea_addr);
#endif /* QAK */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, ctx_udata, H5AC_WRITE)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, ea_addr, ctx_udata, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu", (unsigned long long)ea_addr)
/* Check for files using shared array header */
@@ -1131,7 +1131,7 @@ HDfprintf(stderr, "%s: ea_addr = %a\n", FUNC, ea_addr);
CATCH
/* Unprotect the header, if an error occurred */
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PRIV) /* end H5EA_delete() */
diff --git a/src/H5EAcache.c b/src/H5EAcache.c
index 1d40283..57d69a4 100644
--- a/src/H5EAcache.c
+++ b/src/H5EAcache.c
@@ -43,7 +43,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5EApkg.h" /* Extensible Arrays */
#include "H5MFprivate.h" /* File memory management */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
#include "H5WBprivate.h" /* Wrapped Buffers */
@@ -577,6 +577,7 @@ H5EA__cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
uint32_t stored_chksum; /* Stored metadata checksum value */
uint32_t computed_chksum; /* Computed metadata checksum value */
haddr_t arr_addr; /* Address of array header in the file */
+ size_t u; /* Local index variable */
/* Sanity check */
HDassert(f);
@@ -638,8 +639,6 @@ H5EA__cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
/* Decode data block addresses in index block */
if(iblock->ndblk_addrs > 0) {
- size_t u; /* Local index variable */
-
/* Decode addresses of data blocks in index block */
for(u = 0; u < iblock->ndblk_addrs; u++)
H5F_addr_decode(f, &p, &iblock->dblk_addrs[u]);
@@ -647,8 +646,6 @@ H5EA__cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
/* Decode super block addresses in index block */
if(iblock->nsblk_addrs > 0) {
- size_t u; /* Local index variable */
-
/* Decode addresses of super blocks in index block */
for(u = 0; u < iblock->nsblk_addrs; u++)
H5F_addr_decode(f, &p, &iblock->sblk_addrs[u]);
@@ -872,11 +869,7 @@ H5EA__cache_iblock_notify(H5AC_notify_action_t action, H5EA_iblock_t *iblock))
break;
default:
-#ifdef NDEBUG
H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
} /* end switch */
CATCH
@@ -1300,11 +1293,7 @@ H5EA__cache_sblock_notify(H5AC_notify_action_t action, H5EA_sblock_t *sblock))
break;
default:
-#ifdef NDEBUG
H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
} /* end switch */
CATCH
@@ -1662,11 +1651,7 @@ H5EA__cache_dblock_notify(H5AC_notify_action_t action, H5EA_dblock_t *dblock))
break;
default:
-#ifdef NDEBUG
H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
} /* end switch */
CATCH
@@ -1791,9 +1776,6 @@ H5EA__cache_dblk_page_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(udata && udata->hdr && udata->parent);
-#ifdef QAK
-HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
-#endif /* QAK */
/* Allocate the extensible array data block page */
if(NULL == (dblk_page = H5EA__dblk_page_alloc(udata->hdr, udata->parent)))
@@ -2014,11 +1996,7 @@ H5EA__cache_dblk_page_notify(H5AC_notify_action_t action, H5EA_dblk_page_t *dblk
break;
default:
-#ifdef NDEBUG
H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
} /* end switch */
CATCH
diff --git a/src/H5EAdbg.c b/src/H5EAdbg.c
index b9a5bad..60b9ecd 100644
--- a/src/H5EAdbg.c
+++ b/src/H5EAdbg.c
@@ -119,7 +119,7 @@ H5EA__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
} /* end if */
/* Load the extensible array header */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
/* Print opening message */
@@ -171,7 +171,7 @@ H5EA__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
CATCH
if(dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_debug() */
@@ -196,9 +196,9 @@ H5EA__iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, FILE *stream, i
int fwidth, const H5EA_class_t *cls, haddr_t hdr_addr, haddr_t obj_addr))
/* Local variables */
- H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
- H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
- void *dbg_ctx = NULL; /* Extensible array context */
+ H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
+ H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+ void *dbg_ctx = NULL; /* Extensible array context */
/* Check arguments */
HDassert(f);
@@ -218,7 +218,7 @@ H5EA__iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, FILE *stream, i
} /* end if */
/* Load the extensible array header */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
/* Sanity check */
@@ -296,7 +296,7 @@ CATCH
H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
if(iblock && H5EA__iblock_unprotect(iblock, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__iblock_debug() */
@@ -321,9 +321,9 @@ H5EA__sblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
int fwidth, const H5EA_class_t *cls, haddr_t hdr_addr, unsigned sblk_idx, haddr_t obj_addr))
/* Local variables */
- H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
- H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
- void *dbg_ctx = NULL; /* Extensible array context */
+ H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
+ H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
+ void *dbg_ctx = NULL; /* Extensible array context */
/* Check arguments */
HDassert(f);
@@ -343,7 +343,7 @@ H5EA__sblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
} /* end if */
/* Load the extensible array header */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
/* Protect super block */
@@ -388,7 +388,7 @@ CATCH
H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
if(sblock && H5EA__sblock_unprotect(sblock, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__sblock_debug() */
@@ -415,7 +415,7 @@ H5EA__dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
/* Local variables */
H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
- void *dbg_ctx = NULL; /* Extensible array context */
+ void *dbg_ctx = NULL; /* Extensible array context */
size_t u; /* Local index variable */
/* Check arguments */
@@ -437,7 +437,7 @@ H5EA__dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
} /* end if */
/* Load the extensible array header */
- if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5EA__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
/* Protect data block */
@@ -471,7 +471,7 @@ CATCH
H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
if(dblock && H5EA__dblock_unprotect(dblock, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5EA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__dblock_debug() */
diff --git a/src/H5EAhdr.c b/src/H5EAhdr.c
index d5f3538..136cf1e 100644
--- a/src/H5EAhdr.c
+++ b/src/H5EAhdr.c
@@ -612,6 +612,70 @@ END_FUNC(PKG) /* end H5EA__hdr_modified() */
/*-------------------------------------------------------------------------
+ * Function: H5EA__hdr_protect
+ *
+ * Purpose: Convenience wrapper around protecting extensible array header
+ *
+ * Return: Non-NULL pointer to index block on success/NULL on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jul 31 2013
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PKG, ERR,
+H5EA_hdr_t *, NULL, NULL,
+H5EA__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr, void *ctx_udata,
+ H5AC_protect_t rw))
+
+ /* Local variables */
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(H5F_addr_defined(ea_addr));
+
+ /* Protect the header */
+ if(NULL == (ret_value = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, ctx_udata, rw)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu", (unsigned long long)ea_addr)
+
+CATCH
+
+END_FUNC(PKG) /* end H5EA__hdr_protect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5EA__hdr_unprotect
+ *
+ * Purpose: Convenience wrapper around unprotecting extensible array header
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Aug 1 2013
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PKG, ERR,
+herr_t, SUCCEED, FAIL,
+H5EA__hdr_unprotect(H5EA_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags))
+
+ /* Local variables */
+
+ /* Sanity check */
+ HDassert(hdr);
+
+ /* Unprotect the header */
+ if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array hdr, address = %llu", (unsigned long long)hdr->addr)
+
+CATCH
+
+END_FUNC(PKG) /* end H5EA__hdr_unprotect() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5EA__hdr_delete
*
* Purpose: Delete an extensible array, starting with the header
@@ -665,7 +729,7 @@ HDfprintf(stderr, "%s: hdr->idx_blk_addr = %a\n", FUNC, hdr->idx_blk_addr);
CATCH
/* Unprotect the header, deleting it if an error hasn't occurred */
- if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ if(H5EA__hdr_unprotect(hdr, dxpl_id, cache_flags) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_delete() */
diff --git a/src/H5EApkg.h b/src/H5EApkg.h
index fc15e72..d89a35e 100644
--- a/src/H5EApkg.h
+++ b/src/H5EApkg.h
@@ -302,11 +302,12 @@ struct H5EA_t {
/* Metadata cache callback user data types */
-/* Info needed for loading data block page */
-typedef struct H5EA_dblk_page_cache_ud_t {
+/* Info needed for loading super block */
+typedef struct H5EA_sblock_cache_ud_t {
H5EA_hdr_t *hdr; /* Shared extensible array information */
- H5EA_sblock_t *parent; /* Pointer to parent object for data block page (super block) */
-} H5EA_dblk_page_cache_ud_t;
+ H5EA_iblock_t *parent; /* Pointer to parent object for super block (index block) */
+ unsigned sblk_idx; /* Index of super block */
+} H5EA_sblock_cache_ud_t;
/* Info needed for loading data block */
typedef struct H5EA_dblock_cache_ud_t {
@@ -315,12 +316,11 @@ typedef struct H5EA_dblock_cache_ud_t {
size_t nelmts; /* Number of elements in data block */
} H5EA_dblock_cache_ud_t;
-/* Info needed for loading super block */
-typedef struct H5EA_sblock_cache_ud_t {
+/* Info needed for loading data block page */
+typedef struct H5EA_dblk_page_cache_ud_t {
H5EA_hdr_t *hdr; /* Shared extensible array information */
- H5EA_iblock_t *parent; /* Pointer to parent object for super block (index block) */
- unsigned sblk_idx; /* Index of super block */
-} H5EA_sblock_cache_ud_t;
+ H5EA_sblock_t *parent; /* Pointer to parent object for data block page (super block) */
+} H5EA_dblk_page_cache_ud_t;
#ifdef H5EA_TESTING
typedef struct H5EA__ctx_cb_t {
@@ -377,6 +377,9 @@ H5_DLL herr_t H5EA__hdr_decr(H5EA_hdr_t *hdr);
H5_DLL herr_t H5EA__hdr_fuse_incr(H5EA_hdr_t *hdr);
H5_DLL size_t H5EA__hdr_fuse_decr(H5EA_hdr_t *hdr);
H5_DLL herr_t H5EA__hdr_modified(H5EA_hdr_t *hdr);
+H5_DLL H5EA_hdr_t *H5EA__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr,
+ void *ctx_udata, H5AC_protect_t rw);
+H5_DLL herr_t H5EA__hdr_unprotect(H5EA_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags);
H5_DLL herr_t H5EA__hdr_delete(H5EA_hdr_t *hdr, hid_t dxpl_id);
H5_DLL herr_t H5EA__hdr_dest(H5EA_hdr_t *hdr);
diff --git a/src/H5F.c b/src/H5F.c
index 357897e..3cdb604 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -484,15 +484,15 @@ H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
/* Check/fix arguments */
if(!filename || !*filename)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
/* In this routine, we only accept the following flags:
- * H5F_ACC_EXCL, H5F_ACC_TRUNC and H5F_ACC_DEBUG
+ * H5F_ACC_EXCL and H5F_ACC_TRUNC
*/
- if(flags & ~(H5F_ACC_EXCL | H5F_ACC_TRUNC | H5F_ACC_DEBUG))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
+ if(flags & ~(H5F_ACC_EXCL | H5F_ACC_TRUNC))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
/* The H5F_ACC_EXCL and H5F_ACC_TRUNC flags are mutually exclusive */
if((flags & H5F_ACC_EXCL) && (flags & H5F_ACC_TRUNC))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
/* Check file creation property list */
if(H5P_DEFAULT == fcpl_id)
@@ -1380,7 +1380,7 @@ H5Fget_info2(hid_t obj_id, H5F_info2_t *finfo)
HDmemset(finfo, 0, sizeof(*finfo));
/* Get the size of the superblock and any superblock extensions */
- if(H5F_super_size(f, H5AC_ind_dxpl_id, &finfo->super.super_size, &finfo->super.super_ext_size) < 0)
+ if(H5F__super_size(f, H5AC_ind_dxpl_id, &finfo->super.super_size, &finfo->super.super_ext_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock sizes")
/* Get the size of any persistent free space */
diff --git a/src/H5FA.c b/src/H5FA.c
index 128999a..1acb10b 100644
--- a/src/H5FA.c
+++ b/src/H5FA.c
@@ -141,7 +141,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array info")
/* Lock the array header into memory */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, ctx_udata, H5AC_WRITE)))
+ if(NULL == (hdr = H5FA__hdr_protect(f, dxpl_id, fa_addr, ctx_udata, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
/* Point fixed array wrapper at header and bump it's ref count */
@@ -161,7 +161,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
CATCH
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5FA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
if(!ret_value)
if(fa && H5FA_close(fa, dxpl_id) < 0)
@@ -201,7 +201,7 @@ H5FA_open(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr, void *ctx_udata))
#ifdef H5FA_DEBUG
HDfprintf(stderr, "%s: fa_addr = %a\n", FUNC, fa_addr);
#endif /* H5FA_DEBUG */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, ctx_udata, H5AC_READ)))
+ if(NULL == (hdr = H5FA__hdr_protect(f, dxpl_id, fa_addr, ctx_udata, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header, address = %llu", (unsigned long long)fa_addr)
/* Check for pending array deletion */
@@ -229,7 +229,7 @@ HDfprintf(stderr, "%s: fa_addr = %a\n", FUNC, fa_addr);
CATCH
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5FA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
if(!ret_value)
if(fa && H5FA_close(fa, dxpl_id) < 0)
@@ -351,7 +351,7 @@ HDfprintf(stderr, "%s: Index %Hu\n", FUNC, idx);
HDfprintf(stderr, "%s: fixed array data block address not defined!\n", FUNC, idx);
#endif /* H5FA_DEBUG */
/* Create the data block */
- hdr->dblk_addr = H5FA__dblock_create(hdr, dxpl_id, &hdr_dirty, hdr->cparam.nelmts);
+ hdr->dblk_addr = H5FA__dblock_create(hdr, dxpl_id, &hdr_dirty);
if(!H5F_addr_defined(hdr->dblk_addr))
H5E_THROW(H5E_CANTCREATE, "unable to create fixed array data block")
} /* end if */
@@ -359,7 +359,7 @@ HDfprintf(stderr, "%s: fixed array data block address not defined!\n", FUNC, idx
HDassert(idx < hdr->cparam.nelmts);
/* Protect data block */
- if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, hdr->dblk_addr, hdr->stats.nelmts, H5AC_WRITE)))
+ if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, hdr->dblk_addr, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu", (unsigned long long)hdr->dblk_addr)
/* Check for paging data block */
@@ -467,7 +467,7 @@ HDfprintf(stderr, "%s: Index %Hu\n", FUNC, idx);
else {
/* Get the data block */
HDassert(H5F_addr_defined(hdr->dblk_addr));
- if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, hdr->dblk_addr, hdr->stats.nelmts, H5AC_READ)))
+ if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, hdr->dblk_addr, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu", (unsigned long long)hdr->dblk_addr)
/* Check for paged data block */
@@ -592,7 +592,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Lock the array header into memory */
/* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(fa->f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, NULL, H5AC_WRITE)))
+ if(NULL == (hdr = H5FA__hdr_protect(fa->f, dxpl_id, fa_addr, NULL, H5AC_WRITE)))
H5E_THROW(H5E_CANTLOAD, "unable to load fixed array header")
/* Set the shared array header's file context for this operation */
@@ -655,7 +655,7 @@ H5FA_delete(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr, void *ctx_udata))
#ifdef H5FA_DEBUG
HDfprintf(stderr, "%s: fa_addr = %a\n", FUNC, fa_addr);
#endif /* H5FA_DEBUG */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, ctx_udata, H5AC_WRITE)))
+ if(NULL == (hdr = H5FA__hdr_protect(f, dxpl_id, fa_addr, ctx_udata, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu", (unsigned long long)fa_addr)
/* Check for files using shared array header */
@@ -674,7 +674,7 @@ HDfprintf(stderr, "%s: fa_addr = %a\n", FUNC, fa_addr);
CATCH
/* Unprotect the header, if an error occurred */
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5FA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PRIV) /* end H5FA_delete() */
diff --git a/src/H5FAcache.c b/src/H5FAcache.c
index cb156db..2f07cd6 100644
--- a/src/H5FAcache.c
+++ b/src/H5FAcache.c
@@ -16,6 +16,8 @@
/*-------------------------------------------------------------------------
*
* Created: H5FAcache.c
+ * Jul 2 2009
+ * Quincey Koziol <koziol@hdfgroup.org>
*
* Purpose: Implement fixed array metadata cache methods.
*
@@ -41,7 +43,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5FApkg.h" /* Fixed Arrays */
#include "H5MFprivate.h" /* File memory management */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
#include "H5WBprivate.h" /* Wrapped Buffers */
@@ -517,10 +519,10 @@ H5FA__cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
/* Sanity check */
HDassert(f);
HDassert(H5F_addr_defined(addr));
- HDassert(udata && udata->hdr && udata->nelmts > 0);
+ HDassert(udata && udata->hdr);
/* Allocate the fixed array data block */
- if(NULL == (dblock = H5FA__dblock_alloc(udata->hdr, udata->nelmts)))
+ if(NULL == (dblock = H5FA__dblock_alloc(udata->hdr)))
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
/* Set the fixed array data block's information */
@@ -575,9 +577,9 @@ H5FA__cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
if(!dblock->npages) {
/* Decode elements in data block */
/* Convert from raw elements on disk into native elements in memory */
- if((udata->hdr->cparam.cls->decode)(p, dblock->elmts, (size_t)udata->nelmts, udata->hdr->cb_ctx) < 0)
+ if((udata->hdr->cparam.cls->decode)(p, dblock->elmts, (size_t)udata->hdr->stats.nelmts, udata->hdr->cb_ctx) < 0)
H5E_THROW(H5E_CANTDECODE, "can't decode fixed array data elements")
- p += (udata->nelmts * udata->hdr->cparam.raw_elmt_size);
+ p += (udata->hdr->stats.nelmts * udata->hdr->cparam.raw_elmt_size);
} /* end if */
/* Sanity check */
@@ -868,9 +870,6 @@ H5FA__cache_dblk_page_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(udata && udata->hdr && udata->nelmts > 0);
-#ifdef QAK
-HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
-#endif /* QAK */
/* Allocate the fixed array data block page */
if(NULL == (dblk_page = H5FA__dblk_page_alloc(udata->hdr, udata->nelmts)))
diff --git a/src/H5FAdbg.c b/src/H5FAdbg.c
index eb5e32e..d5239d3 100644
--- a/src/H5FAdbg.c
+++ b/src/H5FAdbg.c
@@ -117,7 +117,7 @@ H5FA__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
} /* end if */
/* Load the fixed array header */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5FA__hdr_protect(f, dxpl_id, addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
/* Print opening message */
@@ -150,7 +150,7 @@ H5FA__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
CATCH
if(dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FARRAY_HDR, addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5FA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PKG) /* end H5FA__hdr_debug() */
@@ -198,11 +198,11 @@ H5FA__dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
} /* end if */
/* Load the fixed array header */
- if(NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, hdr_addr, dbg_ctx, H5AC_READ)))
+ if(NULL == (hdr = H5FA__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
/* Protect data block */
- if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, addr, hdr->cparam.nelmts, H5AC_READ)))
+ if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, addr, H5AC_READ)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu", (unsigned long long)addr)
/* Print opening message */
@@ -280,7 +280,7 @@ CATCH
H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
if(dblock && H5FA__dblock_unprotect(dblock, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FARRAY_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ if(hdr && H5FA__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PKG) /* end H5FA__dblock_debug() */
diff --git a/src/H5FAdblock.c b/src/H5FAdblock.c
index 80e2159..e6e0e74 100644
--- a/src/H5FAdblock.c
+++ b/src/H5FAdblock.c
@@ -102,14 +102,14 @@ H5FL_BLK_DEFINE(fa_page_init);
*/
BEGIN_FUNC(PKG, ERR,
H5FA_dblock_t *, NULL, NULL,
-H5FA__dblock_alloc(H5FA_hdr_t *hdr, hsize_t nelmts))
+H5FA__dblock_alloc(H5FA_hdr_t *hdr))
/* Local variables */
H5FA_dblock_t *dblock = NULL; /* fixed array data block */
/* Check arguments */
HDassert(hdr);
- HDassert(nelmts > 0);
+ HDassert(hdr->cparam.nelmts > 0);
/* Allocate memory for the data block */
if(NULL == (dblock = H5FL_CALLOC(H5FA_dblock_t)))
@@ -124,12 +124,12 @@ H5FA__dblock_alloc(H5FA_hdr_t *hdr, hsize_t nelmts))
dblock->dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
/* Check if this data block should be paged */
- if(nelmts > dblock->dblk_page_nelmts) {
+ if(hdr->cparam.nelmts > dblock->dblk_page_nelmts) {
/* Compute number of pages */
- hsize_t npages = ((nelmts + dblock->dblk_page_nelmts) - 1) / dblock->dblk_page_nelmts;
+ hsize_t npages = ((hdr->cparam.nelmts + dblock->dblk_page_nelmts) - 1) / dblock->dblk_page_nelmts;
/* Safely assign the number of pages */
- H5_ASSIGN_OVERFLOW(/* To: */ dblock->npages, /* From: */ npages, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(dblock->npages, size_t, npages, hsize_t);
/* Sanity check that we have at least 1 page */
HDassert(dblock->npages > 0);
@@ -146,10 +146,10 @@ H5FA__dblock_alloc(H5FA_hdr_t *hdr, hsize_t nelmts))
dblock->dblk_page_size = (dblock->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5FA_SIZEOF_CHKSUM;
/* Compute the # of elements on last page */
- if(0 == nelmts % dblock->dblk_page_nelmts)
+ if(0 == hdr->cparam.nelmts % dblock->dblk_page_nelmts)
dblock->last_page_nelmts = dblock->dblk_page_nelmts;
else
- dblock->last_page_nelmts = (size_t)(nelmts % dblock->dblk_page_nelmts);
+ dblock->last_page_nelmts = (size_t)(hdr->cparam.nelmts % dblock->dblk_page_nelmts);
} /* end if */
else {
hsize_t dblk_size = hdr->cparam.nelmts * hdr->cparam.cls->nat_elmt_size;
@@ -186,24 +186,22 @@ END_FUNC(PKG) /* end H5FA__dblock_alloc() */
*/
BEGIN_FUNC(PKG, ERR,
haddr_t, HADDR_UNDEF, HADDR_UNDEF,
-H5FA__dblock_create(H5FA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty,
- hsize_t nelmts))
+H5FA__dblock_create(H5FA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty))
/* Local variables */
H5FA_dblock_t *dblock = NULL; /* fixed array data block */
haddr_t dblock_addr; /* fixed array data block address */
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: Called, hdr->stats.nelmts = %Zu, nelmts = %Zu\n", FUNC, hdr->stats.nelmts, nelmts);
+HDfprintf(stderr, "%s: Called, hdr->stats.nelmts = %Zu, nelmts = %Zu\n", FUNC, hdr->stats.nelmts, hdr->cparam.nelmts);
#endif /* H5FA_DEBUG */
/* Sanity check */
HDassert(hdr);
HDassert(hdr_dirty);
- HDassert(nelmts > 0);
/* Allocate the data block */
- if(NULL == (dblock = H5FA__dblock_alloc(hdr, nelmts)))
+ if(NULL == (dblock = H5FA__dblock_alloc(hdr)))
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
/* Set size of data block on disk */
@@ -265,7 +263,7 @@ END_FUNC(PKG) /* end H5FA__dblock_create() */
BEGIN_FUNC(PKG, ERR,
H5FA_dblock_t *, NULL, NULL,
H5FA__dblock_protect(H5FA_hdr_t *hdr, hid_t dxpl_id, haddr_t dblk_addr,
- hsize_t dblk_nelmts, H5AC_protect_t rw))
+ H5AC_protect_t rw))
/* Local variables */
H5FA_dblock_cache_ud_t udata; /* Information needed for loading data block */
@@ -277,11 +275,9 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Sanity check */
HDassert(hdr);
HDassert(H5F_addr_defined(dblk_addr));
- HDassert(dblk_nelmts);
/* Set up user data */
udata.hdr = hdr;
- udata.nelmts = dblk_nelmts;
/* Protect the data block */
if(NULL == (ret_value = (H5FA_dblock_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_FARRAY_DBLOCK, dblk_addr, &udata, rw)))
@@ -340,8 +336,7 @@ END_FUNC(PKG) /* end H5FA__dblock_unprotect() */
*/
BEGIN_FUNC(PKG, ERR,
herr_t, SUCCEED, FAIL,
-H5FA__dblock_delete(H5FA_hdr_t *hdr, hid_t dxpl_id, haddr_t dblk_addr,
- hsize_t dblk_nelmts))
+H5FA__dblock_delete(H5FA_hdr_t *hdr, hid_t dxpl_id, haddr_t dblk_addr))
/* Local variables */
H5FA_dblock_t *dblock = NULL; /* Pointer to data block */
@@ -353,10 +348,9 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Sanity check */
HDassert(hdr);
HDassert(H5F_addr_defined(dblk_addr));
- HDassert(dblk_nelmts > 0);
/* Protect data block */
- if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, dblk_addr, dblk_nelmts, H5AC_WRITE)))
+ if(NULL == (dblock = H5FA__dblock_protect(hdr, dxpl_id, dblk_addr, H5AC_WRITE)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu", (unsigned long long)dblk_addr)
/* Check if data block is paged */
diff --git a/src/H5FAhdr.c b/src/H5FAhdr.c
index 23a554a..5970ff0 100644
--- a/src/H5FAhdr.c
+++ b/src/H5FAhdr.c
@@ -393,6 +393,70 @@ END_FUNC(PKG) /* end H5FA__hdr_modified() */
/*-------------------------------------------------------------------------
+ * Function: H5FA__hdr_protect
+ *
+ * Purpose: Convenience wrapper around protecting fixed array header
+ *
+ * Return: Non-NULL pointer to index block on success/NULL on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Aug 12 2013
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PKG, ERR,
+H5FA_hdr_t *, NULL, NULL,
+H5FA__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr, void *ctx_udata,
+ H5AC_protect_t rw))
+
+ /* Local variables */
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fa_addr));
+
+ /* Protect the header */
+ if(NULL == (ret_value = (H5FA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_FARRAY_HDR, fa_addr, ctx_udata, rw)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu", (unsigned long long)fa_addr)
+
+CATCH
+
+END_FUNC(PKG) /* end H5FA__hdr_protect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__hdr_unprotect
+ *
+ * Purpose: Convenience wrapper around unprotecting fixed array header
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Aug 12 2013
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PKG, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA__hdr_unprotect(H5FA_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags))
+
+ /* Local variables */
+
+ /* Sanity check */
+ HDassert(hdr);
+
+ /* Unprotect the header */
+ if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_FARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array hdr, address = %llu", (unsigned long long)hdr->addr)
+
+CATCH
+
+END_FUNC(PKG) /* end H5EA__hdr_unprotect() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FA__hdr_delete
*
* Purpose: Delete a fixed array, starting with the header
@@ -436,7 +500,7 @@ HDfprintf(stderr, "%s: hdr->dblk_addr = %a\n", FUNC, hdr->dblk_addr);
#endif /* H5FA_DEBUG */
/* Delete Fixed Array Data block */
- if(H5FA__dblock_delete(hdr, dxpl_id, hdr->dblk_addr, hdr->cparam.nelmts) < 0)
+ if(H5FA__dblock_delete(hdr, dxpl_id, hdr->dblk_addr) < 0)
H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array data block")
} /* end if */
diff --git a/src/H5FApkg.h b/src/H5FApkg.h
index 20d30c3..7101f0b 100644
--- a/src/H5FApkg.h
+++ b/src/H5FApkg.h
@@ -199,13 +199,12 @@ struct H5FA_t {
/* Info needed for loading data block */
typedef struct H5FA_dblock_cache_ud_t {
H5FA_hdr_t *hdr; /* Shared fixed array information */
- hsize_t nelmts; /* Number of elements in data block */
} H5FA_dblock_cache_ud_t;
/* Info needed for loading data block page */
typedef struct H5FA_dblk_page_cache_ud_t {
H5FA_hdr_t *hdr; /* Shared fixed array information */
- size_t nelmts; /* Number of elements in data block page */
+ size_t nelmts; /* Number of elements in data block page */
} H5FA_dblk_page_cache_ud_t;
@@ -244,19 +243,22 @@ H5_DLL herr_t H5FA__hdr_decr(H5FA_hdr_t *hdr);
H5_DLL herr_t H5FA__hdr_fuse_incr(H5FA_hdr_t *hdr);
H5_DLL size_t H5FA__hdr_fuse_decr(H5FA_hdr_t *hdr);
H5_DLL herr_t H5FA__hdr_modified(H5FA_hdr_t *hdr);
+H5_DLL H5FA_hdr_t *H5FA__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr,
+ void *ctx_udata, H5AC_protect_t rw);
+H5_DLL herr_t H5FA__hdr_unprotect(H5FA_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags);
H5_DLL herr_t H5FA__hdr_delete(H5FA_hdr_t *hdr, hid_t dxpl_id);
H5_DLL herr_t H5FA__hdr_dest(H5FA_hdr_t *hdr);
/* Data block routines */
-H5_DLL H5FA_dblock_t *H5FA__dblock_alloc(H5FA_hdr_t *hdr, hsize_t nelmts);
-H5_DLL haddr_t H5FA__dblock_create(H5FA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty, hsize_t nelmts);
+H5_DLL H5FA_dblock_t *H5FA__dblock_alloc(H5FA_hdr_t *hdr);
+H5_DLL haddr_t H5FA__dblock_create(H5FA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty);
H5_DLL unsigned H5FA__dblock_sblk_idx(const H5FA_hdr_t *hdr, hsize_t idx);
H5_DLL H5FA_dblock_t *H5FA__dblock_protect(H5FA_hdr_t *hdr, hid_t dxpl_id,
- haddr_t dblk_addr, hsize_t dblk_nelmts, H5AC_protect_t rw);
+ haddr_t dblk_addr, H5AC_protect_t rw);
H5_DLL herr_t H5FA__dblock_unprotect(H5FA_dblock_t *dblock, hid_t dxpl_id,
unsigned cache_flags);
H5_DLL herr_t H5FA__dblock_delete(H5FA_hdr_t *hdr, hid_t dxpl_id,
- haddr_t dblk_addr, hsize_t dblk_nelmts);
+ haddr_t dblk_addr);
H5_DLL herr_t H5FA__dblock_dest(H5FA_dblock_t *dblock);
/* Data block page routines */
diff --git a/src/H5FD.c b/src/H5FD.c
index fc6937e..c4ee11f 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -540,11 +540,11 @@ H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf)
done:
FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5FD_sb_encode() */
/*-------------------------------------------------------------------------
- * Function: H5FD_sb_decode
+ * Function: H5FD__sb_decode
*
* Purpose: Decodes the driver information block.
*
@@ -556,20 +556,61 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf)
+static herr_t
+H5FD__sb_decode(H5FD_t *file, const char *name, const uint8_t *buf)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_STATIC
HDassert(file && file->cls);
+
+ /* Decode driver information */
if(file->cls->sb_decode && (file->cls->sb_decode)(file, name, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver sb_decode request failed")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_sb_decode() */
+} /* end H5FD__sb_decode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FD_sb_load
+ *
+ * Purpose: Validate and decode the driver information block.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Friday, July 19, 2013
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_sb_load(H5FD_t *file, const char *name, const uint8_t *buf)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(file && file->cls);
+
+ /* Check if driver matches driver information saved. Unfortunately, we can't push this
+ * function to each specific driver because we're checking if the driver is correct.
+ */
+ if(!HDstrncmp(name, "NCSAfami", (size_t)8) && HDstrcmp(file->cls->name, "family"))
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "family driver should be used")
+ if(!HDstrncmp(name, "NCSAmult", (size_t)8) && HDstrcmp(file->cls->name, "multi"))
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "multi driver should be used")
+
+ /* Decode driver information */
+ if(H5FD__sb_decode(file, name, buf) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTDECODE, FAIL, "unable to decode driver information")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_sb_load() */
/*-------------------------------------------------------------------------
@@ -1840,12 +1881,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FDtruncate(H5FD_t *file, hid_t dxpl_id, unsigned closing)
+H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*xiIu", file, dxpl_id, closing);
+ H5TRACE3("e", "*xib", file, dxpl_id, closing);
/* Check args */
if(!file || !file->cls)
@@ -1879,7 +1920,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FD_truncate(H5FD_t *file, hid_t dxpl_id, unsigned closing)
+H5FD_truncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index ba4270e..f9bda00 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -1300,7 +1300,7 @@ H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, had
size_t new_eof;
/* Determine new size of memory buffer */
- H5_ASSIGN_OVERFLOW(new_eof, file->increment * ((addr + size) / file->increment), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(new_eof, size_t, file->increment * ((addr + size) / file->increment), hsize_t);
if((addr + size) % file->increment)
new_eof += file->increment;
@@ -1469,7 +1469,7 @@ H5FD_core_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t closing)
new_eof = file->eoa;
else { /* set eof to smallest multiple of increment that exceeds eoa */
/* Determine new size of memory buffer */
- H5_ASSIGN_OVERFLOW(new_eof, file->increment * (file->eoa / file->increment), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(new_eof, size_t, file->increment * (file->eoa / file->increment), hsize_t);
if(file->eoa % file->increment)
new_eof += file->increment;
} /* end else */
diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c
index 7507a2e..c2b0660 100644
--- a/src/H5FDdirect.c
+++ b/src/H5FDdirect.c
@@ -515,7 +515,7 @@ H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxadd
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, NULL, "bad VFL driver info")
file->fd = fd;
- H5_ASSIGN_OVERFLOW(file->eof,sb.st_size,h5_stat_size_t,haddr_t);
+ H5_CHECKED_ASSIGN(file->eof, haddr_t, sb.st_size, h5_stat_size_t);
file->pos = HADDR_UNDEF;
file->op = OP_UNKNOWN;
#ifdef H5_HAVE_WIN32_API
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c
index ad703ef..8660f1f 100644
--- a/src/H5FDfamily.c
+++ b/src/H5FDfamily.c
@@ -587,26 +587,25 @@ H5FD_family_sb_decode(H5FD_t *_file, const char UNUSED *name, const unsigned cha
* h5repart is being used to change member file size. h5repart will open
* files for read and write. When the files are closed, metadata will be
* flushed to the files and updated to this new size */
- if(file->mem_newsize) {
+ if(file->mem_newsize)
file->memb_size = file->pmem_size = file->mem_newsize;
- HGOTO_DONE(ret_value)
- } /* end if */
-
- /* Default - use the saved member size */
- if(file->pmem_size == H5F_FAMILY_DEFAULT)
- file->pmem_size = msize;
+ else {
+ /* Default - use the saved member size */
+ if(file->pmem_size == H5F_FAMILY_DEFAULT)
+ file->pmem_size = msize;
- /* Check if member size from file access property is correct */
- if(msize != file->pmem_size) {
- char err_msg[128];
+ /* Check if member size from file access property is correct */
+ if(msize != file->pmem_size) {
+ char err_msg[128];
- HDsnprintf(err_msg, sizeof(err_msg), "Family member size should be %lu. But the size from file access property is %lu", (unsigned long)msize, (unsigned long)file->pmem_size);
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, err_msg)
- } /* end if */
+ HDsnprintf(err_msg, sizeof(err_msg), "Family member size should be %lu. But the size from file access property is %lu", (unsigned long)msize, (unsigned long)file->pmem_size);
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, err_msg)
+ } /* end if */
- /* Update member file size to the size saved in the superblock.
- * That's the size intended to be. */
- file->memb_size = msize;
+ /* Update member file size to the size saved in the superblock.
+ * That's the size intended to be. */
+ file->memb_size = msize;
+ } /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -686,14 +685,11 @@ H5FD_family_open(const char *name, unsigned flags, hid_t fapl_id,
/* Check for new family file size. It's used by h5repart only. */
if(H5P_exist_plist(plist, H5F_ACS_FAMILY_NEWSIZE_NAME) > 0) {
- hsize_t fam_newsize = 0; /* New member size, when repartitioning */
-
/* Get the new family file size */
- if(H5P_get(plist, H5F_ACS_FAMILY_NEWSIZE_NAME, &fam_newsize) < 0)
+ if(H5P_get(plist, H5F_ACS_FAMILY_NEWSIZE_NAME, &file->mem_newsize) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get new family member size")
- /* Store information for later */
- file->mem_newsize = fam_newsize; /* New member size passed in through property */
+ /* Set flag for later */
file->repart_members = TRUE;
} /* end if */
@@ -1170,7 +1166,7 @@ H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, si
/* Read from each member */
while(size > 0) {
- H5_ASSIGN_OVERFLOW(u,addr /file->memb_size,hsize_t,unsigned);
+ H5_CHECKED_ASSIGN(u, unsigned, addr / file->memb_size, hsize_t);
sub = addr % file->memb_size;
@@ -1239,7 +1235,7 @@ H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, s
/* Write to each member */
while (size>0) {
- H5_ASSIGN_OVERFLOW(u,addr /file->memb_size,hsize_t,unsigned);
+ H5_CHECKED_ASSIGN(u, unsigned, addr / file->memb_size, hsize_t);
sub = addr % file->memb_size;
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index a2284dd..cc0caa4 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -571,7 +571,7 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
file->fd = fd;
- H5_ASSIGN_OVERFLOW(file->eof, sb.st_size, h5_stat_size_t, haddr_t);
+ H5_CHECKED_ASSIGN(file->eof, haddr_t, sb.st_size, h5_stat_size_t);
file->pos = HADDR_UNDEF;
file->op = OP_UNKNOWN;
#ifdef H5_HAVE_WIN32_API
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index b1f094c..bc61374 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -30,18 +30,11 @@
/* Disable certain warnings in PC-Lint: */
/*lint --emacro( {534, 830}, H5P_DEFAULT, H5P_FILE_ACCESS, H5P_DATASET_XFER) */
-/*lint --emacro( {534, 830}, H5F_ACC_DEBUG, H5F_ACC_RDWR) */
/*lint --emacro( {534, 830}, H5FD_MULTI) */
/*lint -esym( 534, H5Eclear2, H5Epush2) */
#include "hdf5.h"
-/*
- * Define H5FD_MULTI_DEBUG if you want the ability to print debugging
- * messages to the standard error stream. Messages are only printed if the
- * file is opened with the H5F_ACC_DEBUG flag.
- */
-#define H5FD_MULTI_DEBUG
#ifndef FALSE
#define FALSE 0
@@ -796,19 +789,6 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
* files at the end.
*/
if (map_changed) {
-#ifdef H5FD_MULTI_DEBUG
- if (file->flags & H5F_ACC_DEBUG) {
- fprintf(stderr, "H5FD_MULTI: member map override\n");
- fprintf(stderr, " old value: ");
- ALL_MEMBERS(mt) {
- fprintf(stderr, "%s%d", mt?", ":"", (int)(file->fa.memb_map[mt]));
- } END_MEMBERS;
- fprintf(stderr, "\n new value: ");
- ALL_MEMBERS(mt) {
- fprintf(stderr, "%s%d", mt?", ":"", (int)(map[mt]));
- } END_MEMBERS;
- }
-#endif
/* Commit map */
ALL_MEMBERS(mt) {
file->fa.memb_map[mt] = map[mt];
@@ -821,11 +801,6 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
} END_MEMBERS;
ALL_MEMBERS(mt) {
if (!in_use[mt] && file->memb[mt]) {
-#ifdef H5FD_MULTI_DEBUG
- if (file->flags & H5F_ACC_DEBUG) {
- fprintf(stderr, "H5FD_MULTI: close member %d\n", (int)mt);
- }
-#endif
(void)H5FDclose(file->memb[mt]);
file->memb[mt] = NULL;
}
@@ -1109,20 +1084,10 @@ H5FD_multi_close(H5FD_t *_file)
/* Close as many members as possible */
ALL_MEMBERS(mt) {
if (file->memb[mt]) {
-#ifdef H5FD_MULTI_DEBUG
- if (file->flags & H5F_ACC_DEBUG) {
- fprintf(stderr, "H5FD_MULTI: closing member %d\n", (int)mt);
- }
-#endif
if (H5FDclose(file->memb[mt])<0) {
-#ifdef H5FD_MULTI_DEBUG
- if (file->flags & H5F_ACC_DEBUG) {
- fprintf(stderr, "H5FD_MULTI: close failed\n");
- }
-#endif
- nerrors++;
+ nerrors++;
} else {
- file->memb[mt] = NULL;
+ file->memb[mt] = NULL;
}
}
} END_MEMBERS;
@@ -1895,18 +1860,10 @@ open_members(H5FD_multi_t *file)
*/
sprintf(tmp, file->fa.memb_name[mt], file->name);
-#ifdef H5FD_MULTI_DEBUG
- if(file->flags & H5F_ACC_DEBUG)
- fprintf(stderr, "H5FD_MULTI: open member %d \"%s\"\n", (int)mt, tmp);
-#endif
H5E_BEGIN_TRY {
file->memb[mt] = H5FDopen(tmp, file->flags, file->fa.memb_fapl[mt], HADDR_UNDEF);
} H5E_END_TRY;
if(!file->memb[mt]) {
-#ifdef H5FD_MULTI_DEBUG
- if(file->flags & H5F_ACC_DEBUG)
- fprintf(stderr, "H5FD_MULTI: open failed for member %d\n", (int)mt);
-#endif
if(!file->fa.relax || (file->flags & H5F_ACC_RDWR))
nerrors++;
}
diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index e98f0f4..0a7fe6c 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -109,7 +109,7 @@ H5_DLL herr_t H5FD_locate_signature(H5FD_t *file, const H5P_genplist_t *dxpl, ha
H5_DLL H5FD_class_t *H5FD_get_class(hid_t id);
H5_DLL hsize_t H5FD_sb_size(H5FD_t *file);
H5_DLL herr_t H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf);
-H5_DLL herr_t H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf);
+H5_DLL herr_t H5FD_sb_load(H5FD_t *file, const char *name, const uint8_t *buf);
H5_DLL void *H5FD_fapl_get(H5FD_t *file);
H5_DLL herr_t H5FD_fapl_open(struct H5P_genplist_t *plist, hid_t driver_id, const void *driver_info);
H5_DLL herr_t H5FD_fapl_close(hid_t driver_id, void *fapl);
@@ -134,7 +134,7 @@ H5_DLL herr_t H5FD_read(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t typ
haddr_t addr, size_t size, void *buf/*out*/);
H5_DLL herr_t H5FD_write(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type,
haddr_t addr, size_t size, const void *buf);
-H5_DLL herr_t H5FD_flush(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
+H5_DLL herr_t H5FD_flush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
H5_DLL herr_t H5FD_truncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
H5_DLL herr_t H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum);
H5_DLL herr_t H5FD_get_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle);
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index 1130789..b938c41 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -358,7 +358,7 @@ H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
file->fd = fd;
- H5_ASSIGN_OVERFLOW(file->eof, sb.st_size, h5_stat_size_t, haddr_t);
+ H5_CHECKED_ASSIGN(file->eof, haddr_t, sb.st_size, h5_stat_size_t);
file->pos = HADDR_UNDEF;
file->op = OP_UNKNOWN;
#ifdef H5_HAVE_WIN32_API
diff --git a/src/H5FS.c b/src/H5FS.c
index 9dcf081..67ec838 100644
--- a/src/H5FS.c
+++ b/src/H5FS.c
@@ -123,7 +123,7 @@ HDfprintf(stderr, "%s: Creating free space manager, nclasses = %Zu\n", FUNC, ncl
/*
* Allocate free space structure
*/
- if(NULL == (fspace = H5FS_new(f, nclasses, classes, cls_init_udata)))
+ if(NULL == (fspace = H5FS__new(f, nclasses, classes, cls_init_udata)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for free space free list")
/* Initialize creation information for free space manager */
@@ -161,7 +161,7 @@ HDfprintf(stderr, "%s: fspace = %p, fspace->addr = %a\n", FUNC, fspace, fspace->
done:
if(!ret_value && fspace)
- if(H5FS_hdr_dest(fspace) < 0)
+ if(H5FS__hdr_dest(fspace) < 0)
HDONE_ERROR(H5E_FSPACE, H5E_CANTFREE, NULL, "unable to destroy free space header")
#ifdef H5FS_DEBUG
@@ -573,7 +573,7 @@ HDfprintf(stderr, "%s: Leaving, ret_value = %d, fspace->rc = %u\n", FUNC, ret_va
/*-------------------------------------------------------------------------
- * Function: H5FS_new
+ * Function: H5FS__new
*
* Purpose: Create new free space manager structure
*
@@ -586,14 +586,14 @@ HDfprintf(stderr, "%s: Leaving, ret_value = %d, fspace->rc = %u\n", FUNC, ret_va
*-------------------------------------------------------------------------
*/
H5FS_t *
-H5FS_new(const H5F_t *f, uint16_t nclasses, const H5FS_section_class_t *classes[],
+H5FS__new(const H5F_t *f, uint16_t nclasses, const H5FS_section_class_t *classes[],
void *cls_init_udata)
{
H5FS_t *fspace = NULL; /* Free space manager */
size_t u; /* Local index variable */
H5FS_t *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/* Check arguments. */
HDassert(nclasses == 0 || (nclasses > 0 && classes));
@@ -631,7 +631,7 @@ H5FS_new(const H5F_t *f, uint16_t nclasses, const H5FS_section_class_t *classes[
/* Initialize non-zero information for new free space manager */
fspace->addr = HADDR_UNDEF;
- fspace->hdr_size = H5FS_HEADER_SIZE(f);
+ fspace->hdr_size = (size_t)H5FS_HEADER_SIZE(f);
fspace->sect_addr = HADDR_UNDEF;
/* Set return value */
@@ -649,7 +649,7 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5FS_new() */
+} /* H5FS__new() */
/*-------------------------------------------------------------------------
@@ -763,7 +763,7 @@ HDfprintf(stderr, "%s: Entering, fpace->addr = %a, fspace->rc = %u\n", FUNC, fsp
HGOTO_ERROR(H5E_FSPACE, H5E_CANTUNPIN, FAIL, "unable to unpin free space header")
} /* end if */
else {
- if(H5FS_hdr_dest(fspace) < 0)
+ if(H5FS__hdr_dest(fspace) < 0)
HGOTO_ERROR(H5E_FSPACE, H5E_CANTCLOSEOBJ, FAIL, "unable to destroy free space header")
} /* end else */
} /* end if */
@@ -1005,7 +1005,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5FS_hdr_dest
+ * Function: H5FS__hdr_dest
*
* Purpose: Destroys a free space header in memory.
*
@@ -1018,12 +1018,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FS_hdr_dest(H5FS_t *fspace)
+H5FS__hdr_dest(H5FS_t *fspace)
{
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_PACKAGE
/*
* Check arguments.
@@ -1047,7 +1047,7 @@ H5FS_hdr_dest(H5FS_t *fspace)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FS_hdr_dest() */
+} /* end H5FS__hdr_dest() */
/*-------------------------------------------------------------------------
diff --git a/src/H5FScache.c b/src/H5FScache.c
index e03a0a4..5ab788e 100644
--- a/src/H5FScache.c
+++ b/src/H5FScache.c
@@ -38,7 +38,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5FSpkg.h" /* File free space */
#include "H5MFprivate.h" /* File memory management */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
#include "H5WBprivate.h" /* Wrapped Buffers */
/****************/
@@ -167,7 +167,7 @@ H5FS_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HDassert(udata);
/* Allocate a new free space manager */
- if(NULL == (fspace = H5FS_new(udata->f, udata->nclasses, udata->classes, udata->cls_init_udata)))
+ if(NULL == (fspace = H5FS__new(udata->f, udata->nclasses, udata->classes, udata->cls_init_udata)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Set free space manager's internal information */
@@ -260,7 +260,7 @@ done:
if(wb && H5WB_unwrap(wb) < 0)
HDONE_ERROR(H5E_FSPACE, H5E_CLOSEERROR, NULL, "can't close wrapped buffer")
if(!ret_value && fspace)
- if(H5FS_hdr_dest(fspace) < 0)
+ if(H5FS__hdr_dest(fspace) < 0)
HDONE_ERROR(H5E_FSPACE, H5E_CANTFREE, NULL, "unable to destroy free space header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -463,7 +463,7 @@ H5FS_cache_hdr_dest(H5F_t *f, H5FS_t *fspace)
} /* end if */
/* Destroy free space header */
- if(H5FS_hdr_dest(fspace) < 0)
+ if(H5FS__hdr_dest(fspace) < 0)
HGOTO_ERROR(H5E_FSPACE, H5E_CANTFREE, FAIL, "unable to destroy free space header")
done:
@@ -578,7 +578,7 @@ H5FS_cache_sinfo_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Allocate space for the buffer to serialize the sections into */
- H5_ASSIGN_OVERFLOW(/* To: */ old_sect_size, /* From: */ udata->fspace->sect_size, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(old_sect_size, size_t, udata->fspace->sect_size, hsize_t);
if(NULL == (buf = H5FL_BLK_MALLOC(sect_block, (size_t)udata->fspace->sect_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
@@ -865,14 +865,12 @@ H5FS_cache_sinfo_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H
udata.sect_cnt_size = H5VM_limit_enc_size((uint64_t)sinfo->fspace->serial_sect_count);
/* Iterate over all the bins */
- for(bin = 0; bin < sinfo->nbins; bin++) {
+ for(bin = 0; bin < sinfo->nbins; bin++)
/* Check if there are any sections in this bin */
- if(sinfo->bins[bin].bin_list) {
+ if(sinfo->bins[bin].bin_list)
/* Iterate over list of section size nodes for bin */
if(H5SL_iterate(sinfo->bins[bin].bin_list, H5FS_sinfo_serialize_node_cb, &udata) < 0)
HGOTO_ERROR(H5E_FSPACE, H5E_BADITER, FAIL, "can't iterate over section size nodes")
- } /* end if */
- } /* end for */
/* Compute checksum */
metadata_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
@@ -1038,7 +1036,7 @@ H5FS_cache_sinfo_size(const H5F_t UNUSED *f, const H5FS_sinfo_t *sinfo, size_t *
HDassert(size_ptr);
/* Set size value */
- H5_ASSIGN_OVERFLOW(/* To: */ *size_ptr, /* From: */ sinfo->fspace->alloc_sect_size, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(*size_ptr, size_t, sinfo->fspace->alloc_sect_size, hsize_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5FS_cache_sinfo_size() */
diff --git a/src/H5FSpkg.h b/src/H5FSpkg.h
index b6c240e..78afde8 100644
--- a/src/H5FSpkg.h
+++ b/src/H5FSpkg.h
@@ -221,7 +221,7 @@ H5FL_EXTERN(H5FS_t);
/******************************/
/* Free space manager header routines */
-H5_DLL H5FS_t *H5FS_new(const H5F_t *f, uint16_t nclasses,
+H5_DLL H5FS_t *H5FS__new(const H5F_t *f, uint16_t nclasses,
const H5FS_section_class_t *classes[], void *cls_init_udata);
H5_DLL herr_t H5FS_incr(H5FS_t *fspace);
H5_DLL herr_t H5FS_decr(H5FS_t *fspace);
@@ -231,7 +231,7 @@ H5_DLL herr_t H5FS_dirty(H5FS_t *fspace);
H5_DLL H5FS_sinfo_t *H5FS_sinfo_new(H5F_t *f, H5FS_t *fspace);
/* Routines for destroying structures */
-H5_DLL herr_t H5FS_hdr_dest(H5FS_t *hdr);
+H5_DLL herr_t H5FS__hdr_dest(H5FS_t *hdr);
H5_DLL herr_t H5FS_sinfo_dest(H5FS_sinfo_t *sinfo);
/* Sanity check routines */
diff --git a/src/H5Faccum.c b/src/H5Faccum.c
index 7eb75bd..7cd9abb 100644
--- a/src/H5Faccum.c
+++ b/src/H5Faccum.c
@@ -172,7 +172,7 @@ H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
/* Read the part before the metadata accumulator */
if(addr < accum->loc) {
/* Set the amount to read */
- H5_ASSIGN_OVERFLOW(amount_before, (accum->loc - addr), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(amount_before, size_t, (accum->loc - addr), hsize_t);
/* Make room for the metadata to read in */
HDmemmove(accum->buf + amount_before, accum->buf, accum->size);
@@ -193,7 +193,7 @@ H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
size_t amount_after; /* Amount to read at a time */
/* Set the amount to read */
- H5_ASSIGN_OVERFLOW(amount_after, ((addr + size) - (accum->loc + accum->size)), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(amount_after, size_t, ((addr + size) - (accum->loc + accum->size)), hsize_t);
/* Dispatch to driver */
if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, (accum->loc + accum->size), amount_after, (accum->buf + accum->size + amount_before)) < 0)
@@ -536,14 +536,14 @@ H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
size_t old_offset; /* Offset of old data within the accumulator buffer */
/* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */
- H5_ASSIGN_OVERFLOW(add_size, (accum->loc - addr), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(add_size, size_t, (accum->loc - addr), hsize_t);
/* Check if we need to adjust accumulator size */
if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_PREPEND, add_size) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator")
/* Calculate the proper offset of the existing metadata */
- H5_ASSIGN_OVERFLOW(old_offset, (addr + size) - accum->loc, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(old_offset, size_t, (addr + size) - accum->loc, hsize_t);
/* Move the existing metadata to the proper location */
HDmemmove(accum->buf + size, accum->buf + old_offset, (accum->size - old_offset));
@@ -576,7 +576,7 @@ H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
size_t dirty_off; /* Offset of dirty region */
/* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */
- H5_ASSIGN_OVERFLOW(add_size, (addr + size) - (accum->loc + accum->size), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(add_size, size_t, (addr + size) - (accum->loc + accum->size), hsize_t);
/* Check if we need to adjust accumulator size */
if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_APPEND, add_size) < 0)
@@ -885,7 +885,7 @@ H5F__accum_free(const H5F_io_info_t *fio_info, H5FD_mem_t UNUSED type, haddr_t a
size_t new_accum_size; /* Size of new accumulator buffer */
/* Calculate the size of the overlap with the accumulator, etc. */
- H5_ASSIGN_OVERFLOW(overlap_size, (addr + size) - accum->loc, haddr_t, size_t);
+ H5_CHECKED_ASSIGN(overlap_size, size_t, (addr + size) - accum->loc, haddr_t);
new_accum_size = accum->size - overlap_size;
/* Move the accumulator buffer information to eliminate the freed block */
@@ -919,7 +919,7 @@ H5F__accum_free(const H5F_io_info_t *fio_info, H5FD_mem_t UNUSED type, haddr_t a
haddr_t dirty_start = accum->loc + accum->dirty_off;
/* Calculate the size of the overlap with the accumulator */
- H5_ASSIGN_OVERFLOW(overlap_size, (accum->loc + accum->size) - addr, haddr_t, size_t);
+ H5_CHECKED_ASSIGN(overlap_size, size_t, (accum->loc + accum->size) - addr, haddr_t);
/* Check if block to free begins before end of dirty region */
if(accum->dirty && H5F_addr_lt(addr, dirty_end)) {
diff --git a/src/H5Fdeprec.c b/src/H5Fdeprec.c
index c5a500a..7e2ea17 100644
--- a/src/H5Fdeprec.c
+++ b/src/H5Fdeprec.c
@@ -181,7 +181,7 @@ H5Fget_info1(hid_t obj_id, H5F_info1_t *finfo)
HDmemset(finfo, 0, sizeof(*finfo));
/* Get the size of the superblock extension */
- if(H5F_super_size(f, H5AC_ind_dxpl_id, NULL, &finfo->super_ext_size) < 0)
+ if(H5F__super_size(f, H5AC_ind_dxpl_id, NULL, &finfo->super_ext_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
/* Check for SOHM info */
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 3600476..72f5103 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -1074,7 +1074,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
/* Initialize information about the superblock and allocate space for it */
/* (Writes superblock extension messages, if there are any) */
- if(H5F_super_init(file, dxpl_id) < 0)
+ if(H5F__super_init(file, dxpl_id) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to allocate file superblock")
/* Create and open the root group */
@@ -1085,7 +1085,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create/open root group")
} else if (1 == shared->nrefs) {
/* Read the superblock if it hasn't been read before. */
- if(H5F_super_read(file, dxpl_id) < 0)
+ if(H5F__super_read(file, dxpl_id) < 0)
HGOTO_ERROR(H5E_FILE, H5E_READERROR, NULL, "unable to read superblock")
/* Open the root group */
diff --git a/src/H5Fio.c b/src/H5Fio.c
index 1d05cd0..763bd69 100644
--- a/src/H5Fio.c
+++ b/src/H5Fio.c
@@ -100,6 +100,9 @@ H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
+#ifdef QAK
+HDfprintf(stderr, "%s: read from addr = %a, size = %Zu\n", FUNC, addr, size);
+#endif /* QAK */
HDassert(f);
HDassert(f->shared);
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 53fe0d9..a645fd3 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -306,10 +306,10 @@ H5_DLL int H5F_term_unmount_cb(void *obj_ptr, hid_t obj_id, void *key);
H5_DLL herr_t H5F_mount_count_ids(H5F_t *f, unsigned *nopen_files, unsigned *nopen_objs);
/* Superblock related routines */
-H5_DLL herr_t H5F_super_init(H5F_t *f, hid_t dxpl_id);
-H5_DLL herr_t H5F_super_read(H5F_t *f, hid_t dxpl_id);
-H5_DLL herr_t H5F_super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size, hsize_t *super_ext_size);
-H5_DLL herr_t H5F_super_free(H5F_super_t *sblock);
+H5_DLL herr_t H5F__super_init(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F__super_read(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F__super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size, hsize_t *super_ext_size);
+H5_DLL herr_t H5F__super_free(H5F_super_t *sblock);
/* Superblock extension related routines */
H5_DLL herr_t H5F_super_ext_open(H5F_t *f, haddr_t ext_addr, H5O_loc_t *ext_ptr);
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index ab07526..b04f289 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -244,7 +244,6 @@
#define H5F_addr_overflow(X,Z) (HADDR_UNDEF==(X) || \
HADDR_UNDEF==(X)+(haddr_t)(Z) || \
(X)+(haddr_t)(Z)<(X))
-#define H5F_addr_hash(X,M) ((unsigned)((X)%(M)))
#define H5F_addr_defined(X) ((X)!=HADDR_UNDEF)
/* The H5F_addr_eq() macro guarantees that Y is not HADDR_UNDEF by making
* certain that X is not HADDR_UNDEF and then checking that X equals Y
@@ -573,6 +572,12 @@ typedef struct H5F_io_info_t {
const struct H5P_genplist_t *dxpl; /* DXPL object */
} H5F_io_info_t;
+/* Concise info about a block of bytes in a file */
+typedef struct H5F_block_t {
+ haddr_t offset; /* Offset of the block in the file */
+ hsize_t length; /* Length of the block in the file */
+} H5F_block_t;
+
/*****************************/
/* Library-private Variables */
diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h
index f32b3e0..aa6cc2a 100644
--- a/src/H5Fpublic.h
+++ b/src/H5Fpublic.h
@@ -41,12 +41,14 @@
* We're assuming that these constants are used rather early in the hdf5
* session.
*
+ * Note that H5F_ACC_DEBUG is deprecated (nonfuncational) but retained as a
+ * symbol for backward compatibility.
*/
#define H5F_ACC_RDONLY (H5CHECK 0x0000u) /*absence of rdwr => rd-only */
#define H5F_ACC_RDWR (H5CHECK 0x0001u) /*open for read and write */
#define H5F_ACC_TRUNC (H5CHECK 0x0002u) /*overwrite existing files */
#define H5F_ACC_EXCL (H5CHECK 0x0004u) /*fail if file already exists*/
-#define H5F_ACC_DEBUG (H5CHECK 0x0008u) /*print debug info */
+/* NOTE: 0x0008u was H5F_ACC_DEBUG, now deprecated */
#define H5F_ACC_CREAT (H5CHECK 0x0010u) /*create non-existing files */
/* Value passed to H5Pset_elink_acc_flags to cause flags to be taken from the
@@ -221,7 +223,7 @@ H5_DLL herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
#ifndef H5_NO_DEPRECATED_SYMBOLS
/* Macros */
-
+#define H5F_ACC_DEBUG (H5CHECK 0x0000u) /*print debug info (deprecated)*/
/* Typedefs */
diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c
index dd80a46..6db631e 100644
--- a/src/H5Fsuper.c
+++ b/src/H5Fsuper.c
@@ -237,7 +237,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_super_read
+ * Function: H5F__super_read
*
* Purpose: Reads the superblock from the file or from the BUF. If
* ADDR is a valid address, then it reads it from the file.
@@ -254,17 +254,17 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_super_read(H5F_t *f, hid_t dxpl_id)
+H5F__super_read(H5F_t *f, hid_t dxpl_id)
{
H5P_genplist_t *dxpl; /* DXPL object */
- H5F_super_t * sblock = NULL; /* superblock structure */
+ H5F_super_t * sblock = NULL; /* Superblock structure */
unsigned sblock_flags = H5AC__NO_FLAGS_SET; /* flags used in superblock unprotect call */
haddr_t super_addr; /* Absolute address of superblock */
- H5AC_protect_t rw; /* read/write permissions for file */
+ H5AC_protect_t rw; /* Read/write permissions for file */
hbool_t dirtied = FALSE; /* Bool for sblock protect call */
- herr_t ret_value = SUCCEED; /* return value */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_TAG(dxpl_id, H5AC__SUPERBLOCK_TAG, FAIL)
+ FUNC_ENTER_PACKAGE_TAG(dxpl_id, H5AC__SUPERBLOCK_TAG, FAIL)
/* Get the DXPL plist object for DXPL ID */
if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
@@ -291,7 +291,7 @@ H5F_super_read(H5F_t *f, hid_t dxpl_id)
/* Look up the superblock */
if(NULL == (sblock = (H5F_super_t *)H5AC_protect(f, dxpl_id, H5AC_SUPERBLOCK, (haddr_t)0, &dirtied, rw)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, FAIL, "unable to load superblock")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTPROTECT, FAIL, "unable to load superblock")
/* Mark the superblock dirty if it was modified during loading or VFD indicated to do so */
if((H5AC_WRITE == rw) && (dirtied || H5F_HAS_FEATURE(f, H5FD_FEAT_DIRTY_SBLK_LOAD)))
@@ -299,7 +299,7 @@ H5F_super_read(H5F_t *f, hid_t dxpl_id)
/* Pin the superblock in the cache */
if(H5AC_pin_protected_entry(sblock) < 0)
- HGOTO_ERROR(H5E_FSPACE, H5E_CANTPIN, FAIL, "unable to pin superblock")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTPIN, FAIL, "unable to pin superblock")
/* Set the pointer to the pinned superblock */
f->shared->sblock = sblock;
@@ -307,14 +307,14 @@ H5F_super_read(H5F_t *f, hid_t dxpl_id)
done:
/* Release the superblock */
if(sblock && H5AC_unprotect(f, dxpl_id, H5AC_SUPERBLOCK, (haddr_t)0, sblock, sblock_flags) < 0)
- HDONE_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "unable to close superblock")
+ HDONE_ERROR(H5E_FILE, H5E_CANTUNPROTECT, FAIL, "unable to close superblock")
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
-} /* end H5F_super_read() */
+} /* end H5F__super_read() */
/*-------------------------------------------------------------------------
- * Function: H5F_super_init
+ * Function: H5F__super_init
*
* Purpose: Allocates the superblock for the file and initializes
* information about the superblock in memory. Writes extension
@@ -330,7 +330,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_super_init(H5F_t *f, hid_t dxpl_id)
+H5F__super_init(H5F_t *f, hid_t dxpl_id)
{
H5F_super_t *sblock = NULL; /* Superblock cache structure */
hbool_t sblock_in_cache = FALSE; /* Whether the superblock has been inserted into the metadata cache */
@@ -344,7 +344,7 @@ H5F_super_init(H5F_t *f, hid_t dxpl_id)
hbool_t ext_created = FALSE; /* Whether the extension has been created */
herr_t ret_value = SUCCEED; /* Return Value */
- FUNC_ENTER_NOAPI_TAG(dxpl_id, H5AC__SUPERBLOCK_TAG, FAIL)
+ FUNC_ENTER_PACKAGE_TAG(dxpl_id, H5AC__SUPERBLOCK_TAG, FAIL)
/* Allocate space for the superblock */
if(NULL == (sblock = H5FL_CALLOC(H5F_super_t)))
@@ -434,7 +434,7 @@ H5F_super_init(H5F_t *f, hid_t dxpl_id)
superblock_size = (hsize_t)H5F_SUPERBLOCK_SIZE(super_vers, f);
/* Compute the size of the driver information block */
- H5_ASSIGN_OVERFLOW(driver_size, H5FD_sb_size(f->shared->lf), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(driver_size, size_t, H5FD_sb_size(f->shared->lf), hsize_t);
if(driver_size > 0) {
driver_size += H5F_DRVINFOBLOCK_HDR_SIZE;
@@ -594,7 +594,7 @@ done:
} /* end if */
else
/* Free superblock */
- if(H5F_super_free(sblock) < 0)
+ if(H5F__super_free(sblock) < 0)
HDONE_ERROR(H5E_FILE, H5E_CANTFREE, FAIL, "unable to destroy superblock")
/* Reset variables in file structure */
@@ -603,7 +603,7 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
-} /* end H5F_super_init() */
+} /* end H5F__super_init() */
/*-------------------------------------------------------------------------
@@ -641,7 +641,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_super_free
+ * Function: H5F__super_free
*
* Purpose: Destroyer the file's superblock
*
@@ -654,9 +654,9 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_super_free(H5F_super_t *sblock)
+H5F__super_free(H5F_super_t *sblock)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_PACKAGE_NOERR
/* Sanity check */
HDassert(sblock);
@@ -668,11 +668,11 @@ H5F_super_free(H5F_super_t *sblock)
sblock = (H5F_super_t *)H5FL_FREE(H5F_super_t, sblock);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_super_free() */
+} /* H5F__super_free() */
/*-------------------------------------------------------------------------
- * Function: H5F_super_size
+ * Function: H5F__super_size
*
* Purpose: Get storage size of the superblock and superblock extension
*
@@ -685,11 +685,11 @@ H5F_super_free(H5F_super_t *sblock)
*-------------------------------------------------------------------------
*/
herr_t
-H5F_super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size, hsize_t *super_ext_size)
+H5F__super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size, hsize_t *super_ext_size)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(f);
@@ -725,7 +725,7 @@ H5F_super_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_size, hsize_t *super_ext_
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5F_super_size() */
+} /* H5F__super_size() */
/*-------------------------------------------------------------------------
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index f3931cb..46ebe6e 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -13,6 +13,17 @@
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5Fsuper_cache.c
+ * Aug 15 2009
+ * Quincey Koziol <koziol@hdfgroup.org>
+ *
+ * Purpose: Implement file superblock & driver info metadata cache methods.
+ *
+ *-------------------------------------------------------------------------
+ */
+
/****************/
/* Module Setup */
/****************/
@@ -133,7 +144,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
FUNC_ENTER_NOAPI_NOINIT
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(H5F_addr_eq(addr, 0));
HDassert(dirtied);
@@ -371,14 +382,6 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
drv_name[8] = '\0';
p += 8; /* advance past name/version */
- /* Check if driver matches driver information saved. Unfortunately, we can't push this
- * function to each specific driver because we're checking if the driver is correct.
- */
- if(!HDstrncmp(drv_name, "NCSAfami", (size_t)8) && HDstrcmp(lf->cls->name, "family"))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "family driver should be used")
- if(!HDstrncmp(drv_name, "NCSAmult", (size_t)8) && HDstrcmp(lf->cls->name, "multi"))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "multi driver should be used")
-
/* Read in variable-sized portion of driver info block */
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE + drv_variable_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
@@ -386,7 +389,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read file driver information")
/* Decode driver information */
- if(H5FD_sb_decode(lf, drv_name, p) < 0)
+ if(H5FD_sb_load(lf, drv_name, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to decode driver information")
} /* end if */
} /* end if */
@@ -535,16 +538,8 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
if(NULL == H5O_msg_read(&ext_loc, H5O_DRVINFO_ID, &drvinfo, dxpl_id))
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "driver info message not present")
- /* Check if driver matches driver information saved. Unfortunately, we can't push this
- * function to each specific driver because we're checking if the driver is correct.
- */
- if(!HDstrncmp(drvinfo.name, "NCSAfami", (size_t)8) && HDstrcmp(lf->cls->name, "family"))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "family driver should be used")
- if(!HDstrncmp(drvinfo.name, "NCSAmult", (size_t)8) && HDstrcmp(lf->cls->name, "multi"))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "multi driver should be used")
-
/* Decode driver information */
- if(H5FD_sb_decode(lf, drvinfo.name, drvinfo.buf) < 0)
+ if(H5FD_sb_load(lf, drvinfo.name, drvinfo.buf) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to decode driver information")
/* Reset driver info message */
@@ -618,7 +613,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
done:
/* Release the [possibly partially initialized] superblock on errors */
if(!ret_value && sblock)
- if(H5F_super_free(sblock) < 0)
+ if(H5F__super_free(sblock) < 0)
HDONE_ERROR(H5E_FILE, H5E_CANTFREE, NULL, "unable to destroy superblock data")
FUNC_LEAVE_NOAPI(ret_value)
@@ -723,7 +718,7 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
HGOTO_ERROR(H5E_FILE, H5E_CANTENCODE, FAIL, "can't encode root group symbol table entry")
/* Encode the driver information block. */
- H5_ASSIGN_OVERFLOW(driver_size, H5FD_sb_size(f->shared->lf), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(driver_size, size_t, H5FD_sb_size(f->shared->lf), hsize_t);
/* Checking whether driver block address is defined here is to handle backward
* compatibility. If the file was created with v1.6 library or earlier and no
@@ -779,7 +774,7 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
* ultimately match it. */
if ((rel_eof = H5FD_get_eoa(f->shared->lf, H5FD_MEM_SUPER)) == HADDR_UNDEF)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGET, FAIL, "driver get_eoa request failed")
- H5F_addr_encode(f, &p, rel_eof + sblock->base_addr);
+ H5F_addr_encode(f, &p, (rel_eof + sblock->base_addr));
/* Retrieve information for root group */
if(NULL == (root_oloc = H5G_oloc(f->shared->root_grp)))
@@ -799,7 +794,7 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
} /* end else */
/* Retrieve the total size of the superblock info */
- H5_ASSIGN_OVERFLOW(superblock_size, (p - buf), ptrdiff_t, size_t);
+ H5_CHECKED_ASSIGN(superblock_size, size_t, (p - buf), ptrdiff_t);
/* Double check we didn't overrun the block (unlikely) */
HDassert(superblock_size <= sizeof(buf));
@@ -824,7 +819,7 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
/* Check for ignoring the driver info for this file */
if(!H5F_HAS_FEATURE(f, H5FD_FEAT_IGNORE_DRVRINFO)) {
/* Check for driver info message */
- H5_ASSIGN_OVERFLOW(driver_size, H5FD_sb_size(f->shared->lf), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(driver_size, size_t, H5FD_sb_size(f->shared->lf), hsize_t);
if(driver_size > 0) {
H5O_drvinfo_t drvinfo; /* Driver info */
uint8_t dbuf[H5F_MAX_DRVINFOBLOCK_SIZE]; /* Driver info block encoding buffer */
@@ -887,7 +882,7 @@ H5F_sblock_dest(H5F_t UNUSED *f, H5F_super_t* sblock)
HDassert(sblock);
/* Free superblock */
- if(H5F_super_free(sblock) < 0)
+ if(H5F__super_free(sblock) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTFREE, FAIL, "unable to destroy superblock")
done:
diff --git a/src/H5Gcache.c b/src/H5Gcache.c
index 15dbf65..d1923a6 100644
--- a/src/H5Gcache.c
+++ b/src/H5Gcache.c
@@ -145,10 +145,10 @@ H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata)
/* Allocate symbol table data structures */
if(NULL == (sym = H5FL_CALLOC(H5G_node_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
- sym->node_size = H5G_NODE_SIZE(f);
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ sym->node_size = (size_t)(H5G_NODE_SIZE(f));
if(NULL == (sym->entry = H5FL_SEQ_CALLOC(H5G_entry_t, (size_t)(2 * H5F_SYM_LEAF_K(f)))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Wrap the local buffer for serialized node info */
if(NULL == (wb = H5WB_wrap(node_buf, sizeof(node_buf))))
@@ -167,12 +167,12 @@ H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata)
/* magic */
if(HDmemcmp(p, H5G_NODE_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node signature")
- p += 4;
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node signature")
+ p += H5_SIZEOF_MAGIC;
/* version */
if(H5G_NODE_VERS != *p++)
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node version")
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node version")
/* reserved */
p++;
@@ -182,7 +182,7 @@ H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata)
/* entries */
if(H5G__ent_decode_vec(f, &p, sym->entry, sym->nsyms) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries")
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries")
/* Set return value */
ret_value = sym;
@@ -248,7 +248,7 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
/* magic number */
HDmemcpy(p, H5G_NODE_MAGIC, (size_t)H5_SIZEOF_MAGIC);
- p += 4;
+ p += H5_SIZEOF_MAGIC;
/* version number */
*p++ = H5G_NODE_VERS;
diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c
index ca9e7fd..8f2fe54 100644
--- a/src/H5Gdeprec.c
+++ b/src/H5Gdeprec.c
@@ -261,7 +261,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info")
/* Set the non-default local heap size hint */
- H5_ASSIGN_OVERFLOW(ginfo.lheap_size_hint, size_hint, size_t, uint32_t);
+ H5_CHECKED_ASSIGN(ginfo.lheap_size_hint, uint32_t, size_hint, size_t);
if(H5P_set(gc_plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set group info")
} /* end if */
diff --git a/src/H5Glink.c b/src/H5Glink.c
index f934052..8b258b5 100644
--- a/src/H5Glink.c
+++ b/src/H5Glink.c
@@ -467,7 +467,7 @@ H5G__link_iterate_table(const H5G_link_table_t *ltable, hsize_t skip,
*last_lnk += skip;
/* Iterate over link messages */
- H5_ASSIGN_OVERFLOW(/* To: */ u, /* From: */ skip, /* From: */ hsize_t, /* To: */ size_t)
+ H5_CHECKED_ASSIGN(u, size_t, skip, hsize_t)
for(; u < ltable->nlinks && !ret_value; u++) {
/* Make the callback */
ret_value = (op)(&(ltable->lnks[u]), op_data);
diff --git a/src/H5HFcache.c b/src/H5HFcache.c
index 0f73c68..e5ea437 100644
--- a/src/H5HFcache.c
+++ b/src/H5HFcache.c
@@ -40,7 +40,7 @@
#include "H5HFpkg.h" /* Fractal heaps */
#include "H5MFprivate.h" /* File memory management */
#include "H5MMprivate.h" /* Memory management */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
#include "H5WBprivate.h" /* Wrapped Buffers */
@@ -75,8 +75,8 @@
/********************/
/* Local encode/decode routines */
-static herr_t H5HF_dtable_encode(H5F_t *f, uint8_t **pp, const H5HF_dtable_t *dtable);
-static herr_t H5HF_dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable);
+static herr_t H5HF__dtable_encode(H5F_t *f, uint8_t **pp, const H5HF_dtable_t *dtable);
+static herr_t H5HF__dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable);
/* Metadata cache (H5AC) callbacks */
static H5HF_hdr_t *H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
@@ -98,28 +98,16 @@ static herr_t H5HF_cache_dblock_notify(H5C_notify_action_t action, H5HF_direct_t
static herr_t H5HF_cache_dblock_size(const H5F_t *f, const H5HF_direct_t *dblock, size_t *size_ptr);
-/*********************************/
/* Debugging Function Prototypes */
-/*********************************/
#ifndef NDEBUG
-static herr_t H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_hdr_t * hdr,
- hbool_t *clean_ptr);
-static herr_t H5HF_cache_verify_iblock_descendants_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_indirect_t * iblock,
- unsigned * iblock_status_ptr,
- hbool_t *clean_ptr);
-static herr_t H5HF_cache_verify_iblocks_dblocks_clean(H5F_t *f,
- H5HF_indirect_t * iblock,
- hbool_t *clean_ptr,
- hbool_t *has_dblocks_ptr);
-static herr_t H5HF_cache_verify_descendant_iblocks_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_indirect_t * iblock,
- hbool_t *clean_ptr,
- hbool_t *has_iblocks_ptr);
+static herr_t H5HF__cache_verify_hdr_descendants_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_hdr_t *hdr, hbool_t *clean);
+static herr_t H5HF__cache_verify_iblock_descendants_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_indirect_t *iblock, unsigned *iblock_status, hbool_t *clean);
+static herr_t H5HF__cache_verify_iblocks_dblocks_clean(H5F_t *f,
+ H5HF_indirect_t *iblock, hbool_t *clean, hbool_t *has_dblocks);
+static herr_t H5HF__cache_verify_descendant_iblocks_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_indirect_t *iblock, hbool_t *clean, hbool_t *has_iblocks);
#endif /* NDEBUG */
@@ -176,7 +164,7 @@ H5FL_BLK_DEFINE(direct_block);
/*-------------------------------------------------------------------------
- * Function: H5HF_dtable_decode
+ * Function: H5HF__dtable_decode
*
* Purpose: Decodes the metadata for a doubling table
*
@@ -191,9 +179,9 @@ H5FL_BLK_DEFINE(direct_block);
*-------------------------------------------------------------------------
*/
static herr_t
-H5HF_dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable)
+H5HF__dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Check arguments */
HDassert(f);
@@ -222,11 +210,11 @@ H5HF_dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable)
UINT16DECODE(*pp, dtable->curr_root_rows);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5HF_dtable_decode() */
+} /* end H5HF__dtable_decode() */
/*-------------------------------------------------------------------------
- * Function: H5HF_dtable_encode
+ * Function: H5HF__dtable_encode
*
* Purpose: Encodes the metadata for a doubling table
*
@@ -241,9 +229,9 @@ H5HF_dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dtable)
*-------------------------------------------------------------------------
*/
static herr_t
-H5HF_dtable_encode(H5F_t *f, uint8_t **pp, const H5HF_dtable_t *dtable)
+H5HF__dtable_encode(H5F_t *f, uint8_t **pp, const H5HF_dtable_t *dtable)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Check arguments */
HDassert(f);
@@ -272,7 +260,7 @@ H5HF_dtable_encode(H5F_t *f, uint8_t **pp, const H5HF_dtable_t *dtable)
UINT16ENCODE(*pp, dtable->curr_root_rows);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5HF_dtable_encode() */
+} /* end H5HF__dtable_encode() */
/*-------------------------------------------------------------------------
@@ -313,7 +301,7 @@ H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space for the fractal heap data structure */
if(NULL == (hdr = H5HF_hdr_alloc(udata->f)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Wrap the local buffer for serialized header info */
if(NULL == (wb = H5WB_wrap(hdr_buf, sizeof(hdr_buf))))
@@ -335,12 +323,12 @@ H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Magic number */
if(HDmemcmp(p, H5HF_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap header signature")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap header signature")
p += H5_SIZEOF_MAGIC;
/* Version */
if(*p++ != H5HF_HDR_VERSION)
- HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap header version")
+ HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap header version")
/* General heap information */
UINT16DECODE(p, hdr->id_len); /* Heap ID length */
@@ -373,7 +361,7 @@ H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
H5F_DECODE_LENGTH(udata->f, p, hdr->tiny_nobjs);
/* Managed objects' doubling-table info */
- if(H5HF_dtable_decode(hdr->f, &p, &(hdr->man_dtable)) < 0)
+ if(H5HF__dtable_decode(hdr->f, &p, &(hdr->man_dtable)) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTENCODE, NULL, "unable to encode managed obj. doubling table info")
/* Sanity check */
@@ -443,11 +431,11 @@ H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Verify checksum */
if(stored_chksum != computed_chksum)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "incorrect metadata checksum for fractal heap header")
+ HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "incorrect metadata checksum for fractal heap header")
/* Finish initialization of heap header */
if(H5HF_hdr_finish_init(hdr) < 0)
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, NULL, "can't finish initializing shared fractal heap header")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, NULL, "can't finish initializing shared fractal heap header")
/* Set return value */
ret_value = hdr;
@@ -499,30 +487,27 @@ H5HF_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5H
uint32_t metadata_chksum; /* Computed metadata checksum value */
#ifndef NDEBUG
- /* verify that flush dependencies are working correctly. Do this
+{
+ /* Verify that flush dependencies are working correctly. Do this
* by verifying that either:
*
* 1) the header has a root iblock, and that the root iblock and all
- * of its children are clean, or
+ * of its children are clean, or
*
- * 2) The header has a root dblock, which is clean, or
+ * 2) The header has a root dblock, which is clean, or
*
* 3) The heap is empty, and thus the header has neither a root
- * iblock no a root dblock. In this case, the flush ordering
+ * iblock no a root dblock. In this case, the flush ordering
* constraint is met by default.
*
- * Do this with a call to H5HF_cache_verify_hdr_descendants_clean().
+ * Do this with a call to H5HF__cache_verify_hdr_descendants_clean().
*/
hbool_t descendants_clean = TRUE;
- if ( H5HF_cache_verify_hdr_descendants_clean(f, dxpl_id, hdr,
- &descendants_clean) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "can't verify hdr descendants clean.")
-
- HDassert( descendants_clean );
-
+ if(H5HF__cache_verify_hdr_descendants_clean(f, dxpl_id, hdr, &descendants_clean) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify hdr descendants clean.")
+ HDassert(descendants_clean);
+}
#endif /* NDEBUG */
/* Set the shared heap header's file context for this operation */
@@ -557,8 +542,8 @@ H5HF_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5H
/* (bit 0: "huge" object IDs have wrapped) */
/* (bit 1: checksum direct blocks) */
heap_flags = 0;
- heap_flags |= (hdr->huge_ids_wrapped ? H5HF_HDR_FLAGS_HUGE_ID_WRAPPED : 0);
- heap_flags |= (hdr->checksum_dblocks ? H5HF_HDR_FLAGS_CHECKSUM_DBLOCKS : 0);
+ heap_flags = (uint8_t)(heap_flags | (hdr->huge_ids_wrapped ? H5HF_HDR_FLAGS_HUGE_ID_WRAPPED : 0));
+ heap_flags = (uint8_t)(heap_flags | (hdr->checksum_dblocks ? H5HF_HDR_FLAGS_CHECKSUM_DBLOCKS : 0));
*p++ = heap_flags;
/* "Huge" object information */
@@ -581,7 +566,7 @@ H5HF_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5H
H5F_ENCODE_LENGTH(f, p, hdr->tiny_nobjs);
/* Managed objects' doubling-table info */
- if(H5HF_dtable_encode(hdr->f, &p, &(hdr->man_dtable)) < 0)
+ if(H5HF__dtable_encode(hdr->f, &p, &(hdr->man_dtable)) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTENCODE, FAIL, "unable to encode managed obj. doubling table info")
/* Check for I/O filter information to encode */
@@ -780,7 +765,7 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space for the fractal heap indirect block */
if(NULL == (iblock = H5FL_CALLOC(H5HF_indirect_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Get the pointer to the shared heap header */
hdr = udata->par_info->hdr;
@@ -791,7 +776,7 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Share common heap information */
iblock->hdr = hdr;
if(H5HF_hdr_incr(hdr) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment reference count on shared heap header")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment reference count on shared heap header")
/* Set block's internal information */
iblock->rc = 0;
@@ -818,17 +803,17 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Magic number */
if(HDmemcmp(p, H5HF_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap indirect block signature")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap indirect block signature")
p += H5_SIZEOF_MAGIC;
/* Version */
if(*p++ != H5HF_IBLOCK_VERSION)
- HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap direct block version")
+ HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap direct block version")
/* Address of heap that owns this block */
H5F_addr_decode(udata->f, &p, &heap_addr);
if(H5F_addr_ne(heap_addr, hdr->heap_addr))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect heap header address for direct block")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect heap header address for direct block")
/* Address of parent block */
iblock->parent = udata->par_info->iblock;
@@ -856,9 +841,10 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate & decode child block entry tables */
HDassert(iblock->nrows > 0);
if(NULL == (iblock->ents = H5FL_SEQ_MALLOC(H5HF_indirect_ent_t, (size_t)(iblock->nrows * hdr->man_dtable.cparam.width))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for direct entries")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for direct entries")
+
if(hdr->filter_len > 0) {
- unsigned dir_rows; /* Number of direct rows in this indirect block */
+ unsigned dir_rows; /* Number of direct rows in this indirect block */
/* Compute the number of direct rows for this indirect block */
dir_rows = MIN(iblock->nrows, hdr->man_dtable.max_direct_rows);
@@ -869,6 +855,7 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
} /* end if */
else
iblock->filt_ents = NULL;
+
for(u = 0; u < (iblock->nrows * hdr->man_dtable.cparam.width); u++) {
/* Decode child block address */
H5F_addr_decode(udata->f, &p, &(iblock->ents[u].addr));
@@ -903,7 +890,7 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
} /* end for */
/* Sanity check */
- HDassert(iblock->nchildren); /* indirect blocks w/no children should have been deleted */
+ HDassert(iblock->nchildren); /* indirect blocks w/no children should have been deleted */
/* Compute checksum on indirect block */
computed_chksum = H5_checksum_metadata(buf, (size_t)(p - (const uint8_t *)buf), 0);
@@ -916,7 +903,7 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Verify checksum */
if(stored_chksum != computed_chksum)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "incorrect metadata checksum for fractal heap indirect block")
+ HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "incorrect metadata checksum for fractal heap indirect block")
/* Check if we have any indirect block children */
if(iblock->nrows > hdr->man_dtable.max_direct_rows) {
@@ -986,31 +973,26 @@ H5HF_cache_iblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
size_t u; /* Local index variable */
#ifndef NDEBUG
- /* verify that flush dependencies are working correctly. Do this
+{
+ /* Verify that flush dependencies are working correctly. Do this
* by verifying that all children of this iblock are clean.
*/
hbool_t descendants_clean = TRUE;
unsigned iblock_status;
- if ( H5AC_get_entry_status(f, iblock->addr, &iblock_status) < 0 )
-
+ if(H5AC_get_entry_status(f, iblock->addr, &iblock_status) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get iblock status")
- /* since the current iblock is the guest of honor in a flush, we know
+ /* since the current iblock is the guest of honor in a flush, we know
* that it is locked into the cache for the duration of the call. Hence
- * there is no need to check to see if it is pinned or protected, or to
+ * there is no need to check to see if it is pinned or protected, or to
* protect it if it is not.
*/
-
- if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
- iblock, &iblock_status,
- &descendants_clean) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "can't verify descendants clean.")
+ if(H5HF__cache_verify_iblock_descendants_clean(f, dxpl_id, iblock, &iblock_status, &descendants_clean) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify descendants clean.")
HDassert(descendants_clean);
-
+}
#endif /* NDEBUG */
/* Get the pointer to the shared heap header */
@@ -1276,99 +1258,78 @@ H5HF_cache_iblock_notify(H5C_notify_action_t action, H5HF_indirect_t *iblock)
HDassert(iblock);
HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
HDassert(iblock->hdr);
- if ( action == H5C_NOTIFY_ACTION_BEFORE_EVICT )
- HDassert((iblock->parent == iblock->fd_parent) ||
- ((NULL == iblock->parent) && (iblock->fd_parent)));
+
+ if(action == H5AC_NOTIFY_ACTION_BEFORE_EVICT)
+ HDassert((iblock->parent == iblock->fd_parent) || ((NULL == iblock->parent) && (iblock->fd_parent)));
else
- HDassert(iblock->parent == iblock->fd_parent);
+ HDassert(iblock->parent == iblock->fd_parent);
/* further sanity checks */
- if ( iblock->parent == NULL ) {
-
- /* Either this is the root iblock, or the parent pointer is */
+ if(iblock->parent == NULL) {
+ /* Either this is the root iblock, or the parent pointer is */
/* invalid. Since we save a copy of the parent pointer on */
/* the insertion event, it doesn't matter if the parent pointer */
/* is invalid just before eviction. However, we will not be */
/* able to function if it is invalid on the insertion event. */
- /* Scream and die if this is the case. */
-
- HDassert((action == H5C_NOTIFY_ACTION_BEFORE_EVICT) ||
- (iblock->block_off == 0));
+ /* Scream and die if this is the case. */
+ HDassert((action == H5C_NOTIFY_ACTION_BEFORE_EVICT) || (iblock->block_off == 0));
- /* pointer from hdr to root iblock will not be set up unless */
- /* the fractal heap has already pinned the hdr. Do what */
+ /* pointer from hdr to root iblock will not be set up unless */
+ /* the fractal heap has already pinned the hdr. Do what */
/* sanity checking we can. */
-
- if ( ( iblock->block_off == 0 ) &&
- ( iblock->hdr->root_iblock_flags & H5HF_ROOT_IBLOCK_PINNED ) )
+ if((iblock->block_off == 0) && (iblock->hdr->root_iblock_flags & H5HF_ROOT_IBLOCK_PINNED))
HDassert(iblock->hdr->root_iblock == iblock);
-
- } else {
- /* if this is a child iblock, verify that the pointers are */
+ } /* end if */
+ else {
+ /* if this is a child iblock, verify that the pointers are */
/* either uninitialized or set up correctly. */
H5HF_indirect_t *par_iblock = iblock->parent;
unsigned indir_idx; /* Index in parent's child iblock pointer array */
/* Sanity check */
HDassert(par_iblock->child_iblocks);
- HDassert(iblock->par_entry >= (iblock->hdr->man_dtable.max_direct_rows
- * iblock->hdr->man_dtable.cparam.width));
+ HDassert(iblock->par_entry >= (iblock->hdr->man_dtable.max_direct_rows * iblock->hdr->man_dtable.cparam.width));
/* Compute index in parent's child iblock pointer array */
- indir_idx = iblock->par_entry -
- (iblock->hdr->man_dtable.max_direct_rows
- * iblock->hdr->man_dtable.cparam.width);
+ indir_idx = iblock->par_entry - (iblock->hdr->man_dtable.max_direct_rows * iblock->hdr->man_dtable.cparam.width);
- /* The pointer to iblock in the parent may not be set yet -- */
+ /* The pointer to iblock in the parent may not be set yet -- */
/* verify that it is either NULL, or that it has been set to */
/* iblock. */
- HDassert((NULL == par_iblock->child_iblocks[indir_idx]) ||
- (par_iblock->child_iblocks[indir_idx] == iblock));
- }
-
- switch ( action )
- {
- case H5C_NOTIFY_ACTION_AFTER_INSERT:
- if ( iblock->parent ) /* this is a child iblock */
- {
- /* create flush dependency with parent iblock */
- if(H5AC_create_flush_dependency(iblock->parent, iblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
- "unable to create flush dependency")
- }
- else /* this is the root iblock */
- {
- /* create flush dependency with header */
- if(H5AC_create_flush_dependency(iblock->hdr, iblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
- "unable to create flush dependency")
- }
- break;
-
- case H5C_NOTIFY_ACTION_BEFORE_EVICT:
- if ( iblock->fd_parent ) /* this is a child iblock */
- {
- /* destroy flush dependency with parent iblock */
- if(H5AC_destroy_flush_dependency(iblock->fd_parent,
- iblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
- "unable to destroy flush dependency")
- }
- else /* this is the root iblock */
- {
- /* destroy flush dependency with header */
- if(H5AC_destroy_flush_dependency(iblock->hdr, iblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
- "unable to destroy flush dependency")
-
- }
- break;
-
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "unknown action from metadata cache")
- break;
- }
+ HDassert((NULL == par_iblock->child_iblocks[indir_idx]) || (par_iblock->child_iblocks[indir_idx] == iblock));
+ } /* end else */
+
+ switch(action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ if(iblock->parent) { /* this is a child iblock */
+ /* create flush dependency with parent iblock */
+ if(H5AC_create_flush_dependency(iblock->parent, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, "unable to create flush dependency")
+ } /* end if */
+ else { /* this is the root iblock */
+ /* create flush dependency with header */
+ if(H5AC_create_flush_dependency(iblock->hdr, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, "unable to create flush dependency")
+ } /* end else */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ if(iblock->fd_parent) { /* this is a child iblock */
+ /* destroy flush dependency with parent iblock */
+ if(H5AC_destroy_flush_dependency(iblock->fd_parent, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, "unable to destroy flush dependency")
+ } /* end if */
+ else { /* this is the root iblock */
+ /* destroy flush dependency with header */
+ if(H5AC_destroy_flush_dependency(iblock->hdr, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, "unable to destroy flush dependency")
+ } /* end else */
+ break;
+
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown action from metadata cache")
+ break;
+ } /* end switch */
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -1424,8 +1385,8 @@ H5HF_cache_iblock_size(const H5F_t UNUSED *f, const H5HF_indirect_t *iblock, siz
static H5HF_direct_t *
H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
{
- H5HF_dblock_cache_ud_t *udata = (H5HF_dblock_cache_ud_t *)_udata; /* pointer to user data */
H5HF_hdr_t *hdr; /* Shared fractal heap information */
+ H5HF_dblock_cache_ud_t *udata = (H5HF_dblock_cache_ud_t *)_udata; /* User data for callback */
H5HF_parent_t *par_info; /* Pointer to parent information */
H5HF_direct_t *dblock = NULL; /* Direct block info */
const uint8_t *p; /* Pointer into raw data buffer */
@@ -1443,7 +1404,7 @@ H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space for the fractal heap direct block */
if(NULL == (dblock = H5FL_MALLOC(H5HF_direct_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HDmemset(&dblock->cache_info, 0, sizeof(H5AC_info_t));
/* Get the pointer to the shared heap header */
@@ -1456,7 +1417,7 @@ H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Share common heap information */
dblock->hdr = hdr;
if(H5HF_hdr_incr(hdr) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment reference count on shared heap header")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment reference count on shared heap header")
/* Set block's internal information */
dblock->size = udata->dblock_size;
@@ -1473,7 +1434,7 @@ H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
size_t nbytes; /* Number of bytes used in buffer, after applying reverse filters */
void *read_buf; /* Pointer to buffer to read in */
size_t read_size; /* Size of filtered direct block to read */
- unsigned filter_mask; /* Excluded filters for direct block */
+ unsigned filter_mask; /* Excluded filters for direct block */
/* Check for root direct block */
if(par_info->iblock == NULL) {
@@ -1525,17 +1486,17 @@ H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Magic number */
if(HDmemcmp(p, H5HF_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap direct block signature")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong fractal heap direct block signature")
p += H5_SIZEOF_MAGIC;
/* Version */
if(*p++ != H5HF_DBLOCK_VERSION)
- HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap direct block version")
+ HGOTO_ERROR(H5E_HEAP, H5E_VERSION, NULL, "wrong fractal heap direct block version")
/* Address of heap that owns this block (just for file integrity checks) */
H5F_addr_decode(udata->f, &p, &heap_addr);
if(H5F_addr_ne(heap_addr, hdr->heap_addr))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect heap header address for direct block")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect heap header address for direct block")
/* Address of parent block */
dblock->parent = par_info->iblock;
@@ -1973,57 +1934,43 @@ H5HF_cache_dblock_notify(H5C_notify_action_t action, H5HF_direct_t *dblock)
HDassert(dblock);
HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
HDassert(dblock->hdr);
- HDassert((dblock->fd_parent) ||
- ((dblock->hdr->man_dtable.curr_root_rows == 0) &&
- (dblock->block_off == (hsize_t)0)));
-
- switch ( action )
- {
- case H5C_NOTIFY_ACTION_AFTER_INSERT:
- HDassert(dblock->parent == dblock->fd_parent);
-
- if ( dblock->parent ) /* this is a leaf dblock */
- {
- /* create flush dependency with parent iblock */
- if(H5AC_create_flush_dependency(dblock->parent, dblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
- "unable to create flush dependency")
- }
- else /* this is a root dblock */
- {
- /* create flush dependency with header */
- if(H5AC_create_flush_dependency(dblock->hdr, dblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
- "unable to create flush dependency")
- }
- break;
-
- case H5C_NOTIFY_ACTION_BEFORE_EVICT:
+ HDassert((dblock->fd_parent) ||
+ ((dblock->hdr->man_dtable.curr_root_rows == 0) && (dblock->block_off == (hsize_t)0)));
+
+ switch(action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ HDassert(dblock->parent == dblock->fd_parent);
+ if(dblock->parent) { /* this is a leaf dblock */
+ /* create flush dependency with parent iblock */
+ if(H5AC_create_flush_dependency(dblock->parent, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, "unable to create flush dependency")
+ } /* end if */
+ else { /* this is a root dblock */
+ /* create flush dependency with header */
+ if(H5AC_create_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, "unable to create flush dependency")
+ } /* end else */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
HDassert((dblock->parent == dblock->fd_parent) ||
- ((NULL == dblock->parent) && (dblock->fd_parent)));
- if ( dblock->fd_parent ) /* this is a leaf dblock */
- {
- /* destroy flush dependency with parent iblock */
- if(H5AC_destroy_flush_dependency(dblock->fd_parent,
- dblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
- "unable to destroy flush dependency")
- }
- else /* this is a root dblock */
- {
- /* destroy flush dependency with header */
- if(H5AC_destroy_flush_dependency(dblock->hdr, dblock) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
- "unable to destroy flush dependency")
-
- }
- break;
-
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "unknown action from metadata cache")
- break;
- }
+ ((NULL == dblock->parent) && (dblock->fd_parent)));
+ if(dblock->fd_parent) { /* this is a leaf dblock */
+ /* destroy flush dependency with parent iblock */
+ if(H5AC_destroy_flush_dependency(dblock->fd_parent, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, "unable to destroy flush dependency")
+ } /* end if */
+ else { /* this is a root dblock */
+ /* destroy flush dependency with header */
+ if(H5AC_destroy_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, "unable to destroy flush dependency")
+ } /* end else */
+ break;
+
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown action from metadata cache")
+ break;
+ } /* end switch */
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -2063,11 +2010,11 @@ H5HF_cache_dblock_size(const H5F_t UNUSED *f, const H5HF_direct_t *dblock, size_
/*------------------------------------------------------------------------
- * Function: H5HF_cache_verify_hdr_descendants_clean
+ * Function: H5HF__cache_verify_hdr_descendants_clean
*
* Purpose: Sanity checking routine that verifies that all indirect
* and direct blocks that are descendants of the supplied
- * instance of H5HF_hdr_t are clean. Set *clean_ptr to
+ * instance of H5HF_hdr_t are clean. Set *clean to
* TRUE if this is the case, and to FALSE otherwise.
*
* Return: Non-negative on success/Negative on failure
@@ -2079,41 +2026,26 @@ H5HF_cache_dblock_size(const H5F_t UNUSED *f, const H5HF_direct_t *dblock, size_
*/
#ifndef NDEBUG
static herr_t
-H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_hdr_t * hdr,
- hbool_t *clean_ptr)
+H5HF__cache_verify_hdr_descendants_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_hdr_t * hdr, hbool_t *clean)
{
- hbool_t in_cache;
- hbool_t type_ok;
- hbool_t root_iblock_in_cache = FALSE;
- hbool_t unprotect_root_iblock = FALSE;
- unsigned hdr_status = 0;
- unsigned root_iblock_status = 0;
- unsigned root_dblock_status = 0;
- H5HF_indirect_t * root_iblock = NULL;
- haddr_t hdr_addr;
- haddr_t root_iblock_addr = HADDR_UNDEF;
- haddr_t root_dblock_addr;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
+ haddr_t hdr_addr; /* Address of header */
+ unsigned hdr_status = 0; /* Header cache entry status */
+ herr_t ret_value = SUCCEED; /* Return value */
+ FUNC_ENTER_STATIC
+
+ /* Sanity checks */
HDassert(f);
HDassert(hdr);
HDassert(hdr->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert((const H5AC_class_t *)(hdr->cache_info.type) == \
- &(H5AC_FHEAP_HDR[0]));
- HDassert(clean_ptr);
-
+ HDassert(hdr->cache_info.type == H5AC_FHEAP_HDR);
+ HDassert(clean);
hdr_addr = hdr->cache_info.addr;
-
HDassert(hdr_addr == hdr->heap_addr);
- if ( H5AC_get_entry_status(f, hdr_addr, &hdr_status) < 0 )
-
+ if(H5AC_get_entry_status(f, hdr_addr, &hdr_status) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get hdr status")
-
HDassert(hdr_status & H5AC_ES__IN_CACHE);
/* We have three basic scenarios we have to deal with:
@@ -2146,64 +2078,50 @@ H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
* Since the former case is far and away the most common, we don't
* worry too much about efficiency in the second case.
*/
-
- if ( ( hdr->root_iblock ) ||
- ( ( hdr->man_dtable.curr_root_rows > 0 ) &&
- ( HADDR_UNDEF != hdr->man_dtable.table_addr ) ) ) {
-
- root_iblock = hdr->root_iblock;
-
- /* make note of the on disk address of the root iblock */
-
- if ( root_iblock == NULL ) {
-
+ if(hdr->root_iblock ||
+ ((hdr->man_dtable.curr_root_rows > 0) &&
+ (HADDR_UNDEF != hdr->man_dtable.table_addr))) {
+ H5HF_indirect_t *root_iblock = hdr->root_iblock;
+ haddr_t root_iblock_addr;
+ unsigned root_iblock_status = 0;
+ hbool_t root_iblock_in_cache;
+
+ /* make note of the on disk address of the root iblock */
+ if(root_iblock == NULL)
/* hdr->man_dtable.table_addr must contain address of root
* iblock. Check to see if it is in cache. If it is,
* protect it and put its address in root_iblock.
*/
root_iblock_addr = hdr->man_dtable.table_addr;
-
- } else {
-
+ else
root_iblock_addr = root_iblock->addr;
- }
/* get the status of the root iblock */
HDassert(root_iblock_addr != HADDR_UNDEF);
+ if(H5AC_get_entry_status(f, root_iblock_addr, &root_iblock_status) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get root iblock status")
- if ( H5AC_get_entry_status(f, root_iblock_addr,
- &root_iblock_status) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
- "can't get root iblock status")
-
- root_iblock_in_cache = ( (root_iblock_status & H5AC_ES__IN_CACHE) != 0 );
-
+ root_iblock_in_cache = ( (root_iblock_status & H5AC_ES__IN_CACHE) != 0);
HDassert(root_iblock_in_cache || (root_iblock == NULL));
- if ( ! root_iblock_in_cache ) { /* we are done */
-
- *clean_ptr = TRUE;
-
- } else if ( root_iblock_status & H5AC_ES__IS_DIRTY ) {
-
- *clean_ptr = FALSE;
-
- } else { /* must examine children */
+ if(!root_iblock_in_cache) /* we are done */
+ *clean = TRUE;
+ else if(root_iblock_status & H5AC_ES__IS_DIRTY)
+ *clean = FALSE;
+ else { /* must examine children */
+ hbool_t unprotect_root_iblock = FALSE;
/* At this point, the root iblock may be pinned, protected,
* both, or neither, and we may or may not have a pointer
* to root iblock in memory.
*
- * Before we call H5HF_cache_verify_iblock_descendants_clean(),
+ * Before we call H5HF__cache_verify_iblock_descendants_clean(),
* we must ensure that the root iblock is either pinned or
* protected or both, and that we have a pointer to it.
* Do this as follows:
*/
- if ( root_iblock == NULL ) { /* we don't have ptr to root iblock */
-
- if ( 0 == (root_iblock_status & H5AC_ES__IS_PROTECTED) ) {
-
+ if(root_iblock == NULL) { /* we don't have ptr to root iblock */
+ if(0 == (root_iblock_status & H5AC_ES__IS_PROTECTED)) {
/* just protect the root iblock -- this will give us
* the pointer we need to proceed, and ensure that
* it is locked into the metadata cache for the
@@ -2214,21 +2132,11 @@ H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
* in this case, since we know that the entry is in cache,
* we can pass NULL udata.
*/
-
- root_iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id,
- H5AC_FHEAP_IBLOCK,
- root_iblock_addr,
- NULL, H5AC_READ);
-
- if ( NULL == root_iblock )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
- "H5AC_protect() faild.")
-
+ if(NULL == (root_iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, root_iblock_addr, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
unprotect_root_iblock = TRUE;
-
- } else {
-
+ } /* end if */
+ else {
/* the root iblock is protected, and we have no
* legitimate way of getting a pointer to it.
*
@@ -2263,25 +2171,20 @@ H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
* code, I expect that we will use this approach until it
* causes problems, or we think of a better way.
*/
- if ( H5AC_get_entry_ptr_from_addr(f, root_iblock_addr,
- (void **)(&root_iblock)) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
- "H5AC_get_entry_ptr_from_addr() failed.")
-
+ if(H5AC_get_entry_ptr_from_addr(f, root_iblock_addr, (void **)(&root_iblock)) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "H5AC_get_entry_ptr_from_addr() failed.")
HDassert(root_iblock);
- }
- } else /* root_iblock != NULL */ {
-
+ } /* end else */
+ } /* end if */
+ else { /* root_iblock != NULL */
/* we have the pointer to the root iblock. Protect it
* if it is neither pinned nor protected -- otherwise we
* are ready to go.
*/
H5HF_indirect_t * iblock = NULL;
- if ( ( (root_iblock_status & H5AC_ES__IS_PINNED) == 0 ) &&
- ( (root_iblock_status & H5AC_ES__IS_PROTECTED) == 0 ) ) {
-
+ if(((root_iblock_status & H5AC_ES__IS_PINNED) == 0) &&
+ ((root_iblock_status & H5AC_ES__IS_PROTECTED) == 0)) {
/* the root iblock is neither pinned nor protected -- hence
* we must protect it before we proceed
*
@@ -2290,82 +2193,49 @@ H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
* in this case, since we know that the entry is in cache,
* we can pass NULL udata.
*/
-
- iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id,
- H5AC_FHEAP_IBLOCK,
- root_iblock_addr,
- NULL, H5AC_READ);
-
- if ( NULL == iblock )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
- "H5AC_protect() faild.")
-
+ if(NULL == (iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, root_iblock_addr, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
unprotect_root_iblock = TRUE;
-
HDassert(iblock == root_iblock);
-
- }
- }
+ } /* end if */
+ } /* end else */
/* at this point, one way or another, the root iblock is locked
* in memory for the duration of the call. Do some sanity checks,
- * and then call H5HF_cache_verify_iblock_descendants_clean().
+ * and then call H5HF__cache_verify_iblock_descendants_clean().
*/
+ HDassert(hdr->root_iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(hdr->root_iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
- HDassert(hdr->root_iblock->cache_info.magic == \
- H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert((const H5AC_class_t *)(hdr->root_iblock->cache_info.type) \
- == &(H5AC_FHEAP_IBLOCK[0]));
-
- if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
- root_iblock, &root_iblock_status,
- clean_ptr) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "can't verify root iblock & descendants clean.")
-
+ if(H5HF__cache_verify_iblock_descendants_clean(f, dxpl_id, root_iblock, &root_iblock_status, clean) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify root iblock & descendants clean.")
/* unprotect the root indirect block if required */
- if ( unprotect_root_iblock ) {
-
+ if(unprotect_root_iblock) {
HDassert(root_iblock);
-
- if ( H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
- root_iblock_addr, root_iblock,
- H5AC__NO_FLAGS_SET) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, \
- "H5AC_unprotect() faild.")
- }
- }
- } else if ( ( hdr->man_dtable.curr_root_rows == 0 ) &&
- ( HADDR_UNDEF != hdr->man_dtable.table_addr ) ) {
+ if(H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK, root_iblock_addr, root_iblock, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "H5AC_unprotect() faild.")
+ } /* end if */
+ } /* end else */
+ } /* end if */
+ else if((hdr->man_dtable.curr_root_rows == 0) &&
+ (HADDR_UNDEF != hdr->man_dtable.table_addr)) {
+ haddr_t root_dblock_addr;
+ unsigned root_dblock_status = 0;
+ hbool_t in_cache;
+ hbool_t type_ok;
/* this is scenario 2 -- we have a root dblock */
-
root_dblock_addr = hdr->man_dtable.table_addr;
+ if(H5AC_get_entry_status(f, root_dblock_addr, &root_dblock_status) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get root dblock status")
- if ( H5AC_get_entry_status(f, root_dblock_addr,
- &root_dblock_status) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
- "can't get root dblock status")
-
- if ( root_dblock_status & H5AC_ES__IN_CACHE ) {
-
- if ( H5AC_verify_entry_type(f, root_dblock_addr,
- &H5AC_FHEAP_DBLOCK[0],
- &in_cache, &type_ok) < 0 )
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
- "can't check dblock type")
-
+ if(root_dblock_status & H5AC_ES__IN_CACHE) {
+ if(H5AC_verify_entry_type(f, root_dblock_addr, &H5AC_FHEAP_DBLOCK[0], &in_cache, &type_ok) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't check dblock type")
HDassert(in_cache);
-
- if ( !type_ok )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "root dblock addr doesn't refer to a dblock?!?")
+ if(!type_ok)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "root dblock addr doesn't refer to a dblock?!?")
/* If a root dblock is in cache, it must have a flush
* dependency relationship with the header, and it
@@ -2376,45 +2246,34 @@ H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
* the root iblock is a child in some flush dependency
* relationship.
*/
- if ( 0 == (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "root dblock in cache and not a flush dep child.")
-
- if ( 0 != (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "root dblock in cache and is a flush dep parent.")
-
-
- *clean_ptr = ! (root_dblock_status & H5AC_ES__IS_DIRTY);
-
- } else { /* root dblock not in cache */
-
- *clean_ptr = TRUE;
- }
- } else {
+ if(0 == (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "root dblock in cache and not a flush dep child.")
+ if(0 != (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "root dblock in cache and is a flush dep parent.")
+
+ *clean = ! (root_dblock_status & H5AC_ES__IS_DIRTY);
+ } /* end if */
+ else /* root dblock not in cache */
+ *clean = TRUE;
+ } /* end else-if */
+ else
/* this is scenario 3 -- the fractal heap is empty, and we
* have nothing to do.
*/
- *clean_ptr = TRUE;
- }
+ *clean = TRUE;
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5HF_cache_verify_hdr_descendants_clean() */
-
+} /* H5HF__cache_verify_hdr_descendants_clean() */
#endif /* NDEBUG */
/*------------------------------------------------------------------------
- * Function: H5HF_cache_verify_iblock_descendants_clean
+ * Function: H5HF__cache_verify_iblock_descendants_clean
*
* Purpose: Sanity checking routine that verifies that all indirect
* and direct blocks that are decendents of the supplied
- * instance of H5HF_indirect_t are clean. Set *clean_ptr
+ * instance of H5HF_indirect_t are clean. Set *clean
* to TRUE if this is the case, and to FALSE otherwise.
*
* In passing, the function also does a cursory check to
@@ -2433,7 +2292,7 @@ done:
* met.
*
* Note that this function and
- * H5HF_cache_verify_descendant_iblocks_clean() are
+ * H5HF__cache_verify_descendant_iblocks_clean() are
* recursive co-routines.
*
* Return: Non-negative on success/Negative on failure
@@ -2445,72 +2304,49 @@ done:
*/
#ifndef NDEBUG
static herr_t
-H5HF_cache_verify_iblock_descendants_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_indirect_t * iblock,
- unsigned * iblock_status_ptr,
- hbool_t *clean_ptr)
+H5HF__cache_verify_iblock_descendants_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_indirect_t *iblock, unsigned *iblock_status, hbool_t *clean)
{
hbool_t has_dblocks = FALSE;
hbool_t has_iblocks = FALSE;
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_STATIC
+ /* Sanity checks */
HDassert(f);
HDassert(iblock);
HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert((const H5AC_class_t *)(iblock->cache_info.type) == \
- &(H5AC_FHEAP_IBLOCK[0]));
- HDassert(iblock_status_ptr);
- HDassert(clean_ptr);
- HDassert(*clean_ptr);
-
- if ( ( *clean_ptr ) &&
- ( H5HF_cache_verify_iblocks_dblocks_clean(f, iblock, clean_ptr,
- &has_dblocks) < 0 ) )
+ HDassert(iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
+ HDassert(iblock_status);
+ HDassert(clean);
+ HDassert(*clean);
+
+ if((*clean) && H5HF__cache_verify_iblocks_dblocks_clean(f, iblock, clean, &has_dblocks) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify dblocks clean.")
- if ( ( *clean_ptr ) &&
- ( H5HF_cache_verify_descendant_iblocks_clean(f, dxpl_id, iblock,
- clean_ptr, &has_iblocks) < 0 ) )
+ if((*clean) && H5HF__cache_verify_descendant_iblocks_clean(f, dxpl_id, iblock, clean, &has_iblocks) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify iblocks clean.")
- if ( ( NULL == iblock_status_ptr ) &&
- ( H5AC_get_entry_status(f, iblock->addr, iblock_status_ptr) < 0 ) )
-
+ if((NULL == iblock_status) && H5AC_get_entry_status(f, iblock->addr, iblock_status) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get iblock status")
/* verify that flush dependency setup is plausible */
-
- if ( 0 == (*iblock_status_ptr & H5AC_ES__IS_FLUSH_DEP_CHILD) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "iblock is not a flush dep child.")
-
- if ( ( ( has_dblocks || has_iblocks ) ) &&
- ( 0 == (*iblock_status_ptr & H5AC_ES__IS_FLUSH_DEP_PARENT) ) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "iblock has children and is not a flush dep parent.")
-
- if ( ( ( has_dblocks || has_iblocks ) ) &&
- ( 0 == (*iblock_status_ptr & H5AC_ES__IS_PINNED) ) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "iblock has children and is not pinned.")
+ if(0 == (*iblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "iblock is not a flush dep child.")
+ if(((has_dblocks || has_iblocks)) && (0 == (*iblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT)))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "iblock has children and is not a flush dep parent.")
+ if(((has_dblocks || has_iblocks)) && (0 == (*iblock_status & H5AC_ES__IS_PINNED)))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "iblock has children and is not pinned.")
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5HF_cache_verify_iblock_descendants_clean() */
-
+} /* H5HF__cache_verify_iblock_descendants_clean() */
#endif /* NDEBUG */
/*------------------------------------------------------------------------
- * Function: H5HF_cache_verify_iblocks_dblocks_clean
+ * Function: H5HF__cache_verify_iblocks_dblocks_clean
*
* Purpose: Sanity checking routine that attempts to verify that all
* direct blocks pointed to by the supplied indirect block
@@ -2538,71 +2374,53 @@ done:
*/
#ifndef NDEBUG
static herr_t
-H5HF_cache_verify_iblocks_dblocks_clean(H5F_t *f,
- H5HF_indirect_t * iblock,
- hbool_t *clean_ptr,
- hbool_t *has_dblocks_ptr)
+H5HF__cache_verify_iblocks_dblocks_clean(H5F_t *f, H5HF_indirect_t *iblock,
+ hbool_t *clean, hbool_t *has_dblocks)
{
- hbool_t in_cache;
- hbool_t type_ok;
- unsigned i;
unsigned num_direct_rows;
unsigned max_dblock_index;
- haddr_t dblock_addr;
- unsigned dblock_status = 0;
+ unsigned i;
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_STATIC
+ /* Sanity checks */
HDassert(f);
HDassert(iblock);
HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
HDassert(iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
- HDassert(clean_ptr);
- HDassert(*clean_ptr);
- HDassert(has_dblocks_ptr);
+ HDassert(clean);
+ HDassert(*clean);
+ HDassert(has_dblocks);
i = 0;
-
- num_direct_rows =
- MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
-
- HDassert(num_direct_rows <= iblock->nrows );
-
- max_dblock_index =
- (num_direct_rows * iblock->hdr->man_dtable.cparam.width) - 1;
-
- while ( ( *clean_ptr ) && ( i <= max_dblock_index ) ) {
+ num_direct_rows = MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
+ HDassert(num_direct_rows <= iblock->nrows);
+ max_dblock_index = (num_direct_rows * iblock->hdr->man_dtable.cparam.width) - 1;
+ while((*clean) && (i <= max_dblock_index)) {
+ haddr_t dblock_addr;
dblock_addr = iblock->ents[i].addr;
+ if(H5F_addr_defined(dblock_addr)) {
+ hbool_t in_cache;
+ hbool_t type_ok;
- if ( H5F_addr_defined(dblock_addr) ) {
-
- if ( H5AC_verify_entry_type(f, dblock_addr, &H5AC_FHEAP_DBLOCK[0],
- &in_cache, &type_ok) < 0 )
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
- "can't check dblock type")
-
- if ( in_cache ) { /* dblock is in cache */
-
- if ( ! type_ok )
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "dblock addr doesn't refer to a dblock?!?")
+ if(H5AC_verify_entry_type(f, dblock_addr, &H5AC_FHEAP_DBLOCK[0], &in_cache, &type_ok) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't check dblock type")
- if ( H5AC_get_entry_status(f, dblock_addr,
- &dblock_status) < 0 )
+ if(in_cache) { /* dblock is in cache */
+ unsigned dblock_status = 0;
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
- "can't get dblock status")
+ if(!type_ok)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "dblock addr doesn't refer to a dblock?!?")
- HDassert(dblock_status & H5AC_ES__IN_CACHE );
+ if(H5AC_get_entry_status(f, dblock_addr, &dblock_status) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get dblock status")
+ HDassert(dblock_status & H5AC_ES__IN_CACHE);
- *has_dblocks_ptr = TRUE;
-
- if ( dblock_status & H5AC_ES__IS_DIRTY ) {
-
- *clean_ptr = FALSE;
- }
+ *has_dblocks = TRUE;
+ if(dblock_status & H5AC_ES__IS_DIRTY)
+ *clean = FALSE;
/* If a child dblock is in cache, it must have a flush
* dependency relationship with this iblock, and it
@@ -2613,33 +2431,26 @@ H5HF_cache_verify_iblocks_dblocks_clean(H5F_t *f,
* the child iblock is a child in some flush dependency
* relationship.
*/
- if ( 0 == (dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "dblock in cache and not a flush dep child.")
+ if(0 == (dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "dblock in cache and not a flush dep child.")
- if ( 0 != (dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT) )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "dblock in cache and is a flush dep parent.")
+ if(0 != (dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT))
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "dblock in cache and is a flush dep parent.")
- }
- }
+ } /* end if */
+ } /* end if */
i++;
- }
+ } /* end while */
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5HF_cache_verify_iblocks_dblocks_clean() */
-
+} /* H5HF__cache_verify_iblocks_dblocks_clean() */
#endif /* NDEBUG */
/*------------------------------------------------------------------------
- * Function: H5HF_cache_verify_descendant_iblocks_clean
+ * Function: H5HF__cache_verify_descendant_iblocks_clean
*
* Purpose: Sanity checking routine that attempts to verify that all
* direct blocks pointed to by the supplied indirect block
@@ -2667,70 +2478,52 @@ done:
*/
#ifndef NDEBUG
static herr_t
-H5HF_cache_verify_descendant_iblocks_clean(H5F_t *f,
- hid_t dxpl_id,
- H5HF_indirect_t * iblock,
- hbool_t *clean_ptr,
- hbool_t *has_iblocks_ptr)
+H5HF__cache_verify_descendant_iblocks_clean(H5F_t *f, hid_t dxpl_id,
+ H5HF_indirect_t *iblock, hbool_t *clean, hbool_t *has_iblocks)
{
- hbool_t unprotect_child_iblock;
- unsigned i;
unsigned first_iblock_index;
unsigned last_iblock_index;
unsigned num_direct_rows;
- unsigned child_iblock_status = 0;
- haddr_t child_iblock_addr;
- H5HF_indirect_t * child_iblock_ptr;
+ unsigned i;
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_STATIC
+ /* Sanity checks */
HDassert(f);
HDassert(iblock);
HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(iblock->cache_info.type == &(H5AC_FHEAP_IBLOCK[0]));
- HDassert(clean_ptr);
- HDassert(*clean_ptr);
- HDassert(has_iblocks_ptr);
-
- num_direct_rows =
- MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
-
- HDassert(num_direct_rows <= iblock->nrows );
+ HDassert(iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
+ HDassert(clean);
+ HDassert(*clean);
+ HDassert(has_iblocks);
+ num_direct_rows = MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
+ HDassert(num_direct_rows <= iblock->nrows);
first_iblock_index = num_direct_rows * iblock->hdr->man_dtable.cparam.width;
- last_iblock_index =
- (iblock->nrows * iblock->hdr->man_dtable.cparam.width) - 1;
+ last_iblock_index = (iblock->nrows * iblock->hdr->man_dtable.cparam.width) - 1;
i = first_iblock_index;
+ while((*clean) && (i <= last_iblock_index)) {
+ haddr_t child_iblock_addr = iblock->ents[i].addr;
- while ( ( *clean_ptr ) && ( i <= last_iblock_index ) ) {
-
- child_iblock_addr = iblock->ents[i].addr;
-
- if ( H5F_addr_defined(child_iblock_addr) ) {
+ if(H5F_addr_defined(child_iblock_addr)) {
+ unsigned child_iblock_status = 0;
- if ( H5AC_get_entry_status(f, child_iblock_addr,
- &child_iblock_status) < 0 )
+ if(H5AC_get_entry_status(f, child_iblock_addr, &child_iblock_status) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get iblock status")
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
- "can't get iblock status")
+ if(child_iblock_status & H5AC_ES__IN_CACHE) {
+ *has_iblocks = TRUE;
+ if(child_iblock_status & H5AC_ES__IS_DIRTY)
+ *clean = FALSE;
- if ( child_iblock_status & H5AC_ES__IN_CACHE ) {
-
- *has_iblocks_ptr = TRUE;
-
- if ( child_iblock_status & H5AC_ES__IS_DIRTY ) {
-
- *clean_ptr = FALSE;
- }
-
- /* if the child iblock is in cache and *clean_ptr is TRUE,
+ /* if the child iblock is in cache and *clean is TRUE,
* we must continue to explore down the fractal heap tree
* structure to verify that all descendant blocks are either
* clean, or not in the metadata cache. We do this with a
* recursive call to
- * H5HF_cache_verify_iblock_descendants_clean().
+ * H5HF__cache_verify_iblock_descendants_clean().
* However, we can't make this call unless the child iblock
* is somehow locked into the cache -- typically via either
* pinning or protecting.
@@ -2776,102 +2569,69 @@ H5HF_cache_verify_descendant_iblocks_clean(H5F_t *f,
* expect that we will use this approach until it causes
* problems, or we think of a better way.
*/
- if ( *clean_ptr ) {
-
- child_iblock_ptr = NULL;
- unprotect_child_iblock = FALSE;
+ if(*clean) {
+ H5HF_indirect_t *child_iblock = NULL;
+ hbool_t unprotect_child_iblock = FALSE;
- if ( 0 == (child_iblock_status & H5AC_ES__IS_PINNED)) {
-
+ if(0 == (child_iblock_status & H5AC_ES__IS_PINNED)) {
/* child iblock is not pinned */
-
- if (0 == (child_iblock_status & H5AC_ES__IS_PROTECTED)){
-
+ if(0 == (child_iblock_status & H5AC_ES__IS_PROTECTED)) {
/* child iblock is unprotected, and unpinned */
/* protect it. Note that the udata is only */
/* used in the load callback. While the */
/* fractal heap makes heavy use of the udata */
/* in this case, since we know that the */
/* entry is in cache, we can pass NULL udata */
- child_iblock_ptr = (H5HF_indirect_t *)
- H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
- child_iblock_addr,
- NULL, H5AC_READ);
-
- if ( NULL == child_iblock_ptr )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
- "H5AC_protect() faild.")
+ if(NULL == (child_iblock = (H5HF_indirect_t *) H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, child_iblock_addr, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
unprotect_child_iblock = TRUE;
-
- } else {
-
+ } /* end if */
+ else {
/* child iblock is protected -- use */
/* H5AC_get_entry_ptr_from_addr() to get a */
/* pointer to the entry. This is very slimy -- */
/* come up with a better solution. */
- if ( H5AC_get_entry_ptr_from_addr(f,
- child_iblock_addr,
- (void **)(&child_iblock_ptr)) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
- "H5AC_get_entry_ptr_from_addr() faild.")
-
- HDassert ( child_iblock_ptr );
- }
- } else {
+ if(H5AC_get_entry_ptr_from_addr(f, child_iblock_addr, (void **)(&child_iblock)) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "H5AC_get_entry_ptr_from_addr() faild.")
+ HDassert(child_iblock);
+ } /* end else */
+ } /* end if */
+ else {
/* child iblock is pinned -- look it up in the */
/* parent iblocks child_iblocks array. */
-
HDassert(iblock->child_iblocks);
-
- child_iblock_ptr =
- iblock->child_iblocks[i - first_iblock_index];
- }
+ child_iblock = iblock->child_iblocks[i - first_iblock_index];
+ } /* end else */
/* At this point, one way or another we should have
* a pointer to the child iblock. Verify that we
* that we have the correct one.
*/
- HDassert(child_iblock_ptr);
- HDassert(child_iblock_ptr->cache_info.magic ==
- H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(child_iblock_ptr->cache_info.type ==
- H5AC_FHEAP_IBLOCK);
- HDassert(child_iblock_ptr->addr == child_iblock_addr);
+ HDassert(child_iblock);
+ HDassert(child_iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(child_iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
+ HDassert(child_iblock->addr == child_iblock_addr);
/* now make the recursive call */
- if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
- child_iblock_ptr, &child_iblock_status,
- clean_ptr) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
- "can't verify child iblock clean.")
+ if(H5HF__cache_verify_iblock_descendants_clean(f, dxpl_id, child_iblock, &child_iblock_status, clean) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify child iblock clean.")
/* if we protected the child iblock, unprotect it now */
- if ( unprotect_child_iblock ) {
-
- if ( H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
- child_iblock_addr, child_iblock_ptr,
- H5AC__NO_FLAGS_SET) < 0 )
-
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, \
- "H5AC_unprotect() faild.")
+ if(unprotect_child_iblock) {
+ if(H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK, child_iblock_addr, child_iblock, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "H5AC_unprotect() faild.")
- }
- }
- }
- }
+ } /* end if */
+ } /* end if */
+ } /* end if */
+ } /* end if */
i++;
- }
+ } /* end while */
done:
-
FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5HF_cache_verify_descendant_iblocks_clean() */
-
+} /* H5HF__cache_verify_descendant_iblocks_clean() */
#endif /* NDEBUG */
diff --git a/src/H5HFdbg.c b/src/H5HFdbg.c
index 7d22ddd..8620f6f 100644
--- a/src/H5HFdbg.c
+++ b/src/H5HFdbg.c
@@ -387,11 +387,11 @@ H5HF_dblock_debug_cb(H5FS_section_info_t *_sect, void *_udata)
if(sect_start < dblock_start)
start = 0;
else
- H5_ASSIGN_OVERFLOW(/* To: */ start, /* From: */ (sect_start - dblock_start), /* From: */ hsize_t, /* To: */ size_t)
+ H5_CHECKED_ASSIGN(start, size_t, (sect_start - dblock_start), hsize_t)
if(sect_end > dblock_end)
- H5_ASSIGN_OVERFLOW(/* To: */ end, /* From: */ udata->dblock_size, /* From: */ hsize_t, /* To: */ size_t)
+ H5_CHECKED_ASSIGN(end, size_t, udata->dblock_size, hsize_t)
else
- H5_ASSIGN_OVERFLOW(/* To: */ end, /* From: */ ((sect_end - dblock_start) + 1), /* From: */ hsize_t, /* To: */ size_t)
+ H5_CHECKED_ASSIGN(end, size_t, ((sect_end - dblock_start) + 1), hsize_t)
/* Calculate the length */
len = end - start;
diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c
index c4ae573..9a8da4a 100644
--- a/src/H5HFdblock.c
+++ b/src/H5HFdblock.c
@@ -131,7 +131,7 @@ H5HF_man_dblock_create(hid_t dxpl_id, H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblo
dblock->block_off = par_iblock->block_off;
dblock->block_off += hdr->man_dtable.row_block_off[par_row];
dblock->block_off += hdr->man_dtable.row_block_size[par_row] * (par_entry % hdr->man_dtable.cparam.width);
- H5_ASSIGN_OVERFLOW(/* To: */ dblock->size, /* From: */ hdr->man_dtable.row_block_size[par_row], /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(dblock->size, size_t, hdr->man_dtable.row_block_size[par_row], hsize_t);
} /* end if */
else {
/* Must be the root direct block */
@@ -397,7 +397,7 @@ H5HF_man_dblock_new(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t request,
if(H5HF_man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location")
HDassert(next_row < iblock->nrows);
- H5_ASSIGN_OVERFLOW(/* To: */ next_size, /* From: */ hdr->man_dtable.row_block_size[next_row], /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(next_size, size_t, hdr->man_dtable.row_block_size[next_row], hsize_t);
/* Check for skipping over blocks */
if(min_dblock_size > next_size) {
diff --git a/src/H5HFdtable.c b/src/H5HFdtable.c
index 607862a..c523396 100644
--- a/src/H5HFdtable.c
+++ b/src/H5HFdtable.c
@@ -168,7 +168,7 @@ HDfprintf(stderr, "%s: off = %Hu\n", "H5HF_dtable_lookup", off);
/* Check for offset in first row */
if(off < dtable->num_id_first_row) {
*row = 0;
- H5_ASSIGN_OVERFLOW(/* To: */ *col, /* From: */ (off / dtable->cparam.start_block_size), /* From: */ hsize_t, /* To: */ unsigned);
+ H5_CHECKED_ASSIGN(*col, unsigned, (off / dtable->cparam.start_block_size), hsize_t);
} /* end if */
else {
unsigned high_bit = H5VM_log2_gen(off); /* Determine the high bit in the offset */
@@ -178,7 +178,7 @@ HDfprintf(stderr, "%s: off = %Hu\n", "H5HF_dtable_lookup", off);
HDfprintf(stderr, "%s: high_bit = %u, off_mask = %Hu\n", "H5HF_dtable_lookup", high_bit, off_mask);
#endif /* QAK */
*row = (high_bit - dtable->first_row_bits) + 1;
- H5_ASSIGN_OVERFLOW(/* To: */ *col, /* From: */ ((off - off_mask) / dtable->row_block_size[*row]), /* From: */ hsize_t, /* To: */ unsigned);
+ H5_CHECKED_ASSIGN(*col, unsigned, ((off - off_mask) / dtable->row_block_size[*row]), hsize_t);
} /* end else */
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5HFhdr.c b/src/H5HFhdr.c
index d3c4473..cf8da23 100644
--- a/src/H5HFhdr.c
+++ b/src/H5HFhdr.c
@@ -262,7 +262,7 @@ H5HF_hdr_finish_init_phase2(H5HF_hdr_t *hdr)
if(u < hdr->man_dtable.max_direct_rows) {
hdr->man_dtable.row_tot_dblock_free[u] = hdr->man_dtable.row_block_size[u] -
H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr);
- H5_ASSIGN_OVERFLOW(/* To: */ hdr->man_dtable.row_max_dblock_free[u], /* From: */ hdr->man_dtable.row_tot_dblock_free[u], /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(hdr->man_dtable.row_max_dblock_free[u], size_t, hdr->man_dtable.row_tot_dblock_free[u], hsize_t);
} /* end if */
else
if(H5HF_hdr_compute_free_space(hdr, u) < 0)
diff --git a/src/H5HFhuge.c b/src/H5HFhuge.c
index 6f0b48e..7f0da02 100644
--- a/src/H5HFhuge.c
+++ b/src/H5HFhuge.c
@@ -653,7 +653,7 @@ H5HF_huge_op_real(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
/* Retrieve the object's address & length */
obj_addr = found_rec.addr;
- H5_ASSIGN_OVERFLOW(/* To: */ obj_size, /* From: */ found_rec.len, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(obj_size, size_t, found_rec.len, hsize_t);
filter_mask = found_rec.filter_mask;
} /* end if */
else {
@@ -669,7 +669,7 @@ H5HF_huge_op_real(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
/* Retrieve the object's address & length */
obj_addr = found_rec.addr;
- H5_ASSIGN_OVERFLOW(/* To: */ obj_size, /* From: */ found_rec.len, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(obj_size, size_t, found_rec.len, hsize_t);
} /* end else */
} /* end else */
@@ -797,7 +797,7 @@ H5HF_huge_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
/* Retrieve the object's address & length */
obj_addr = found_rec.addr;
- H5_ASSIGN_OVERFLOW(/* To: */ obj_size, /* From: */ found_rec.len, /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(obj_size, size_t, found_rec.len, hsize_t);
} /* end else */
/* Write the object's data to the file */
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index a3c43ac..d946815 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -121,7 +121,7 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
/*-------------------------------------------------------------------------
- * Function: H5HL_fl_deserialize
+ * Function: H5HL__fl_deserialize
*
* Purpose: Deserialize the free list for a heap data block
*
@@ -134,13 +134,13 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
*-------------------------------------------------------------------------
*/
static herr_t
-H5HL_fl_deserialize(H5HL_t *heap)
+H5HL__fl_deserialize(H5HL_t *heap)
{
H5HL_free_t *fl = NULL, *tail = NULL; /* Heap free block nodes */
hsize_t free_block; /* Offset of free block */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check arguments */
HDassert(heap);
@@ -188,11 +188,11 @@ done:
fl = H5FL_FREE(H5HL_free_t, fl);
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_fl_deserialize() */
+} /* end H5HL__fl_deserialize() */
/*-------------------------------------------------------------------------
- * Function: H5HL_fl_serialize
+ * Function: H5HL__fl_serialize
*
* Purpose: Serialize the free list for a heap data block
*
@@ -206,11 +206,11 @@ done:
*-------------------------------------------------------------------------
*/
static void
-H5HL_fl_serialize(const H5HL_t *heap)
+H5HL__fl_serialize(const H5HL_t *heap)
{
H5HL_free_t *fl; /* Pointer to heap free list node */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* check arguments */
HDassert(heap);
@@ -231,7 +231,7 @@ H5HL_fl_serialize(const H5HL_t *heap)
} /* end for */
FUNC_LEAVE_NOAPI_VOID
-} /* end H5HL_fl_serialize() */
+} /* end H5HL__fl_serialize() */
/*-------------------------------------------------------------------------
@@ -258,6 +258,7 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
size_t spec_read_size; /* Size of buffer to speculatively read in */
const uint8_t *p; /* Pointer into decoding buffer */
haddr_t eoa; /* Relative end of file address */
+ hsize_t min; /* temp min value to avoid macro nesting */
H5HL_prfx_t *ret_value; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@@ -276,7 +277,8 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, NULL, "unable to determine file size")
/* Compute the size of the speculative local heap prefix buffer */
- H5_ASSIGN_OVERFLOW(spec_read_size, MIN(eoa - addr, H5HL_SPEC_READ_SIZE), /* From: */ hsize_t, /* To: */ size_t);
+ min = MIN(eoa - addr, H5HL_SPEC_READ_SIZE);
+ H5_CHECKED_ASSIGN(spec_read_size, size_t, min, hsize_t);
HDassert(spec_read_size >= udata->sizeof_prfx);
/* Attempt to speculatively read both local heap prefix and heap data */
@@ -298,11 +300,11 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space in memory for the heap */
if(NULL == (heap = H5HL_new(udata->sizeof_size, udata->sizeof_addr, udata->sizeof_prfx)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap structure")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap structure")
/* Allocate the heap prefix */
if(NULL == (prfx = H5HL_prfx_new(heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap prefix")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap prefix")
/* Store the prefix's address & length */
heap->prfx_addr = udata->prfx_addr;
@@ -313,8 +315,9 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Free list head */
H5F_DECODE_LENGTH_LEN(p, heap->free_block, udata->sizeof_size);
- if(heap->free_block != H5HL_FREE_NULL && heap->free_block >= heap->dblk_size)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "bad heap free list")
+
+ if((heap->free_block != H5HL_FREE_NULL) && (heap->free_block >= heap->dblk_size))
+ HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "bad heap free list")
/* Heap data address */
H5F_addr_decode_len(udata->sizeof_addr, &p, &(heap->dblk_addr));
@@ -347,7 +350,7 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
} /* end else */
/* Build free list */
- if(H5HL_fl_deserialize(heap) < 0)
+ if(H5HL__fl_deserialize(heap) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
} /* end if */
else
@@ -453,7 +456,7 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
} /* end if */
/* Serialize the free list into the heap data's image */
- H5HL_fl_serialize(heap);
+ H5HL__fl_serialize(heap);
/* Copy the heap data block into the cache image */
HDmemcpy(p, heap->dblk_image, heap->dblk_size);
@@ -632,7 +635,7 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
FUNC_ENTER_NOAPI_NOINIT
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(H5F_addr_defined(addr));
HDassert(udata);
@@ -642,7 +645,7 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space in memory for the heap data block */
if(NULL == (dblk = H5HL_dblk_new(udata->heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Check for heap still retaining image */
if(NULL == udata->heap->dblk_image) {
@@ -655,7 +658,7 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read local heap data block")
/* Build free list */
- if(H5HL_fl_deserialize(udata->heap) < 0)
+ if(H5HL__fl_deserialize(udata->heap) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
} /* end if */
@@ -669,7 +672,7 @@ done:
/* Release the [possibly partially initialized] local heap on errors */
if(!ret_value && dblk)
if(H5HL_dblk_dest(dblk) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, NULL, "unable to destroy local heap data block")
+ HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, NULL, "unable to destroy local heap data block")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HL_datablock_load() */
@@ -712,7 +715,7 @@ H5HL_datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
heap->free_block = heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL;
/* Serialize the free list into the heap data's image */
- H5HL_fl_serialize(heap);
+ H5HL__fl_serialize(heap);
/* Write the data block to the file */
if(H5F_block_write(f, H5FD_MEM_LHEAP, heap->dblk_addr, heap->dblk_size, dxpl_id, heap->dblk_image) < 0)
@@ -752,7 +755,7 @@ H5HL_datablock_dest(H5F_t *f, void *_thing)
FUNC_ENTER_NOAPI_NOINIT
- /* check arguments */
+ /* Check arguments */
HDassert(dblk);
HDassert(dblk->heap);
HDassert(!dblk->heap->single_cache_obj);
@@ -802,7 +805,7 @@ H5HL_datablock_clear(H5F_t *f, void *_thing, hbool_t destroy)
FUNC_ENTER_NOAPI_NOINIT
- /* check arguments */
+ /* Check arguments */
HDassert(dblk);
/* Mark local heap data block as clean */
diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h
index bf9be2c..880cc05 100644
--- a/src/H5HLpkg.h
+++ b/src/H5HLpkg.h
@@ -114,9 +114,9 @@ struct H5HL_dblk_t {
/* Struct for heap prefix */
struct H5HL_prfx_t {
- H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
- /* first field in structure */
- H5HL_t *heap; /* Pointer to heap for prefix */
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, */
+ /* _must_ be first field in structure */
+ H5HL_t *heap; /* Pointer to heap for prefix */
};
/* Callback information for loading local heap prefix from disk */
diff --git a/src/H5I.c b/src/H5I.c
index 54b7ecc..528be81 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -433,7 +433,7 @@ H5Inmembers(H5I_type_t type, hsize_t *num_members)
if((members = H5I_nmembers(type)) < 0)
HGOTO_ERROR(H5E_ATOM, H5E_CANTCOUNT, FAIL, "can't compute number of members")
- H5_ASSIGN_OVERFLOW(*num_members, members, int64_t, hsize_t);
+ H5_CHECKED_ASSIGN(*num_members, hsize_t, members, int64_t);
} /* end if */
done:
@@ -460,7 +460,7 @@ int64_t
H5I_nmembers(H5I_type_t type)
{
H5I_id_type_t *type_ptr = NULL;
- int ret_value;
+ int64_t ret_value;
FUNC_ENTER_NOAPI(FAIL)
@@ -470,7 +470,7 @@ H5I_nmembers(H5I_type_t type)
HGOTO_DONE(0);
/* Set return value */
- H5_ASSIGN_OVERFLOW(ret_value, type_ptr->id_count, uint64_t, int64_t);
+ H5_CHECKED_ASSIGN(ret_value, int64_t, type_ptr->id_count, uint64_t);
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -593,15 +593,9 @@ H5I_clear_type(H5I_type_t type, hbool_t force, hbool_t app_ref)
/* Check if we should delete this node or not */
if(delete_node) {
- /* Decrement the number of IDs in the type */
- (type_ptr->id_count)--;
-
- /* Remove the node from the list */
- if(NULL == H5SL_remove(type_ptr->ids, &cur->id))
- HGOTO_ERROR(H5E_ATOM, H5E_CANTDELETE, FAIL, "can't remove ID node from skip list")
-
- /* Free the node */
- cur = H5FL_FREE(H5I_id_info_t, cur);
+ /* Remove the node from the type */
+ if(NULL == H5I__remove_common(type_ptr, cur->id))
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTDELETE, FAIL, "can't remove ID node")
} /* end if */
} /* end for */
@@ -1208,8 +1202,6 @@ done:
int
H5I_dec_ref(hid_t id)
{
- H5I_type_t type; /*type the object is in*/
- H5I_id_type_t *type_ptr; /*ptr to the type */
H5I_id_info_t *id_ptr; /*ptr to the new ID */
int ret_value; /* Return value */
@@ -1218,17 +1210,9 @@ H5I_dec_ref(hid_t id)
/* Sanity check */
HDassert(id >= 0);
- /* Check arguments */
- type = H5I_TYPE(id);
- if(type <= H5I_BADID || type >= H5I_next_type)
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number")
- type_ptr = H5I_id_type_list_g[type];
- if(NULL == type_ptr || type_ptr->init_count <= 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number")
-
/* General lookup of the ID */
- if(NULL == (id_ptr = (H5I_id_info_t *)H5SL_search(type_ptr->ids, &id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID")
+ if(NULL == (id_ptr = H5I__find_id(id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID")
/*
* If this is the last reference to the object then invoke the type's
@@ -1246,6 +1230,11 @@ H5I_dec_ref(hid_t id)
* file. We have to close the dataset anyway. (SLU - 2010/9/7)
*/
if(1 == id_ptr->count) {
+ H5I_id_type_t *type_ptr; /*ptr to the type */
+
+ /* Get the ID's type */
+ type_ptr = H5I_id_type_list_g[H5I_TYPE(id)];
+
/* (Casting away const OK -QAK) */
if(!type_ptr->cls->free_func || (type_ptr->cls->free_func)((void *)id_ptr->obj_ptr) >= 0) {
/* Remove the node from the type */
@@ -1409,8 +1398,6 @@ done:
int
H5I_inc_ref(hid_t id, hbool_t app_ref)
{
- H5I_type_t type; /*type the object is in*/
- H5I_id_type_t *type_ptr; /*ptr to the type */
H5I_id_info_t *id_ptr; /*ptr to the ID */
int ret_value; /* Return value */
@@ -1419,16 +1406,8 @@ H5I_inc_ref(hid_t id, hbool_t app_ref)
/* Sanity check */
HDassert(id >= 0);
- /* Check arguments */
- type = H5I_TYPE(id);
- if(type <= H5I_BADID || type >= H5I_next_type)
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number")
- type_ptr = H5I_id_type_list_g[type];
- if(!type_ptr || type_ptr->init_count <= 0)
- HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid type")
-
/* General lookup of the ID */
- if(NULL == (id_ptr = (H5I_id_info_t *)H5SL_search(type_ptr->ids, &id)))
+ if(NULL == (id_ptr = H5I__find_id(id)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID")
/* Adjust reference counts */
@@ -1494,8 +1473,6 @@ done:
int
H5I_get_ref(hid_t id, hbool_t app_ref)
{
- H5I_type_t type; /*type the object is in*/
- H5I_id_type_t *type_ptr; /*ptr to the type */
H5I_id_info_t *id_ptr; /*ptr to the ID */
int ret_value; /* Return value */
@@ -1504,16 +1481,8 @@ H5I_get_ref(hid_t id, hbool_t app_ref)
/* Sanity check */
HDassert(id >= 0);
- /* Check arguments */
- type = H5I_TYPE(id);
- if(type <= H5I_BADID || type >= H5I_next_type)
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number")
- type_ptr = H5I_id_type_list_g[type];
- if(!type_ptr || type_ptr->init_count <= 0)
- HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid type")
-
/* General lookup of the ID */
- if(NULL == (id_ptr = (H5I_id_info_t *)H5SL_search(type_ptr->ids, &id)))
+ if(NULL == (id_ptr = H5I__find_id(id)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID")
/* Set return value */
@@ -2016,20 +1985,20 @@ done:
static H5I_id_info_t *
H5I__find_id(hid_t id)
{
- H5I_id_type_t *type_ptr; /*ptr to the type */
H5I_type_t type; /*ID's type */
+ H5I_id_type_t *type_ptr; /*ptr to the type */
H5I_id_info_t *ret_value; /*return value */
FUNC_ENTER_STATIC_NOERR
/* Check arguments */
type = H5I_TYPE(id);
- if (type <= H5I_BADID || type >= H5I_next_type)
- HGOTO_DONE(NULL);
+ if(type <= H5I_BADID || type >= H5I_next_type)
+ HGOTO_DONE(NULL)
type_ptr = H5I_id_type_list_g[type];
- if (!type_ptr || type_ptr->init_count <= 0)
- HGOTO_DONE(NULL);
+ if(!type_ptr || type_ptr->init_count <= 0)
+ HGOTO_DONE(NULL)
/* Locate the ID node for the ID */
ret_value = (H5I_id_info_t *)H5SL_search(type_ptr->ids, &id);
diff --git a/src/H5MF.c b/src/H5MF.c
index 29e9ece..eecd724 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -1383,7 +1383,7 @@ H5MF_get_free_sections(H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, size_t nsects,
/* Query how many sections of this type */
if(H5FS_sect_stats(f->shared->fs_man[ty], NULL, &hnums) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGET, FAIL, "can't query free space stats")
- H5_ASSIGN_OVERFLOW(nums, hnums, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(nums, size_t, hnums, hsize_t);
/* Increment total # of sections */
total_sects += nums;
diff --git a/src/H5O.c b/src/H5O.c
index 1fd7225..6745716 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -2716,8 +2716,8 @@ H5O_get_hdr_info_real(const H5O_t *oh, H5O_hdr_info_t *hdr)
hdr->version = oh->version;
/* Set the number of messages & chunks */
- H5_ASSIGN_OVERFLOW(hdr->nmesgs, oh->nmesgs, size_t, unsigned);
- H5_ASSIGN_OVERFLOW(hdr->nchunks, oh->nchunks, size_t, unsigned);
+ H5_CHECKED_ASSIGN(hdr->nmesgs, unsigned, oh->nmesgs, size_t);
+ H5_CHECKED_ASSIGN(hdr->nchunks, unsigned, oh->nchunks, size_t);
/* Set the status flags */
hdr->flags = oh->flags;
diff --git a/src/H5Oattr.c b/src/H5Oattr.c
index 2269bd3..9710f5d 100644
--- a/src/H5Oattr.c
+++ b/src/H5Oattr.c
@@ -218,7 +218,7 @@ H5O_attr_decode(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned UNUSED mesg_fl
p += attr->shared->ds_size;
/* Compute the size of the data */
- H5_ASSIGN_OVERFLOW(attr->shared->data_size, H5S_GET_EXTENT_NPOINTS(attr->shared->ds) * H5T_get_size(attr->shared->dt), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(attr->shared->data_size, size_t, H5S_GET_EXTENT_NPOINTS(attr->shared->ds) * H5T_get_size(attr->shared->dt), hsize_t);
/* Go get the data */
if(attr->shared->data_size) {
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index b3dea03..3ccdf11 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -81,15 +81,15 @@ static herr_t H5O_cache_chk_clear(H5F_t *f, H5O_chunk_proxy_t *chk_proxy, hbool_
static herr_t H5O_cache_chk_size(const H5F_t *f, const H5O_chunk_proxy_t *chk_proxy, size_t *size_ptr);
/* Chunk proxy routines */
-static herr_t H5O_chunk_proxy_dest(H5O_chunk_proxy_t *chunk_proxy);
+static herr_t H5O__chunk_proxy_dest(H5O_chunk_proxy_t *chunk_proxy);
/* Chunk routines */
-static herr_t H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len,
+static herr_t H5O__chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len,
const uint8_t *image, H5O_common_cache_ud_t *udata, hbool_t *dirty);
-static herr_t H5O_chunk_serialize(const H5F_t *f, H5O_t *oh, unsigned chunkno);
+static herr_t H5O__chunk_serialize(const H5F_t *f, H5O_t *oh, unsigned chunkno);
/* Misc. routines */
-static herr_t H5O_add_cont_msg(H5O_cont_msgs_t *cont_msg_info,
+static herr_t H5O__add_cont_msg(H5O_cont_msgs_t *cont_msg_info,
const H5O_cont_t *cont);
@@ -184,7 +184,7 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, NULL, "unable to determine file size")
/* Compute the size of the speculative object header buffer */
- H5_ASSIGN_OVERFLOW(spec_read_size, MIN(eoa - addr, H5O_SPEC_READ_SIZE), /* From: */ hsize_t, /* To: */ size_t);
+ H5_CHECKED_ASSIGN(spec_read_size, size_t, MIN(eoa - addr, H5O_SPEC_READ_SIZE), hsize_t);
/* Attempt to speculatively read both object header prefix and first chunk */
if(H5F_block_read(f, H5FD_MEM_OHDR, addr, spec_read_size, dxpl_id, read_buf) < 0)
@@ -193,7 +193,7 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space for the object header data structure */
if(NULL == (oh = H5FL_CALLOC(H5O_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* File-specific, non-stored information */
oh->sizeof_size = H5F_SIZEOF_SIZE(udata->common.f);
@@ -333,7 +333,7 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
buf = read_buf;
/* Parse the first chunk */
- if(H5O_chunk_deserialize(oh, udata->common.addr, oh->chunk0_size, buf, &(udata->common), &oh->cache_info.is_dirty) < 0)
+ if(H5O__chunk_deserialize(oh, udata->common.addr, oh->chunk0_size, buf, &(udata->common), &oh->cache_info.is_dirty) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "can't deserialize first object header chunk")
/* Note that we've loaded the object header from the file */
@@ -350,7 +350,7 @@ done:
/* Release the [possibly partially initialized] object header on errors */
if(!ret_value && oh)
if(H5O_free(oh) < 0)
- HDONE_ERROR(H5E_OHDR, H5E_CANTRELEASE, NULL, "unable to destroy object header data")
+ HDONE_ERROR(H5E_OHDR, H5E_CANTRELEASE, NULL, "unable to destroy object header data")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_load() */
@@ -480,7 +480,7 @@ H5O_assert(oh);
HDassert((size_t)(p - oh->chunk[0].image) == (size_t)(H5O_SIZEOF_HDR(oh) - H5O_SIZEOF_CHKSUM_OH(oh)));
/* Serialize messages for this chunk */
- if(H5O_chunk_serialize(f, oh, (unsigned)0) < 0)
+ if(H5O__chunk_serialize(f, oh, (unsigned)0) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL, "unable to serialize first object header chunk")
/* Write the chunk out */
@@ -522,7 +522,7 @@ H5O_dest(H5F_t *f, H5O_t *oh)
FUNC_ENTER_NOAPI_NOINIT
- /* check args */
+ /* Check arguments */
HDassert(oh);
HDassert(oh->rc == 0);
@@ -585,7 +585,7 @@ H5O_clear(H5F_t *f, H5O_t *oh, hbool_t destroy)
FUNC_ENTER_NOAPI_NOINIT
- /* check args */
+ /* Check arguments */
HDassert(oh);
#ifdef H5_HAVE_PARALLEL
@@ -603,16 +603,13 @@ H5O_clear(H5F_t *f, H5O_t *oh, hbool_t destroy)
for ( i = 0; i < oh->nchunks; i++ ) {
- if ( H5O_chunk_serialize(f, oh, i) < 0 ) {
-
- HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL,
- "unable to serialize object header chunk")
- }
+ if(H5O__chunk_serialize(f, oh, i) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL, "unable to serialize object header chunk")
}
}
#endif /* H5_HAVE_PARALLEL */
- /* Mark messages as clean */
+ /* Mark messages stored with the object header (i.e. messages in chunk 0) as clean */
for(u = 0; u < oh->nmesgs; u++)
oh->mesg[u].dirty = FALSE;
@@ -722,7 +719,7 @@ H5O_cache_chk_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HDassert(udata->common.cont_msg_info);
/* Parse the chunk */
- if(H5O_chunk_deserialize(udata->oh, udata->common.addr, udata->size, buf, &(udata->common), &chk_proxy->cache_info.is_dirty) < 0)
+ if(H5O__chunk_deserialize(udata->oh, udata->common.addr, udata->size, buf, &(udata->common), &chk_proxy->cache_info.is_dirty) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "can't deserialize object header chunk")
/* Set the fields for the chunk proxy */
@@ -737,8 +734,8 @@ H5O_cache_chk_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
chk_proxy->oh = udata->oh;
chk_proxy->chunkno = udata->chunkno;
- /* Sanity check that the chunk representation we have in memory is the same
- * as the one being brought in from disk.
+ /* Sanity check that the chunk representation we have in memory is
+ * the same as the one being brought in from disk.
*/
HDassert(0 == HDmemcmp(buf, chk_proxy->oh->chunk[chk_proxy->chunkno].image, chk_proxy->oh->chunk[chk_proxy->chunkno].size));
} /* end else */
@@ -757,7 +754,7 @@ done:
/* Release the [possibly partially initialized] object header on errors */
if(!ret_value && chk_proxy)
- if(H5O_chunk_proxy_dest(chk_proxy) < 0)
+ if(H5O__chunk_proxy_dest(chk_proxy) < 0)
HDONE_ERROR(H5E_OHDR, H5E_CANTRELEASE, NULL, "unable to destroy object header chunk proxy")
FUNC_LEAVE_NOAPI(ret_value)
@@ -788,7 +785,7 @@ H5O_cache_chk_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
/* flush */
if(chk_proxy->cache_info.is_dirty) {
/* Serialize messages for this chunk */
- if(H5O_chunk_serialize(f, chk_proxy->oh, chk_proxy->chunkno) < 0)
+ if(H5O__chunk_serialize(f, chk_proxy->oh, chk_proxy->chunkno) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL, "unable to serialize object header continuation chunk")
/* Write the chunk out */
@@ -850,7 +847,7 @@ H5O_cache_chk_dest(H5F_t *f, H5O_chunk_proxy_t *chk_proxy)
} /* end if */
/* Destroy object header chunk proxy */
- if(H5O_chunk_proxy_dest(chk_proxy) < 0)
+ if(H5O__chunk_proxy_dest(chk_proxy) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTRELEASE, FAIL, "unable to destroy object header chunk proxy")
done:
@@ -903,18 +900,13 @@ H5O_cache_chk_clear(H5F_t *f, H5O_chunk_proxy_t *chk_proxy, hbool_t destroy)
FUNC_ENTER_NOAPI_NOINIT
- /* check args */
+ /* Check arguments */
HDassert(chk_proxy);
#ifdef H5_HAVE_PARALLEL
- if ( ( chk_proxy->oh->cache_info.is_dirty ) && ( ! destroy ) ) {
-
- if ( H5O_chunk_serialize(f, chk_proxy->oh, chk_proxy->chunkno) < 0 ) {
-
- HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL,
- "unable to serialize object header chunk")
- }
- }
+ if((chk_proxy->oh->cache_info.is_dirty) && (!destroy))
+ if(H5O__chunk_serialize(f, chk_proxy->oh, chk_proxy->chunkno) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTSERIALIZE, FAIL, "unable to serialize object header chunk")
#endif /* H5_HAVE_PARALLEL */
/* Mark messages in chunk as clean */
@@ -966,7 +958,7 @@ H5O_cache_chk_size(const H5F_t UNUSED *f, const H5O_chunk_proxy_t *chk_proxy, si
/*-------------------------------------------------------------------------
- * Function: H5O_add_cont_msg
+ * Function: H5O__add_cont_msg
*
* Purpose: Add information from a continuation message to the list of
* continuation messages in the object header
@@ -981,12 +973,12 @@ H5O_cache_chk_size(const H5F_t UNUSED *f, const H5O_chunk_proxy_t *chk_proxy, si
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_add_cont_msg(H5O_cont_msgs_t *cont_msg_info, const H5O_cont_t *cont)
+H5O__add_cont_msg(H5O_cont_msgs_t *cont_msg_info, const H5O_cont_t *cont)
{
size_t contno; /* Continuation message index */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments */
HDassert(cont_msg_info);
@@ -1011,11 +1003,11 @@ H5O_add_cont_msg(H5O_cont_msgs_t *cont_msg_info, const H5O_cont_t *cont)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5O_add_cont_msg() */
+} /* H5O__add_cont_msg() */
/*-------------------------------------------------------------------------
- * Function: H5O_chunk_deserialize
+ * Function: H5O__chunk_deserialize
*
* Purpose: Deserialize a chunk for an object header
*
@@ -1029,7 +1021,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
+H5O__chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
H5O_common_cache_ud_t *udata, hbool_t *dirty)
{
const uint8_t *p; /* Pointer into buffer to decode */
@@ -1042,7 +1034,7 @@ H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
#endif /* NDEBUG */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments */
HDassert(oh);
@@ -1063,7 +1055,7 @@ H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
} /* end if */
/* Init the chunk data info */
- chunkno = oh->nchunks++;
+ chunkno = (unsigned)oh->nchunks++;
oh->chunk[chunkno].gap = 0;
if(chunkno == 0) {
/* First chunk's 'image' includes room for the object header prefix */
@@ -1294,7 +1286,7 @@ H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
oh->mesg[curmesg].native = cont;
/* Add to continuation messages left to interpret */
- if(H5O_add_cont_msg(udata->cont_msg_info, cont) < 0)
+ if(H5O__add_cont_msg(udata->cont_msg_info, cont) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't add continuation message")
/* Mark the message & chunk as dirty if the message was changed by decoding */
@@ -1350,11 +1342,11 @@ H5O_chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5O_chunk_deserialize() */
+} /* H5O__chunk_deserialize() */
/*-------------------------------------------------------------------------
- * Function: H5O_chunk_serialize
+ * Function: H5O__chunk_serialize
*
* Purpose: Serialize a chunk for an object header
*
@@ -1368,13 +1360,13 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_chunk_serialize(const H5F_t *f, H5O_t *oh, unsigned chunkno)
+H5O__chunk_serialize(const H5F_t *f, H5O_t *oh, unsigned chunkno)
{
H5O_mesg_t *curr_msg; /* Pointer to current message being operated on */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments */
HDassert(f);
@@ -1415,11 +1407,11 @@ H5O_chunk_serialize(const H5F_t *f, H5O_t *oh, unsigned chunkno)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5O_chunk_serialize() */
+} /* H5O__chunk_serialize() */
/*-------------------------------------------------------------------------
- * Function: H5O_chunk_proxy_dest
+ * Function: H5O__chunk_proxy_dest
*
* Purpose: Destroy a chunk proxy object
*
@@ -1433,11 +1425,11 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_chunk_proxy_dest(H5O_chunk_proxy_t *chk_proxy)
+H5O__chunk_proxy_dest(H5O_chunk_proxy_t *chk_proxy)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Check arguments */
HDassert(chk_proxy);
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index a0fc42e..33022fc 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -977,7 +977,7 @@ H5O_fill_convert(H5O_fill_t *fill, H5T_t *dset_type, hbool_t *fill_changed, hid_
} /* end if */
H5T_close(fill->type);
fill->type = NULL;
- H5_ASSIGN_OVERFLOW(fill->size, H5T_get_size(dset_type), size_t, ssize_t);
+ H5_CHECKED_ASSIGN(fill->size, ssize_t, H5T_get_size(dset_type), size_t);
/* Note that the fill value info has changed */
*fill_changed = TRUE;
diff --git a/src/H5Omessage.c b/src/H5Omessage.c
index 1369583..d361194 100644
--- a/src/H5Omessage.c
+++ b/src/H5Omessage.c
@@ -73,10 +73,10 @@ typedef struct {
/* Local Prototypes */
/********************/
-static herr_t H5O_msg_reset_real(const H5O_msg_class_t *type, void *native);
-static herr_t H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
+static herr_t H5O__msg_reset_real(const H5O_msg_class_t *type, void *native);
+static herr_t H5O__msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
unsigned sequence, unsigned *oh_modified, void *_udata/*in,out*/);
-static herr_t H5O_copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
+static herr_t H5O__copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
const H5O_msg_class_t *type, const void *mesg, unsigned mesg_flags,
unsigned update_flags);
@@ -224,7 +224,7 @@ H5O_msg_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *t
HGOTO_ERROR(H5E_OHDR, H5E_NOSPACE, FAIL, "unable to create new message")
/* Copy the information for the message */
- if(H5O_copy_mesg(f, dxpl_id, oh, idx, type, mesg, mesg_flags, update_flags) < 0)
+ if(H5O__copy_mesg(f, dxpl_id, oh, idx, type, mesg, mesg_flags, update_flags) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to write message")
#ifdef H5O_DEBUG
H5O_assert(oh);
@@ -426,7 +426,7 @@ H5O_msg_write_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *ty
} /* end if */
/* Copy the information for the message */
- if(H5O_copy_mesg(f, dxpl_id, oh, idx, type, mesg, mesg_flags, update_flags) < 0)
+ if(H5O__copy_mesg(f, dxpl_id, oh, idx, type, mesg, mesg_flags, update_flags) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to write message")
#ifdef H5O_DEBUG
H5O_assert(oh);
@@ -586,7 +586,7 @@ H5O_msg_reset(unsigned type_id, void *native)
HDassert(type);
/* Call the "real" reset routine */
- if(H5O_msg_reset_real(type, native) < 0)
+ if(H5O__msg_reset_real(type, native) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTRESET, FAIL, "unable to reset object header")
done:
@@ -595,7 +595,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_msg_reset_real
+ * Function: H5O__msg_reset_real
*
* Purpose: Some message data structures have internal fields that
* need to be freed. This function does that if appropriate
@@ -610,11 +610,11 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_msg_reset_real(const H5O_msg_class_t *type, void *native)
+H5O__msg_reset_real(const H5O_msg_class_t *type, void *native)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check args */
HDassert(type);
@@ -630,7 +630,7 @@ H5O_msg_reset_real(const H5O_msg_class_t *type, void *native)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_msg_reset_real() */
+} /* end H5O__msg_reset_real() */
/*-------------------------------------------------------------------------
@@ -719,7 +719,7 @@ H5O_msg_free_real(const H5O_msg_class_t *type, void *msg_native)
HDassert(type);
if(msg_native) {
- H5O_msg_reset_real(type, msg_native);
+ H5O__msg_reset_real(type, msg_native);
if(NULL != (type->free))
(type->free)(msg_native);
else
@@ -807,7 +807,7 @@ H5O_msg_count(const H5O_loc_t *loc, unsigned type_id, hid_t dxpl_id)
/* Count the messages of the correct type */
msg_count = H5O_msg_count_real(oh, type);
- H5_ASSIGN_OVERFLOW(ret_value, msg_count, unsigned, int);
+ H5_CHECKED_ASSIGN(ret_value, int, msg_count, unsigned);
done:
if(oh && H5O_unprotect(loc, dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
@@ -1049,7 +1049,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_msg_remove_cb
+ * Function: H5O__msg_remove_cb
*
* Purpose: Object header iterator callback routine to remove messages
* of a particular type that match a particular sequence number,
@@ -1064,14 +1064,14 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
+H5O__msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
unsigned *oh_modified, void *_udata/*in,out*/)
{
H5O_iter_rm_t *udata = (H5O_iter_rm_t *)_udata; /* Operator user data */
htri_t try_remove = FALSE; /* Whether to try removing a message */
herr_t ret_value = H5_ITER_CONT; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check args */
HDassert(mesg);
@@ -1109,7 +1109,7 @@ H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_msg_remove_cb() */
+} /* end H5O__msg_remove_cb() */
/*-------------------------------------------------------------------------
@@ -1160,7 +1160,7 @@ H5O_msg_remove_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
/* Iterate over the messages, deleting appropriate one(s) */
op.op_type = H5O_MESG_OP_LIB;
- op.u.lib_op = H5O_msg_remove_cb;
+ op.u.lib_op = H5O__msg_remove_cb;
if(H5O_msg_iterate_real(f, oh, type, &op, &udata, dxpl_id) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "error iterating over messages")
@@ -1950,7 +1950,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_copy_mesg
+ * Function: H5O__copy_mesg
*
* Purpose: Make a copy of the native object for an object header's
* native message info
@@ -1963,7 +1963,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
+H5O__copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
const H5O_msg_class_t *type, const void *mesg, unsigned mesg_flags,
unsigned update_flags)
{
@@ -1972,7 +1972,7 @@ H5O_copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
hbool_t chk_dirtied = FALSE; /* Flag for unprotecting chunk */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* check args */
HDassert(f);
@@ -1986,7 +1986,7 @@ H5O_copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, size_t idx,
HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to protect object header chunk")
/* Reset existing native information for the header's message */
- H5O_msg_reset_real(type, idx_msg->native);
+ H5O__msg_reset_real(type, idx_msg->native);
/* Copy the native object for the message */
if(NULL == (idx_msg->native = (type->copy)(mesg, idx_msg->native)))
@@ -2015,7 +2015,7 @@ done:
HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header chunk")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_copy_mesg() */
+} /* end H5O__copy_mesg() */
/*-------------------------------------------------------------------------
@@ -2300,7 +2300,7 @@ H5O_msg_get_chunkno(const H5O_loc_t *loc, unsigned type_id, hid_t dxpl_id)
HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "message type not found")
/* Set return value */
- H5_ASSIGN_OVERFLOW(ret_value, idx_msg->chunkno, unsigned, int);
+ H5_CHECKED_ASSIGN(ret_value, int, idx_msg->chunkno, unsigned);
done:
if(oh && H5O_unprotect(loc, dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index 09a5b9c..1059e8b 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -467,8 +467,8 @@ typedef struct H5O_layout_chunk_t {
uint32_t dim[H5O_LAYOUT_NDIMS]; /* Size of chunk in elements */
uint32_t size; /* Size of chunk in bytes */
hsize_t nchunks; /* Number of chunks in dataset */
- hsize_t chunks[H5O_LAYOUT_NDIMS]; /* # of chunks in dataset dimensions */
- hsize_t down_chunks[H5O_LAYOUT_NDIMS]; /* "down" size of number of chunks in each dimension */
+ hsize_t chunks[H5O_LAYOUT_NDIMS]; /* # of chunks in each dataset dimension */
+ hsize_t down_chunks[H5O_LAYOUT_NDIMS]; /* "down" size of number of chunks in each dimension */
} H5O_layout_chunk_t;
typedef struct H5O_layout_t {
diff --git a/src/H5PL.c b/src/H5PL.c
index 619dd84..f4cd3e7 100644
--- a/src/H5PL.c
+++ b/src/H5PL.c
@@ -237,10 +237,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5PLget_loading_state(unsigned int* plugin_type)
+H5PLget_loading_state(unsigned int *plugin_type)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
+ H5TRACE1("e", "*Iu", plugin_type);
if(plugin_type)
*plugin_type = H5PL_plugin_g;
diff --git a/src/H5Pencdec.c b/src/H5Pencdec.c
index 3285ae3..bd0a260 100644
--- a/src/H5Pencdec.c
+++ b/src/H5Pencdec.c
@@ -509,7 +509,7 @@ H5P__decode_size_t(const void **_pp, void *_value)
/* Decode the value */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
- H5_ASSIGN_OVERFLOW(*value, enc_value, uint64_t, size_t);
+ H5_CHECKED_ASSIGN(*value, size_t, enc_value, uint64_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__decode_size_t() */
@@ -550,7 +550,7 @@ H5P__decode_hsize_t(const void **_pp, void *_value)
/* Decode the value */
UINT64DECODE_VAR(*pp, enc_value, enc_size);
- H5_ASSIGN_OVERFLOW(*value, enc_value, uint64_t, hsize_t);
+ H5_CHECKED_ASSIGN(*value, hsize_t, enc_value, uint64_t);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5P__decode_hsize_t() */
diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c
index b7d5106..1e3a278 100644
--- a/src/H5Pgcpl.c
+++ b/src/H5Pgcpl.c
@@ -179,7 +179,7 @@ H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info")
/* Update field */
- H5_ASSIGN_OVERFLOW(ginfo.lheap_size_hint, size_hint, size_t, uint32_t);
+ H5_CHECKED_ASSIGN(ginfo.lheap_size_hint, uint32_t, size_hint, size_t);
/* Set value */
if(H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0)
diff --git a/src/H5Rpublic.h b/src/H5Rpublic.h
index 997309f..e990661 100644
--- a/src/H5Rpublic.h
+++ b/src/H5Rpublic.h
@@ -14,7 +14,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * This file contains public declarations for the H5S module.
+ * This file contains public declarations for the H5R module.
*/
#ifndef _H5Rpublic_H
#define _H5Rpublic_H
diff --git a/src/H5S.c b/src/H5S.c
index 045ab51..4a4ed8d 100644
--- a/src/H5S.c
+++ b/src/H5S.c
@@ -1564,7 +1564,7 @@ H5S_encode(H5S_t *obj, unsigned char *buf, size_t *nalloc)
/* Find out the size of buffer needed for selection */
if((sselect_size = H5S_SELECT_SERIAL_SIZE(f, obj)) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_BADSIZE, FAIL, "can't find dataspace selection size")
- H5_ASSIGN_OVERFLOW(select_size, sselect_size, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(select_size, size_t, sselect_size, hssize_t);
/* Verify the size of buffer. If it's not big enough, simply return the
* right size without filling the buffer. */
@@ -2201,14 +2201,13 @@ H5S_extend(H5S_t *space, const hsize_t *size)
HDassert(size);
/* Check through all the dimensions to see if modifying the dataspace is allowed */
- for(u = 0; u < space->extent.rank; u++) {
- if(space->extent.size[u]<size[u]) {
- if(space->extent.max && H5S_UNLIMITED!=space->extent.max[u] &&
- space->extent.max[u]<size[u])
+ for(u = 0; u < space->extent.rank; u++)
+ if(space->extent.size[u] < size[u]) {
+ if(space->extent.max && H5S_UNLIMITED != space->extent.max[u] &&
+ space->extent.max[u] < size[u])
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dimension cannot be increased")
ret_value++;
} /* end if */
- } /* end for */
/* Update */
if(ret_value) {
diff --git a/src/H5SMcache.c b/src/H5SMcache.c
index 9955f39..2e69899 100644
--- a/src/H5SMcache.c
+++ b/src/H5SMcache.c
@@ -13,6 +13,17 @@
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5SMcache.c
+ * Nov 13 2006
+ * James Laird <jlaird@hdfgroup.org>
+ *
+ * Purpose: Implement shared message metadata cache methods.
+ *
+ *-------------------------------------------------------------------------
+ */
+
/****************/
/* Module Setup */
/****************/
@@ -68,6 +79,7 @@ static herr_t H5SM_list_size(const H5F_t *f, const H5SM_list_t UNUSED *list, siz
/*********************/
/* Package Variables */
/*********************/
+
/* H5SM inherits cache-like properties from H5AC */
const H5AC_class_t H5AC_SOHM_TABLE[1] = {{
H5AC_SOHM_TABLE_ID,
@@ -136,7 +148,7 @@ H5SM_table_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *udata)
/* Allocate space for the master table in memory */
if(NULL == (table = H5FL_CALLOC(H5SM_master_table_t)))
- HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed")
/* Read number of indexes and version from file superblock */
table->num_indexes = H5F_SOHM_NINDEXES(f);
@@ -172,7 +184,7 @@ H5SM_table_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *udata)
/* Allocate space for the index headers in memory*/
if(NULL == (table->indexes = (H5SM_index_header_t *)H5FL_ARR_MALLOC(H5SM_index_header_t, (size_t)table->num_indexes)))
- HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed for SOHM indexes")
+ HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed for SOHM indexes")
/* Read in the index headers */
for(x = 0; x < table->num_indexes; ++x) {
@@ -230,7 +242,7 @@ done:
HDONE_ERROR(H5E_SOHM, H5E_CLOSEERROR, NULL, "can't close wrapped buffer")
if(!ret_value && table)
if(H5SM_table_free(table) < 0)
- HDONE_ERROR(H5E_SOHM, H5E_CANTFREE, NULL, "unable to destroy sohm table")
+ HDONE_ERROR(H5E_SOHM, H5E_CANTFREE, NULL, "unable to destroy sohm table")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_table_load() */
@@ -363,7 +375,7 @@ H5SM_table_dest(H5F_t UNUSED *f, H5SM_master_table_t* table)
FUNC_ENTER_NOAPI_NOINIT
- /* Sanity check */
+ /* Check arguments */
HDassert(table);
HDassert(table->indexes);
@@ -429,7 +441,7 @@ H5SM_table_size(const H5F_t UNUSED *f, const H5SM_master_table_t *table, size_t
{
FUNC_ENTER_NOAPI_NOINIT_NOERR
- /* check arguments */
+ /* Check arguments */
HDassert(f);
HDassert(table);
HDassert(size_ptr);
@@ -470,18 +482,17 @@ H5SM_list_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
FUNC_ENTER_NOAPI_NOINIT
- /* Sanity check */
+ /* Check arguments */
HDassert(udata->header);
/* Allocate space for the SOHM list data structure */
if(NULL == (list = H5FL_MALLOC(H5SM_list_t)))
- HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed")
HDmemset(&list->cache_info, 0, sizeof(H5AC_info_t));
/* Allocate list in memory as an array*/
- if((list->messages = (H5SM_sohm_t *)H5FL_ARR_MALLOC(H5SM_sohm_t, udata->header->list_max)) == NULL)
- HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "file allocation failed for SOHM list")
-
+ if(NULL == (list->messages = (H5SM_sohm_t *)H5FL_ARR_MALLOC(H5SM_sohm_t, udata->header->list_max)))
+ HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "file allocation failed for SOHM list")
list->header = udata->header;
/* Wrap the local buffer for serialized list index info */
@@ -701,9 +712,7 @@ H5SM_list_clear(H5F_t *f, H5SM_list_t *list, hbool_t destroy)
FUNC_ENTER_NOAPI_NOINIT
- /*
- * Check arguments.
- */
+ /* Check arguments */
HDassert(list);
/* Reset the dirty flag. */
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index 4e82aed..a483c21 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -8032,7 +8032,7 @@ H5S_hyper_get_seq_list_gen(const H5S_t *space,H5S_sel_iter_t *iter,
/* Finish the span in the fastest changing dimension */
/* Compute the number of bytes to attempt in this span */
- H5_ASSIGN_OVERFLOW(span_size,((curr_span->high-abs_arr[fast_dim])+1)*elem_size,hsize_t,size_t);
+ H5_CHECKED_ASSIGN(span_size, size_t, ((curr_span->high-abs_arr[fast_dim])+1)*elem_size, hsize_t);
/* Check number of bytes against upper bounds allowed */
if(span_size>io_bytes_left)
@@ -8175,7 +8175,7 @@ H5S_hyper_get_seq_list_gen(const H5S_t *space,H5S_sel_iter_t *iter,
loc_off += curr_span->pstride;
/* Compute the number of elements to attempt in this span */
- H5_ASSIGN_OVERFLOW(span_size, curr_span->nelem, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(span_size, size_t, curr_span->nelem, hsize_t);
/* Check number of elements against upper bounds allowed */
if(span_size >= io_bytes_left) {
@@ -8505,7 +8505,7 @@ H5S_hyper_get_seq_list_opt(const H5S_t *space, H5S_sel_iter_t *iter,
loc += offset[u] * slab[u];
/* Set the number of elements to write each time */
- H5_ASSIGN_OVERFLOW(actual_elem, tdiminfo[fast_dim].block, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(actual_elem, size_t, tdiminfo[fast_dim].block, hsize_t);
/* Set the number of actual bytes */
actual_bytes = actual_elem * elem_size;
@@ -8514,7 +8514,7 @@ H5S_hyper_get_seq_list_opt(const H5S_t *space, H5S_sel_iter_t *iter,
fast_dim_start = tdiminfo[fast_dim].start;
fast_dim_stride = tdiminfo[fast_dim].stride;
fast_dim_block = tdiminfo[fast_dim].block;
- H5_ASSIGN_OVERFLOW(fast_dim_buf_off, slab[fast_dim] * fast_dim_stride, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(fast_dim_buf_off, size_t, slab[fast_dim] * fast_dim_stride, hsize_t);
fast_dim_offset = (hsize_t)((hssize_t)fast_dim_start + sel_off[fast_dim]);
/* Compute the number of blocks which would fit into the buffer */
@@ -8535,7 +8535,7 @@ H5S_hyper_get_seq_list_opt(const H5S_t *space, H5S_sel_iter_t *iter,
/* Check if there is a partial row left (with full blocks) */
if(tmp_count[fast_dim] > 0) {
/* Get number of blocks in fastest dimension */
- H5_ASSIGN_OVERFLOW(fast_dim_count, tdiminfo[fast_dim].count - tmp_count[fast_dim], hsize_t, size_t);
+ H5_CHECKED_ASSIGN(fast_dim_count, size_t, tdiminfo[fast_dim].count - tmp_count[fast_dim], hsize_t);
/* Make certain this entire row will fit into buffer */
fast_dim_count = MIN(fast_dim_count, tot_blk_count);
@@ -8620,7 +8620,7 @@ H5S_hyper_get_seq_list_opt(const H5S_t *space, H5S_sel_iter_t *iter,
curr_rows = total_rows = (size_t)(tot_blk_count / tdiminfo[fast_dim].count);
/* Reset copy of number of blocks in fastest dimension */
- H5_ASSIGN_OVERFLOW(fast_dim_count, tdiminfo[fast_dim].count, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(fast_dim_count, size_t, tdiminfo[fast_dim].count, hsize_t);
/* Read in data until an entire sequence can't be written out any longer */
while(curr_rows > 0) {
@@ -8925,7 +8925,7 @@ H5S_hyper_get_seq_list_single(const H5S_t *space, H5S_sel_iter_t *iter,
tot_blk_count = MIN(tot_blk_count, maxseq);
/* Set the number of elements to write each time */
- H5_ASSIGN_OVERFLOW(actual_elem, fast_dim_block, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(actual_elem, size_t, fast_dim_block, hsize_t);
/* Check for blocks to operate on */
if(tot_blk_count > 0) {
@@ -9182,10 +9182,10 @@ H5S_hyper_get_seq_list(const H5S_t *space, unsigned UNUSED flags, H5S_sel_iter_t
/* Calculate the number of elements left in the sequence */
if(tdiminfo[fast_dim].count == 1) {
- H5_ASSIGN_OVERFLOW(leftover, tdiminfo[fast_dim].block - (iter->u.hyp.off[fast_dim] - tdiminfo[fast_dim].start), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(leftover, size_t, tdiminfo[fast_dim].block - (iter->u.hyp.off[fast_dim] - tdiminfo[fast_dim].start), hsize_t);
} /* end if */
else {
- H5_ASSIGN_OVERFLOW(leftover, tdiminfo[fast_dim].block - ((iter->u.hyp.off[fast_dim] - tdiminfo[fast_dim].start) % tdiminfo[fast_dim].stride), hsize_t, size_t);
+ H5_CHECKED_ASSIGN(leftover, size_t, tdiminfo[fast_dim].block - ((iter->u.hyp.off[fast_dim] - tdiminfo[fast_dim].start) % tdiminfo[fast_dim].stride), hsize_t);
} /* end else */
/* Make certain that we don't write too many */
@@ -9204,7 +9204,7 @@ H5S_hyper_get_seq_list(const H5S_t *space, unsigned UNUSED flags, H5S_sel_iter_t
/* Add a new sequence */
off[0] = loc;
- H5_ASSIGN_OVERFLOW(len[0], actual_elem * elem_size, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(len[0], size_t, actual_elem * elem_size, hsize_t);
/* Increment sequence array locations */
off++;
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index def7598..c2190b4 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -94,13 +94,13 @@ H5S_mpio_all_type(const H5S_t *space, size_t elmt_size,
/* Just treat the entire extent as a block of bytes */
if((snelmts = (hssize_t)H5S_GET_EXTENT_NPOINTS(space)) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "src dataspace has invalid selection")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, hsize_t);
+ H5_CHECKED_ASSIGN(nelmts, hsize_t, snelmts, hssize_t);
total_bytes = (hsize_t)elmt_size * nelmts;
/* fill in the return values */
*new_type = MPI_BYTE;
- H5_ASSIGN_OVERFLOW(*count, total_bytes, hsize_t, int);
+ H5_CHECKED_ASSIGN(*count, int, total_bytes, hsize_t);
*is_derived_type = FALSE;
done:
@@ -388,7 +388,7 @@ H5S_mpio_permute_type(const H5S_t *space, size_t elmt_size, hsize_t **permute,
sel_iter_init = TRUE; /* Selection iteration info has been initialized */
/* Set the number of elements to iterate over */
- H5_ASSIGN_OVERFLOW(max_elem, num_points, hsize_t, size_t);
+ H5_CHECKED_ASSIGN(max_elem, size_t, num_points, hsize_t);
/* Loop, while elements left in selection */
u = 0;
diff --git a/src/H5Sselect.c b/src/H5Sselect.c
index b22ea64..c120769 100644
--- a/src/H5Sselect.c
+++ b/src/H5Sselect.c
@@ -1373,7 +1373,7 @@ H5S_select_iterate(void *buf, hid_t type_id, const H5S_t *space, H5D_operator_t
space_size[ndims] = elmt_size;
/* Compute the maximum number of bytes required */
- H5_ASSIGN_OVERFLOW(max_elem, nelmts, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(max_elem, size_t, nelmts, hssize_t);
/* Loop, while elements left in selection */
while(max_elem > 0 && user_ret == 0) {
@@ -2132,7 +2132,7 @@ H5S_select_fill(const void *fill, size_t fill_size, const H5S_t *space, void *_b
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOUNT, FAIL, "can't get number of elements selected")
/* Compute the number of bytes to process */
- H5_ASSIGN_OVERFLOW(max_elem, nelmts, hssize_t, size_t);
+ H5_CHECKED_ASSIGN(max_elem, size_t, nelmts, hssize_t);
/* Loop, while elements left in selection */
while(max_elem > 0) {
diff --git a/src/H5T.c b/src/H5T.c
index 9320d28..2758395 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -1,3 +1,4 @@
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
@@ -67,10 +68,6 @@
*
*/
-/* Define the code template for types which need no extra initialization for the "GUTS" in the H5T_INIT_TYPE macro */
-#define H5T_INIT_TYPE_NONE_CORE { \
-}
-
/* Define the code template for bitfields for the "GUTS" in the H5T_INIT_TYPE macro */
#define H5T_INIT_TYPE_BITFIELD_CORE { \
dt->shared->type = H5T_BITFIELD; \
@@ -1986,7 +1983,7 @@ H5T_detect_class(const H5T_t *dt, H5T_class_t cls, hbool_t from_api)
case H5T_VLEN:
case H5T_ENUM:
HGOTO_DONE(H5T_detect_class(dt->shared->parent, cls, from_api));
-
+ break;
case H5T_NO_CLASS:
case H5T_INTEGER:
case H5T_FLOAT:
@@ -3211,7 +3208,7 @@ H5T_copy(H5T_t *old_dt, H5T_copy_t method)
switch(new_dt->shared->type) {
case H5T_COMPOUND:
{
- int accum_change = 0; /* Amount of change in the offset of the fields */
+ ssize_t accum_change = 0; /* Amount of change in the offset of the fields */
/*
* Copy all member fields to new type, then overwrite the
@@ -3239,13 +3236,17 @@ H5T_copy(H5T_t *old_dt, H5T_copy_t method)
new_dt->shared->u.compnd.memb[i].type = tmp;
HDassert(tmp != NULL);
+ /* Range check against compound member's offset */
+ if ((accum_change < 0) && ((ssize_t) new_dt->shared->u.compnd.memb[i].offset < accum_change))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, NULL, "invalid field size in datatype");
+
/* Apply the accumulated size change to the offset of the field */
- new_dt->shared->u.compnd.memb[i].offset += accum_change;
+ new_dt->shared->u.compnd.memb[i].offset += (size_t) accum_change;
if(old_dt->shared->u.compnd.sorted != H5T_SORT_VALUE) {
for(old_match = -1, j = 0; j < old_dt->shared->u.compnd.nmembs; j++) {
if(!HDstrcmp(new_dt->shared->u.compnd.memb[i].name, old_dt->shared->u.compnd.memb[j].name)) {
- old_match = j;
+ old_match = (int) j;
break;
} /* end if */
} /* end for */
@@ -3255,20 +3256,23 @@ H5T_copy(H5T_t *old_dt, H5T_copy_t method)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, NULL, "fields in datatype corrupted");
} /* end if */
else
- old_match = i;
+ old_match = (int) i;
/* If the field changed size, add that change to the accumulated size change */
if(new_dt->shared->u.compnd.memb[i].type->shared->size != old_dt->shared->u.compnd.memb[old_match].type->shared->size) {
/* Adjust the size of the member */
new_dt->shared->u.compnd.memb[i].size = (old_dt->shared->u.compnd.memb[old_match].size*tmp->shared->size)/old_dt->shared->u.compnd.memb[old_match].type->shared->size;
- accum_change += (new_dt->shared->u.compnd.memb[i].type->shared->size - old_dt->shared->u.compnd.memb[old_match].type->shared->size);
+ accum_change += (ssize_t) (new_dt->shared->u.compnd.memb[i].type->shared->size - old_dt->shared->u.compnd.memb[old_match].type->shared->size);
} /* end if */
} /* end for */
- /* Apply the accumulated size change to the size of the compound struct */
- new_dt->shared->size += accum_change;
+ /* Range check against datatype size */
+ if ((accum_change < 0) && ((ssize_t) new_dt->shared->size < accum_change))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, NULL, "invalid field size in datatype");
+ /* Apply the accumulated size change to the size of the compound struct */
+ new_dt->shared->size += (size_t) accum_change;
}
break;
@@ -3313,6 +3317,13 @@ H5T_copy(H5T_t *old_dt, H5T_copy_t method)
new_dt->shared->size=new_dt->shared->u.array.nelem*new_dt->shared->parent->shared->size;
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_NCLASSES:
default:
break;
} /* end switch */
@@ -3530,6 +3541,16 @@ H5T__free(H5T_t *dt)
H5MM_xfree(dt->shared->u.opaque.tag);
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_REFERENCE:
+ case H5T_VLEN:
+ case H5T_ARRAY:
+ case H5T_NCLASSES:
default:
break;
} /* end switch */
@@ -3796,11 +3817,14 @@ H5T_set_size(H5T_t *dt, size_t size)
case H5T_ARRAY:
case H5T_REFERENCE:
HDassert("can't happen" && 0);
+ break;
case H5T_NO_CLASS:
case H5T_NCLASSES:
HDassert("invalid type" && 0);
+ break;
default:
HDassert("not implemented yet" && 0);
+ break;
}
/* Commit (if we didn't convert this type to a VL string) */
@@ -3875,7 +3899,6 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
unsigned *idx1 = NULL, *idx2 = NULL;
size_t base_size;
hbool_t swapped;
- int i, j;
unsigned u;
int tmp;
int ret_value = 0;
@@ -3930,24 +3953,32 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
for(u = 0; u < dt1->shared->u.compnd.nmembs; u++)
idx1[u] = idx2[u] = u;
if(dt1->shared->u.enumer.nmembs > 1) {
- for(i = dt1->shared->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i)
+ int i;
+
+ for(i = (int) dt1->shared->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
+ int j;
+
for(j = 0, swapped=FALSE; j < i; j++)
if(HDstrcmp(dt1->shared->u.compnd.memb[idx1[j]].name,
dt1->shared->u.compnd.memb[idx1[j + 1]].name) > 0) {
- tmp = idx1[j];
+ unsigned tmp_idx = idx1[j];
idx1[j] = idx1[j + 1];
- idx1[j + 1] = tmp;
+ idx1[j + 1] = tmp_idx;
swapped = TRUE;
}
- for(i = dt2->shared->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i)
+ }
+ for(i = (int) dt2->shared->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
+ int j;
+
for(j = 0, swapped = FALSE; j<i; j++)
if(HDstrcmp(dt2->shared->u.compnd.memb[idx2[j]].name,
dt2->shared->u.compnd.memb[idx2[j + 1]].name) > 0) {
- tmp = idx2[j];
+ unsigned tmp_idx = idx2[j];
idx2[j] = idx2[j + 1];
- idx2[j + 1] = tmp;
+ idx2[j + 1] = tmp_idx;
swapped = TRUE;
}
+ }
} /* end if */
#ifdef H5T_DEBUG
@@ -4007,28 +4038,39 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed");
for (u=0; u<dt1->shared->u.enumer.nmembs; u++)
idx1[u] = u;
- if(dt1->shared->u.enumer.nmembs > 1)
- for (i=dt1->shared->u.enumer.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
- for (j=0, swapped=FALSE; j<i; j++)
+ if(dt1->shared->u.enumer.nmembs > 1) {
+ int i;
+ for (i = (int) dt1->shared->u.enumer.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
+ int j;
+
+ for (j = 0, swapped = FALSE; j < i; j++)
if (HDstrcmp(dt1->shared->u.enumer.name[idx1[j]],
dt1->shared->u.enumer.name[idx1[j+1]]) > 0) {
- tmp = idx1[j];
+ unsigned tmp_idx = idx1[j];
idx1[j] = idx1[j+1];
- idx1[j+1] = tmp;
+ idx1[j+1] = tmp_idx;
swapped = TRUE;
}
+ }
+ }
for (u=0; u<dt2->shared->u.enumer.nmembs; u++)
idx2[u] = u;
- if(dt2->shared->u.enumer.nmembs > 1)
- for (i=dt2->shared->u.enumer.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
- for (j=0, swapped=FALSE; j<i; j++)
+ if(dt2->shared->u.enumer.nmembs > 1) {
+ int i;
+
+ for (i = (int) dt2->shared->u.enumer.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
+ int j;
+
+ for (j = 0, swapped = FALSE; j < i; j++)
if (HDstrcmp(dt2->shared->u.enumer.name[idx2[j]],
dt2->shared->u.enumer.name[idx2[j+1]]) > 0) {
- tmp = idx2[j];
+ unsigned tmp_idx = idx2[j];
idx2[j] = idx2[j+1];
- idx2[j+1] = tmp;
+ idx2[j+1] = tmp_idx;
swapped = TRUE;
}
+ }
+ }
#ifdef H5T_DEBUG
/* I don't quite trust the code above yet :-) --RPM */
@@ -4148,6 +4190,14 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
HGOTO_DONE(1);
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_REFERENCE:
+ case H5T_NCLASSES:
default:
/*
* Atomic datatypes...
@@ -4255,13 +4305,23 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
case H5R_BADTYPE:
case H5R_MAXTYPE:
HDassert("invalid type" && 0);
+ break;
default:
HDassert("not implemented yet" && 0);
+ break;
}
break;
+ case H5T_NO_CLASS:
+ case H5T_OPAQUE:
+ case H5T_COMPOUND:
+ case H5T_ENUM:
+ case H5T_VLEN:
+ case H5T_ARRAY:
+ case H5T_NCLASSES:
default:
HDassert("not implemented yet" && 0);
+ break;
}
break;
} /* end switch */
@@ -4535,7 +4595,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
} /* end if */
if(cmp > 0)
md++;
- HDmemmove(H5T_g.path + md + 1, H5T_g.path + md, (H5T_g.npaths - md) * sizeof(H5T_path_t*));
+ HDmemmove(H5T_g.path + md + 1, H5T_g.path + md, (size_t) (H5T_g.npaths - md) * sizeof(H5T_path_t*));
H5T_g.npaths++;
H5T_g.path[md] = path;
table = path;
@@ -5000,6 +5060,17 @@ H5T_is_sensible(const H5T_t *dt)
ret_value=FALSE;
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_OPAQUE:
+ case H5T_REFERENCE:
+ case H5T_VLEN:
+ case H5T_ARRAY:
+ case H5T_NCLASSES:
default:
/* Assume all other datatype are sensible to store on disk */
ret_value=TRUE;
@@ -5041,7 +5112,6 @@ H5T_set_loc(H5T_t *dt, H5F_t *f, H5T_loc_t loc)
htri_t changed; /* Whether H5T_set_loc changed the type (even if the size didn't change) */
htri_t ret_value = 0; /* Indicate that success, but no location change */
unsigned i; /* Local index variable */
- int accum_change; /* Amount of change in the offset of the fields */
size_t old_size; /* Previous size of a field */
FUNC_ENTER_NOAPI(FAIL)
@@ -5075,14 +5145,21 @@ H5T_set_loc(H5T_t *dt, H5F_t *f, H5T_loc_t loc)
break;
case H5T_COMPOUND: /* Check each field and recurse on VL, compound and array type */
+ {
+ ssize_t accum_change = 0; /* Amount of change in the offset of the fields */
+
/* Sort the fields based on offsets */
H5T__sort_value(dt, NULL);
- for (i=0,accum_change=0; i<dt->shared->u.compnd.nmembs; i++) {
+ for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
H5T_t *memb_type; /* Member's datatype pointer */
+ /* Range check against compound member's offset */
+ if ((accum_change < 0) && ((ssize_t) dt->shared->u.compnd.memb[i].offset < accum_change))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, FAIL, "invalid field size in datatype");
+
/* Apply the accumulated size change to the offset of the field */
- dt->shared->u.compnd.memb[i].offset += accum_change;
+ dt->shared->u.compnd.memb[i].offset += (size_t) accum_change;
/* Set the member type pointer (for convenience) */
memb_type=dt->shared->u.compnd.memb[i].type;
@@ -5105,13 +5182,18 @@ H5T_set_loc(H5T_t *dt, H5F_t *f, H5T_loc_t loc)
dt->shared->u.compnd.memb[i].size = (dt->shared->u.compnd.memb[i].size*memb_type->shared->size)/old_size;
/* Add that change to the accumulated size change */
- accum_change += (memb_type->shared->size - (int)old_size);
+ accum_change += (ssize_t) (memb_type->shared->size - old_size);
} /* end if */
} /* end if */
} /* end for */
+ /* Range check against datatype size */
+ if ((accum_change < 0) && ((ssize_t) dt->shared->size < accum_change))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, FAIL, "invalid field size in datatype");
+
/* Apply the accumulated size change to the datatype */
- dt->shared->size = (size_t)(dt->shared->size + accum_change);
+ dt->shared->size += (size_t) accum_change;
+ }
break;
case H5T_VLEN: /* Recurse on the VL information if it's VL, compound or array, then free VL sequence */
@@ -5145,6 +5227,15 @@ H5T_set_loc(H5T_t *dt, H5F_t *f, H5T_loc_t loc)
} /* end if */
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_OPAQUE:
+ case H5T_ENUM:
+ case H5T_NCLASSES:
default:
break;
} /* end switch */
@@ -5235,6 +5326,15 @@ H5T_upgrade_version_cb(H5T_t *dt, void *op_value)
dt->shared->version = dt->shared->parent->shared->version;
break;
+ case H5T_NO_CLASS:
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_TIME:
+ case H5T_STRING:
+ case H5T_BITFIELD:
+ case H5T_OPAQUE:
+ case H5T_REFERENCE:
+ case H5T_NCLASSES:
default:
break;
} /* end switch */
diff --git a/src/H5Tarray.c b/src/H5Tarray.c
index c73b934..2e9dec0 100644
--- a/src/H5Tarray.c
+++ b/src/H5Tarray.c
@@ -202,7 +202,7 @@ H5T__array_create(H5T_t *base, unsigned ndims, const hsize_t dim[/* ndims */])
/* Copy the array dimensions & compute the # of elements in the array */
for(u = 0, ret_value->shared->u.array.nelem = 1; u < ndims; u++) {
- H5_ASSIGN_OVERFLOW(ret_value->shared->u.array.dim[u], dim[u], hsize_t, size_t);
+ H5_CHECKED_ASSIGN(ret_value->shared->u.array.dim[u], size_t, dim[u], hsize_t);
ret_value->shared->u.array.nelem *= (size_t)dim[u];
} /* end for */
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index df85553..1c51b69 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -1952,7 +1952,7 @@ H5T_conv_struct_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata, hid_t dxpl_id)
src2dst[i] = -1;
for(j = 0; j < dst_nmembs; j++) {
if(!HDstrcmp(src->shared->u.compnd.memb[i].name, dst->shared->u.compnd.memb[j].name)) {
- H5_ASSIGN_OVERFLOW(src2dst[i],j,unsigned,int);
+ H5_CHECKED_ASSIGN(src2dst[i], int, j, unsigned);
break;
} /* end if */
} /* end for */
@@ -2187,16 +2187,16 @@ H5T__conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
* Direction of conversion and striding through background.
*/
if(buf_stride) {
- H5_ASSIGN_OVERFLOW(src_delta, buf_stride, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(src_delta, ssize_t, buf_stride, size_t);
if(!bkg_stride) {
- H5_ASSIGN_OVERFLOW(bkg_delta, dst->shared->size, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(bkg_delta, ssize_t, dst->shared->size, size_t);
} /* end if */
else
- H5_ASSIGN_OVERFLOW(bkg_delta, bkg_stride, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(bkg_delta, ssize_t, bkg_stride, size_t);
} /* end if */
else if(dst->shared->size <= src->shared->size) {
- H5_ASSIGN_OVERFLOW(src_delta, src->shared->size, size_t, ssize_t);
- H5_ASSIGN_OVERFLOW(bkg_delta, dst->shared->size, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(src_delta, ssize_t, src->shared->size, size_t);
+ H5_CHECKED_ASSIGN(bkg_delta, ssize_t, dst->shared->size, size_t);
} /* end else-if */
else {
H5_CHECK_OVERFLOW(src->shared->size, size_t, ssize_t);
@@ -2278,7 +2278,7 @@ H5T__conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
/* If the bkg_delta was set to -(dst->shared->size), make it positive now */
if(buf_stride == 0 && dst->shared->size > src->shared->size)
- H5_ASSIGN_OVERFLOW(bkg_delta, dst->shared->size, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(bkg_delta, ssize_t, dst->shared->size, size_t);
/*
* Copy the background buffer back into the in-place conversion
@@ -2833,8 +2833,8 @@ H5T__conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
src_delta = dst_delta = (ssize_t)buf_stride;
s = d = buf;
} else if(dst->shared->size <= src->shared->size) {
- H5_ASSIGN_OVERFLOW(src_delta, src->shared->size, size_t, ssize_t);
- H5_ASSIGN_OVERFLOW(dst_delta, dst->shared->size, size_t, ssize_t);
+ H5_CHECKED_ASSIGN(src_delta, ssize_t, src->shared->size, size_t);
+ H5_CHECKED_ASSIGN(dst_delta, ssize_t, dst->shared->size, size_t);
s = d = buf;
} else {
H5_CHECK_OVERFLOW(src->shared->size, size_t, ssize_t);
diff --git a/src/H5Tfloat.c b/src/H5Tfloat.c
index 7d08d62..fff413d 100644
--- a/src/H5Tfloat.c
+++ b/src/H5Tfloat.c
@@ -203,7 +203,7 @@ H5Tget_ebias(hid_t type_id)
HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, 0, "operation not defined for datatype class")
/* bias */
- H5_ASSIGN_OVERFLOW(ret_value, dt->shared->u.atomic.u.f.ebias, uint64_t, size_t);
+ H5_CHECKED_ASSIGN(ret_value, size_t, dt->shared->u.atomic.u.f.ebias, uint64_t);
done:
FUNC_LEAVE_API(ret_value)
diff --git a/src/H5Tnative.c b/src/H5Tnative.c
index 960a811..bf6ba08 100644
--- a/src/H5Tnative.c
+++ b/src/H5Tnative.c
@@ -276,7 +276,7 @@ H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_alig
if((snmemb = H5T_get_nmembers(dtype)) <= 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "compound data type doesn't have any member")
- H5_ASSIGN_OVERFLOW(nmemb, snmemb, int, unsigned);
+ H5_CHECKED_ASSIGN(nmemb, unsigned, snmemb, int);
if(NULL == (memb_list = (H5T_t **)H5MM_calloc(nmemb * sizeof(H5T_t *))))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
@@ -388,7 +388,7 @@ H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_alig
/* Retrieve member info and insert members into new enum type */
if((snmemb = H5T_get_nmembers(dtype)) <= 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "enumerate data type doesn't have any member")
- H5_ASSIGN_OVERFLOW(nmemb, snmemb, int, unsigned);
+ H5_CHECKED_ASSIGN(nmemb, unsigned, snmemb, int);
for(u = 0; u < nmemb; u++) {
if(NULL == (memb_name = H5T__get_member_name(dtype, u)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member name")
@@ -429,7 +429,7 @@ H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_alig
/* Retrieve dimension information for array data type */
if((sarray_rank = H5T__get_array_ndims(dtype)) <= 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get dimension rank")
- H5_ASSIGN_OVERFLOW(array_rank, sarray_rank, int, unsigned);
+ H5_CHECKED_ASSIGN(array_rank, unsigned, sarray_rank, int);
if(NULL == (dims = (hsize_t*)H5MM_malloc(array_rank * sizeof(hsize_t))))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
if(H5T__get_array_dims(dtype, dims) < 0)
diff --git a/src/H5VM.c b/src/H5VM.c
index 2fa49ba..c546609 100644
--- a/src/H5VM.c
+++ b/src/H5VM.c
@@ -386,55 +386,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5VM_hyper_disjointp
- *
- * Purpose: Determines if two hyperslabs are disjoint.
- *
- * Return: Success: FALSE if they are not disjoint.
- * TRUE if they are disjoint.
- *
- * Failure: A hyperslab of zero size is disjoint from all
- * other hyperslabs.
- *
- * Programmer: Robb Matzke
- * Thursday, October 16, 1997
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-htri_t
-H5VM_hyper_disjointp(unsigned n,
- const hsize_t *offset1, const uint32_t *size1,
- const hsize_t *offset2, const uint32_t *size2)
-{
- unsigned u;
- htri_t ret_value = FALSE; /* Return value */
-
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- if(!n || !size1 || !size2)
- HGOTO_DONE(TRUE)
-
- for(u = 0; u < n; u++) {
- HDcompile_assert(sizeof(uint32_t) <= sizeof(hsize_t));
-
- if(0 == size1[u] || 0 == size2[u])
- HGOTO_DONE(TRUE)
- if(((offset1 ? offset1[u] : 0) < (offset2 ? offset2[u] : 0) &&
- ((offset1 ? offset1[u] : 0) + size1[u] <= (offset2 ? offset2[u] : 0))) ||
- ((offset2 ? offset2[u] : 0) < (offset1 ? offset1[u] : 0) &&
- ((offset2 ? offset2[u] : 0) + size2[u] <= (offset1 ? offset1[u] : 0))))
- HGOTO_DONE(TRUE)
- } /* end for */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5VM_hyper_disjointp() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5VM_hyper_fill
*
* Purpose: Similar to memset() except it operates on hyperslabs...
@@ -1068,17 +1019,12 @@ H5VM_array_down(unsigned n, const hsize_t *total_size, hsize_t *down)
* Programmer: Quincey Koziol
* Tuesday, June 22, 1999
*
- * Modifications:
- * Use precomputed accumulator array
- * Quincey Koziol
- * Saturday, April 26, 2003
- *
*-------------------------------------------------------------------------
*/
hsize_t
H5VM_array_offset_pre(unsigned n, const hsize_t *acc, const hsize_t *offset)
{
- int i; /*counter */
+ unsigned u; /* Local index variable */
hsize_t ret_value; /* Return value */
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -1088,8 +1034,8 @@ H5VM_array_offset_pre(unsigned n, const hsize_t *acc, const hsize_t *offset)
HDassert(offset);
/* Compute offset in array */
- for(i = (int)(n - 1), ret_value = 0; i >= 0; --i)
- ret_value += acc[i] * offset[i];
+ for(u = 0, ret_value = 0; u < n; u++)
+ ret_value += acc[u] * offset[u];
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5VM_array_offset_pre() */
@@ -1157,7 +1103,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static herr_t
+herr_t
H5VM_array_calc_pre(hsize_t offset, unsigned n, const hsize_t *down,
hsize_t *coords)
{
@@ -1258,18 +1204,51 @@ done:
* The chunk index is placed in the CHUNK_IDX location for return
* from this function
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Chunk index on success (can't fail)
*
* Programmer: Quincey Koziol
* Monday, April 21, 2003
*
*-------------------------------------------------------------------------
*/
-herr_t
+hsize_t
H5VM_chunk_index(unsigned ndims, const hsize_t *coord, const uint32_t *chunk,
- const hsize_t *down_nchunks, hsize_t *chunk_idx)
+ const hsize_t *down_nchunks)
{
hsize_t scaled_coord[H5VM_HYPER_NDIMS]; /* Scaled, coordinates, in terms of chunks */
+ hsize_t chunk_idx; /* Chunk index computed */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ /* Sanity check */
+ HDassert(ndims <= H5VM_HYPER_NDIMS);
+ HDassert(coord);
+ HDassert(chunk);
+ HDassert(down_nchunks);
+
+ /* Defer to H5VM_chunk_index_scaled */
+ chunk_idx = H5VM_chunk_index_scaled(ndims, coord, chunk, down_nchunks, scaled_coord);
+
+ FUNC_LEAVE_NOAPI(chunk_idx)
+} /* end H5VM_chunk_index() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5VM_chunk_scaled
+ *
+ * Purpose: Compute the scaled coordinates for a chunk offset
+ *
+ * Return: <none>
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, November 19, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5VM_chunk_scaled(unsigned ndims, const hsize_t *coord, const uint32_t *chunk,
+ hsize_t *scaled)
+{
unsigned u; /* Local index variable */
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -1278,17 +1257,86 @@ H5VM_chunk_index(unsigned ndims, const hsize_t *coord, const uint32_t *chunk,
HDassert(ndims <= H5VM_HYPER_NDIMS);
HDassert(coord);
HDassert(chunk);
- HDassert(chunk_idx);
+ HDassert(scaled);
/* Compute the scaled coordinates for actual coordinates */
+ /* (Note that the 'scaled' array is an 'OUT' parameter) */
for(u = 0; u < ndims; u++)
- scaled_coord[u] = coord[u] / chunk[u];
+ scaled[u] = coord[u] / chunk[u];
+
+ FUNC_LEAVE_NOAPI_VOID
+} /* end H5VM_chunk_scaled() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5VM_chunk_index_scaled
+ *
+ * Purpose: Given a coordinate offset (COORD), the size of each chunk
+ * (CHUNK), the number of chunks in each dimension (NCHUNKS)
+ * and the number of dimensions of all of these (NDIMS), calculate
+ * a "chunk index" for the chunk that the coordinate offset is
+ * located in.
+ *
+ * The chunk index starts at 0 and increases according to the
+ * fastest changing dimension, then the next fastest, etc.
+ *
+ * For example, with a 3x5 chunk size and 6 chunks in the fastest
+ * changing dimension and 3 chunks in the slowest changing
+ * dimension, the chunk indices are as follows:
+ *
+ * +-----+-----+-----+-----+-----+-----+
+ * | | | | | | |
+ * | 0 | 1 | 2 | 3 | 4 | 5 |
+ * | | | | | | |
+ * +-----+-----+-----+-----+-----+-----+
+ * | | | | | | |
+ * | 6 | 7 | 8 | 9 | 10 | 11 |
+ * | | | | | | |
+ * +-----+-----+-----+-----+-----+-----+
+ * | | | | | | |
+ * | 12 | 13 | 14 | 15 | 16 | 17 |
+ * | | | | | | |
+ * +-----+-----+-----+-----+-----+-----+
+ *
+ * The chunk index is placed in the CHUNK_IDX location for return
+ * from this function
+ *
+ * Note: This routine is identical to H5VM_chunk_index(), except for
+ * caching the scaled information. Make changes in both places.
+ *
+ * Return: Chunk index on success (can't fail)
+ *
+ * Programmer: Vailin Choi
+ * Monday, February 9, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5VM_chunk_index_scaled(unsigned ndims, const hsize_t *coord, const uint32_t *chunk,
+ const hsize_t *down_nchunks, hsize_t *scaled)
+{
+ hsize_t chunk_idx; /* Computed chunk index */
+ unsigned u; /* Local index variable */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ /* Sanity check */
+ HDassert(ndims <= H5VM_HYPER_NDIMS);
+ HDassert(coord);
+ HDassert(chunk);
+ HDassert(down_nchunks);
+ HDassert(scaled);
+
+ /* Compute the scaled coordinates for actual coordinates */
+ /* (Note that the 'scaled' array is an 'OUT' parameter) */
+ for(u = 0; u < ndims; u++)
+ scaled[u] = coord[u] / chunk[u];
/* Compute the chunk index */
- *chunk_idx = H5VM_array_offset_pre(ndims,down_nchunks,scaled_coord); /*lint !e772 scaled_coord will always be initialized */
+ chunk_idx = H5VM_array_offset_pre(ndims, down_nchunks, scaled); /*lint !e772 scaled_coord will always be initialized */
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5VM_chunk_index() */
+ FUNC_LEAVE_NOAPI(chunk_idx)
+} /* end H5VM_chunk_index_scaled() */
/*-------------------------------------------------------------------------
diff --git a/src/H5VMprivate.h b/src/H5VMprivate.h
index 20821b2..5d1e0c2 100644
--- a/src/H5VMprivate.h
+++ b/src/H5VMprivate.h
@@ -56,8 +56,6 @@ H5_DLL hsize_t H5VM_hyper_stride(unsigned n, const hsize_t *size,
const hsize_t *total_size,
const hsize_t *offset,
hsize_t *stride);
-H5_DLL htri_t H5VM_hyper_disjointp(unsigned n, const hsize_t *offset1,
- const uint32_t *size1, const hsize_t *offset2, const uint32_t *size2);
H5_DLL htri_t H5VM_hyper_eq(unsigned n, const hsize_t *offset1,
const hsize_t *size1, const hsize_t *offset2,
const hsize_t *size2);
@@ -87,10 +85,16 @@ H5_DLL hsize_t H5VM_array_offset_pre(unsigned n,
const hsize_t *acc, const hsize_t *offset);
H5_DLL hsize_t H5VM_array_offset(unsigned n, const hsize_t *total_size,
const hsize_t *offset);
+H5_DLL herr_t H5VM_array_calc_pre(hsize_t offset, unsigned n,
+ const hsize_t *down, hsize_t *coords);
H5_DLL herr_t H5VM_array_calc(hsize_t offset, unsigned n,
const hsize_t *total_size, hsize_t *coords);
-H5_DLL herr_t H5VM_chunk_index(unsigned ndims, const hsize_t *coord,
- const uint32_t *chunk, const hsize_t *down_nchunks, hsize_t *chunk_idx);
+H5_DLL hsize_t H5VM_chunk_index(unsigned ndims, const hsize_t *coord,
+ const uint32_t *chunk, const hsize_t *down_nchunks);
+H5_DLL void H5VM_chunk_scaled(unsigned ndims, const hsize_t *coord,
+ const uint32_t *chunk, hsize_t *scaled);
+H5_DLL hsize_t H5VM_chunk_index_scaled(unsigned ndims, const hsize_t *coord,
+ const uint32_t *chunk, const hsize_t *down_nchunks, hsize_t *scaled);
H5_DLL ssize_t H5VM_opvv(size_t dst_max_nseq, size_t *dst_curr_seq, size_t dst_len_arr[],
hsize_t dst_off_arr[],
size_t src_max_nseq, size_t *src_curr_seq, size_t src_len_arr[],
@@ -410,6 +414,29 @@ H5VM_log2_of2(uint32_t n)
/*-------------------------------------------------------------------------
+ * Function: H5VM_power2up
+ *
+ * Purpose: Round up a number to the next power of 2
+ *
+ * Return: Return the number which is a power of 2
+ *
+ * Programmer: Vailin Choi; Nov 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline hsize_t UNUSED
+H5VM_power2up(hsize_t n)
+{
+ hsize_t ret_value = 1; /* Return value */
+
+ while(ret_value < n)
+ ret_value <<= 1;
+
+ return(ret_value);
+} /* H5VM_power2up */
+
+
+/*-------------------------------------------------------------------------
* Function: H5VM_limit_enc_size
*
* Purpose: Determine the # of bytes needed to encode values within a
diff --git a/src/H5Zdeflate.c b/src/H5Zdeflate.c
index 82ad1ba..06d9866 100644
--- a/src/H5Zdeflate.c
+++ b/src/H5Zdeflate.c
@@ -102,9 +102,9 @@ H5Z_filter_deflate (unsigned flags, size_t cd_nelmts,
/* Set the uncompression parameters */
HDmemset(&z_strm, 0, sizeof(z_strm));
z_strm.next_in = (Bytef *)*buf;
- H5_ASSIGN_OVERFLOW(z_strm.avail_in,nbytes,size_t,unsigned);
+ H5_CHECKED_ASSIGN(z_strm.avail_in, unsigned, nbytes, size_t);
z_strm.next_out = (Bytef *)outbuf;
- H5_ASSIGN_OVERFLOW(z_strm.avail_out,nalloc,size_t,unsigned);
+ H5_CHECKED_ASSIGN(z_strm.avail_out, unsigned, nalloc, size_t);
/* Initialize the uncompression routines */
if (Z_OK!=inflateInit(&z_strm))
@@ -169,7 +169,7 @@ H5Z_filter_deflate (unsigned flags, size_t cd_nelmts,
int aggression; /* Compression aggression setting */
/* Set the compression aggression level */
- H5_ASSIGN_OVERFLOW(aggression,cd_values[0],unsigned,int);
+ H5_CHECKED_ASSIGN(aggression, int, cd_values[0], unsigned);
/* Allocate output (compressed) buffer */
if(NULL == (outbuf = H5MM_malloc(z_dst_nbytes)))
diff --git a/src/H5Znbit.c b/src/H5Znbit.c
index 9506ace..ff3ead2 100644
--- a/src/H5Znbit.c
+++ b/src/H5Znbit.c
@@ -803,7 +803,7 @@ H5Z_set_local_nbit(hid_t dcpl_id, hid_t type_id, hid_t space_id)
cd_values_index = 2;
/* Set "local" parameter for number of elements in the chunk */
- H5_ASSIGN_OVERFLOW(cd_values[cd_values_index++], npoints, hssize_t, unsigned);
+ H5_CHECKED_ASSIGN(cd_values[cd_values_index++], unsigned, npoints, hssize_t);
/* Assume no need to compress now, will be changed to FALSE later if not */
need_not_compress = TRUE;
diff --git a/src/H5Zscaleoffset.c b/src/H5Zscaleoffset.c
index 38e2986..cda0a11 100644
--- a/src/H5Zscaleoffset.c
+++ b/src/H5Zscaleoffset.c
@@ -901,7 +901,7 @@ H5Z_set_local_scaleoffset(hid_t dcpl_id, hid_t type_id, hid_t space_id)
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get number of points in the dataspace")
/* Set "local" parameter for this dataset's number of elements */
- H5_ASSIGN_OVERFLOW(cd_values[H5Z_SCALEOFFSET_PARM_NELMTS],npoints,hssize_t,unsigned);
+ H5_CHECKED_ASSIGN(cd_values[H5Z_SCALEOFFSET_PARM_NELMTS], unsigned, npoints, hssize_t);
/* Get datatype's class */
if((dtype_class = H5T_get_class(type, TRUE)) == H5T_NO_CLASS)
diff --git a/src/H5Zszip.c b/src/H5Zszip.c
index 4544ec3..631667b 100644
--- a/src/H5Zszip.c
+++ b/src/H5Zszip.c
@@ -225,7 +225,7 @@ H5Z_set_local_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id)
} /* end else */
/* Assign the final value to the scanline */
- H5_ASSIGN_OVERFLOW(cd_values[H5Z_SZIP_PARM_PPS],scanline,hsize_t,unsigned);
+ H5_CHECKED_ASSIGN(cd_values[H5Z_SZIP_PARM_PPS], unsigned, scanline, hsize_t);
/* Get datatype's endianness order */
if((dtype_order = H5T_get_order(type)) == H5T_ORDER_ERROR)
@@ -301,10 +301,10 @@ H5Z_filter_szip (unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid deflate aggression level")
/* Copy the filter parameters into the szip parameter block */
- H5_ASSIGN_OVERFLOW(sz_param.options_mask,cd_values[H5Z_SZIP_PARM_MASK],unsigned,int);
- H5_ASSIGN_OVERFLOW(sz_param.bits_per_pixel,cd_values[H5Z_SZIP_PARM_BPP],unsigned,int);
- H5_ASSIGN_OVERFLOW(sz_param.pixels_per_block,cd_values[H5Z_SZIP_PARM_PPB],unsigned,int);
- H5_ASSIGN_OVERFLOW(sz_param.pixels_per_scanline,cd_values[H5Z_SZIP_PARM_PPS],unsigned,int);
+ H5_CHECKED_ASSIGN(sz_param.options_mask, int, cd_values[H5Z_SZIP_PARM_MASK], unsigned);
+ H5_CHECKED_ASSIGN(sz_param.bits_per_pixel, int, cd_values[H5Z_SZIP_PARM_BPP], unsigned);
+ H5_CHECKED_ASSIGN(sz_param.pixels_per_block, int, cd_values[H5Z_SZIP_PARM_PPB], unsigned);
+ H5_CHECKED_ASSIGN(sz_param.pixels_per_scanline, int, cd_values[H5Z_SZIP_PARM_PPS], unsigned);
/* Input; uncompress */
if (flags & H5Z_FLAG_REVERSE) {
@@ -314,7 +314,7 @@ H5Z_filter_szip (unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
/* Get the size of the uncompressed buffer */
newbuf = *buf;
UINT32DECODE(newbuf,stored_nalloc);
- H5_ASSIGN_OVERFLOW(nalloc,stored_nalloc,uint32_t,size_t);
+ H5_CHECKED_ASSIGN(nalloc, size_t, stored_nalloc, uint32_t);
/* Allocate space for the uncompressed buffer */
if(NULL==(outbuf = H5MM_malloc(nalloc)))
diff --git a/src/H5detect.c b/src/H5detect.c
index fc0570c..15736bd 100644
--- a/src/H5detect.c
+++ b/src/H5detect.c
@@ -73,7 +73,7 @@ static const char *FileHeader = "\n\
#define H5JMP_BUF sigjmp_buf
#define H5SETJMP(buf) HDsigsetjmp(buf, 1)
#define H5LONGJMP(buf, val) HDsiglongjmp(buf, val)
-#define H5HAVE_SIGJMP # sigsetjmp/siglongjmp are supported.
+#define H5HAVE_SIGJMP /* sigsetjmp/siglongjmp are supported. */
#elif defined(H5_HAVE_LONGJMP)
#define H5JMP_BUF jmp_buf
#define H5SETJMP(buf) HDsetjmp(buf)
@@ -90,41 +90,41 @@ static const char *FileHeader = "\n\
* was detected.
*/
typedef struct detected_t {
- const char *varname;
- int size; /*total byte size */
- int precision; /*meaningful bits */
- int offset; /*bit offset to meaningful bits */
- int perm[32]; /*for detection of byte order */
- int is_vax; /*for vax (float & double) only */
- int sign; /*location of sign bit */
- int mpos, msize, imp;/*information about mantissa */
- int epos, esize; /*information about exponent */
- unsigned long bias; /*exponent bias for floating pt.*/
- size_t align; /*required byte alignment */
- size_t comp_align; /*alignment for structure */
+ const char *varname;
+ unsigned int size; /* total byte size */
+ unsigned int precision; /* meaningful bits */
+ unsigned int offset; /* bit offset to meaningful bits */
+ int perm[32]; /* for detection of byte order */
+ hbool_t is_vax; /* for vax (float & double) only */
+ unsigned int sign; /* location of sign bit */
+ unsigned int mpos, msize, imp; /* information about mantissa */
+ unsigned int epos, esize; /* information about exponent */
+ unsigned long bias; /* exponent bias for floating pt */
+ unsigned int align; /* required byte alignment */
+ unsigned int comp_align; /* alignment for structure */
} detected_t;
/* This structure holds structure alignment for pointers, hvl_t, hobj_ref_t,
* hdset_reg_ref_t */
typedef struct malign_t {
const char *name;
- size_t comp_align; /*alignment for structure */
+ unsigned int comp_align; /* alignment for structure */
} malign_t;
/* global variables types detection code */
-static detected_t d_g[MAXDETECT];
-static malign_t m_g[MAXDETECT];
-static volatile int nd_g = 0, na_g = 0;
+H5_GCC_DIAG_OFF(larger-than=)
+static detected_t d_g[MAXDETECT];
+H5_GCC_DIAG_ON(larger-than=)
+static malign_t m_g[MAXDETECT];
+static volatile int nd_g = 0, na_g = 0;
static void print_results(int nd, detected_t *d, int na, malign_t *m);
static void iprint(detected_t *);
static int byte_cmp(int, const void *, const void *, const unsigned char *);
-static int bit_cmp(int, int *, volatile void *, volatile void *,
- const unsigned char *);
+static unsigned int bit_cmp(unsigned int, int *, void *, void *, const unsigned char *);
static void fix_order(int, int, int *, const char **);
-static int imp_bit(int, int *, volatile void *, volatile void *,
- const unsigned char *);
-static unsigned long find_bias(int, int, int *, volatile void *);
+static unsigned int imp_bit(unsigned int, int *, void *, void *, const unsigned char *);
+static unsigned int find_bias(unsigned int, unsigned int, int *, void *);
static void precision (detected_t*);
static void print_header(void);
static void detect_C89_integers(void);
@@ -136,7 +136,7 @@ static void detect_C99_integers16(void);
static void detect_C99_integers32(void);
static void detect_C99_integers64(void);
static void detect_alignments(void);
-static size_t align_g[] = {1, 2, 4, 8, 16};
+static unsigned int align_g[] = {1, 2, 4, 8, 16};
static int align_status_g = 0; /* ALIGNMENT Signal Status */
static int sigbus_handler_called_g = 0; /* how many times called */
static int sigsegv_handler_called_g = 0;/* how many times called */
@@ -167,39 +167,41 @@ static H5JMP_BUF jbuf_g;
static void
precision (detected_t *d)
{
- int n;
+ unsigned int n;
- if (0==d->msize) {
- /*
- * An integer. The permutation can have negative values at the
- * beginning or end which represent padding of bytes. We must adjust
- * the precision and offset accordingly.
- */
- if (d->perm[0] < 0) {
- /*
- * Lower addresses are padded.
- */
- for (n=0; n<d->size && d->perm[n]<0; n++) /*void*/;
- d->precision = 8*(d->size-n);
- d->offset = 0;
- } else if (d->perm[d->size - 1] < 0) {
- /*
- * Higher addresses are padded.
- */
- for (n=0; n<d->size && d->perm[d->size-(n+1)]; n++) /*void*/;
- d->precision = 8*(d->size-n);
- d->offset = 8*n;
- } else {
- /*
- * No padding.
- */
- d->precision = 8*d->size;
- d->offset = 0;
- }
+ if (0 == d->msize) {
+ /*
+ * An integer. The permutation can have negative values at the
+ * beginning or end which represent padding of bytes. We must adjust
+ * the precision and offset accordingly.
+ */
+ if (d->perm[0] < 0) {
+ /*
+ * Lower addresses are padded.
+ */
+ for (n = 0; n < d->size && d->perm[n] < 0; n++)
+ /*void*/;
+ d->precision = 8 * (d->size - n);
+ d->offset = 0;
+ } else if (d->perm[d->size - 1] < 0) {
+ /*
+ * Higher addresses are padded.
+ */
+ for (n = 0; n < d->size && d->perm[d->size - (n + 1)]; n++)
+ /*void*/;
+ d->precision = 8 * (d->size - n);
+ d->offset = 8 * n;
+ } else {
+ /*
+ * No padding.
+ */
+ d->precision = 8 * d->size;
+ d->offset = 0;
+ }
} else {
- /* A floating point */
- d->offset = MIN3 (d->mpos, d->epos, d->sign);
- d->precision = d->msize + d->esize + 1;
+ /* A floating point */
+ d->offset = MIN3(d->mpos, d->epos, d->sign);
+ d->precision = d->msize + d->esize + 1;
}
}
@@ -251,7 +253,8 @@ precision (detected_t *d)
INFO.size = sizeof(TYPE); \
\
for(_i = sizeof(DETECT_TYPE), _v = 0; _i > 0; --_i) \
- _v = (_v << 8) + _i; \
+ _v = (DETECT_TYPE) ((DETECT_TYPE) (_v << 8) + (DETECT_TYPE) _i); \
+ \
for(_i = 0, _x = (unsigned char *)&_v; _i < (signed)sizeof(DETECT_TYPE); _i++) { \
_j = (*_x++) - 1; \
HDassert(_j < (signed)sizeof(DETECT_TYPE)); \
@@ -290,9 +293,6 @@ precision (detected_t *d)
* absence of implicit mantissa bit, and exponent bias and
* initializes a detected_t structure with those properties.
*
- * Note: 'volatile' is used for the variables below to prevent the
- * compiler from optimizing them away.
- *
* Return: void
*
* Programmer: Robb Matzke
@@ -302,12 +302,12 @@ precision (detected_t *d)
*-------------------------------------------------------------------------
*/
#define DETECT_F(TYPE,VAR,INFO) { \
- volatile TYPE _v1, _v2, _v3; \
+ TYPE _v1, _v2, _v3; \
unsigned char _buf1[sizeof(TYPE)], _buf3[sizeof(TYPE)]; \
unsigned char _pad_mask[sizeof(TYPE)]; \
unsigned char _byte_mask; \
int _i, _j, _last = (-1); \
- char *_mesg; \
+ const char *_mesg; \
\
HDmemset(&INFO, 0, sizeof(INFO)); \
INFO.varname = #VAR; \
@@ -326,11 +326,13 @@ precision (detected_t *d)
_v1 = (TYPE)4.0L; \
HDmemcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \
for(_i = 0; _i < (int)sizeof(TYPE); _i++) \
- for(_byte_mask = (unsigned char)1; _byte_mask; _byte_mask <<= 1) { \
+ for(_byte_mask = (unsigned char)1; _byte_mask; _byte_mask = (unsigned char) (_byte_mask << 1)) { \
_buf1[_i] ^= _byte_mask; \
HDmemcpy((void *)&_v2, (const void *)_buf1, sizeof(TYPE)); \
+ H5_GCC_DIAG_OFF(float-equal) \
if(_v1 != _v2) \
_pad_mask[_i] |= _byte_mask; \
+ H5_GCC_DIAG_ON(float-equal) \
_buf1[_i] ^= _byte_mask; \
} /* end for */ \
\
@@ -368,7 +370,7 @@ precision (detected_t *d)
_v1 = (TYPE)1.0L; \
_v2 = (TYPE)1.5L; \
INFO.msize = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \
- INFO.msize += 1 + (INFO.imp?0:1) - INFO.mpos; \
+ INFO.msize += 1 + (unsigned int) (INFO.imp ? 0 : 1) - INFO.mpos; \
\
/* Exponent */ \
INFO.epos = INFO.mpos + INFO.msize; \
@@ -415,14 +417,13 @@ precision (detected_t *d)
TYPE x; \
} s; \
\
- COMP_ALIGN = (size_t)((char*)(&(s.x)) - (char*)(&s)); \
+ COMP_ALIGN = (unsigned int)((char*)(&(s.x)) - (char*)(&s)); \
}
#if defined(H5SETJMP) && defined(H5_HAVE_SIGNAL)
#define ALIGNMENT(TYPE,INFO) { \
- char *volatile _buf = NULL; \
- volatile TYPE _val = 1; \
- volatile TYPE _val2; \
+ char *volatile _buf = NULL; \
+ TYPE _val = 1, _val2; \
volatile size_t _ano = 0; \
void (*_handler)(int) = HDsignal(SIGBUS, sigbus_handler); \
void (*_handler2)(int) = HDsignal(SIGSEGV, sigsegv_handler);\
@@ -445,8 +446,10 @@ precision (detected_t *d)
else /* Little-Endian */ \
HDmemcpy(_buf+align_g[_ano]+(INFO.offset/8),((char *)&_val)+(INFO.offset/8),(size_t)(INFO.precision/8)); \
_val2 = *((TYPE*)(_buf+align_g[_ano])); \
+ H5_GCC_DIAG_OFF(float-equal) \
if(_val!=_val2) \
H5LONGJMP(jbuf_g, 1); \
+ H5_GCC_DIAG_ON(float-equal) \
/* End Cray Check */ \
(INFO.align)=align_g[_ano]; \
} else { \
@@ -881,63 +884,69 @@ done:\n\
static void
iprint(detected_t *d)
{
- int i, j, k, pass;
+ unsigned int pass;
- for (pass=(d->size-1)/4; pass>=0; --pass) {
- /*
- * Print the byte ordering above the bit fields.
- */
- printf(" * ");
- for (i=MIN(pass*4+3,d->size-1); i>=pass*4; --i) {
- printf ("%4d", d->perm[i]);
- if (i>pass*4) HDfputs (" ", stdout);
- }
+ for (pass = (d->size - 1) / 4; ; --pass) {
+ unsigned int i, k;
+ /*
+ * Print the byte ordering above the bit fields.
+ */
+ printf(" * ");
+ for (i = MIN(pass * 4 + 3, d->size - 1); i >= pass * 4; --i) {
+ printf("%4d", d->perm[i]);
+ if (i > pass * 4) HDfputs(" ", stdout);
+ if (!i) break;
+ }
- /*
- * Print the bit fields
- */
- printf("\n * ");
- for (i=MIN(pass*4+3,d->size-1),
- k=MIN(pass*32+31,8*d->size-1);
- i>=pass*4; --i) {
- for (j=7; j>=0; --j) {
- if (k==d->sign && d->msize) {
- HDputchar('S');
- } else if (k>=d->epos && k<d->epos+d->esize) {
- HDputchar('E');
- } else if (k>=d->mpos && k<d->mpos+d->msize) {
- HDputchar('M');
- } else if (d->msize) {
- HDputchar('?'); /*unknown floating point bit */
- } else if (d->sign) {
- HDputchar('I');
- } else {
- HDputchar('U');
- }
- --k;
- }
- if (i>pass*4) HDputchar(' ');
- }
- HDputchar('\n');
+ /*
+ * Print the bit fields
+ */
+ printf("\n * ");
+ for (i = MIN(pass * 4 + 3, d->size - 1), k = MIN(pass * 32 + 31,
+ 8 * d->size - 1); i >= pass * 4; --i) {
+ unsigned int j;
+
+ for (j = 8; j > 0; --j) {
+ if (k == d->sign && d->msize) {
+ HDputchar('S');
+ } else if (k >= d->epos && k < d->epos + d->esize) {
+ HDputchar('E');
+ } else if (k >= d->mpos && k < d->mpos + d->msize) {
+ HDputchar('M');
+ } else if (d->msize) {
+ HDputchar('?'); /*unknown floating point bit */
+ } else if (d->sign) {
+ HDputchar('I');
+ } else {
+ HDputchar('U');
+ }
+ --k;
+ }
+ if (i > pass * 4) HDputchar(' ');
+ if (!i) break;
+ }
+ HDputchar('\n');
+ if (!pass) break;
}
/*
* Is there an implicit bit in the mantissa.
*/
if (d->msize) {
- printf(" * Implicit bit? %s\n", d->imp ? "yes" : "no");
+ printf(" * Implicit bit? %s\n", d->imp ? "yes" : "no");
}
/*
* Alignment
*/
- if (0==d->align) {
- printf(" * Alignment: NOT CALCULATED\n");
- } else if (1==d->align) {
- printf(" * Alignment: none\n");
+ if (0 == d->align) {
+ printf(" * Alignment: NOT CALCULATED\n");
+ } else if (1 == d->align) {
+ printf(" * Alignment: none\n");
} else {
- printf(" * Alignment: %lu\n", (unsigned long)(d->align));
+ printf(" * Alignment: %lu\n", (unsigned long) (d->align));
}
+
}
@@ -985,31 +994,25 @@ byte_cmp(int n, const void *_a, const void *_b, const unsigned char *pad_mask)
* actual order to little endian. Ignores differences where
* the corresponding bit in pad_mask is set to 0.
*
- * Return: Success: Index of first differing bit.
- *
- * Failure: -1
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jun 13, 1996
- *
- * Modifications:
+ * Return: Index of first differing bit.
*
*-------------------------------------------------------------------------
*/
-static int
-bit_cmp(int nbytes, int *perm, volatile void *_a, volatile void *_b,
- const unsigned char *pad_mask)
+static unsigned int
+bit_cmp(unsigned int nbytes, int *perm, void *_a, void *_b,
+ const unsigned char *pad_mask)
{
- int i, j;
- volatile unsigned char *a = (volatile unsigned char *) _a;
- volatile unsigned char *b = (volatile unsigned char *) _b;
- unsigned char aa, bb;
+ unsigned int i;
+ unsigned char *a = (unsigned char *) _a;
+ unsigned char *b = (unsigned char *) _b;
+ unsigned char aa, bb;
for (i = 0; i < nbytes; i++) {
- HDassert(perm[i] < nbytes);
- if ((aa = a[perm[i]] & pad_mask[perm[i]])
- != (bb = b[perm[i]] & pad_mask[perm[i]])) {
+ HDassert(perm[i] < (int) nbytes);
+ if ((aa = (unsigned char) (a[perm[i]] & pad_mask[perm[i]]))
+ != (bb = (unsigned char) (b[perm[i]] & pad_mask[perm[i]]))) {
+ unsigned int j;
+
for (j = 0; j < 8; j++, aa >>= 1, bb >>= 1) {
if ((aa & 1) != (bb & 1)) return i * 8 + j;
}
@@ -1017,7 +1020,9 @@ bit_cmp(int nbytes, int *perm, volatile void *_a, volatile void *_b,
HDabort();
}
}
- return -1;
+ fprintf(stderr, "INTERNAL ERROR");
+ HDabort();
+ return 0;
}
@@ -1123,21 +1128,19 @@ fix_order(int n, int last, int *perm, const char **mesg)
*
*-------------------------------------------------------------------------
*/
-static int
-imp_bit(int n, int *perm, volatile void *_a, volatile void *_b,
- const unsigned char *pad_mask)
+static unsigned int
+imp_bit(unsigned int n, int *perm, void *_a, void *_b, const unsigned char *pad_mask)
{
- volatile unsigned char *a = (volatile unsigned char *) _a;
- volatile unsigned char *b = (volatile unsigned char *) _b;
- int changed, major, minor;
- int msmb; /*most significant mantissa bit */
+ unsigned char *a = (unsigned char *) _a;
+ unsigned char *b = (unsigned char *) _b;
+ unsigned int changed, major, minor;
+ unsigned int msmb; /* most significant mantissa bit */
/*
* Look for the least significant bit that has changed between
* A and B. This is the least significant bit of the exponent.
*/
changed = bit_cmp(n, perm, a, b, pad_mask);
- HDassert(changed >= 0);
/*
* The bit to the right (less significant) of the changed bit should
@@ -1174,22 +1177,22 @@ imp_bit(int n, int *perm, volatile void *_a, volatile void *_b,
*
*-------------------------------------------------------------------------
*/
-static unsigned long
-find_bias(int epos, int esize, int *perm, volatile void *_a)
+static unsigned int
+find_bias(unsigned int epos, unsigned int esize, int *perm, void *_a)
{
- unsigned char *a = (unsigned char *) _a;
- unsigned char mask;
- unsigned long b, shift = 0, nbits, bias = 0;
+ unsigned char *a = (unsigned char *) _a;
+ unsigned char mask;
+ unsigned int b, shift = 0, nbits, bias = 0;
while (esize > 0) {
- nbits = MIN(esize, (8 - epos % 8));
- mask = (1 << nbits) - 1;
- b = (a[perm[epos / 8]] >> (epos % 8)) & mask;
- bias |= b << shift;
-
- shift += nbits;
- esize -= nbits;
- epos += nbits;
+ nbits = MIN(esize, (8 - epos % 8));
+ mask = (unsigned char) ((1 << nbits) - 1);
+ b = (unsigned int) (a[perm[epos / 8]] >> (epos % 8)) & mask;
+ bias |= b << shift;
+
+ shift += nbits;
+ esize -= nbits;
+ epos += nbits;
}
return bias;
}
@@ -1667,7 +1670,7 @@ detect_alignments(void)
static int verify_signal_handlers(int signum, void (*handler)(int))
{
void (*save_handler)(int) = HDsignal(signum, handler);
- int i, val;
+ volatile int i, val;
int ntries=5;
volatile int nfailures=0;
volatile int nsuccesses=0;
diff --git a/src/H5private.h b/src/H5private.h
index d1bbc24..66bf7eb 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1523,11 +1523,14 @@ extern char *strdup(const char *s);
/* Include the generated overflow header file */
#include "H5overflow.h"
-#define H5_ASSIGN_OVERFLOW(dst, src, srctype, dsttype) \
+/* Assign a variable to one of a different size (think safer dst = (dsttype)src").
+ * The code generated by the macro checks for overflows.
+ */
+#define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
H5_GLUE4(ASSIGN_,srctype,_TO_,dsttype)(dst,dsttype,src,srctype)\
#else /* NDEBUG */
-#define H5_ASSIGN_OVERFLOW(dst, src, srctype, dsttype) \
+#define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
(dst) = (dsttype)(src);
#endif /* NDEBUG */
diff --git a/src/H5public.h b/src/H5public.h
index 3b89879..e2d2a50 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -94,10 +94,10 @@ extern "C" {
/* Version numbers */
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
#define H5_VERS_MINOR 9 /* For minor interface/format changes */
-#define H5_VERS_RELEASE 216 /* For tweaks, bug-fixes, or development */
+#define H5_VERS_RELEASE 219 /* For tweaks, bug-fixes, or development */
#define H5_VERS_SUBRELEASE "" /* For pre-releases like snap0 */
/* Empty string for real releases. */
-#define H5_VERS_INFO "HDF5 library version: 1.9.216" /* Full version string */
+#define H5_VERS_INFO "HDF5 library version: 1.9.219" /* Full version string */
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
H5_VERS_RELEASE)
diff --git a/src/H5trace.c b/src/H5trace.c
index de2b969..6b12318 100644
--- a/src/H5trace.c
+++ b/src/H5trace.c
@@ -2352,7 +2352,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
unsigned long iul = va_arg(ap, unsigned long); /*lint !e732 Loss of sign not really occuring */
fprintf(out, "%lu", iul);
- asize[argno] = iul;
+ asize[argno] = (hssize_t)iul;
} /* end else */
break;
@@ -2376,7 +2376,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
unsigned long long iull = va_arg(ap, unsigned long long); /*lint !e732 Loss of sign not really occuring */
fprintf(out, "%llu", iull);
- asize[argno] = iull;
+ asize[argno] = (hssize_t)iull;
} /* end else */
break;
diff --git a/src/Makefile.in b/src/Makefile.in
index a2a461a..abcb07a 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -724,7 +724,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
# After making changes, run bin/reconfigure to update other configure related
# files like Makefile.in.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 206
+LT_VERS_REVISION = 209
LT_VERS_AGE = 0
# Our main target, the HDF5 library
diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.in
index 1b1ae96..1eed645 100644
--- a/src/libhdf5.settings.in
+++ b/src/libhdf5.settings.in
@@ -51,7 +51,7 @@ Languages:
@BUILD_CXX_CONDITIONAL_TRUE@ C++ Flags: @CXXFLAGS@
@BUILD_CXX_CONDITIONAL_TRUE@ H5 C++ Flags: @H5_CXXFLAGS@
@BUILD_CXX_CONDITIONAL_TRUE@ AM C++ Flags: @AM_CXXFLAGS@
-@BUILD_CXX_CONDITIONAL_TRUE@ Shared C++ Library: @H5_CXX_SHARED@
+@BUILD_CXX_CONDITIONAL_TRUE@ Shared C++ Library: @enable_shared@
@BUILD_CXX_CONDITIONAL_TRUE@ Static C++ Library: @enable_static@
Features:
diff --git a/test/cache.c b/test/cache.c
index 8725b31..eb17fcc 100644
--- a/test/cache.c
+++ b/test/cache.c
@@ -2984,7 +2984,6 @@ static unsigned
check_flush_cache(void)
{
const char * fcn_name = "check_flush_cache";
- hbool_t show_progress = FALSE;
H5F_t * file_ptr = NULL;
TESTING("H5C_flush_cache() functionality");
@@ -2998,11 +2997,6 @@ check_flush_cache(void)
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: reseting entries.\n", fcn_name);
- }
-
reset_entries();
file_ptr = setup_cache((size_t)(2 * 1024 * 1024),
@@ -3015,12 +3009,6 @@ check_flush_cache(void)
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling check_flush_cache__empty_cache().\n",
- fcn_name);
- }
-
check_flush_cache__empty_cache(file_ptr);
}
@@ -3030,45 +3018,21 @@ check_flush_cache(void)
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling check_flush_cache__single_entry().\n",
- fcn_name);
- }
-
check_flush_cache__single_entry(file_ptr);
}
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling check_flush_cache__multi_entry().\n",
- fcn_name);
- }
-
check_flush_cache__multi_entry(file_ptr);
}
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling check_flush_cache__flush_ops().\n",
- fcn_name);
- }
-
check_flush_cache__flush_ops(file_ptr);
}
if ( pass ) {
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling takedown_cache().\n",
- fcn_name);
- }
-
takedown_cache(file_ptr, FALSE, FALSE);
}
@@ -6406,17 +6370,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -6504,17 +6468,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -6602,17 +6566,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -6732,17 +6696,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -6874,17 +6838,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -6903,17 +6867,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ FALSE,
@@ -7093,17 +7057,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -7122,17 +7086,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -7210,7 +7174,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,0,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7239,7 +7203,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,0,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7369,17 +7333,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -7398,17 +7362,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 6,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
+ /* op_code: type: idx: flag: size: order_ptr: */
{ { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 10, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 12, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -7486,7 +7450,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,0,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7515,7 +7479,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,0,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7671,7 +7635,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,100,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7700,7 +7664,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,100,FALSE,0, NULL },
{ FLUSH_OP__DIRTY, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7808,7 +7772,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,100,FALSE,0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -7837,7 +7801,7 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* num_flush_ops = */ 1,
/* flush_ops = */
/* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,100,FALSE,0, NULL },
{ FLUSH_OP__DIRTY, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
{ FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
@@ -8072,17 +8036,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ FALSE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8101,17 +8065,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2200, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8130,17 +8094,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 350, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8159,17 +8123,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 450, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8188,17 +8152,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 650, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ FALSE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8217,17 +8181,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 750, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8246,17 +8210,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8519,17 +8483,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ FALSE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8548,17 +8512,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2200, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8577,17 +8541,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 350, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8606,17 +8570,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 450, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8635,17 +8599,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 650, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ FALSE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8664,17 +8628,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 750, FALSE, VARIABLE_ENTRY_SIZE / 4, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8693,17 +8657,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 4,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0, NULL },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0, NULL },
+ { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8833,17 +8797,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 200, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 200, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8862,17 +8826,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {400, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 300, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -8920,17 +8884,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 500, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 500, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 500, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -9031,17 +8995,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 200, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 200, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -9060,17 +9024,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {400, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 300, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 300, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -9118,17 +9082,17 @@ check_flush_cache__flush_ops(H5F_t * file_ptr)
/* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
/* num_flush_ops = */ 3,
/* flush_ops = */
- /* op_code: type: idx: flag: size: order_ptr: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
+ /* op_code: type: idx: flag: size: order_ptr: */
+ { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0, NULL },
{ FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 500, FALSE, VARIABLE_ENTRY_SIZE / 2, NULL },
- { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 500, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
+ { FLUSH_OP__MOVE, VARIABLE_ENTRY_TYPE, 500, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL },
+ { FLUSH_OP__NO_OP, 0, 0, FALSE, 0, NULL } },
/* expected_loaded = */ TRUE,
/* expected_cleared = */ FALSE,
/* expected_flushed = */ TRUE,
@@ -9207,11 +9171,8 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
int check_size,
struct fo_flush_entry_check check[])
{
- const char * fcn_name = "check_flush_cache__flush_op_test";
H5C_t * cache_ptr = file_ptr->shared->cache;
static char msg[128];
- hbool_t show_progress = FALSE;
- hbool_t verbose = FALSE;
herr_t result;
int i;
int j;
@@ -9223,12 +9184,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
test_num);
#endif
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: running sanity checks on entry(1).\n",
- fcn_name, test_num, (int)pass);
- }
-
if ( cache_ptr == NULL ) {
pass = FALSE;
@@ -9256,12 +9211,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
failure_mssg = msg;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: running sanity checks on entry(2).\n",
- fcn_name, test_num, (int)pass);
- }
-
i = 0;
while ( ( pass ) && ( i < spec_size ) )
{
@@ -9284,12 +9233,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
i++;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: running sanity checks on entry(3).\n",
- fcn_name, test_num, (int)pass);
- }
-
i = 0;
while ( ( pass ) && ( i < check_size ) )
{
@@ -9327,54 +9270,18 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
i++;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Setting up the test.\n",
- fcn_name, test_num, (int)pass);
- }
-
i = 0;
while ( ( pass ) && ( i < spec_size ) )
{
if ( spec[i].insert_flag ) {
- if ( show_progress ) {
-
- HDfprintf(stdout,
- "%s:%d: Inserting entry(%d,%d) with flags 0x%x.\n",
- fcn_name, test_num,
- (int)(spec[i].entry_type),
- (int)(spec[i].entry_index),
- (unsigned)spec[i].flags);
- }
-
insert_entry(file_ptr, spec[i].entry_type, spec[i].entry_index,
spec[i].flags);
} else {
- if ( show_progress ) {
-
- HDfprintf(stdout,
- "%s:%d: Protecting entry(%d,%d).\n",
- fcn_name, test_num,
- (int)(spec[i].entry_type),
- (int)(spec[i].entry_index));
- }
-
protect_entry(file_ptr, spec[i].entry_type, spec[i].entry_index);
- if ( show_progress ) {
-
- HDfprintf(stdout,
- "%s:%d: Unprotecting entry(%d,%d) with flags 0x%x ns = %d.\n",
- fcn_name, test_num,
- (int)(spec[i].entry_type),
- (int)(spec[i].entry_index),
- (unsigned)spec[i].flags,
- (int)(spec[i].new_size));
- }
-
if(spec[i].resize_flag)
resize_entry(file_ptr, spec[i].entry_type, spec[i].entry_index,
spec[i].new_size, TRUE);
@@ -9420,12 +9327,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
}
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Running the test.\n",
- fcn_name, test_num, (int)pass);
- }
-
if ( pass ) {
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5P_DATASET_XFER_DEFAULT,
@@ -9441,11 +9342,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
}
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Checking test results(1).\n",
- fcn_name, test_num, (int)pass);
- }
i = 0;
while ( ( pass ) && ( i < spec_size ) )
@@ -9484,12 +9380,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
i++;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Checking test results(2).\n",
- fcn_name, test_num, (int)pass);
- }
-
if ( pass ) {
i = 0;
@@ -9608,12 +9498,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
}
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Checking test results(3).\n",
- fcn_name, test_num, (int)pass);
- }
-
if ( pass ) {
if ( ( ( (flush_flags & H5C__FLUSH_INVALIDATE_FLAG) == 0 )
@@ -9642,13 +9526,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
}
/* clean up the cache to prep for the next test */
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Cleaning up after test(1).\n",
- fcn_name, test_num, (int)pass);
- }
-
if ( pass ) {
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5P_DATASET_XFER_DEFAULT,
@@ -9668,16 +9545,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
( cache_ptr->dirty_index_size != 0 ) ) {
pass = FALSE;
-
- if ( verbose ) {
-
- HDfprintf(stdout, "%s:%d: il/is/cis/dis = %lld/%lld/%lld/%lld.\n",
- fcn_name, test_num,
- (long long)(cache_ptr->index_len),
- (long long)(cache_ptr->index_size),
- (long long)(cache_ptr->clean_index_size),
- (long long)(cache_ptr->dirty_index_size));
- }
HDsnprintf(msg, (size_t)128,
"Unexpected cache len/size/cs/ds after cleanup in flush op test #%d.",
test_num);
@@ -9686,12 +9553,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
}
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Cleaning up after test(2).\n",
- fcn_name, test_num, (int)pass);
- }
-
i = 0;
while ( ( pass ) && ( i < spec_size ) )
{
@@ -9708,12 +9569,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
i++;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Cleaning up after test(3).\n",
- fcn_name, test_num, (int)pass);
- }
-
i = 0;
while ( ( pass ) && ( i < check_size ) )
{
@@ -9730,11 +9585,6 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
i++;
}
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s:%d:%d: Done.\n", fcn_name, test_num, (int)pass);
- }
-
return;
} /* check_flush_cache__flush_op_test() */
@@ -10893,8 +10743,6 @@ check_flush_cache__flush_op_eviction_test(H5F_t * file_ptr)
static void
check_flush_cache__single_entry(H5F_t * file_ptr)
{
- const char * fcn_name = "check_flush_cache__single_entry";
- hbool_t show_progress = FALSE;
H5C_t * cache_ptr = file_ptr->shared->cache;
if ( cache_ptr == NULL ) {
@@ -10911,10 +10759,6 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 1);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -10929,18 +10773,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 2);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -10955,18 +10791,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 3);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -10981,18 +10809,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 4);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11007,18 +10827,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 5);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11033,18 +10845,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 6);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11059,18 +10863,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 7);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11085,18 +10881,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 8);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11111,18 +10899,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 9);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11138,18 +10918,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 10);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11165,18 +10937,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 11);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11192,18 +10956,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 12);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11219,18 +10975,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 13);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11246,18 +10994,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 14);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11273,18 +11013,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 15);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11301,18 +11033,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 16);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11329,18 +11053,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 17);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11355,18 +11071,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 18);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11381,18 +11089,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 19);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11407,18 +11107,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 20);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11433,18 +11125,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 21);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11459,18 +11143,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 22);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11485,18 +11161,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 23);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11511,18 +11179,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 24);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11537,18 +11197,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 25);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11564,18 +11216,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 26);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11591,18 +11235,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 27);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11618,18 +11254,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 28);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11645,18 +11273,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 29);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11672,18 +11292,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 30);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11699,18 +11311,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 31);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11727,18 +11331,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 32);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11755,18 +11351,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 33);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11781,18 +11369,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 34);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11807,18 +11387,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 35);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11833,18 +11405,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 36);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11859,18 +11423,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 37);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11885,18 +11441,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 38);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11911,18 +11459,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 39);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11937,18 +11477,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 40);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11963,18 +11495,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 41);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -11990,18 +11514,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 42);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12017,18 +11533,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 43);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12044,18 +11552,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 44);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12071,18 +11571,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 45);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12098,18 +11590,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 46);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12125,18 +11609,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 47);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12153,18 +11629,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 48);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12181,18 +11649,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 49);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12207,18 +11667,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 50);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12233,18 +11685,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 51);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12259,18 +11703,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 52);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12285,18 +11721,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 53);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12311,18 +11739,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 54);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12337,18 +11757,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 55);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12363,18 +11775,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 56);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12389,18 +11793,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 57);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12416,18 +11812,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 58);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12443,18 +11831,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 59);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12470,18 +11850,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 60);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12497,18 +11869,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ FALSE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 61);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12524,18 +11888,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 62);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12551,18 +11907,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ TRUE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 63);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12579,18 +11927,10 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
if ( pass ) {
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running test %d.\n", fcn_name, 64);
- }
-
check_flush_cache__single_entry_test
(
/* file_ptr */ file_ptr,
@@ -12607,10 +11947,6 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
/* expected_flushed */ FALSE,
/* expected_destroyed */ TRUE
);
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: pass = %d.\n", fcn_name, (int)pass);
- }
}
@@ -12957,11 +12293,6 @@ check_flush_cache__single_entry(H5F_t * file_ptr)
i = 0;
while ( ( pass ) && ( i < 256 ) )
{
-
- if ( show_progress ) {
- HDfprintf(stdout, "%s: running pinned test %d.\n", fcn_name, i);
- }
-
check_flush_cache__pinned_single_entry_test
(
/* file_ptr */ file_ptr,
@@ -13618,7 +12949,6 @@ check_get_entry_status(void)
*
* Modifications:
*
- * None.
*
*-------------------------------------------------------------------------
*/
@@ -13705,29 +13035,29 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL);
- if ( result < 0 ) {
+ if ( result < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
"H5C_get_entry_status() reports failure 2.");
failure_mssg = msg;
- } else if ( !in_cache || is_dirty || is_protected || is_pinned ) {
+ } else if ( !in_cache || is_dirty || is_protected || is_pinned ) {
- pass = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
- failure_mssg = msg;
+ pass = FALSE;
+ HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
+ failure_mssg = msg;
} else if ( ( ! entry_ptr->loaded ) ||
( entry_ptr->cleared ) ||
( entry_ptr->flushed ) ||
( entry_ptr->destroyed ) ) {
- pass = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 2.");
- failure_mssg = msg;
+ pass = FALSE;
+ HDsnprintf(msg, (size_t)128, "Unexpected entry history 2.");
+ failure_mssg = msg;
- }
+ }
}
/* Expunge the entry and then verify that it is no longer in the cache.
@@ -13749,29 +13079,29 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL);
- if ( result < 0 ) {
+ if ( result < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
"H5C_get_entry_status() reports failure 3.");
failure_mssg = msg;
- } else if ( in_cache ) {
+ } else if ( in_cache ) {
- pass = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
- failure_mssg = msg;
+ pass = FALSE;
+ HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
+ failure_mssg = msg;
} else if ( ( ! entry_ptr->loaded ) ||
( ! entry_ptr->cleared ) ||
( entry_ptr->flushed ) ||
( ! entry_ptr->destroyed ) ) {
- pass = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 3.");
- failure_mssg = msg;
+ pass = FALSE;
+ HDsnprintf(msg, (size_t)128, "Unexpected entry history 3.");
+ failure_mssg = msg;
- }
+ }
}
/* now repeat the process with a different entry. On unprotect
@@ -13791,14 +13121,14 @@ check_expunge_entry(void)
&in_cache, &is_dirty, &is_protected,
&is_pinned, NULL, NULL);
- if ( result < 0 ) {
+ if ( result < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
"H5C_get_entry_status() reports failure 4.");
failure_mssg = msg;
- } else if ( in_cache ) {
+ } else if ( in_cache ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128, "Unexpected status 4.");
@@ -13813,7 +13143,7 @@ check_expunge_entry(void)
HDsnprintf(msg, (size_t)128, "Unexpected entry history 4.");
failure_mssg = msg;
- }
+ }
}
/* protect the entry to force the cache to load it, and then unprotect
@@ -13834,14 +13164,14 @@ check_expunge_entry(void)
&in_cache, &is_dirty, &is_protected,
&is_pinned, NULL, NULL);
- if ( result < 0 ) {
+ if ( result < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
"H5C_get_entry_status() reports failure 5.");
failure_mssg = msg;
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ) {
+ } else if ( !in_cache || !is_dirty || is_protected || is_pinned ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128, "Unexpected status 5.");
@@ -13856,7 +13186,7 @@ check_expunge_entry(void)
HDsnprintf(msg, (size_t)128, "Unexpected entry history 5.");
failure_mssg = msg;
- }
+ }
}
/* Expunge the entry and then verify that it is no longer in the cache.
@@ -13879,14 +13209,14 @@ check_expunge_entry(void)
&in_cache, &is_dirty, &is_protected,
&is_pinned, NULL, NULL);
- if ( result < 0 ) {
+ if ( result < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
"H5C_get_entry_status() reports failure 6.");
failure_mssg = msg;
- } else if ( in_cache ) {
+ } else if ( in_cache ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128, "Unexpected status 6.");
@@ -13901,7 +13231,7 @@ check_expunge_entry(void)
HDsnprintf(msg, (size_t)128, "Unexpected entry history 6.");
failure_mssg = msg;
- }
+ }
}
if ( pass ) {
@@ -14408,13 +13738,13 @@ check_move_entry(void)
*
* At present, we should do the following tests:
*
- * 1) move a clean, unprotected, unpinned entry.
+ * 1) Move a clean, unprotected, unpinned entry.
*
- * 2) move a dirty, unprotected, unpinned entry.
+ * 2) Move a dirty, unprotected, unpinned entry.
*
- * 3) move a clean, unprotected, pinned entry.
+ * 3) Move a clean, unprotected, pinned entry.
*
- * 4) move a dirty, unprotected, pinned entry.
+ * 4) Move a dirty, unprotected, pinned entry.
*
* In all cases, the entry should have moved to its
* new location, and have been marked dirty if it wasn't
@@ -14787,7 +14117,7 @@ check_resize_entry(void)
base_addr = entries[LARGE_ENTRY_TYPE];
entry_ptr = &(base_addr[0]);
- entry_size = LARGE_ENTRY_SIZE;
+ entry_size = LARGE_ENTRY_SIZE;
}
}
@@ -15668,6 +14998,7 @@ check_resize_entry(void)
}
if ( pass ) {
+
protect_entry(file_ptr, LARGE_ENTRY_TYPE, 2);
unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, 2, H5C__DELETED_FLAG);
@@ -15724,7 +15055,6 @@ check_resize_entry(void)
*
* Modifications:
*
- * None.
*
*-------------------------------------------------------------------------
*/
@@ -16542,6 +15872,7 @@ check_flush_protected_err(void)
*
* Modifications:
*
+ *
*-------------------------------------------------------------------------
*/
@@ -23360,6 +22691,7 @@ check_auto_cache_resize_disable(void)
/* flush the cache and destroy all entries so we start from a known point */
flush_cache(file_ptr, TRUE, FALSE, FALSE);
+
}
if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
@@ -23586,6 +22918,7 @@ check_auto_cache_resize_disable(void)
/* flush the cache and destroy all entries so we start from a known point */
flush_cache(file_ptr, TRUE, FALSE, FALSE);
+
}
if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
@@ -23819,6 +23152,7 @@ check_auto_cache_resize_disable(void)
/* flush the cache and destroy all entries so we start from a known point */
flush_cache(file_ptr, TRUE, FALSE, FALSE);
+
}
if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
@@ -33778,5 +33112,5 @@ main(void)
nerrs += check_notify_cb();
return(nerrs > 0);
-}
+} /* main() */
diff --git a/test/cache_api.c b/test/cache_api.c
index 8f556be..51dda99 100644
--- a/test/cache_api.c
+++ b/test/cache_api.c
@@ -32,15 +32,15 @@
/* private function declarations: */
-static void check_fapl_mdc_api_calls(void);
+static unsigned check_fapl_mdc_api_calls(void);
-static void check_file_mdc_api_calls(void);
+static unsigned check_file_mdc_api_calls(void);
-static void mdc_api_call_smoke_check(int express_test);
+static unsigned mdc_api_call_smoke_check(int express_test);
-static void check_fapl_mdc_api_errs(void);
+static unsigned check_fapl_mdc_api_errs(void);
-static void check_file_mdc_api_errs(void);
+static unsigned check_file_mdc_api_errs(void);
/**************************************************************************/
@@ -67,7 +67,7 @@ static void check_file_mdc_api_errs(void);
*
*-------------------------------------------------------------------------
*/
-static void
+static unsigned
check_fapl_mdc_api_calls(void)
{
const char * fcn_name = "check_fapl_mdc_api_calls()";
@@ -489,6 +489,8 @@ check_fapl_mdc_api_calls(void)
HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
fcn_name, failure_mssg);
+ return !pass;
+
} /* check_fapl_mdc_api_calls() */
@@ -516,7 +518,7 @@ check_fapl_mdc_api_calls(void)
*-------------------------------------------------------------------------
*/
-static void
+static unsigned
check_file_mdc_api_calls(void)
{
const char * fcn_name = "check_file_mdc_api_calls()";
@@ -839,6 +841,8 @@ check_file_mdc_api_calls(void)
HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
fcn_name, failure_mssg);
+ return !pass;
+
} /* check_file_mdc_api_calls() */
@@ -865,7 +869,7 @@ check_file_mdc_api_calls(void)
#define NUM_DSETS 6
#define NUM_RANDOM_ACCESSES 200000
-static void
+static unsigned
mdc_api_call_smoke_check(int express_test)
{
const char * fcn_name = "mdc_api_call_smoke_check()";
@@ -1004,7 +1008,7 @@ mdc_api_call_smoke_check(int express_test)
HDfprintf(stdout, " Long tests disabled.\n");
- return;
+ return 0;
}
pass = TRUE;
@@ -1105,7 +1109,7 @@ mdc_api_call_smoke_check(int express_test)
sprintf(dset_name, "/dset%03d", i);
dataset_ids[i] = H5Dcreate2(file_id, dset_name, H5T_STD_I32BE,
- dataspace_id, H5P_DEFAULT, properties, H5P_DEFAULT);
+ dataspace_id, H5P_DEFAULT, properties, H5P_DEFAULT);
if ( dataset_ids[i] < 0 ) {
@@ -1329,9 +1333,9 @@ mdc_api_call_smoke_check(int express_test)
}
n++;
-
}
+
/* close the file spaces we are done with */
i = 1;
while ( ( pass ) && ( i < NUM_DSETS ) )
@@ -1450,7 +1454,6 @@ mdc_api_call_smoke_check(int express_test)
}
n++;
-
}
/* close file space 0 */
@@ -1515,6 +1518,8 @@ mdc_api_call_smoke_check(int express_test)
HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
fcn_name, failure_mssg);
+ return !pass;
+
} /* mdc_api_call_smoke_check() */
@@ -3015,7 +3020,7 @@ H5AC_cache_config_t invalid_configs[NUM_INVALID_CONFIGS] =
*-------------------------------------------------------------------------
*/
-static void
+static unsigned
check_fapl_mdc_api_errs(void)
{
const char * fcn_name = "check_fapl_mdc_api_errs()";
@@ -3065,7 +3070,7 @@ check_fapl_mdc_api_errs(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
if ( ( pass ) &&
- ( ( H5Pget_mdc_config(fapl_id, &scratch) < 0 ) ||
+ ( ( H5Pget_mdc_config(fapl_id, &scratch) < 0) ||
( !CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE) ) ) ) {
pass = FALSE;
@@ -3167,6 +3172,8 @@ check_fapl_mdc_api_errs(void)
HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
fcn_name, failure_mssg);
+ return !pass;
+
} /* check_fapl_mdc_api_errs() */
@@ -3186,7 +3193,7 @@ check_fapl_mdc_api_errs(void)
*-------------------------------------------------------------------------
*/
-static void
+static unsigned
check_file_mdc_api_errs(void)
{
const char * fcn_name = "check_file_mdc_api_errs()";
@@ -3504,6 +3511,8 @@ check_file_mdc_api_errs(void)
HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
fcn_name, failure_mssg);
+ return !pass;
+
} /* check_file_mdc_api_errs() */
@@ -3527,28 +3536,35 @@ check_file_mdc_api_errs(void)
int
main(void)
{
+ unsigned nerrs = 0;
int express_test;
H5open();
express_test = GetTestExpress();
+ printf("===================================\n");
+ printf("Cache API tests\n");
+ printf(" express_test = %d\n", express_test);
+ printf("===================================\n");
+
+
#if 1
- check_fapl_mdc_api_calls();
+ nerrs += check_fapl_mdc_api_calls();
#endif
#if 1
- check_file_mdc_api_calls();
+ nerrs += check_file_mdc_api_calls();
#endif
#if 1
- mdc_api_call_smoke_check(express_test);
+ nerrs += mdc_api_call_smoke_check(express_test);
#endif
#if 1
- check_fapl_mdc_api_errs();
+ nerrs += check_fapl_mdc_api_errs();
#endif
#if 1
- check_file_mdc_api_errs();
+ nerrs += check_file_mdc_api_errs();
#endif
- return(0);
+ return( nerrs > 0 );
} /* main() */
diff --git a/test/cache_common.c b/test/cache_common.c
index 0231a11..7b1a158 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -151,7 +151,7 @@ static herr_t notify_size(H5F_t * f, void * thing, size_t * size_ptr);
static herr_t notify_notify(H5C_notify_action_t action, void *thing);
-test_entry_t * entries[NUMBER_OF_ENTRY_TYPES] =
+test_entry_t *entries[NUMBER_OF_ENTRY_TYPES] =
{
pico_entries,
nano_entries,
@@ -166,7 +166,7 @@ test_entry_t * entries[NUMBER_OF_ENTRY_TYPES] =
notify_entries
};
-test_entry_t * orig_entries[NUMBER_OF_ENTRY_TYPES] =
+test_entry_t *orig_entries[NUMBER_OF_ENTRY_TYPES] =
{
orig_pico_entries,
orig_nano_entries,
@@ -241,7 +241,7 @@ const haddr_t alt_base_addrs[NUMBER_OF_ENTRY_TYPES] =
NOTIFY_ALT_BASE_ADDR
};
-const char * entry_type_names[NUMBER_OF_ENTRY_TYPES] =
+const char *entry_type_names[NUMBER_OF_ENTRY_TYPES] =
{
"pico entries -- 1 B",
"nano entries -- 4 B",
@@ -375,7 +375,7 @@ static void execute_flush_op(H5F_t *file_ptr, struct test_entry_t *entry_ptr,
-/* address translation funtions: */
+/* address translation functions: */
/*-------------------------------------------------------------------------
@@ -393,8 +393,8 @@ static void execute_flush_op(H5F_t *file_ptr, struct test_entry_t *entry_ptr,
*/
void
addr_to_type_and_index(haddr_t addr,
- int32_t * type_ptr,
- int32_t * index_ptr)
+ int32_t *type_ptr,
+ int32_t *index_ptr)
{
int i;
int32_t type;
@@ -453,52 +453,8 @@ addr_to_type_and_index(haddr_t addr,
} /* addr_to_type_and_index() */
-
-#if 0 /* This function has never been used, but we may want it
- * some time. Lets keep it for now.
- */
-/*-------------------------------------------------------------------------
- * Function: type_and_index_to_addr
- *
- * Purpose: Given a type and index of an entry, compute the associated
- * addr and return that value.
- *
- * Return: computed addr
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-haddr_t
-type_and_index_to_addr(int32_t type,
- int32_t idx)
-{
- haddr_t addr;
-
- HDassert( ( type >= 0 ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( idx >= 0 ) && ( idx <= max_indices[type] ) );
-
- addr = base_addrs[type] + (((haddr_t)idx) * entry_sizes[type]);
-
- HDassert( addr == (entries[type])[idx].addr );
-
- if ( (entries[type])[idx].at_main_addr ) {
-
- HDassert( addr == (entries[type])[idx].main_addr );
-
- } else {
-
- HDassert( addr == (entries[type])[idx].alt_addr );
- }
-
- return(addr);
-} /* type_and_index_to_addr() */
-
-#endif
+/* Call back functions: */
/*-------------------------------------------------------------------------
@@ -522,9 +478,9 @@ type_and_index_to_addr(int32_t type,
*/
herr_t
-check_write_permitted(const H5F_t UNUSED * f,
+check_write_permitted(const H5F_t UNUSED *f,
hid_t UNUSED dxpl_id,
- hbool_t * write_permitted_ptr)
+ hbool_t *write_permitted_ptr)
{
HDassert( write_permitted_ptr );
@@ -1273,14 +1229,13 @@ notify_size(H5F_t * f, void * thing, size_t * size_ptr)
*
*-------------------------------------------------------------------------
*/
-
static herr_t
notify(H5C_notify_action_t action, void *thing)
{
test_entry_t * entry_ptr;
- test_entry_t * base_addr;
+ test_entry_t *base_addr;
- HDassert( thing );
+ HDassert(thing);
entry_ptr = (test_entry_t *)thing;
base_addr = entries[entry_ptr->type];
@@ -1642,8 +1597,7 @@ execute_flush_op(H5F_t * file_ptr,
break;
case FLUSH_OP__MOVE:
- move_entry(cache_ptr, op_ptr->type, op_ptr->idx,
- op_ptr->flag);
+ move_entry(cache_ptr, op_ptr->type, op_ptr->idx, op_ptr->flag);
break;
case FLUSH_OP__ORDER:
@@ -1745,8 +1699,8 @@ reset_entries(void)
{
int j;
- max_index = max_indices[i];
entry_size = entry_sizes[i];
+ max_index = max_indices[i];
base_addr = entries[i];
orig_base_addr = orig_entries[i];
@@ -2693,7 +2647,6 @@ setup_cache(size_t max_cache_size,
cache_ptr->ignore_tags = TRUE;
H5C_stats__reset(cache_ptr);
-
ret_val = file_ptr;
}
@@ -2888,32 +2841,25 @@ flush_cache(H5F_t * file_ptr,
verify_unprotected();
if(pass) {
- H5C_t * cache_ptr = NULL;
+ H5C_t * cache_ptr;
herr_t result = 0;
HDassert(file_ptr);
cache_ptr = file_ptr->shared->cache;
- if(destroy_entries) {
-
+ if(destroy_entries)
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
- }
- else {
-
+ else
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
- }
-
- if(dump_stats) {
+ if(dump_stats)
H5C_stats(cache_ptr, "test cache", dump_detailed_stats);
- }
if(result < 0) {
-
pass = FALSE;
failure_mssg = "error in H5C_flush_cache().";
}
@@ -3016,24 +2962,19 @@ insert_entry(H5F_t * file_ptr,
(int)(entry_ptr->addr != entry_ptr->header.addr));
#endif
}
- HDassert( entry_ptr->cache_ptr == NULL );
+ HDassert(entry_ptr->cache_ptr == NULL);
entry_ptr->cache_ptr = cache_ptr;
- if ( insert_pinned ) {
-
- HDassert( entry_ptr->header.is_pinned );
-
- } else {
-
- HDassert( ! ( entry_ptr->header.is_pinned ) );
-
- }
+ if(insert_pinned)
+ HDassert(entry_ptr->header.is_pinned);
+ else
+ HDassert(!(entry_ptr->header.is_pinned));
entry_ptr->is_pinned = insert_pinned;
entry_ptr->pinned_from_client = insert_pinned;
- HDassert( entry_ptr->header.is_dirty );
- HDassert( ((entry_ptr->header).type)->id == type );
+ HDassert(entry_ptr->header.is_dirty);
+ HDassert(((entry_ptr->header).type)->id == type);
}
return;
@@ -3541,8 +3482,8 @@ unprotect_entry(H5F_t * file_ptr,
HDassert( entry_ptr->header.is_protected );
HDassert( entry_ptr->is_protected );
- pin_flag_set = (hbool_t)((flags & H5C__PIN_ENTRY_FLAG) != 0 );
- unpin_flag_set = (hbool_t)((flags & H5C__UNPIN_ENTRY_FLAG) != 0 );
+ pin_flag_set = (hbool_t)((flags & H5C__PIN_ENTRY_FLAG) != 0);
+ unpin_flag_set = (hbool_t)((flags & H5C__UNPIN_ENTRY_FLAG) != 0);
HDassert ( ! ( pin_flag_set && unpin_flag_set ) );
HDassert ( ( ! pin_flag_set ) || ( ! (entry_ptr->is_pinned) ) );
@@ -3586,13 +3527,13 @@ unprotect_entry(H5F_t * file_ptr,
if ( pin_flag_set ) {
- HDassert ( entry_ptr->header.is_pinned );
+ HDassert(entry_ptr->header.is_pinned);
entry_ptr->pinned_from_client = TRUE;
entry_ptr->is_pinned = TRUE;
} else if ( unpin_flag_set ) {
- HDassert ( entry_ptr->header.is_pinned == entry_ptr->header.pinned_from_cache );
+ HDassert(entry_ptr->header.is_pinned == entry_ptr->header.pinned_from_cache);
entry_ptr->pinned_from_client = FALSE;
entry_ptr->is_pinned = entry_ptr->pinned_from_cache;
@@ -4245,7 +4186,7 @@ row_major_scan_backward(H5F_t * file_ptr,
if ( ( pass ) && ( (idx + lag) >= 0 ) &&
( ( idx + lag) <= max_indices[type] ) ) {
- switch ( (idx + lag) %4 ) {
+ switch ( (idx + lag) % 4 ) {
case 0:
if ( (entries[type])[idx+lag].is_dirty ) {
@@ -4274,7 +4215,7 @@ row_major_scan_backward(H5F_t * file_ptr,
}
break;
- case 3: /* we just did an insrt */
+ case 3: /* we just did an insert */
unprotect_entry(file_ptr, type, idx + lag, H5C__DELETED_FLAG);
break;
@@ -5113,7 +5054,6 @@ check_and_validate_cache_hit_rate(hid_t file_id,
int64_t min_accesses,
double min_hit_rate)
{
- /* const char * fcn_name = "check_and_validate_cache_hit_rate()"; */
herr_t result;
int64_t cache_hits = 0;
int64_t cache_accesses = 0;
@@ -5247,7 +5187,6 @@ check_and_validate_cache_size(hid_t file_id,
int32_t * cur_num_entries_ptr,
hbool_t dump_data)
{
- /* const char * fcn_name = "check_and_validate_cache_size()"; */
herr_t result;
size_t expected_max_size;
size_t max_size;
@@ -5434,7 +5373,6 @@ validate_mdc_config(hid_t file_id,
hbool_t compare_init,
int test_num)
{
- /* const char * fcn_name = "validate_mdc_config()"; */
static char msg[256];
H5F_t * file_ptr = NULL;
H5C_t * cache_ptr = NULL;
diff --git a/test/cache_common.h b/test/cache_common.h
index 1165de4..a309fa4 100644
--- a/test/cache_common.h
+++ b/test/cache_common.h
@@ -314,19 +314,19 @@ typedef struct test_entry_t
hbool_t destroyed; /* entry has been destroyed since the
* last time it was reset.
*/
- int flush_dep_par_type; /* Entry type of flush dependency parent */
- int flush_dep_par_idx; /* Index of flush dependency parent */
- uint64_t child_flush_dep_height_rc[H5C__NUM_FLUSH_DEP_HEIGHTS];
+ int flush_dep_par_type; /* Entry type of flush dependency parent */
+ int flush_dep_par_idx; /* Index of flush dependency parent */
+ uint64_t child_flush_dep_height_rc[H5C__NUM_FLUSH_DEP_HEIGHTS];
/* flush dependency heights of flush
* dependency children
*/
- unsigned flush_dep_height; /* flush dependency height of entry */
- hbool_t pinned_from_client; /* entry was pinned by client call */
- hbool_t pinned_from_cache; /* entry was pinned by cache internally */
- unsigned flush_order; /* Order that entry was flushed in */
+ unsigned flush_dep_height; /* flush dependency height of entry */
+ hbool_t pinned_from_client; /* entry was pinned by client call */
+ hbool_t pinned_from_cache; /* entry was pinned by cache internally */
+ unsigned flush_order; /* Order that entry was flushed in */
- unsigned notify_after_insert_count; /* Count of times that entry was inserted in cache */
- unsigned notify_before_evict_count; /* Count of times that entry was removed in cache */
+ unsigned notify_after_insert_count; /* Count of times that entry was inserted in cache */
+ unsigned notify_before_evict_count; /* Count of times that entry was removed in cache */
} test_entry_t;
/* The following are cut down test versions of the hash table manipulation
@@ -410,6 +410,7 @@ if ( ( (cache_ptr) == NULL ) || \
} \
}
+
/* Macros used in H5AC level tests */
#define CACHE_CONFIGS_EQUAL(a, b, cmp_set_init, cmp_init_size) \
@@ -424,26 +425,26 @@ if ( ( (cache_ptr) == NULL ) || \
( (a).set_initial_size == (b).set_initial_size ) ) && \
( ( ! cmp_init_size ) || \
( (a).initial_size == (b).initial_size ) ) && \
- ( (a).min_clean_fraction == (b).min_clean_fraction ) && \
+ ( DBL_REL_EQUAL((a).min_clean_fraction, (b).min_clean_fraction, 0.00001 ) ) && \
( (a).max_size == (b).max_size ) && \
( (a).min_size == (b).min_size ) && \
( (a).epoch_length == (b).epoch_length ) && \
( (a).incr_mode == (b).incr_mode ) && \
- ( (a).lower_hr_threshold == (b).lower_hr_threshold ) && \
- ( (a).increment == (b).increment ) && \
+ ( DBL_REL_EQUAL((a).lower_hr_threshold, (b).lower_hr_threshold, 0.00001 ) ) && \
+ ( DBL_REL_EQUAL((a).increment, (b).increment, 0.00001 ) ) && \
( (a).apply_max_increment == (b).apply_max_increment ) && \
( (a).max_increment == (b).max_increment ) && \
( (a).flash_incr_mode == (b).flash_incr_mode ) && \
- ( (a).flash_multiple == (b).flash_multiple ) && \
- ( (a).flash_threshold == (b).flash_threshold ) && \
+ ( DBL_REL_EQUAL((a).flash_multiple, (b).flash_multiple, 0.00001 ) ) && \
+ ( DBL_REL_EQUAL((a).flash_threshold, (b).flash_threshold, 0.00001 ) ) && \
( (a).decr_mode == (b).decr_mode ) && \
- ( (a).upper_hr_threshold == (b).upper_hr_threshold ) && \
- ( (a).decrement == (b).decrement ) && \
+ ( DBL_REL_EQUAL((a).upper_hr_threshold, (b).upper_hr_threshold, 0.00001 ) ) && \
+ ( DBL_REL_EQUAL((a).decrement, (b).decrement, 0.00001 ) ) && \
( (a).apply_max_decrement == (b).apply_max_decrement ) && \
( (a).max_decrement == (b).max_decrement ) && \
( (a).epochs_before_eviction == (b).epochs_before_eviction ) && \
( (a).apply_empty_reserve == (b).apply_empty_reserve ) && \
- ( (a).empty_reserve == (b).empty_reserve ) && \
+ ( DBL_REL_EQUAL((a).empty_reserve, (b).empty_reserve, 0.00001 ) ) && \
( (a).dirty_bytes_threshold == (b).dirty_bytes_threshold ) && \
( (a).metadata_write_strategy == (b).metadata_write_strategy ) )
@@ -538,7 +539,6 @@ herr_t check_write_permitted(const H5F_t * f,
hid_t dxpl_id,
hbool_t * write_permitted_ptr);
-
/* callback table extern */
extern const H5C_class_t types[NUMBER_OF_ENTRY_TYPES];
diff --git a/test/cache_tagging.c b/test/cache_tagging.c
index 30ca1de..9209f6d 100644
--- a/test/cache_tagging.c
+++ b/test/cache_tagging.c
@@ -117,91 +117,91 @@ print_entry_type_to_screen(int id)
switch (id) {
case 0:
- printf("B-tree Node");
+ printf("B-tree Node(0)");
break;
case 1:
- printf("Symbol Table Node");
+ printf("Symbol Table Node(1)");
break;
case 2:
- printf("Local Heap Prefix");
+ printf("Local Heap Prefix(2)");
break;
case 3:
- printf("Local Heap Data Block");
+ printf("Local Heap Data Block(3)");
break;
case 4:
- printf("Global Heap");
+ printf("Global Heap(4)");
break;
case 5:
- printf("Object Header");
+ printf("Object Header(5)");
break;
case 6:
- printf("Object Header Chunk");
+ printf("Object Header Chunk(6)");
break;
case 7:
- printf("v2 B-tree Header");
+ printf("v2 B-tree Header(7)");
break;
case 8:
- printf("v2 B-tree Internal Node");
+ printf("v2 B-tree Internal Node(8)");
break;
case 9:
- printf("v2 B-tree Leaf Node");
+ printf("v2 B-tree Leaf Node(9)");
break;
case 10:
- printf("Fractal Heap Header");
+ printf("Fractal Heap Header(10)");
break;
case 11:
- printf("Fractal Heap Direct Block");
+ printf("Fractal Heap Direct Block(11)");
break;
case 12:
- printf("Fractal Heap Indirect Block");
+ printf("Fractal Heap Indirect Block(12)");
break;
case 13:
- printf("Free Space Header");
+ printf("Free Space Header(13)");
break;
case 14:
- printf("Free Space Section");
+ printf("Free Space Section(14)");
break;
case 15:
- printf("Shared Object Header Message Master Table");
+ printf("Shared Object Header Message Master Table(15)");
break;
case 16:
- printf("Shared Message Index Stored As A List");
+ printf("Shared Message Index Stored As A List(16)");
break;
case 17:
- printf("Extensible Array Header");
+ printf("Extensible Array Header(17)");
break;
case 18:
- printf("Extensible Array Index Block");
+ printf("Extensible Array Index Block(18)");
break;
case 19:
- printf("Extensible Array Super Block");
+ printf("Extensible Array Super Block(19)");
break;
case 20:
- printf("Extensible Array Data Block");
+ printf("Extensible Array Data Block(20)");
break;
case 21:
- printf("Extensible Array Data Block Page");
+ printf("Extensible Array Data Block Page(21)");
break;
case 22:
- printf("Chunk Proxy");
+ printf("Chunk Proxy(22)");
break;
case 23:
- printf("Fixed Array Header");
+ printf("Fixed Array Header(23)");
break;
case 24:
- printf("Fixed Array Data Block");
+ printf("Fixed Array Data Block(24)");
break;
case 25:
- printf("Fixed Array Data Block Page");
+ printf("Fixed Array Data Block Page(25)");
break;
case 26:
- printf("File Superblock");
+ printf("File Superblock(26)");
break;
case 27:
- printf("Test Entry");
+ printf("Test Entry(27)");
break;
case 28:
- printf("Number of Types");
+ printf("Number of Types(28)");
break;
default:
printf("*Unknown*");
@@ -434,7 +434,8 @@ static int verify_tag(hid_t fid, int id, haddr_t tag)
} /* for */
- if (found == FALSE) TEST_ERROR;
+ if (found == FALSE)
+ TEST_ERROR;
return 0;
diff --git a/test/earray.c b/test/earray.c
index 2d0a399..2135281 100644
--- a/test/earray.c
+++ b/test/earray.c
@@ -190,7 +190,6 @@ const H5AC_class_t H5AC_EARRAY_TEST[1] = {{
(H5AC_size_func_t)earray_cache_test_size,
}};
-
/*-------------------------------------------------------------------------
* Function: init_cparam
diff --git a/test/links.c b/test/links.c
index 891b5e4..0846c49 100644
--- a/test/links.c
+++ b/test/links.c
@@ -4023,10 +4023,6 @@ external_set_elink_acc_flags(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if(ret != FAIL) TEST_ERROR
H5E_BEGIN_TRY {
- ret = H5Pset_elink_acc_flags(gapl, H5F_ACC_DEBUG);
- } H5E_END_TRY;
- if(ret != FAIL) TEST_ERROR
- H5E_BEGIN_TRY {
ret = H5Pset_elink_acc_flags(gapl, H5F_ACC_CREAT);
} H5E_END_TRY;
if(ret != FAIL) TEST_ERROR
diff --git a/test/th5o.c b/test/th5o.c
index a470f4c..be3b4ab 100644
--- a/test/th5o.c
+++ b/test/th5o.c
@@ -669,7 +669,7 @@ test_h5o_plist(void)
gcpl = H5Gget_create_plist(grp);
CHECK(gcpl, FAIL, "H5Gget_create_plist");
tcpl = H5Tget_create_plist(dtype);
- CHECK(dcpl, FAIL, "H5Tget_create_plist");
+ CHECK(tcpl, FAIL, "H5Tget_create_plist");
dcpl = H5Dget_create_plist(dset);
CHECK(dcpl, FAIL, "H5Dget_create_plist");
@@ -719,7 +719,7 @@ test_h5o_plist(void)
gcpl = H5Gget_create_plist(grp);
CHECK(gcpl, FAIL, "H5Gget_create_plist");
tcpl = H5Tget_create_plist(dtype);
- CHECK(dcpl, FAIL, "H5Tget_create_plist");
+ CHECK(tcpl, FAIL, "H5Tget_create_plist");
dcpl = H5Dget_create_plist(dset);
CHECK(dcpl, FAIL, "H5Dget_create_plist");
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index f526a8b..d36f34f 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -20,31 +20,22 @@
#include "h5test.h"
#include "testpar.h"
-#include "H5Iprivate.h"
-#include "H5ACprivate.h"
-
-#define H5C_PACKAGE /*suppress error about including H5Cpkg */
-
-#include "H5Cpkg.h"
#define H5AC_PACKAGE /*suppress error about including H5ACpkg */
+#define H5C_PACKAGE /*suppress error about including H5Cpkg */
+#define H5F_PACKAGE /*suppress error about including H5Fpkg */
#include "H5ACpkg.h"
+#include "H5Cpkg.h"
+#include "H5Fpkg.h"
+#include "H5Iprivate.h"
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-#include "H5Fpkg.h"
int nerrors = 0;
int failures = 0;
hbool_t verbose = TRUE; /* used to control error messages */
-#if 0
-/* So far we haven't needed this, but that may change.
- * Keep it around for now
- */
-hid_t noblock_dxpl_id=(-1);
-#endif
#define NFILENAME 2
#define PARATESTFILE filenames[0]
@@ -169,7 +160,7 @@ struct datum
hbool_t global_pinned;
hbool_t local_pinned;
hbool_t cleared;
- hbool_t flushed;
+ hbool_t flushed;
int reads;
int writes;
int index;
@@ -466,20 +457,20 @@ static hbool_t trace_file_check(int metadata_write_strategy);
#ifdef NOT_USED
/*****************************************************************************
*
- * Function: print_stats()
+ * Function: print_stats()
*
- * Purpose: Print the rudementary stats maintained by t_cache.
+ * Purpose: Print the rudementary stats maintained by t_cache.
*
- * This is a debugging function, which will not normally
- * be run as part of t_cache.
+ * This is a debugging function, which will not normally
+ * be run as part of t_cache.
*
- * Return: void
+ * Return: void
*
- * Programmer: JRM -- 4/17/06
+ * Programmer: JRM -- 4/17/06
*
* Modifications:
*
- * None.
+ * None.
*
*****************************************************************************/
@@ -487,16 +478,16 @@ static void
print_stats(void)
{
HDfprintf(stdout,
- "%d: datum clears / pinned clears / destroys = %ld / %ld / %ld\n",
+ "%d: datum clears / pinned clears / destroys = %ld / %ld / %ld\n",
world_mpi_rank, datum_clears, datum_pinned_clears,
- datum_destroys );
+ datum_destroys );
HDfprintf(stdout,
- "%d: datum flushes / pinned flushes / loads = %ld / %ld / %ld\n",
+ "%d: datum flushes / pinned flushes / loads = %ld / %ld / %ld\n",
world_mpi_rank, datum_flushes, datum_pinned_flushes,
- datum_loads );
+ datum_loads );
HDfprintf(stdout,
- "%d: pins: global / global dirty / local = %ld / %ld / %ld\n",
- world_mpi_rank, global_pins, global_dirty_pins, local_pins);
+ "%d: pins: global / global dirty / local = %ld / %ld / %ld\n",
+ world_mpi_rank, global_pins, global_dirty_pins, local_pins);
HDfflush(stdout);
return;
@@ -504,6 +495,7 @@ print_stats(void)
} /* print_stats() */
#endif /* NOT_USED */
+
/*****************************************************************************
*
* Function: reset_stats()
@@ -793,7 +785,7 @@ init_data(void)
data[i].global_pinned = FALSE;
data[i].local_pinned = FALSE;
data[i].cleared = FALSE;
- data[i].flushed = FALSE;
+ data[i].flushed = FALSE;
data[i].reads = 0;
data[i].writes = 0;
data[i].index = i;
@@ -883,12 +875,7 @@ do_express_test(void)
*
* Programmer: JRM -- 5/10/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static void
do_sync(void)
{
@@ -960,12 +947,7 @@ do_sync(void)
*
* Programmer: JRM -- 1/3/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static int
get_max_nerrors(void)
{
@@ -1105,7 +1087,6 @@ recv_mssg(struct mssg_t *mssg_ptr,
* Added the add_req_to_tag parameter and supporting code.
*
*****************************************************************************/
-
static hbool_t
send_mssg(struct mssg_t *mssg_ptr,
hbool_t add_req_to_tag)
@@ -1250,7 +1231,7 @@ setup_derived_types(void)
} /* setup_derived_types */
-
+
/*****************************************************************************
*
* Function: takedown_derived_types()
@@ -1264,12 +1245,7 @@ setup_derived_types(void)
*
* Programmer: JRM -- 12/22/05
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static hbool_t
takedown_derived_types(void)
{
@@ -1311,12 +1287,7 @@ takedown_derived_types(void)
*
* Programmer: JRM -- 5/5/10
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static hbool_t
reset_server_counters(void)
{
@@ -1394,7 +1365,6 @@ reset_server_counters(void)
* Updated for sync message.
*
*****************************************************************************/
-
static hbool_t
server_main(void)
{
@@ -1593,11 +1563,11 @@ serve_read_request(struct mssg_t * mssg_ptr)
success = FALSE;
if ( verbose ) {
HDfprintf(stdout,
- "%d:%s: proc %d read invalid entry. idx/base_addr = %d/0x%llx.\n",
- world_mpi_rank, fcn_name,
- mssg_ptr->src,
+ "%d:%s: proc %d read invalid entry. idx/base_addr = %d/%a.\n",
+ world_mpi_rank, fcn_name,
+ mssg_ptr->src,
target_index,
- (long long)(data[target_index].base_addr));
+ data[target_index].base_addr);
}
} else {
@@ -1648,7 +1618,7 @@ serve_read_request(struct mssg_t * mssg_ptr)
} /* serve_read_request() */
-
+
/*****************************************************************************
*
* Function: serve_sync_request()
@@ -1669,12 +1639,7 @@ serve_read_request(struct mssg_t * mssg_ptr)
*
* Programmer: JRM -- 5/10/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static hbool_t
serve_sync_request(struct mssg_t * mssg_ptr)
{
@@ -2678,58 +2643,66 @@ load_datum(H5F_t UNUSED *f,
world_mpi_rank, fcn_name);
}
#if 0 /* This has been useful debugging code -- keep it for now. */
- if ( mssg.req != READ_REQ_REPLY_CODE ) {
-
- HDfprintf(stdout, "%d:%s: mssg.req != READ_REQ_REPLY_CODE.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.req = %d.\n",
- world_mpi_rank, fcn_name, (int)(mssg.req));
- }
+ if ( mssg.req != READ_REQ_REPLY_CODE ) {
- if ( mssg.src != world_server_mpi_rank ) {
+ HDfprintf(stdout,
+ "%d:%s: mssg.req != READ_REQ_REPLY_CODE.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.req = %d.\n",
+ world_mpi_rank, fcn_name, (int)(mssg.req));
+ }
- HDfprintf(stdout, "%d:%s: mssg.src != world_server_mpi_rank.\n",
- world_mpi_rank, fcn_name);
- }
+ if ( mssg.src != world_server_mpi_rank ) {
- if ( mssg.dest != world_mpi_rank ) {
+ HDfprintf(stdout,
+ "%d:%s: mssg.src != world_server_mpi_rank.\n",
+ world_mpi_rank, fcn_name);
+ }
- HDfprintf(stdout, "%d:%s: mssg.dest != world_mpi_rank.\n",
- world_mpi_rank, fcn_name);
- }
+ if ( mssg.dest != world_mpi_rank ) {
- if ( mssg.base_addr != entry_ptr->base_addr ) {
+ HDfprintf(stdout,
+ "%d:%s: mssg.dest != world_mpi_rank.\n",
+ world_mpi_rank, fcn_name);
+ }
- HDfprintf(stdout,
- "%d:%s: mssg.base_addr != entry_ptr->base_addr.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.base_addr = %a.\n",
- world_mpi_rank, fcn_name, mssg.base_addr);
- HDfprintf(stdout, "%d:%s: entry_ptr->base_addr = %a.\n",
- world_mpi_rank, fcn_name, entry_ptr->base_addr);
- }
+ if ( mssg.base_addr != entry_ptr->base_addr ) {
+
+ HDfprintf(stdout,
+ "%d:%s: mssg.base_addr != entry_ptr->base_addr.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.base_addr = %a.\n",
+ world_mpi_rank, fcn_name, mssg.base_addr);
+ HDfprintf(stdout,
+ "%d:%s: entry_ptr->base_addr = %a.\n",
+ world_mpi_rank, fcn_name,
+ entry_ptr->base_addr);
+ }
- if ( mssg.len != entry_ptr->len ) {
+ if ( mssg.len != entry_ptr->len ) {
- HDfprintf(stdout, "%d:%s: mssg.len != entry_ptr->len.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.len = %a.\n",
- world_mpi_rank, fcn_name, mssg.len);
- }
+ HDfprintf(stdout,
+ "%d:%s: mssg.len != entry_ptr->len.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.len = %a.\n",
+ world_mpi_rank, fcn_name, mssg.len);
+ }
- if ( mssg.ver < entry_ptr->ver ) {
+ if ( mssg.ver < entry_ptr->ver ) {
- HDfprintf(stdout, "%d:%s: mssg.ver < entry_ptr->ver.\n",
- world_mpi_rank, fcn_name);
- }
+ HDfprintf(stdout,
+ "%d:%s: mssg.ver < entry_ptr->ver.\n",
+ world_mpi_rank, fcn_name);
+ }
- if ( mssg.magic != MSSG_MAGIC ) {
+ if ( mssg.magic != MSSG_MAGIC ) {
- HDfprintf(stdout, "%d:%s: mssg.magic != MSSG_MAGIC.\n",
- world_mpi_rank, fcn_name);
- }
+ HDfprintf(stdout, "%d:%s: mssg.magic != MSSG_MAGIC.\n",
+ world_mpi_rank, fcn_name);
+ }
#endif /* JRM */
- } else {
+
+ } else {
entry_ptr->ver = mssg.ver;
entry_ptr->header.is_dirty = FALSE;
@@ -2803,7 +2776,7 @@ size_datum(H5F_t UNUSED * f,
} /* size_datum() */
-
+
/*****************************************************************************/
/************************** test utility functions ***************************/
/*****************************************************************************/
@@ -2821,12 +2794,7 @@ size_datum(H5F_t UNUSED * f,
* Programmer: John Mainzer
* 07/11/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static void
expunge_entry(H5F_t * file_ptr,
int32_t idx)
@@ -2887,7 +2855,7 @@ expunge_entry(H5F_t * file_ptr,
} /* expunge_entry() */
-
+
/*****************************************************************************
* Function: insert_entry()
*
@@ -2909,7 +2877,6 @@ expunge_entry(H5F_t * file_ptr,
* any pins must be global pins.
*
*****************************************************************************/
-
static void
insert_entry(H5C_t * cache_ptr,
H5F_t * file_ptr,
@@ -2998,7 +2965,7 @@ insert_entry(H5C_t * cache_ptr,
} /* insert_entry() */
-
+
/*****************************************************************************
* Function: local_pin_and_unpin_random_entries()
*
@@ -3012,10 +2979,7 @@ insert_entry(H5C_t * cache_ptr,
* Programmer: John Mainzer
* 4/12/06
*
- * Modifications:
- *
*****************************************************************************/
-
static void
local_pin_and_unpin_random_entries(H5F_t * file_ptr,
int min_idx,
@@ -3118,7 +3082,7 @@ local_pin_random_entry(H5F_t * file_ptr,
} /* local_pin_random_entry() */
-
+
/*****************************************************************************
* Function: local_unpin_all_entries()
*
@@ -3131,10 +3095,7 @@ local_pin_random_entry(H5F_t * file_ptr,
* Programmer: John Mainzer
* 4/12/06
*
- * Modifications:
- *
*****************************************************************************/
-
static void
local_unpin_all_entries(H5F_t * file_ptr,
hbool_t via_unprotect)
@@ -3160,7 +3121,7 @@ local_unpin_all_entries(H5F_t * file_ptr,
} /* local_unpin_all_entries() */
-
+
/*****************************************************************************
* Function: local_unpin_next_pinned_entry()
*
@@ -3176,10 +3137,7 @@ local_unpin_all_entries(H5F_t * file_ptr,
* Programmer: John Mainzer
* 4/12/06
*
- * Modifications:
- *
*****************************************************************************/
-
static int
local_unpin_next_pinned_entry(H5F_t * file_ptr,
int start_idx,
@@ -3222,7 +3180,7 @@ local_unpin_next_pinned_entry(H5F_t * file_ptr,
} /* local_unpin_next_pinned_entry() */
-
+
/*****************************************************************************
* Function: lock_and_unlock_random_entries()
*
@@ -3237,10 +3195,7 @@ local_unpin_next_pinned_entry(H5F_t * file_ptr,
* Programmer: John Mainzer
* 1/12/06
*
- * Modifications:
- *
*****************************************************************************/
-
static void
lock_and_unlock_random_entries(H5F_t * file_ptr,
int min_idx,
@@ -3273,7 +3228,7 @@ lock_and_unlock_random_entries(H5F_t * file_ptr,
} /* lock_and_unlock_random_entries() */
-
+
/*****************************************************************************
* Function: lock_and_unlock_random_entry()
*
@@ -3287,10 +3242,7 @@ lock_and_unlock_random_entries(H5F_t * file_ptr,
* Programmer: John Mainzer
* 1/4/06
*
- * Modifications:
- *
*****************************************************************************/
-
static void
lock_and_unlock_random_entry(H5F_t * file_ptr,
int min_idx,
@@ -3320,7 +3272,7 @@ lock_and_unlock_random_entry(H5F_t * file_ptr,
} /* lock_and_unlock_random_entry() */
-
+
/*****************************************************************************
* Function: lock_entry()
*
@@ -3340,7 +3292,6 @@ lock_and_unlock_random_entry(H5F_t * file_ptr,
* datum.
*
*****************************************************************************/
-
static void
lock_entry(H5F_t * file_ptr,
int32_t idx)
@@ -3400,7 +3351,6 @@ lock_entry(H5F_t * file_ptr,
* 4/14/06
*
*****************************************************************************/
-
static void
mark_entry_dirty(int32_t idx)
{
@@ -3442,7 +3392,7 @@ mark_entry_dirty(int32_t idx)
} /* mark_entry_dirty() */
-
+
/*****************************************************************************
* Function: pin_entry()
*
@@ -3455,10 +3405,7 @@ mark_entry_dirty(int32_t idx)
* Programmer: John Mainzer
* 4/11/06
*
- * Modifications:
- *
*****************************************************************************/
-
static void
pin_entry(H5F_t * file_ptr,
int32_t idx,
@@ -3512,8 +3459,8 @@ pin_entry(H5F_t * file_ptr,
} /* pin_entry() */
-
#ifdef H5_METADATA_TRACE_FILE
+
/*****************************************************************************
* Function: pin_protected_entry()
*
@@ -3527,12 +3474,7 @@ pin_entry(H5F_t * file_ptr,
* Programmer: John Mainzer
* 01/04/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static void
pin_protected_entry(int32_t idx,
hbool_t global)
@@ -3793,7 +3735,7 @@ reset_server_counts(void)
} /* reset_server_counts() */
-
+
/*****************************************************************************
* Function: resize_entry()
*
@@ -3808,12 +3750,7 @@ reset_server_counts(void)
* Programmer: John Mainzer
* 7/11/06
*
- * Modifications:
- *
- * None
- *
*****************************************************************************/
-
static void
resize_entry(int32_t idx,
size_t new_size)
@@ -4070,8 +4007,7 @@ setup_cache_for_test(hid_t * fid_ptr,
if ( success ) {
- if ( H5AC_set_sync_point_done_callback(cache_ptr, verify_writes) !=
- SUCCEED ) {
+ if ( H5AC_set_sync_point_done_callback(cache_ptr, verify_writes) != SUCCEED ) {
nerrors++;
if ( verbose ) {
@@ -4215,7 +4151,7 @@ verify_writes(int num_writes,
} /* verify_writes() */
-
+
/*****************************************************************************
*
* Function: setup_rand()
@@ -4235,7 +4171,6 @@ verify_writes(int num_writes,
* Modified function to facilitate setting predefined seeds.
*
*****************************************************************************/
-
static void
setup_rand(void)
{
@@ -4282,7 +4217,7 @@ setup_rand(void)
} /* setup_rand() */
-
+
/*****************************************************************************
*
* Function: take_down_cache()
@@ -4298,12 +4233,7 @@ setup_rand(void)
*
* Programmer: JRM -- 1/4/06
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
static hbool_t
take_down_cache(hid_t fid)
{
@@ -4760,7 +4690,7 @@ verify_total_writes(int expected_total_writes)
} /* verify_total_writes() */
-
+
/*****************************************************************************
* Function: unlock_entry()
*
@@ -4779,7 +4709,6 @@ verify_total_writes(int expected_total_writes)
* Updated for the new local_len field in datum.
*
*****************************************************************************/
-
void
unlock_entry(H5F_t * file_ptr,
int32_t idx,
@@ -4847,7 +4776,7 @@ unlock_entry(H5F_t * file_ptr,
} /* unlock_entry() */
-
+
/*****************************************************************************
* Function: unpin_entry()
*
@@ -4866,7 +4795,6 @@ unlock_entry(H5F_t * file_ptr,
* Added assertion that entry is pinned on entry.
*
*****************************************************************************/
-
static void
unpin_entry(H5F_t * file_ptr,
int32_t idx,
@@ -5716,7 +5644,6 @@ smoke_check_3(int metadata_write_strategy)
{
const char * fcn_name = "smoke_check_3()";
hbool_t success = TRUE;
- int cp = 0;
int i;
int max_nerrors;
int min_count;
@@ -5749,18 +5676,12 @@ smoke_check_3(int metadata_write_strategy)
break;
}
- /* 0 */
- if ( verbose ) { HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++); }
-
nerrors = 0;
init_data();
reset_stats();
if ( world_mpi_rank == world_server_mpi_rank ) {
- /* 1 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
if ( ! server_main() ) {
/* some error occured in the server -- report failure */
@@ -5770,15 +5691,9 @@ smoke_check_3(int metadata_write_strategy)
world_mpi_rank, fcn_name);
}
}
-
- /* 2 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
}
else /* run the clients */
{
- /* 1 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr,
metadata_write_strategy) ) {
@@ -5791,9 +5706,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 2 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
min_count = 100 / ((file_mpi_rank + 1) * (file_mpi_rank + 1));
max_count = min_count + 50;
@@ -5808,9 +5720,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 3 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
min_count = 100 / ((file_mpi_rank + 2) * (file_mpi_rank + 2));
max_count = min_count + 50;
@@ -5850,9 +5759,6 @@ smoke_check_3(int metadata_write_strategy)
}
- /* 4 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* flush the file to be sure that we have no problems flushing
* pinned entries
@@ -5865,9 +5771,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 5 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
min_idx = 0;
max_idx = ((virt_num_data_entries / 10) /
@@ -5902,9 +5805,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 6 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
min_idx = 0;
max_idx = ((virt_num_data_entries / 10) /
((file_mpi_rank + 3) * (file_mpi_rank + 3))) - 1;
@@ -5921,9 +5821,6 @@ smoke_check_3(int metadata_write_strategy)
min_idx, max_idx, 0, 100);
}
- /* 7 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* we can't move pinned entries, so release any local pins now. */
local_unpin_all_entries(file_ptr, FALSE);
@@ -5941,9 +5838,6 @@ smoke_check_3(int metadata_write_strategy)
min_count, max_count);
}
- /* 8 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* ...and then move them back. */
for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
{
@@ -5955,9 +5849,6 @@ smoke_check_3(int metadata_write_strategy)
min_count, max_count);
}
- /* 9 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* finally, do some dirty lock/unlocks while we give the cache
* a chance t reduce its size.
*/
@@ -5980,9 +5871,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 10 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* release any local pins before we take down the cache. */
local_unpin_all_entries(file_ptr, FALSE);
@@ -5998,9 +5886,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
- /* 11 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
-
/* verify that all instances of datum are back where the started
* and are clean.
*/
@@ -6036,9 +5921,6 @@ smoke_check_3(int metadata_write_strategy)
}
}
}
-
- /* 12 */
- if ( verbose ) {HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);}
}
max_nerrors = get_max_nerrors();
@@ -6400,7 +6282,6 @@ smoke_check_5(int metadata_write_strategy)
{
const char * fcn_name = "smoke_check_5()";
hbool_t success = TRUE;
- int cp = 0;
int i;
int max_nerrors;
hid_t fid = -1;
@@ -6430,20 +6311,12 @@ smoke_check_5(int metadata_write_strategy)
}
- /* 0 */
- if ( verbose ) { HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++); }
-
nerrors = 0;
init_data();
reset_stats();
if ( world_mpi_rank == world_server_mpi_rank ) {
- /* 1 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
if ( ! server_main() ) {
/* some error occured in the server -- report failure */
@@ -6453,20 +6326,10 @@ smoke_check_5(int metadata_write_strategy)
world_mpi_rank, fcn_name);
}
}
-
- /* 2 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
}
else /* run the clients */
{
- /* 1 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr,
metadata_write_strategy) ) {
@@ -6479,21 +6342,11 @@ smoke_check_5(int metadata_write_strategy)
}
}
- /* 2 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
for ( i = 0; i < (virt_num_data_entries / 2); i++ )
{
insert_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET);
}
- /* 3 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
/* flush the file so we can lock known clean entries. */
if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
nerrors++;
@@ -6503,11 +6356,6 @@ smoke_check_5(int metadata_write_strategy)
}
}
- /* 4 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
for ( i = 0; i < (virt_num_data_entries / 4); i++ )
{
lock_entry(file_ptr, i);
@@ -6531,11 +6379,6 @@ smoke_check_5(int metadata_write_strategy)
}
}
- /* 5 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
for ( i = (virt_num_data_entries / 2) - 1;
i >= (virt_num_data_entries / 4);
i-- )
@@ -6560,11 +6403,6 @@ smoke_check_5(int metadata_write_strategy)
unpin_entry(file_ptr, i, TRUE, FALSE, FALSE);
}
- /* 6 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
if ( fid >= 0 ) {
if ( ! take_down_cache(fid) ) {
@@ -6577,11 +6415,6 @@ smoke_check_5(int metadata_write_strategy)
}
}
- /* 7 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
/* verify that all instance of datum are back where the started
* and are clean.
*/
@@ -6592,11 +6425,6 @@ smoke_check_5(int metadata_write_strategy)
HDassert( ! (data[i].dirty) );
}
- /* 8 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
-
/* compose the done message */
mssg.req = DONE_REQ_CODE;
mssg.src = world_mpi_rank;
@@ -6621,11 +6449,6 @@ smoke_check_5(int metadata_write_strategy)
}
}
}
-
- /* 9 */
- if ( verbose ) {
- HDfprintf(stderr, "%d: cp = %d\n", world_mpi_rank, cp++);
- }
}
max_nerrors = get_max_nerrors();
@@ -7079,7 +6902,7 @@ trace_file_check(int metadata_write_strategy)
} /* trace_file_check() */
-
+
/*****************************************************************************
*
* Function: main()
@@ -7092,12 +6915,7 @@ trace_file_check(int metadata_write_strategy)
*
* Programmer: JRM -- 12/23/05
*
- * Modifications:
- *
- * None.
- *
*****************************************************************************/
-
int
main(int argc, char **argv)
{
@@ -7123,7 +6941,8 @@ main(int argc, char **argv)
* calls. By then, MPI calls may not work.
*/
if (H5dont_atexit() < 0){
- printf("Failed to turn off atexit processing. Continue.\n");
+ printf("%d:Failed to turn off atexit processing. Continue.\n",
+ mpi_rank);
};
H5open();
diff --git a/tools/h5repack/CMakeTests.cmake b/tools/h5repack/CMakeTests.cmake
index 3391c3f..efaa6e5 100644
--- a/tools/h5repack/CMakeTests.cmake
+++ b/tools/h5repack/CMakeTests.cmake
@@ -341,7 +341,7 @@
ENDMACRO (ADD_H5_TEST_META)
MACRO (ADD_H5_UD_TEST testname resultcode resultfile)
- if (HDF5_BUILD_TOOLS AND NOT HDF5_ENABLE_USING_MEMCHECKER)
+ if (NOT HDF5_ENABLE_USING_MEMCHECKER)
# Remove any output file left over from previous test run
add_test (
NAME H5REPACK_UD-${testname}-clearall-objects
@@ -382,7 +382,7 @@
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5REPACK_UD-h5dump-${testname} PROPERTIES DEPENDS "H5REPACK_UD-${testname}")
- endif (HDF5_BUILD_TOOLS AND NOT HDF5_ENABLE_USING_MEMCHECKER)
+ endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_UD_TEST)
##############################################################################
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
index 617e614..87c112a 100644
--- a/tools/misc/h5debug.c
+++ b/tools/misc/h5debug.c
@@ -329,6 +329,7 @@ main(int argc, char *argv[])
*/
H5B_subid_t subtype = (H5B_subid_t)sig[H5_SIZEOF_MAGIC];
unsigned ndims;
+ uint32_t dim[H5O_LAYOUT_NDIMS];
switch(subtype) {
case H5B_SNODE_ID:
@@ -337,6 +338,7 @@ main(int argc, char *argv[])
HDfprintf(stderr, "\nWarning: Providing the group's local heap address will give more information\n");
HDfprintf(stderr, "B-tree symbol table node usage:\n");
HDfprintf(stderr, "\th5debug <filename> <B-tree node address> <address of local heap>\n\n");
+ HDexit(4);
} /* end if */
status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
@@ -347,12 +349,37 @@ main(int argc, char *argv[])
if(extra == 0) {
HDfprintf(stderr, "ERROR: Need number of dimensions of chunk in order to dump chunk B-tree node\n");
HDfprintf(stderr, "B-tree chunked storage node usage:\n");
- HDfprintf(stderr, "\th5debug <filename> <B-tree node address> <# of dimensions>\n");
+ HDfprintf(stderr, "\th5debug <filename> <B-tree node address> <# of dimensions> <slowest chunk dim>...<fastest chunk dim>\n");
HDexit(4);
} /* end if */
+ /* Build array of chunk dimensions */
ndims = (unsigned)extra;
- status = H5D_btree_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims);
+ dim[0] = extra2;
+ if(ndims > 1)
+ dim[1] = extra3;
+ if(ndims > 2)
+ dim[2] = extra4;
+
+ /* Check for dimension error */
+ if(ndims > 3) {
+ HDfprintf(stderr, "ERROR: Only 3 dimensions support currently (fix h5debug)\n");
+ HDfprintf(stderr, "B-tree chunked storage node usage:\n");
+ HDfprintf(stderr, "\th5debug <filename> <B-tree node address> <# of dimensions> <slowest chunk dim>...<fastest chunk dim>\n");
+ HDexit(4);
+ } /* end for */
+ for(u = 0; u < ndims; u++)
+ if(0 == dim[u]) {
+ HDfprintf(stderr, "ERROR: Chunk dimensions should be >0\n");
+ HDfprintf(stderr, "B-tree chunked storage node usage:\n");
+ HDfprintf(stderr, "\th5debug <filename> <B-tree node address> <# of dimensions> <slowest chunk dim>...<fastest chunk dim>\n");
+ HDexit(4);
+ } /* end if */
+
+ /* Set the last dimension (the element size) to zero */
+ dim[ndims] = 0;
+
+ status = H5D_btree_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims, dim);
break;
default:
@@ -367,7 +394,7 @@ main(int argc, char *argv[])
const H5B2_class_t *cls = get_H5B2_class(sig);
HDassert(cls);
- status = H5B2_hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, (haddr_t)extra);
+ status = H5B2__hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, (haddr_t)extra);
} else if(!HDmemcmp(sig, H5B2_INT_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
/*
@@ -385,7 +412,7 @@ main(int argc, char *argv[])
HDexit(4);
} /* end if */
- status = H5B2_int_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (unsigned)extra3, (haddr_t)extra4);
+ status = H5B2__int_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (unsigned)extra3, (haddr_t)extra4);
} else if(!HDmemcmp(sig, H5B2_LEAF_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
/*
@@ -402,7 +429,7 @@ main(int argc, char *argv[])
HDexit(4);
} /* end if */
- status = H5B2_leaf_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (haddr_t)extra3);
+ status = H5B2__leaf_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (haddr_t)extra3);
} else if(!HDmemcmp(sig, H5HF_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
/*
@@ -491,7 +518,7 @@ main(int argc, char *argv[])
const H5EA_class_t *cls = get_H5EA_class(sig);
HDassert(cls);
- /* Check for enough valid parameters */
+ /* Check for enough valid parameters */
if(extra == 0) {
HDfprintf(stderr, "ERROR: Need object header address containing the layout message in order to dump header\n");
HDfprintf(stderr, "Extensible array header block usage:\n");
@@ -559,11 +586,11 @@ main(int argc, char *argv[])
const H5FA_class_t *cls = get_H5FA_class(sig);
HDassert(cls);
- /* Check for enough valid parameters */
+ /* Check for enough valid parameters */
if(extra == 0) {
- HDfprintf(stderr, "ERROR: Need object header address containing the layout message in order to dump header\n");
+ HDfprintf(stderr, "ERROR: Need object header address containing the layout message in order to dump header\n");
HDfprintf(stderr, "Fixed array header block usage:\n");
- HDfprintf(stderr, "\th5debug <filename> <Fixed Array header address> <object header address>\n");
+ HDfprintf(stderr, "\th5debug <filename> <Fixed Array header address> <object header address>\n");
HDexit(4);
} /* end if */
;.$s xrIb؜0FdFgvcg#A,\4FGHJ Vb냍Nq&K6=U6N\􆁝ʻ*!]yDQvǔN K$e+1牎IDRFIu0g^c ȹ*v(D7IYB6)ɕqKtyE$QLyC8 wDRXdYFP29 D!d4;:WYhZr3CeDb.F1J2FB| 0 D 010@pGPG!7 E,јbC@YfȓYDsRg]mo b.z&7}U`u7|ҹrb附HdUNP5J MhKѤ䣴m v W.vB4G6'zaF=4G]uz} ջ+R6*11>y_Y]L~ E:8qZilCOOz3tD5;k[S@ކ+$\JvO9<' # 1)yYt2hBBHb:tλb OQY5uFc2AԆ-EdZBdӌ.HAͺTJ0fDx0"8DuPp_ZJPkD%wL-U Ύ;gfS85O pi7s2ذDEޑ^#`v饩#m#rDP䇽tq&M 3C5qO@0 S R;5ݛc~4Z:*ą9 tI+Dϔp3PEV> 9>N]= ĜpOtTƽnj̰݂biH`&&pnr))˼ hƢȨz(S3 Q?sw"xu4Ċs*82z :UsϨ|%cb! Z7mr4r+gnsaU׬D>FZ*Ӷ&3nQkO@ hAGFM<-)wsH9q{kn.5Q]Rg^wh)2-o[yh/jPR 0ZrI|#i*%6;`!MaEJD3k{K* gocl|5>A0OVa΂9TxxmF-8&uw}9B)gSȆnfC Şvv3 lIm9 `s TgR"3i1M,i(XV䗮Y| xNmu7>Lnz9ML'sA2 aһ,R ER\|IsȽ^쩯I/Ԕ;DZYؼB>E|.Y~;Y jFx~#YHcJ$|K~:]Hо40Y4dR6&Oㅲn`MǍ")AcOτmkɱM.>kU-$NYy a +P:]EyR2Lm;.Xwvvgf#3e%_$ ]~3^ΰE3;,~9\";٣Fp8oy %r ĺmUB=R\1.Kv6ir Bs6ԧ2鵢iD1s7뙓+p.Yۄt;s #M ?g054^>L84Cxo;3I&X>U3kcMHJ P5gw8&_!0H@y5ɿ2f/iϪ/ςωFBjGύمgBq7CjPcɶyA3ș¶v ;3< ;zuJ= Q΅jz05ڐ^O4d)xTκMCnfrWLb!AC(P`5,wGN.Gf*spKqUOl*;HR7lxnt2xCcW>@W@ wcm&{Oѣ fn\pʅ 4[Y\O!Oz>JbMfnc `Soi_m$3v~OزmSE7XTt,,њ`u&pIEiHt ,8Ì{Ctj>2h /i0gFh-)oT݈OӪs۳ nO߭]n@}|o۸_6c ko3`:7Gu @D40uFbdNHq ?2*{ ^H,EbcK++#lNbXr9 Z=G{O_"gXueA OL7{:.+oS6bb0$O#^cؘç[ŭ}\Fi$ť0ܜqUk8p&HoΛ6E϶N&Mfcr4Te|G|DD`|X/%htK1=cX[C؇x210+v&簑;x:_G L~ .jI|S K_kqm"MATfBO5^ w; Ɏ+n8Kj\ކ|~w_NS֘T4,f6G$TռrG l$EVuK;'gÅ w\Z4F?XowƓ-ٌňZ3݃q8c}=COQ|nQD!B2_9h 1=vT]H'=9)as6/\5 nuX-7Y㭆Uaf9ָg1N!/m֗m3l˟Քv.Kul;I񻝔#a;^uKƼwl<aRf~݊cXQzdC[ ʾp{A>?Y?GmUfk|_J Lr};i#x}V Bqu&QXl)IV~L綜 5;uGSZ}plw;\-kv+[='SVm~6f:'6IbgBe:=Ko0L,p=`_og5 J_wY2i1-i_ --̜ ?N9mX%e_KSجe }*I7aɔ~zy*d>]z>D+B#xSYg3#+նtݶ\-9G4}*r| mCmv-iKdz6S] xDuHj{ӴR.װW>Z[]$<ו?DV3T^P?c{v#DU FCns)8ssZ\*䬍8&agķ+OGya m5ރ[(lu$% Ȇ0\Xk2[X1aLI(N$Ern+6,V_iY'OY}r5Vw`~թW/g9$\|^o-%ǕK3g,D- "UZ_Gs v<;5)MW׭jlY*(hFקa.*)rRE|0Ol)&QfwNa$3aDJn K^t)3 9Izwϲ70Zœp&"m,MGi5Wۍoy3VUFC+t?_:;XB\qCo 0]'NO_/#|6w7/\}>Gll3Lم>xt߉ 4}Ĭ6#*<,>~R}v}H$z_ {cY$tژJji,.~8m+7)+\a/VR.E8pWuE3ו1?6ul}:JE8Q\CaW^Zӎ7t[vXUm" IُlDpOf (B 9$`y"GGb1SCx$&#'oCaW"ΛEk%&5ት}_Uo>Yue#+7D7ï-XԮu c1ʩįCtRWZK/uW p[" 7vwEy\<ɫ)c=gpLvWN/|`=I)*]d 3,Ÿ;٫Zah@~˒}psq3SD' ȟCwAsNzjkc`dG}Щ%-Q1^ ʲ^OV-}ʋE%LnCt~;ǝ2} '+6Do^{ != Yޔˬ\Փ2b䪱z6Cgyx9G[}{d~͟7z!Sɳ\!g>O#[taE2S-)Sl3g|ex]>1𳝍ɷd6P57CNmIɒ,J!"(ӥNy۱IcZ,xQzN_[9ɘ-H'%IFy=&+OGRO]`JUS]k4J=8WZyU'O'Cا B<%|/K~+y/+JH R|o:= h` |wٯ߿H;H87S4Qq=fb+=W>jn7&)O܉qUlc7C-{|_$ :>Go`Ç>8D $#!H}M4 ];VȧV-妓+!lhpǖVZv6&} gghr*fh^"ʿ%\UP鞆}w). X43L]).ƈzl *:EQD;F*drb<ׇsӾRAT ;8=dPzwyB|YK#^-4'sv4Bq5&Ă$Rߙ +e Y[Lͻ/$ mx0xq 7f d3&6ʲԗ]{KodUOT꨾D&ɫhH@62h/S"gTPoENa֯.6DwSܣ䨂><!:}2폛ם]ݒ]YKxc.+%Ee/;nW)?7\ɯVےﵥplƅopGz_Κ525>eH*)DFt)~M”zJ%*”[ `t+ҚG@tɬsnStk*HioԔ\lTFx %n+8Xr)\<1|5hIQ8TWR+L;^foEn_J)ԣ! $g/+KXyG,苜&L_!ر J;4On5#q%(jw Q0s7k gC[Bp?;p,s|{5͞':oY-zD1ᔢIOo$úx29b-ski^-D~Xs!ahUL]kv".Ti=),oaIJۍks, f1,[^rXF+.KaY 5;~ _]+~w8m,jrwtg:.cRCn<eal'j^ST꼍ѲPEwz.tVRnszmVoZS^P翺d|7{ Qlb#OWKՆPӲn>Rb8I/Jn0Jp˶es)7s ۹iK~M?#E)k](OM'ʽzUhH[ %6 JJ-.87amlz~jVo8]leR&IռR*# }ypç q6͕:e1b!+&zTF˯|(^[o_fG+{'ӲVJJ(I6VRH"1X s)yNw.ܮCGb^Xu35t`~>?_.od, dDU|ױ,-Bdka&&{mynV_teVR-1F;Ijb/y)-ZBhVNml%*^9IqVt0#0gerF@0ChDq/G}ݲ$u"*gǔ뽋Os1OgLnҗ]'w&-&_}} H_.τ;4@?? \@1괛Ӈ6p?"]}URΜX3ÜalYeS$IZne24gPEVuͯvOe{Ï~(oQKIz#嶞כݣB:f Y'wuR1ƽ7]9>Www-/0(Y}iTg ̩r&dGƍ_I$P>8s&rZUЏ,$ ^dgO)q3NFD umzzY>x]#lĎ AdYde?Kʩ)/ÏE $3' WGM1s+2g$7݁oʘAPuȌpRҚLNVg:#EQ#DŤ7<3ヅ!A+wrt$"/v-k<]\G½ytm"5NvkۄzF H'Bq5Mp]4}CI[D\x67\Ƒg.Ruj|\AD9y4eZ] jsӬp$Q=o{GS5tf|kf= _U699l UAiȻQXynA%xk8nK~$)*;Pnn^Jǣ]g$qX&. ^3=9>s{^ηJ6u% t}||vY mhI`.wm[~.2[ѽTaehT+^O{dbs_{Cl^X #G2!Nh*u^k(]<0c]lF]֦D1"$l@&|{0fMa)i&SWnyg[qΛ{L Ά_<6.Ҷ4{XnKdXE'fc6;:x}Z<<6<$D*ҦJR>vHkg! 8gIx ..)W:XŐBU7ɶDDBs>JDږ>G{f-lg͏ {"A4Aans3,$b|\=Y3C:gֵf4xut&Hꎚ}V&(ژ _?KQC2`Y!{MGɕL-nӰa*"!<:^%91j?_ߧ?Vj'!ZD>{[a^g;P Jeq8%(PYL1L?[rؤf }5KՔM ` D$!A6""C _b?}YG-$_pq$6:~#SN ] xRyp Y 圱LHBo,9dy;:1r7\i7|[1²!9h!%p-dn#Uad`G@ i7L4#g' Wζl2L2%Lz0^,}xx眅 dfJP(":㓻o4of~/MY?ܽ__NۀyQn/$9'M1|3} R$Ǖ TNdA! #s~GC<qa2J8gNԫ L'9ۃ%]K-f!FA )_w$i?s/2P!^22š&D"RnO?h=gG8O4zl$ {\E`:SEueJ$yBOc| ξ#|ޒ݄$Pbe @-+M;7t ZhunItIE@}@j zzmOcniec|YYKI@:B6c5+Pz7{0~*Lsq?}89}Gl^#WLy}9 !2E%zrDS3R=AB 2ke/?aP7Ql,! w!9vǓzdÆ)ѾD^!x,lυ?}l|. i$ &xg6ͳus: ëh&-}4i#1B$d9BZYo{ώ.kߞyyQEkOjK15)*99|bbv@E2B[JwR)-uXΙʒxJpR{gW9ɋ=$qS!y8:|̟ouh;?iT; 4I};?W­ or@)2Fk[>~STp3_G,[.8[u-r*Uc'#YgaHoيk}m_$ᶄC A(јư £N U߿?tܕ</PCQS!‰$ REJ5$JoP2(U?bk+Cr|0H!@ T*pbw*y`0{aTٷ&d$_Ө`"EriFgGWW> W7W*$L7.3T~t"j/2<>8u do› wL.߈?Z>umflOGoA.G:P?.tR[YȒe#Y=61m3s{)OyYmHYo.1W|tqkBY7Mee%ge$-4 x}rN3ح`I7*dJQӪ{x6rƄ!+x*?37<ӷSJVw=ѢJi&.޸+ъ۶űI>㙁s M'XߦO)J:Wo4d{1 wo߶c,+Vgb[00=CS{ˇe>]iG,v?:QrEǕo{Yi]c_8?֧ ϟ*ŮHh22a8I!L>Mz-wy"hE;;?t=#E4ix5% 6qІg^o/; 1Ǜrx+;pd<ϛ,on|`ֶ×t66cn٫u3 Y]nŪgzpf 3"0XchxqZrh"Oۇ/3qիѳ.ٳJ汏(("bc0ށ 2+!whݹM]H\0PL!ɊRoxj(Q58iB9q泙޹Of %\;d zsF 0YUl+Rs:1kY_ibSRfLۏ;+MM>CnB=cfbh<.V&Ix>KNVR|e٥U6LU%ƚvm+qD\}w %F,6T9AƨEN(iٚ iEKp20ɒj$6ԃ*K1kqyU2DTӼ̛|'P[;D]!!1 O*mY:u1cŕEƍo.uzƻѽۘ916-Tٌ,r/+Lq4@+}ih5PmW9C0|=iJs#nZZte FrQԉZ ۍT|HhjǒPN#QPa56"I(I:nDdwi7( =6E0L nR QrE2QIC0``̂ dV ]<9o>)ϏE0̤ \$bצRڣѫYj9{hd3 {P2{~%`-mlliLx떆{mln 21nѾɱ+fDF)1zIs*䎮mA2_=Ÿ]VmcNNٲgǭqv* ~P%['\eiTDO9lqd485CwJŎmFWۯ=iX$jOa`1/x.p =OzDE]5xN:ޝ5*0“۪pVۑr5 ޔ $DxxHH J1nF6kWGm5jsi4TXheIJק 4~p%L6nȗEAM`-y9ILɎS(c ;ꂓ8qI+'׺&Ũ𫊸hyp8 0za9ѦRNS~;X"m2uW'Jn_J/4m+.NkHtJצWJښ_>on~NC +cTLGx!,^of,.ټj`|vE;a<`Qޡp2@oeEtW vBgx}=C":hD^_q /g"S\D1'LRnxmKmu? 8>qlȌ / Tfc!`Ucp+ ?EFvAG%V. J,T:>)w[L+Hy lZ!vR=_Uen_뾶/bunhLjjwpu-TR fgW!/w~٣ ܘM_;| wFO,CT  rCerGHo`GQyDAIA6KNbPr n$`z8E35YDU%&O IvގV;cٴn܉9 @RGn :Wc: 8!ySN  D8rK ђ0)a٨ƒv`c& ";Bq<WMĚN}Y BJ 84:{aCH61&!lsJ<5Xhߕ`MĭmH\ AKo :Cܜj<{{*FiFNM7x؎*" o;p(MόcCO0xƮ=' b3IWS֪kƨIeG mO H9 7ZGu|f4c Mujs9Ԧ#;hq`!%B7gu"sEYelޝY[4CN]:k0%6W;Im6h}v&0MKFZM}.@JHr"hD~.Π&UFo;uz*\ Ipf/mX!z7.0RK3N ']ύ'ATF7 /'TۋdM*yeZ] /qb~S,0*U,a:/`JR __,龶mQ<9DX ;;tu -;ezgu3|_bcfzi$!NCˢoNhrTτA(<3U3|"<%]z+<'m -+oqR-1> _'a=x1rLLW|1) Å/_(s}iŸK/v0&m~G4 нPdO 6}EDJ \!Hn4(@GHOX$"2O馄⫺> P]6|&Mrԩ2vOLjaUP!ވWћGoS}.֩ 6}Ha>#OciMWT9 Gr>sKg9&N)=0c w{z˛ 83E[s{yvq8C }TQab Xǒqd]F=wݨ)j6.13r= jHq:D 4ʉDPzi9i)H;xT3 ² @< )Ǯ3!*`.ceQOkHǍ 'N0~\Kqc8$A :K0PZoSfMya`@DQjokҕ6jOhg^!S i*XCJH4#;ōcFǹTSI(dNQ4WZXCF3psk0d%]s݆s'az`d LmR764VliVԸytH3FpZ= 3fݰb&"@[46Y0@תGS_4}0>LtѶbzJTΤz+C+N/i="O]ֵjDۀv%@b+ecyI.EGnF`#$^s':Ka{ݽΌozO۱2hVkNJo^̎SL[댚r*ֹZܚZo?GNrw+ѫubl1'H[*OMK4Q:So,kƷQAQJ2 Rkqʝ8Ls<`FzeaPcumKpOO:x"d7H,X4MgZq :Xn鋺TnB_1DkORջNK$Ujۑ#"'Tny9]ym}e UFh\;&xfζy1z6gBKxüe~UUjo >&of?eg>F@F16UN|@#1{>aqlK6LcBw(LKͫ">6 vÙK! 03rTCi H6GƦypw\C;uB3DPp949. T04CqڪA)Ez1~$CTD!]0rP~[2ҽ]3 NTjMم&4.*MZGFƛmP؞F$aBm-Gy#b!<8N)d&,6kǽcL=j13hAv;ǔ=zW҃xDKM_M-m[b#gGZc5%5J'n*li=, kvɝټ: *em<!:4:G?kG+F46㉝7K3=8{pweo)FSNg2J@%!)(6ׄ, S$ x~ZS<֏¿ŻgKNp|54+2:Pf43z9ї3VS[0{^1ӯN3[֋benuKY7j»oʊMZՉif1馁=2qdL!RqZq+7:\sp{9fY_r:&v,31ŃdE08/?Az΄Ph,%)2zw~\^;jdHp| ˙iJɔ5ְjdK+|6>#\ܒ].;!c9ώ5LMs;2"$J*#akP TSr oOFi7erYΰن4!D,P!Mc3gt)d#Ch}Z'G 'P郻qIez~##龇 @TL~hlFIehZ((>,)VTOA3MveAߝoDDJ)/bE\ÿx 65"5+m.tiIΖ`)CBU~hQP)*D +AL@0)4H%4"=8xb%"T}V d'?c!P83;$эw;X~yThԢ0[O'M9080nKAHTyI75ʼn X?2z|5Dq'{˂lmB3-`p8p<=F? eU6Lt~E),4;;?wQlztbdv~?~Ώ:ײ?nK31|8̙ٹwߦW :󱃪z'}@ cubC4]LhKi&P5kWt VzazףN8\suMbfv^ r4gއ|ޮA]uݤ^(!LL(-@Af~9`X9@LU@UL%5]Ȧ`$*PGZ0E֪f?pVol!b9.bwI}˚CT%>HCO!:TUgJCEAT 6q}F`q!&?k lOvސ(h?wxpk)i>:.pڊURԟss3|?sS(w"3ҹIP7o 1}1{)^녈U 5}B6*ߟF< :hYW6i&2_Li5aHڲ6mnUk~Y91x繍>o JJVݡ`옹"vv7Fo(P{S9T'l< xDl ky]3; _zO]n[>f1K?<,~d{$ze3ky4ݱcF1ᅡƷ^{7M cC cg}%=fFI\ݘXkg.6$iA}g=Iݼ6x(=DDqWSSuoHh:C3&$w1^^u !0Jt):t@?WwϥzCH+}eH~Y|!Cdx ㏻cm{B~0aE$ N6,@  = ˓מڼr9AsSkŤyGys;=zl36,/cuO|1;ѕȰ DCk豪Ar3bچ.]L7`{peV0}Y,hC8pA Z5n:/n8c7aĚ u8c-Jaw1 Qo{|Fq(vܮ wą17?y#8X.A>*{4m_'뽀Daŀ;zO߻BQ> "C*LED K% MJ@"*B(a@N ؏*2\S*=Bxn^nVS;JYdO/m&^dǨk bo@;}?\ DfZ26f3/CjY'_O=YLw͛dEL׶ޠ xkl)*9OVUZp—)ۑeئ#\fn-7ˀ)&rN&/b)&}u83#D=_}8Wslʸz8$]5#!S|<5{>~HGclܸݎyΛ a+opM#8SWQ<'$Bͣ7ۮ$vJ2qn6jᲈCm.)9[.=ī(p[ I2 EC4?7 w9 Ϡ'k5BKc@OCۿ%kȹa(1VƩQCLp M@R< E{!lKmDλhr&N!hfX`t&>ө@GG}>dXJy{N]ŶibTݚ)8Zvc*KŜ\9`hqQO+~&`:21NGѤ|pB-!DÍ #8*rkgk䁡D6M5f,2$#̹)-do1pʹ&fF KϒN A(ca-׍4ɶ6;%k-8o'1z屵]Y:,ICSFFCcK18X(/bUDx ]C$38>f{ "|"c,¢}#q6CId0FG;@/zPMr8(Ĉ' . nl|[vXdXRk{ɽpuX~ %;Er6=lƁ|7lizM2XȀ>&6VB#O$|2$-CmLT׫VPy &b)!D8$%DEL5) RU(+< ɆwE>b:Hn:p t9\Yó&$ S cSM/ `tcAqu,V&*Lv_u##\ǸM_iyƀ5WKby:0hap˕c}8SKydKMo 1Ak,8s?#q6ƒc hInbJD~ThB,.Y?is)tNcue[9lv;/dH"Olh0xͿ?xA=/n̿97ޫtrc*>P<>bdkX/^tҌF,G/g-~[3sFvZJPRf eא` HU P)0N};d;,26'N#[!!Sò4-}iק^Pdf~ġl``{a,lX;=ȅhkF,>`6Chj^ }Efv"@uj$Mub$PɒrD 0PI6( (Nex&gV $$7P陻u`laɞ0~Z&qԜuz0L4JQd xȡ QTޕֆi1j"||ӯMyy !tȀ{r /= Nڧ0r԰Lދ #Klp"_7|3CN*%%d!,.ϖ(*Č}&e@=yP<ÝJ;4J\Qrp9@ٟu`rBHn-bq͏ޝ8,lWiP'T/U؋)xNr nblI mMk4. ǍS.Ʈ/X/ _ tCb$y]鯂ӆ6l}[4S['eKa 1}WE\)#TlTY-˷)&ɎI&\G8-VKnέ5uݢ3 Cbv؞4C9'HeӨ!6y`2CSKTCiMdg6ʡiVG~tCMXU0,iiQЇԝIj!3A4Tb0xCmToSQ9D)$ $W[//2zfYVk:֪<QB'ؒm&3T42Qu1@Q>>Ξ5{4NEsQ٤jG[;o6;|Rafӈ _V՜U !HpB3IF /CŐ؁:zpc5."v>(2\fQs&GNL5Cjpf5aPzE` W su ) ϝQ`poGL6}6ogPAcfL)mv |-jD>]n:-LA=;O+Jѡ7vO-i!ҙsQNM|wef Rub3G~\` ue0,5u 8X:x$, ))kàہiT6z8g `k5bݒ"Z*^pa 3/Ck v<:H䙛hIq҃'5 `t;ok߻\$!"FCu9 =k=~s>8FHd @̄iO NuTlD0r lv$;<;7diV&$9(Ixp0ּ'XcId;ٰx,7UfNFas7OԉJ9%g##)99WAtDׅS,ZI!ہIыS  ͦ!t!9Q׎iZ~ N\sZ% d 9Xܛԝ[$R7Z8ap'YI;%&ǪHadHc~ssTb_a\t74j`ˍtѺev"RlT^W0L5M{)-_zl0Vf&.&/ |ℋckjs&X0`,C1;r7@]6ƹ7,؉hv\Dq=h33;哻l>YtY$XlΒ2\=N ~æ/S '%fؚ |=*U4)ss<ʤ˲:SЬֶ8~ˇ8:F pp1DwJˑP)H7rR |ps`Oj}liA6u2`_\ȅd?$CM b^~:JZ:foj7!19u?*u- C-J d(vf'lI~K&- J8?Zev;Xg;/4щʀ6W΁͕8bTzU eS_7Ndv2KX>sU%rkvaMcwMf*q!@AFFGMNh0 9]YL `p{PqIrDN03plG껮orJuH l=[G# -Xpȴgb9POz/m^ uW r`ٵdΎke%S'G/uulkfLfģ̻DS*uU4:p72KmYk>%Սe^l&I5Ǯ["ƹ>nLN,I+-dUxUSn>؄x̸`׆^+UI ]%5U:/,\gn}[>S7SM2CfzV(ti{X;V0a=52lwdSZ*L{!a`a9VfaDM6ݙݱ{y" mn1\KrtꙥL|# *?Cާ( 6HMe7g%\%p٦"FH1@fyP_br(sGZbtCԣ5g=Vv]0cr!V""`Isqn`Ei$s\!]g`Fep_EF+[Van0s{&U\".ND{.{!Аh XY%&U%4ׄh[yXۻX8꿼ʸzfn]#ZgMt%ƠSݥrbTyQ+vto=K'T\wBˈZ wS^A}q~VmkD7JV@Y9w3֍?տ k99UƵ"?%xv}6 5scɓ<#D2y, 0YXXS$˶fUbʬr崺o٘ i V gW6M-&YFsf5 Tl['z 4EET qcsv( ygnn0`pqӾE Vfk||Ԁoj7hUڃM빢ǑyKdP<6xjuo`ƇYIĜ^B0M.WP%nYgx֯ə1(Qb&GSλʏ~oNANѯ/\LV~-M7{ /i3߯i\-%OVljFi^?wT)DQE2ԓE%I@C0HDRDCLE14D%$0$Q4R)UG|hc9nHo94n@'oZJ{B>|;o3 Aktd0LA")-)*I CeAL5% BM0!ELKO ;&b<ힱ }{ ­sHΩ#íԥ2Q6II0r'QF,*h#~bEet ΛgP߻/$eOοJUFPGL6#$O4&J&JR<&A@ lu)9Epќ`l6qq'A'Hs Ĉq.B!2L :Hqs4tDZ |+`9| I0]Wo,i~?zwC(/v_BӰېQDLa"J4\rC$1L QTMs.$&Dra`20X'ZP|9bC#  lƍ$/fƔ5fKǮ,<]6@oY @&7 ~ Ts&C`%p'0-?L|ᒱ3iW=;͡ YI3ր3߮vX u7k߲3*+ \([ƞ3C狷y~)cJuMO;w|ܼ7?p?R^HL nu.aVQDڶG׮ԭfjV=8M:XzD_cKɠ Oaw/ѿgj0/ǟ,%B_ Aa\xf.B|`qCCF w9j6}gp1ģNͽdfpTHqIA{:G^V91c $P%̙hZ7@䩸L >'Nt9ksxħ8ն$R̮BǼ|.BIY!VY/vx=cBŢp :ЕCh]FHm&^|W=#p j(y; h\+jZH LpICԇ4ⓐn0Ʃ܃l~(5j9{[4h#buHK^zc(g1Ƈbl1(9_KExKRb(}l@ l˗ޞȭ2’)&{?zJCbo`3dǞ J%._&yA6%23c9ڢ@čzܚ(;NފhRb%=XjLOo"\6*~4ؒ4iz^yi\xv7ŗjݒnV1 QV@ԓd!=iv-HLeXՕ `@0j umrΣFY.D%)|&w1enн^H%D5@4U4s@$A"rPEESg?Uۧ>-& aSMc11Fd+5P֝RI@*YQl$L!]L:hXo{ 3Om tэm2\ᅌN~i2 ewAtޑf,gOMGE8'H8/ocݯY*vI,mlfT:yxپtթU2臘I>n9Ħm&6٬ i%\fnГer%q+ u+JYIxl끟4 T|ڣӘAY-T,(pKnT)Q#TQB-/&V,=o_C_.6#>&1=5df|CdFIAdp2^hcɐbneCۮe/br'v:/>r3t*aN(D9쀦ًSKTRY͍h2pc%LT? 9& Q+0cVRE_Ӎ j}|QH'ӫ{:9*^!Hwd\.!a|6 A7?% B'kvW`yV/ i:hFÌ6-mu(K|2v8#S>c߂+B D6eA'Aq*OfC s$̋?V<_Sp%mag{9%ZTW§? $>|RQ!Mo^.A8nNSs qk7-VÉ+sS[eERbLByK5(_\Rub8B%<5(S d'զ Nex$݅sЛͻbl2#rgq/%7,kH kVNcvJͥc)wpF79qlq&G J|ַm`LЭ6W.LD.1l"${R8g_1 6+~J!:5\vO`% 3{Nlwl2Dz.a X4` :{=/3lnOx$,&+,[yLad}{A?{4l yJwwUǙmS&-5tR3xVFgm 25"6}T;1bE؛"u GF,t}g>D++_#ϝl`0cG,vCM({LDLW2m0l3hdL:R7?Gܻ0.wG\&Jqbz$q\%d(UB$θjGl9K(l`nOdA2@[:q'w=/’`4aM/xf:#,qeԊeF"͘VPc4ъ4NIbkdW$C&dr630.]z̴M?6,%e *-F|! Ͷp˔1LOwWfX!g͛Vꗍ}XCdͧ"֎tijw]J|f5 {3I$Ȫp}APm#2SP2@9^|P@N$T;P/KN> */LNf D} Boݰߪ*rG)̾Mo~pԃJd!:&?{=G[7c5ivxDk*u~EP. 蓙`| 8Jnm5c)rr@CG'`h׌Pr?3H@yW@46PvT>)ܒrY.fa}6>:/% H%P(U\j-*gа8!I1d@(4(ȢnFN(m@`T!Js/?}IU*"HPccdw"c`!Ǘ]nsL?bZqCwK tJƁI Z Xh~JqO慒hЦSq66Q Pjο!dHL? [`{3>zPwp~NfkMH3oܕpn>p ==CQqDϩԝZsaIP3F8,1[`-nZl4<9(d43֠)&I Ŗ`_t}'^1X12e}Fp`"* SWA.6ϲE u#]Wȥ!3i/42h2$*Th QxhH1Q"Mq9p[ @Ogiٙc .A5#DukDu/hbJB~/'X_i61D C]+ڒcF :lQC_1 ={asь(ŖՇ$[U$avs4)|.5ާ:r\cO+P(p֚oY;TxIcer¨IO}s*Q_%LoP\gd^H.:c30p?P b,у5 :oWdM`M%Aސې!23ݵN'|ZqFQbLGdQqK2c*J($f -M Z~/MbI0̘$-ٟ3Sѭ9DImq1iw7B>q0nz30pq%qG澘ug̍X]y?čONA` 폰L9ϨOwJ$'L_?^3UU>yGǵqdގgOC52/wg&r LSC.fDM C?XkN\b9I41` i0@/4~l J>$ݨmtǀiv?dss2R,|S Ԃ}/ͷsHO! (4oiOOP m+*X@ [{_X}%xdBnռ3zҿ0a"e f˽Ě ɳŚrP 32?! hX5@ѧ,ca F[ ""#I5 '"0(p Lf·<1#4(4" F ի)1ƚ3 Fo;f"hۚޜXf QV98嚍 ff$E$UȚ & mX!]e,paY]D)kolA <9?_8m' ݮC\XZ]{H-}1uOe61RYϡNꣽ-h1=A'=9 >E%&0u*η@,^ %_9wFv,jX4t1I"vb? {т֬}YaX3S6NQ%uYм\(D (jӣXh4=2fsq7>+8sJ4]6s:\/,'d tQxМ3?\6eD?h7QqS #[&8ȈA#ll>胜뢄6HQ1F??G|OC콵`otB|^+ng>R! Ş-ebo0[ ſ1wWE>Bbi~glQ2%^ڷX?|g,ai ֤㯳riv G<jw)Wt{3U ?BS:IJUm@ _ߠ#:JzicP"?/(Q$NzRYf#1B "3߰ ;0 tL89&Su}Sr wWG'02h5ga!~ >M35P(U`"]Z/>aɰ3 T=6aWfSϴ6zC=wy/a݁'PR@8 )G8G]簚~>D$OuI"*;<Us.Kb22~&ŷhydΗ@4c87!b2EHJ:,5s@U0 W+=^;A.ٵ" *i! JR *I()hFa +ý{N&ᇦ~:& r`9D9.Eki u|K|}ʣu4|SϛOf8|~hxN5<}"rP:1:90FzZW%W57 'P}z0!3A?ș}(0o.0(5^~F`uQV*Ò,7  9v̿9u q zgwp!$q08v')0%'4ES[%nI'c(=q}I ֝d.zsXu:Gd&,g#~L%.̈́qy$ . 烓.>"cEPJ w3Q:cj jw1!JbR(֏&zμt:LS "ȉtἡORyK@.F^١6*ZeU=Zw$~E?@p@5uwa4I^>mG]viИWw;Pnܻwe@$;BtgbƸ K޲XU4U\:grS+UC(zG_Z=(zκKFg '_ iݱژD&40W2GƤz='/ S)ex$a\.(=MP]<(QrLuD>`@N>S('H~P0J5ZVx@qhfd6U1r #Б>$~X u^ȿ ]= *lptbXF:#`,}7'̉?GPi_|UuS3wRHi{'z #U(owl؟6 La2Bu@T\/!uH8Ç93TZ6|\Lʝ-k)eB3ǐ@+QLpy4.Aý;klz6iw9ו#ז ;aidV;3BA8v3&DuƎ&ffpM7blMc`,Li[(b*:}fJF:{oY0.-ZWD4$qOm"Q"yH_A3)/d6{}r=">is;Eca׊avx'r#sQR1?nY`'Wέiꀻ2 % BL1&` t kE=I![0Z5Y )5b *;0Wn};@1~/:0䀀"zV&&|i$S|mCCW^!gF!(^&I1lmN OԬ;Iz;&EQI=ZSgO!y#:0)c$N $0dr_h!"{# AW槟wC_A"lwPDv(mcϮoq<5C;{ó&sM"Z2JprI1,$*"C9vpLM9z9r8fD⌒!ƜqXc#N7BU-<(q l BkYSmʵi.|RUI#:j,ee:~~^7>À6>Nz Nҩ~&U==|z=ܸb,bIjtsPH#%fgLP}HfbÎ)&7K R Nsm:,V䃕.t/^g1s˳g\=M3;`YQcUp411'1{~'WP>o܏3` 0& пIA^xws@./aAE7 $< *o;Eaʇ~e4HHe(g1!2d+Q^a뾼 ) :g|^SSY:մdV5֭`!6~~hw2͏g*ɸ1P(t;O^/omp`@^Ӊۋp3 &{>}H:S~M8←GH=L?;w2NôK pHxC\Dhbn jfNJaBduLΖP ^k4D~1V nl?;&N4\P3 \!E*k=M=ˇW=$zapyK|Ac~s*grUDp>8 dd]@4neWwgbYC'OjKQ qfZS;n!6q)Bq8q=<90: ,x[1B1;%ق\,XeUДU2}!#f;ɴv"Lpaux{KLBZ˥ҞS]UeݬuLi:J9-{Ki E⑏oCZXʔp"SnJxX< 8[BxA MǏO=47U̴op:~kȫ=CW<3i<O4ddPIXK]dMd彈JEA*n, ʄ0&&I)T6Y۩,zZw!X٘4:?cϢ mA$WߎtkF+9sldZ4 $H-%_">1u2vϻy$ExvbUSB(22RrR +J!AFiLZqMkI" bWٹ[Ƀу$L'`NG9- L:IUH$d"he mk\"z"%̇2}7e3(2$T č&Ǝs F2(J`acWF Ph-&n6WϸNs,~MaWFFD Chce9 |0Hdz쾽?r|~Ǔ ϒ= _y[v n0n+&4US抮Qy<ݽ (c>r`ܿLA|TP\MӼ7+ܚ^s@Uj{֖ۙ|_ZLA\-ɘǩI$3woTr>IҞc!:n_"(rEb&=}eM̓dm?}=֪4eTj1+,nE+L#gT%aR9fox 3A)8' +gw;T?|5n5.]G <9,]rrZv,\bԒh u6C}obp x9''%S)v^\blĂKบa!|K{9Mq1-ۊis_xE$4>_!ߞA.H'c l~lwHboɱ ӀVACf֋QF:>S =ۆkzuW*3T( 7 B!iq h֬٬rb0sPf5ɇa+ *+I(6 ƿɇaxY:nMCKxmiM]p3{9խnЮc|aR$urʎ˹$aoƳvݬ'KufґC.-fhm1O?yR`:2;hKa  9gWȁѣ1f0kZSrHFyV7M1H0z`Q/ҝӽR#BХ51b ?^zzlE#maV_9k3X `Ea&@x) &xj6oP-2 ;1b;Q8A brDґRB pPe;J߉{(N鿡+QEb&:>>l1fi8m_z,~bB L_pT l $Y+I J/t]o1y:@t5s]|`Ƥ5fɡ c9(q ~8\C zUM/\z!Baspü8jl N0S~猂>Ɯ `”^cA *3'E) C3;==S__vgr]#UJ *Qe?Ì S7`1eݖ$(?" AF6) Ԁ7kk%C3fr `OFOq 9vIH\yhu'wժ; c%^CԧX>Ҿ%#Xh=-V!x,G?_\qC( $edqUXVFAE"LDFݗ-薍* P:b1!5Zp8#*Fd [f{;_^K|<$I#s>p9wgNagm0lXd&CS_|*d.@YLHh ==)_Ѩ3K?,{|2$E6! & 0{'a+AĄ!=wgLj#R꫻ɾByg?aۼ0-Jqd?}qvw I^@Q I8Tԡ@E(hir\UzSfDsH}t=!JDcP'3o)a1hf%pEAl/&2֎(V*6}ӴB% If%1WU*&&g:##DNϛ lfX]̽ okHfVi*O0H r ;?Q눚)ך"IC'5?τ2oRN&2z?_`~m[%C`vo m>,J8vgLœĻ_ &`k Ffm@&Ye,NnĻFp;;Xw'B^O bxe}eGz 4VWxAto^Ibgj3(>.umYZop?.)za"paNHR4: O7 hOnqWǘJKYpp`H4v8EE C"ѯ//:t9~bb6Q44 TEADUD1TDR!%7̍iw|.>Oh=>#XP=@iqh=m6;3HLJDlt rN};_R_15,09%~qI$7!_>nf+'kz+= D ՚,%#Pk"Luέl׊Ow] C)@RХz?=%m@.pNސ'/hs$؁4C""wLw0cQ/ f\Uρ y`yv`bhP<` QBD?AL?dꭙߘ 9I# >*qTTUU^6٬VRf% ڞV-Tufa桹 +fP[$Y=p2$)TVvqN v8ۑJQ-M{!b"ܡy\>ݏWSYs߄ ~}Q:l6 U OjYX tyhwu }~jIc(O(Y! :!MUt1Upj,EHsu+z^/I;xp&OGJW2o]DJh-1js"!ᵗH4COu;ZfҤ)H/Κmh Fjqu\}fViR BLCݍY 9kl}Cfh)`q..xZioAûʚ헯b1.L<9X'TM\s.tz%R[$D<7FV+u7l!{ݛj(l|ݤGM*3Dcloc~{02Օ|eY/5"kY_6Kڒzo?Z/4jH?W*oES708T{.R9Rh;pH|Aԑ( g1Р IL%gh㦵8\d{/~v6xn(8"m9 5f4{;3qfC;rA0'\g|r XJ1p&fqF@Vؗr祥ͭx姦Zs*+Auln[[ͳ!\)X[wz%[/džŌgÄ>UG_ߒNH8b 3 qId!6Ì@H6ѥ{Y ԩy{v oy {Ĺ{$@0? l!J ¸@G>3:e>T[zi4f~WLȇ)n@IO>w/b^'^|bJF㤊*?&LIQ!-2RK2%[ !m{7FzH?z4>`h<;w[I?Q1 (4wMI&jL)B | aGhP:xzFvVl#iHd&):YxBQ}eqw|tr;yxǔY$@I>\\O +6%({nX\-_HtER$vBkelW2׵.2E!d.g`j`cC8gͺ]:'`uI`2YH]j+.SX(GP33t'~3bPC BUE0HI!#H$L†>ԝ3pm8͚CVIU$fgyN&۽:D% 0h̝EmjffdNUR)z#P}Cri`60$~ztC AMU&]0P#ELN\C7D%R3BP @ҳ _pH |i\B`]|t~W+-_/^8쩙+q kZ˰AE 4R r][k-;5]oMu?Ǘ@ׂ+JX\x zx q+\ٱSRQ׷Y+XV*-l_;83)񥲲G|+r0KA/˃<=`7{7r`@3 xĩVd+y>K$5?ų*~b\'ۄ b3!Cb V`aZDDwhh Q\adychCE+k*R MH3Gm( &p5#d G1S6fehL&HqzuNAER5MX<#t8nhA /9¥1O$?qDju=ˋ rVXa #W ] ם`gm~?VjL E`,akTHB GmlKʟ=B*tsѪ)HiDG0q^_+R𘌻Yy_٫^Z$Yw`y3Ef~ Ibp4"ʋw5k*kDRg|IgڒjbEe3Z$[E0x"DjOMĚ AdJmV7/#]<  fJ5$ϱHsɽ@2Zc!FZ6(BDNO,R & b30YjJ(Hd7,WA/.)&q nT8Q^.vWxJ R̚5>tuwUT@B HI+SA  !PUEJP w:? uSM2)("DDJDU3QLQ4ARCT*hi̦$H)J" Y10Bh&V$$e H&( bXBH`%hdiZQ"(Z")i *$ JBjR* b&H` Z(*)* aH`)"j *Fi)(*  !$ b!()i*" QHE!#4QU)2TEJ@E$AERTHDD4L4T5Q$$1UQLI05,EBPPDU3 QK-TLEM4TSP"D1ATD 3RD4TD@CHPHS 4PC4RD-4UA$DPDTDD %LEDḎQ" EIEHQBDU 1!-DD4ʩQ(C)|P,I 3*J!K $#(PPL@3JA!+ΕY~ x>@/.f#x.b!o#u+h3 VšoRk.E)6obO.qCvmp|Dv@>\|/ma_Ԡs{4(?(@;u 1 HyJD;M0evyv!˷Ra))(8뼁;~ghAP#dw32M7mU D'"_c4>x)9 | })ߺSJHliSo_ރ u P( *P{,#DP_)8`C$ %$14 xw nU&t)*B) `eIXf,ѳfO~`$OX9D=||(+@14i0♙DRS{S@6(AɳE2KL6 f$orhGG BRH I!% BDD(ʜ('d'` Rr~f^ 4 *#DRDA+ ez~Q3+ezObFRtLw/}|y~|M#-_Xm/@GbN6t`2PA&&B!;@ +EZzw`t|!JT(B~CMTIPpv?| p{*nծcCϷpa=,xT2 SUI JP5R^@45'ֶA#Ґ)E  &ð9*&ϧN787f![2ejJ6@9-UAʐR2DcRDJUteǰPJV0D!FJP&)̴K=HT!$1A @b$"HjdhAqq/lw^c|wO Ej$RE"" Zh* FZH T%D|&HOVCA,۬c/BJ= JLS^X#I+dqpۓ7)esEKA"iυ}=ꥤKb(B- Rb+Z@@")RB=q@lQE r,8)4@%B^-Ulyxd)WCʙ 41d , ӑO՚֡q֞#3WaB>lzFcm\r\kq KC !"B"B5ѡX ZȢ0gXJ*X f( @)N:[@egnTw B0`4@,ԥ+J6L*Dj:,$L lI ְla"YWTB$3<8Ye-q+tD$DBȌDwn& $"Bi  )iдACİ>!.d` 1cǤ!X&0Q$i9KoQo) PH&&S[q&Lk 'Pqwm& JU{5hF66C@ƱR!BA`2f&:bi#F 01з1-Cj: k9 múDT1:uqc%I P 6B5ʍAPbH4B0eqaQyUwye~Sy_~!,UUfb?9:`B U P @LR~w yhZW\[Нet#&DOMG&kXo3BDf/Jɾ H)CLmi H<]ѻ4|>94 aHo@7gl7{H?72Ygp:0R@0Pl n~sAfo C?ߡqf?^2(p0s kCFfk.+= W=bu7+9-$2&z$]Ou~_)&a+OIV톺x)I6KᮥriFR bN(@4jApA`F, Hy%w8""BK>'8 {=|~@W!~[LPDv%y2.U` GES@sܾz8ʇxEm*zm l36@3x>^ ^pB8&ԩ{[7cpٕς;OX `fP|{͢Gο{i;G F@d,T$a$D LT$PCb̑*Г4HAy )V(f,__Ų>=ѿbwr4 8}o*N6P\=1ҩ1ͶW=0n8#A*{w(tD*8hIoY=&xƘ~ U9qU&/@oA{[n48r;.E宊hCqD>'o4;py=3Q #:2*s9_HO"|l˅,wF UPjŊ5M,J)_#N:9}ŦŎ9o,j PuQH`֋DNQY0ITSI7S|I,1,0hay>В_3#rmrtf:֡dCHLDzIQvxoWꏼ?X>Y!6bekedgZ) VUಮψ:WEx@~i$hC OhP@vU ͱzeoXWJ?\>oԧ=fJo~fʰw^'zG^#lי@|\c 0#rP;0P{,Y]} ݮn;J6v3H( $5qpԻ?JUM44$L?}DR8%NՁ{Cchi=4ʪ( 0QZV`9G5 4iXo y{V"2UO=6מN+#w-PB.63kaa$I*%PU%0T *%`bLuDU$&v`FQއCcyšD"(iT檴H Fޛ ބR#`4dd2S*"كsN{.Hb!i /Ca⏼IdS 6nPƃȶ<HJh8@<9暤 Bj#((eUMZ 6L*( we2};N0C SD,UJlUb z <59{C?EܞR3mrD_: ׌b`kt| Ұ’g6a?~mt]!`7p3t濚Kfy)[0.Yo߽[k8>?)˫6 Q%9yG$lrD6ZFrS&rG||41oysuT(M'kW-ezL8aCr"|moxCBU]tF`c"*]XPo5c V5Rbh\Ĕ#2 E3b]ٻ{CxJ2˩OBj c5M8B cM )BAFLZVIhkS1eH0m Sx "SERСnWxH|/w=҇t h`"xeJCShYEibQ $Y \<,pEMtapOhp~Fa.#v# z8Q"I>/N8s `7r N\ F0dQ *g^:kQ%3LK՝uifZ ?cE=a!낄m?C!cq GuKgm)ه#b7Mis~53?bi@2鳼"DqdģqO#ZO:(H'7ea^H=^:__ß}rNga0hQVQ^ 60"fJMРtbx m,pޢ%dό lk7W(-s=K S㦿wԌ8GW=/ /bȇC^Xc5ļk6t'- ZF9}j6ۿoIi;o~9)+kcFr͚ٚkf5fCb{mf7*:#VrEh2rMazAk:^(uvM)N$qZZooUS &Cmo攪;j9!Cp ]3% CIZFFClK.,m[=9 `M=0V;Iqb;jF&TM*귪BAh"PMf=fI\ :,S(m lr$gFmA(67;Fj@L ?ZMt8M+X8=sٌ:,i66*#fhId0}JRAHP$haktd$c| ]\0倣&'" axVQV*$V\Wr!r ] M UxNPB;H(;tr ,YC 0HÇmT]W.$SNRr}DSgvk[X;;DN޻fڼ*x/"w5$8}SD@I(bS>_Ү2c~=O'2e9+ލW4T-tٚηfylJ_tN !nش;5Ohxn1:UҞ$kY9:Lj!ς} y.D%3KHdѼqGD6VЎ8 lfJh:igCFiGV?٦/2N4*|(B1zQb\2d&KІ`&1 --65P`Olp<7JޖhCdp G*FQ{ sڸcDRrVSGh͓g>!Xryl9i'aD9| ma&'xр?hHE=K7.#vzgbo' rsxY)Yĕ7Y׬wOΎ»X[xO Z2Kxc&psa[vMrQr{6vY0~\/{+Gx:X<']v)nSWdǛf{ɥ6yoC{H"{*-۶]7iөR񢗦qw_Svòa)&g2a1HIvf@!ԾB/u^%P76DZ&bقU]U5GO  0T#RD`+`Č~+ 'ҀzT DL`&Қ 4 "k >'j9kF::O4m@n7-{!N.\H)DYBC@R#Jf(HÆ)A@`ll`^pw,HR FTo-; p5M zj\ҌL2 644bHjKn`YDMh MB"i]K%$t;  0D V'tfFC|NvXI| x|RbNέA՜0 ̿8A8tH!iUifaU W c:?>/yͪn2 -P1Ēmcv3yKPR*PP4R&<7~pL0h.&HǗ00:I3g/_.X6UQVAaAPP=4)ۃ OQ4# T:A!2S45LDC1MacIAM.Efi%ԁ$HJ YB @ܔ!'gF:4 `FLL$C `%qIrY\ weZ)O/YwA3G$Ml!7\6 )5/)X߫c&/3YRG #1KMic2`E0BP̣'c!fCKt U ؤDgա.Q9T<+&CLGPZ[:~5Yk+.%:K)zsCAчSFJ6(w'cӬf:(LnSPOfUpZϠ9Fwʘnh}`|ʓALr02/v=ߟ$+#`>\cs(҈Dd"~|[c̄!"!?/7"=7i5o~<^?@Xh(!F A!G7!"AFa(A -/']{cgj w(*0AyJq*zվ!#йź_VLQAUD#$ LgC-| \>ߕJw t tcnչo( _9v~qr,3]!O<p+,uƙG2In*naR-`ǙAoII1A{)}vg>d<7*TiuAfPn8ܶ jLXf`kQĀR@q2o1^ӫW%Ir'Vw|*,W-Gz-zKeuE\OV,DOx;L%=^&NK/UUTy`j?<t{ vH^_h~ d&Rl\mg{eLksۧT rJ7ϦX{@MIC=G?!cA"hLi3L*ÐL vrr<HLl$A~kML8d-˚lU3`572fV0oIsڛ~>X`Y;19y 񁗀OCt^ٝBd&-B;Ï+vo_dɆ1m$2 bT>D<݊<˖HX5 e"Q<);+I\n%9濛ggF=}2ô+`FYŶFc3?t?]h<@r\STԃ-^h'\DG\CKNG[òFI; ke?|E #1ډpO/}\7X'~&"sR)wz[4$jZS?urfg]'qm͑q zMGԁHނF<wfr|Z:\N7F1%B֦ThkpkL*yf0pqƍG.ц'J j,HEUzMx$$r:M07lT̻a-xR.!T"HTTckFM71=DhѾ;OV1`a#wKC}ݺ%R&ykJYW("k.$w̱`OB%=$),vӁ43y()ؑTUA6t9FZ 5sIgXi q/M\֧زtzY̍ cc[q :& ZN4 8Aa":oZ,Ex[1'm#*>{7E\'@q~!sEc^ ^"uBj~4*΄w3Mc8iI5"IxƎ Su>wGGON<( 9xWn*^ble31ύE\7'㷆I%WE H&:˹Ǿ3_K| $%j3whO* ^S:s:DwK|qUsՒ%1KLܥX.\fhHn8kp=8fu@r&sh"݋Ma4M.(ٻ񉧥GIS^dH S9IyM`8<0.ŎݼABs!se!2jQ\v֝Ll9Hnm:-w)8j)S'"9M`14./pZ9iM03rvwܺu#BKZaK125uQ zP@v.8 :~i;B|)KS'u/-\d F3l.1p&խR{T&8S)1u:ځǎ^0tjRy6!Q6:xdg.ppVx W>=mmW M8zʺ-.G߃W:3h=8"9bJ"=]k^rޝۗ B$GN˱9**4L֦7l<+MqCrFqѶP,CaGR,p%+i-'eB*du(5*j S#y1M gLNmH%isiɮrSEزbc- =wb~f* sEL^9r34.S؁WKX0N[tF7q n9uywWJS|)Hz | ];wHiv ~e;[0~T7e1L]b:r٪ C5=ųJǘꆐE7J~CNZ}#IӤ- Lu\pܱXI:g~ !,d1 T&4c+r6ޭf8NQ8!.rƟ6 ԍ Dpk zM9i%bR\\a1<6PhcK.ࠣѸ\ʧSLȈjJ^kXʛHƢ;!!3Ƅa2 lj󎻒5gWC ø$̔)Q^LqP4QR*%V9"|$:QF2ɘ1$c9a0{pLFbجBvKv~$&=!Bhv:d Ȧf!Dv/=E ioCō rg1,  d!0ȗ(aKJE"STMMNBQfdJ V1uM;GVDQNvhpM"F4Vi7uLIrw4VE8C h=@",$;} vP<&\.FF`#GEk9!ɍ!ٯ7mCtpH]陧_C CJA8M"˽̍(†& /,hmTeK[H! 0vU "L l6H tFL'#_0Nt ^ejΚơ@) 0"H1!0]4m܍CjN6n8x""X<氞]th (.eƫ0tD(CQIԶ74G4ePE^.٭i:Qa+*jBlSZp49vT6ͽXŖ A)cvJ$;YBKX`Qm)E%@-,sEi61DUHXDF:kl# 2T!\"wsddbPFEلff t1ɋ "9p1_$W|b8]'d1F)/U4 vv9%ظ#qeAw3nJEX ʛ'}]{ `uMNZ#P}lm4E5%̪r0)YAHiաԔ浓Z"Rbi֤W)YUʀU&s-q6S"Ap=@׫ER,Ȟ BPQDHv j $x(,6HQH8AD[ղfbJ*}klF((l b^qHP Ɔ"HbZ$P^A t'ۿy=7Hv@J!ih 0LƔN |w%=eE )Q iFbXVrQQ毨A~Q:8:AO8k*RIQ-7*Zq5x >8X& ve̤ 30, @"LlU cp2h&H`ZhbAfdF*W-ҐJ&`&#>P Nl~e M~^]q>-)JZ vN>٘T wy`N')-iY?%miE@.!w gf{$L<-b#or~TKl0u̇Ƕ15(k)/75&$/^v'0M5c$'n* voxD)@55v`l aGN9 9WSQ& ]9LZj1O2%:y}{f&1b7Ÿ]xF+FqU<w6d1J@&F zEVQ)[t] l$dC-wvtphqse̜r Ctq}r '` ovV^KyBrU8V|o_SD5"6B|4̆"7ڠPގgqv|&Gi̖|ɴO΀qn}L?$EUZT0h(X#1aNr .} H8áZA" P)C3@8Pq[7B(y kBćNiHZD R( > ;D  @?Pxy3;yT؈T )H%"JfeVꤱ)P]R[Oy٢B JJB фal΍uז˙l}z@]1DHX4pApSmfL ˎ-jD!b)ojq(Eeb7F0 "jptM`Pt 'x\BE1(DLZ<{c4r>iG7݆ C? ? t""hPE %f VӀ $ JE9V`a#e8# `F wHaCv7 6{;.BPR?" h:2U(P-a$*j@sv{>YICACC|fh4`rgyH}ssGyBP0~ʫCtc+F-n)'H ȵxpl8իqtM1H@pUE-羂!DŽø G&  ╆, qx4< )3 מpI$z7>9Mu t[a<$[zpRHb.5%jֲS$@hF]-GC<7Md73F=vAp56M;K~F;dGES.įo [566- b֨lBxCN&pa@BBgU+Uvfu/DnHec@oEՇE!X "fC U73VU/dZvv9t8r^9-}cGrOI*d7bݬfw9ve! M)RP' ?Cl%$_b [lş?6Q n/ U4ԍ| D%D  *?\9 z`?ϡ"# `00~ P^<]7㚾Plq^yZi B11Zvջ*xںM# R/OtQ1#SΨZ8Sq85 јp}6ӱRP_./ gmƸPp]/{0X>4R9ߐLa!=DE׋W> k%Mb7HQ5O$b5܈-x Peh>F!norg)%Li58#fJU&ԻB5g:vqq7RGA %R%AQ.`!i)C[q~1~ϕx" P?sl>cJ>aHq =B{-6XHB(x`tf"y"%2Q%a%8ZCM5PUTVoz)yZh=YSOzqNYt*"S8eޤC{0ۡL"*uHsj`A&$B"B 0+B,C1 , 9HL@DIJ *A(H$H)KBKD2̫ %$nyu0(m8pmG[\v1?$k`&@Z-?EIJ{<m)ͺz#2yp-UDx #HDFo#<@gH*t@@TP#Q }ߛ|$Z<^no]B(A HQb*$ r{yWk(֔(Pѐ9(dI4`APTȤT- JPtڬ2 +-2 *'Y5~kB 8!O%In!D[1_xtaܤh(gD;aGGxwf$:fOŢ'3Pc9\FzwxϠ{6{w=H?  RcbS$(L*ăK|z"R8hѣBmh" PRB z#XܓꊝKzzT&@O4D!9gDG??C @22.}PxpjH?G14(o%U(~[&2G݄Ʒ&l&&H@\A`u#- @P9Qg4k8%&{bd@Da߾kz ӕQ2m$R t= A@p1~ 4b$ D֙Qc8\l0pFM&ABe@Q!RVCh!" F$P\V<5PG(٠L , $ŭ7~!Twһ/g.8303wt`QV#ClDqGÌ0(yiًtaWQ$YlDP TeQ]Q+o}Nh"m!i)&ÈY:3GLWO?ø>r%ECW/n z35,WQ6 S> &aN`<((Sx%Mo@bN8%NqGDΌ diNn,hݐ836׏p&! FI`lkm/c2>n dی WujJxfa/b;:zU8@.e$f$wr ga?H, 2,C]3&r@=g˽mɀeW#735z;t p]*yp$o::4q6*y9e칳?#^1!< e ,wLV n/'m +x]ڹ@mRإ߂Vxd_dz;#o9tzi%,SAYǧa;B:1ݔsÇ%MDL;I@6t_'Zg[7LCkf^68Ӵ>wϗ'ONdtiABn%yvDEmM/Ƿ'.%OP—!>W/yHuR i(RZ!)d@UԔ%5N^١ݎüeJU!kL62j^p7qMàM28#U6sE`IM El@33nL24$Qސ~@>D;twפċ '#s.6u) d_|ǠI&Z]ȇ|L18z#F蓄5hyՎҀn$uZLwt#uae_(yxP[@&6}(̠[I |Gx;NU:@^ pϊxc2}Rl-F]k(U!(657KQGևjph nQ-/ٶɓAQI!F4MZF tyޮ1 -|DxJDpZ%u郝? !;:O pȰ>3xd=<*JZjdzɲCʐ2ya=!s=p&/<#<#n]xåsv:W aFI-Bшet8?>cw$M 1@?․6 C@:P=h>;R{KH $x4ٱ\s Hp2Z!P)rJ&P  0(fH|/65$G#50;eD a J ]"!;ǐ (c PBLx zXO]7*TbFnސAtzx`&ޖ-ݴ 3I8jK5!&Ke}#"VV j!d0RALGbL* lK`t"2Șt@&SA .E 3@8Af,Dɠ0\B!@YW C2o@ovg&ee8"!{=Jabj0 r&ZŸ PafU֞q^}6m[ yȫGܛnm2˱+@Q:Aw@$|ת sGp0hT#dPC* v6N}ڔb"F}h0 G=̙(] E,QH$S. ~?(8 RuIVohFjcXUP˖Ģ$X"k0hCl1) ,$Hr`"CH$JD s.lTZH1X^q $6Py4J/J ;dWilBAqF61h A:t2*0Mh:5)O=iq_%" DEH:)WO`kz)ܨqGe7BI QhHRJD (h(% rFj" (!haL Eqysޠ/}ԇ"YD {$f!x'I6$M')2wT9v,ȃ5vf *#v>b/uaAE>wA58/i#D1ba20-TBSj+ P}Gx$z>t^>+bn 樉 xzb! P T(< D"Y"#mQ CADDPK ((j(a]ѡ`%b! "!)`& >r#Bt (q?ߢ3c|84ES0AEQrDWՙuE2A1Q>0 K/RHHop 3)a<{|`oȆ/lj䬲d?Cwj`c|I zEI'^}LĢ awn?+L+.Ld@hrk"%TA'EvkBh)&@VBh1\lR i!5QӅ+IFLo7SHHTӓJr`c !W%ccc`$AX@/SȌZ+"h6lb!oI:{pIǩ-뚨l~1\0+NiiI+xq8˿{ݥg8>L[NN pyG 4@Mo1@|MF$s\Fֆ уay Rl5"hXa= %Fy|** ޫ@L! GAQ\Db` A%4hچf[DF3ReoǺ7>Ƅ1ƚFmMB4^0 s%J0wIx2*r"mΌlVm~ih,CN/ҎkFqI-%Ab*wiN*:J٩E.9FB/9A$$ٹJ%9<5%fsSKnO|5!N9KҸѹ MDO:I&!O|hB `zE;DWdGiC[iM@&wޜǭd`4@DB"0@QDQDBlH]8TŠ,Lg뺬-B~nNKj+*"0D #9 SaW}g<LQ,HuRyE'q %x?8*p89Nʽ_cPN!a7;=a R㣡͚9tirRHS*FJ(aeH(W c<sB!$ D !@!+RFСMGտΪx3n'8)|8J06!{48 R(o4EPErܐ 1O^IVz>C>aUE2ET,D!A'g}f;Il!>7C&BR :=u>DSbQO]`݌B,i|I HF‡T>|?O??m/BI Q)*cJ%u7[t*CXsq==Y\Lq>nrhև $ΗᾓxghV 1>MLPh(]@æ]Zs z1>&ac!-R$XS$x7pR0EY,|=5%,f 7F#\b:@ čVr572NuWm楋C$M+5] #,Ü4WS8h>SE)[ѡY#}⏶WMAڰəO*A4XV9C.*RnMܖL9zMSnd fE,.I*_LzmhtԳ\Üz%3,&5cͫnJ GF6 }2Hnޔncd?֯ϏNE][%da =6kN<T-Uhh9'6 V8l8[ud#.vKS!nt(AbPQ^XooJ-JmW0`ƣj"GsL7Xs&(c/6^kĬn7ǣ樦Ilc4uxQ;kfG75rn ^.#ȁЯCm7$@ȶQ9];ڷ4Tܤ` tzQyƨTƭ,F95 D:5W8y̛̼ nU'|=9t0JqR`4‡*lnVonqH?yc9?x=Ox7&D#jSY@16 T P9IGZ>O)i˗,V %@Ā\%9 YG2Hb. ($ !PdP2Kn+O&nbPPX9jphHh-Cr&(iMB9 RfN>RC"vό%BMUlt%A)8?*0.X0f!!-J^zPm2oߚ]|!иPo-ы:9ptH)>CvAKAOi튰گI6lvVh&-fl].)SM3xuji}v6=/Mui1//{j }AMJ6.BU"A0`zyYAzd>jzPCܘywxJPZJ-I!΁`Qރ\z3?BW.X9$ֹ&7^j?E 5Bbk6}&Kh1@~ mKxIm5(XRK1NaA" eM-rh0 BaY&IA@:L]G8 UDCIܲ!a?fC%(SAL!R1Bx5w=\UUUэ}3KWǗ*]fBlM+L(0 +ٽp?0 `T! scNu\}f:ޱZ2G#c\K+j)3.8H7V%2,AFhbcH`Oϊ4BQؑI%gQhh.4,2[X0yȿ َE|:1ilC wmX*xSwGfU,M!" 9xʹ}ōh]iE/[Յb:?$H,bb 0K9s}&p.Rȗ{/{Fwpf~f.8 yFZߢ MMs!םGTI*7: P(<ܹ (ipл wHv\|M\f4I"ZG]cpiO/>CHUDw;BA.081Ab]Lh $x dwâ;9ԪidISȴ?U';e p7= fIMG)(A k>?^n@P1B- K 0}7c?z:~ל<;S#C4 a}$;ClNu<ĽCyXy$=UMC4QVE`չ6(~H&5Y '74IYd|y]Xwh &3Oݸ 2Yȸb8xɈB5n?yCʕNd#̹= g~ƛ9:m B @v>$_oXCtIBE ΃ ̠GJ, ǓzjH)w?z0Gŏwn,<_1  Fk'cFYu:)*ȧ&9,)*/_]IAdL 8L@fbAS ` ޕd&b))`>/:륒 F " ## 8:__0(8#̖ikj,@mM[ toN'i;2L~j#`Ջ>-[a랾t@rX-5T14NC3 pZ)e*Hh% j 0Ȑ7B?ɍx@*핤>?6D߃(q_/s1ϻ3?G|Y#{xۻm,$*-1⑗"m)"l+u64H6i :YՄANDDrdXEC1 7s!ìB ck`%$=ZҸ1-*t #ȥ)ˡ0u*lA' $Cx?m2$"hJט/%t»^@ 3ՠ2wVcJ@H\^[|MvyNqޛ8($iqy'\C KĒ]4Zq(!s+@y($kqFkXNz4ZVsG:E:?VE 8KBPÚm<5} bwU`氨X1 NHy`ˈdKD 7!o݉*ƩJ\4`9T" (X S 0Y.3޷)MGEnf2b@ ޭMJ:(q9'i. \h[tbarpzi?o府Ӻ&1i9ySDqˀmٻxL\ ɊEWG!ɑD7y:f&73ΎB#F Ehj{sj]g fb6l V1DQg[tF1ۊ'^{1Ba^aRA4Tp:AѰSJPppTie;U- R<'q=ۃʌ7ݹNyC9olJ񅅧*RLb5!፦0q~A7^8cZvWw%"83Kɂsè>![raD| B3(>G!8Hѧ= <}rDC>L\< ޚdԚ83E?14QLz^?{9Q#z/f;&"Z!)i !!E)("Y "BT$J (D (*(DP) Bh"bibJQd H&RA)&P!) 7E7!Kûc!Z@mCpvh2KbD,.hMB)E H[2ner]dhʃu,d18Y eXFN!MCF1I AItvxMR]!Ȅ 6:EoNF$ВLA!" iYw f& 7s#0ċ086:`MAd. ZWq$*rER*bRPWЗ`sMܵpBݕh5MDɢ#SL4305 AРt#@ QaQBqE'B)AвC̩DR-9* ReA(IJRURp8 ¤bb0tُ3X¾~ E!$jj0,o}]jBBA!~"9^A7݆,@%wbM1&okFpܜ>)Wg|'GxC6 AJS6._X'ELj=%M6Fe2dQRĂI!%l+p&4R2R KB.|Ys)(D Pu==\O [=}80\) 751լ'1zl,riMR=42W$iKU m:A71,KH%/n5YtNȗv7a+]#Ϟ:旌Ay g);8m{iݙ_frG僒*ۆM*رؙdٷ'-qm۱ ~|PW=٬6ƁHIxR#"X/3 2DVdD'jz%yl4 q݇mQ  d̆983aQR4T:dTu>tST"UUH{ަ郧^E XdG#RU>@hSj;={ 2~D;:.x /7ߥ;|rn'Fi7~Oʣ:nj[6bAtτW&ayaJ1Ԡ7P;w;.; Ly.CѵNi kT}鞲(p69}y=ʇzrˆ'?+yUy{utMo1 ay_&Rxv#?0<"ot O Ò/TS!DU%jF'"1!"##hƛI)i.QqAtq1 @M\wjSk9C}8;Bg?6IJ@b p݂ cXz*ɍ*|H7c^puѸXhz )1 !u O3gePP3U_B" "Y)"Eny&ݿ}͍w ;3Q7P7p, ߔ>xM.h"J@lZ>ؐ\6u4 `d4ɒ•>Ҧ{$"8?+DsRy>3"hBPHs҇8J0w^:D`He<'&^BQ ׀y8;& |h Orŕ61k$_ :z3p^pJ":90`(DlbG'9쒽89+# Mep(<~<"uI+O}+6C n! S]Ѐac!P 2)#%qLYJҦ"R2FƂ=q CDZ*iWÎ ֬ Sp?ھ|B.lUL( f(t4m3x΁![iea @i:e`IWY*3I3_d8 ȅP^ iBX2d4nbFkOw Ҏ~&Dv fH7+C ia)kgUCf um= ȏw/ ;Jإb|xBFY;pӌ`rN\9 SO5"(|h3)pJ} Lt:ձkfiz,9'ׄJ={TwKNaSøO.EQ":65rO7d$?@ h qL#zd} |-&PN߹I 1kOy(7,> (A_Vɯ4@}9|>v3qтa0N& {8bP"ttU ).|ƽɹ<C|әTEF`d94RMAo7vC,w3?0/7J|vܝ׳Rs#zDX:2Q`$Khõυ'bl^GfcQ$F m/a3B;:o=ѧ Brb!Ҩ >'oq^)r!@Q_{ TjA``&"J"e"BhY& JP!(*fFeH$D e(B (U[!Q8u%>ΉW9g~/RM 3φ8[KhOfB ĂR:Q4ZN/5Ȅ:Hg5?͹ Cy("㿿yzv~XAK\Q%SuXMmo֩mhՃlK]n EJ9JP .vVo33K݁wcKܟ%ڧ[hxJ LR6w`mMqlv=]FrKP!|{cI>$XNN;rZg|뺓yBWF:7smvn`چ&frԑ3"s/@3laNr.˟Jxrm2軲Ez+[n7-iu#4LIjVaKfF*PBP>y@(* *R (4H zKW2 RL}o+֡;'$?R @8&d nD?oc93X[ e ˱*e7{ Ȓ=w>VIn5?Bs|]ȗ5i! $T%vؒ0yLh7K31`Œ|g9LI S00aA_iI7(? XT!+5!\M،!_r ak 0,0ӣ$On*z)̆F ԭc£~ٌ1.3*%Ulj8(ů'-kIrª^~GD}My33i 7 \N;#Cka:0lL8iRbLk")1V$GzǏx[nO1'v"# {F6m 'HcsIW%(ՌC|:̝=^z_yPWX2$%LL1?#vٺ@}JV%Xٸ$mj;7Csr(ȃ![8C@| ܉*0D !"Pb08SJpq @87" )Hl__>OAf'T2  2Fl >$ҟAP;*UkFQq65]:_'#/1aHEIW-xk9GwÇ_341<>~e* 87E>OPqhJN'% S|(& xXDB. c1&W('Gy ,5l:hɠɠdlƎVd!dԌD^^(wDqV~-FyA\Ȍش<yU צbe$4$N83M$9Ɓ13Ŏm#ɞdJ4)MX]=5k!l X)ևţHo MdXl 4`9f`NVM1AUP`沎.cpZiOd5 6N0`+@"C$&(\). 5Ē.J+6]9Go0!tfn-a:_vu঺&&Vշ!4(%鞚a0̄iEm$(n`p#Y*2(=$ޱAf!0@䙙VXou\&fGDkZ9H0SNXbv;Om i)4-R[^؇;! I*嫁LI`,M  ٭T\>5P jwE^hSF&-"hMp@$;Zɱk|j쏷u`dG"B^jc,630q1p'N~Hkf]پXmՄcv~8<7g?Ɗsi(ًٖQaD/gul<4i-jFO 㩲)ғJ0ҦH./|䚶J}!A`zl-gͩY3]s+A-c$r 9佊i("*ë[4>ι-m $4Z)PJTJxjdq;3MK`VBh(]ꐑQL"" Z_`F{W jXC*WFtxbKn#͔$ SQ2>Ui%whTc2%sAz2fh}zgd_Ƈ4ʦ- g};>>Z݇_uM0-U4UFs?ƛhS)*B_FC& /Z(!|3ӧJj""d"#xyj7&nGc)1VT#:Cs3קB O'~_f<tYF.h|m>گ]c|,u]['JDxwIޟS)|s(#ۑs}qqHQhHĬ*p#*H0@DDB!§_u`gnH>Q"H' lȀBA XAbqqu9C%11UE$P?D+AC@MJ!SaGxzzP@EIAJH H"$B~ BHBD022p3*#VfV25FK k͗Y(Syht'0ݵtxc} LƪF@r2JڃAq 1h1)3 ̤զ 2 q,1%ӢSLCiwT$մ1ͥ#uL[S$X&+)OFz&H $a,NAId`[4@4A3pEhba!i(fB4MUJY11ED%9d4No7>`ά߃y,LS kAGO35熮䒋-*ߟi7 ,b@6#DwwS)%ٿ<3ѻ(K۱ȉM81I&Y]@`SICd,j@1Y&e8JU4Rf$IHJR;DA@"IT%j@Lh&+LYd#hMāQTP2 E4TTE )JHR$HNcқD}Sb4&i!@vD{4ii@m:ipXRÄ*$)DB Orfb%jJ( % V)"EPR}F TM442M!$A$vV{)&:'@ûل`W!A= DF>1bE"H"bT(a`ah ))DHf+MN@T"_cb:C)1Q Ď "!D2PF@ T(TpQh E KQ  (BPF"tBbe1jWb"1If`aD"l0AIdF6+d֜ȉzP3 ĽCz!$_X;Y >?L(!cQ~֝z?NvA`~@=Jj6H0b7 n'q&n$rȒEBS @B2Hh ߁ B"@Hĥ4 %$ j36\{m<%#n'F-t<>۬yψ 2i9L B_oI65BE>db&! E'4%4JZbK֞R2o"($ 7gVYqxO"kJ`8IQ#$=HC9>"#227vў=ݼG!W|==~ mY4c ӱ9ctNRq>y*BѮ⟓J7P ͭ{$1v :vZ'dogn PPA Uɥf̭֎ }}zp1ew HD@MJ6mWu>NYr>\oZ=hAx;-$!Qd  DIU?.IH`#)RzގPKGMzPX|sz M&% Q15\ @u;yP)ܒB( Re")P] Xn $$F A1DZ 8C"ڎ$P q M0 HI$jLY(Qx! 1%RF V$H"$J"aJZj),2,r bkxQȆe( B*bh*R" T$-NS0k *H! ĚQqZj d0 dj2[ JyɊJ s @  Yt$քnZa""I FR` S P%Ld) DĐvb!N"QISpS652h&6J` ((*Y18QH.Xi&bJHWli1i h.t,$-&gD0TTRU"- 4%Q4@H@HEEHB E$HLP ҄RJ"(āԂ9v#Dy34FN{sDFksm^|@fL%L_7!}=cZ}{ Ϫl"A)c?4n2zϧ˷nSF|V:# ]LR7" %4' (zLALU!WH'988WĆd?h),nT1X_&}61(3 @bɭB+ OLiv[T%W0Lh#96LHGqGm\bQJ KFqZ3SW".rsa8w/:VS08I e" u'f$o;& %# n(V8i2 hDIȊF[Y&e -0bf/ψ=QB!( WRxK~!148`y@<7 F`q ޿r/Ϳ}oD?=/Oڑ.hڡa Qgtd]DI&0," 05$J7 =`6 "=Cc! JR(,JBIB` dYXeH"iߢ$}`h $3C&F[ ;lA;r4nÉH )JlWpLFEet )IЄ2j1'7mIœDґ`2'N0t7͜okD4SI,J#ۍDM0- !в~f}QE= o㈏)dN8 @P--I5%ʎ0HEGؐ^} nO3B r$"(RH~OD­bVXC y02D"PPƢPjG ,&8oN7AKd!_tr12sBN> e7?xNB<{! .@H G)M@fTX)kExN)S)i@HHDP P JRdnd!Cn`)%4bxЩv|7 e(E '4`O:7R$B)x9𧔄H2!HEBT29eLQ9<\:>B}P&_3D|oslKH0QA=kS t (%)@@NAbd M(y7ga>&dX(`Pb#"&!ɽCDԕ8j}"QP P"HFDOhGߌ!#h dwIJn9Ds@Q'|xss E4gYJ=P_5;rxDI훪KR @ {1d߯R!FU 4?"aG (7DHJkp~iVEeO=HkcHJ4c-o1bBA +AVP!&a\!YYBH:WБytF`52f1̀?L P01\=,}!?`rğz}ݟKC8q5[PEb `ƒiO՟PfS1ecH5&ˀh]L'pS M k_`ZG畹Z")Fb"cHOP8x^I{pVj"fC_g?pmN"EGa0TLA- JD DJS~>{$ĝ7OW%GSG "E{]͠x ӽF"L HAt.ipa֮^-.R%)0I۵Ky3:wA <g0zu0irFö;OW;6-z\ɻЃNZ(']ơ룣 ֥ZcgL,SPZh?sHF`Nq<6$+B][_ I C}'7Q+b̉`@bɔJ(oqC6,;[er$s0 kBw<!{M:SgSN8n8͕ 6o}rc3IwL6dwr=O""v4ϦPoQ9llfm *s4'F30ah(HpR i2 fs{غHtҷp8?'c&3P T 0,`>1F^~z"qArL C]_L79*#NE$F(a"?xH"" %;Cz}Bb؜æ"!w)SWcȹuH+ &.#ҜaDTfqF-xzEC?Ō)I2]~-uJEmc C}@'sώP@(%%$33c ɿmKaŤֳ=sG+_^Ոb l4 ޘ;v}ݼgwtklt%\+5V$eQW1MjaKD8ka\0Oò P؜X:G/LW^*qK(<'c;ܡx$x7Y6u)57tfyWGQ45PLQAU@!$DԲH04TL-CS$JHR,0MDĵQD  %*E U5C@Б#"D3KJL-+E2C%1T0,P$EER$ 54MT%DQ0T QE PĔITLT14CDIL0RK0CLATEAQI3@IQLR$J)_mq*gpe(,%!PXpHb &daK 0NsBbab"B &U7EO")0)Q?=%4R R  I "Q^;HZWJݦ+ǚׄN_D3D`Bk{! '2{lS(F׎Giir>zx(s"┉(멙GcyOIyuҝ 0Ãx^k m!k _"St|^UեJ2n[EMsk/O8mmw@УpP<<\ S0 %9] v9v vsLY9!:`>ߥweI;İ?33(; K$h&&>evxI6/ռ>d0DIARhfٰݚN2!R0f fғQ{yǼ`V(z xAߜ$+7{<%VY'vw5A7&H76&Rk?t`r37H2bjI22r8m +:7ރ! :@)$e A4Bj7,&Gatӑ6ɾ"c&ǤQ$ #,ܭUgw ٹr52da%a\i!c+EGiLΐ($ZԺ#Lc,)PA-,Q X>քlwBvn#0vxч?ƾJ~I1P/tcλC T xO@w%)A3$P2t=x>gT ?ha|Cb@&FDنyǸɲ|DKL4IJyYeW$)y% &*PA*DsKϵ% T ,U& ~oDdk[Z00ڠ|n$pL>}ȧ &&$&*g Oc EϚ۹L~DB~c ~%iT;j;1e3`9R! պS"&(}Mb/-Ayp>o`j^O֒f5߫}ˣp~xEw&U~rz|%0T̜cMbf80!JT*EKMRD%!01T!P- BTAPQHP2$-S ;~>#WcwR֓#QIODpNf$CyPmڮ/RLt"ၓr ت^|Ov8Tpٙ݉/C&d$d'wT SR@{b]WXR89Xc&b+#@P85  mjjJ$wgQ eR~n|^y!{:~AĺB䤂lt bЛ5_~mQ6`dS*w5I@6NYI Ŭ* J{h7O؜(&.n:19!͡D7(pSɤk`OlО),D?:ND1MDDI3@PB0Q H).E ǵMr1J_h6`vQ,D50UCLAU00TP4CLESQS-TH̒$ITP+ BBP@2rv?W| з4A@?,)H4BHȃ B704X59aDIQح q?T-?g]hcM%҄ ޗ4_7S7ԈQy%5;&RJQ>9S!Rd%*4B̂(@D BRBti*]0Gã2 T `AdTŇ2\%{{";C RQJ@0MB钅bB{D=vˤy$Ev4Tt?QA%0.e a%5WI<[ep#Ͱ d3逶vܒQ)(UIE 7_fՇS͜<H$n)nn\ >$_-M7Ή3Mt#mq7#ijϋg੢ga4;sɬE%A{/sкѭuVU^Kк;v4'%eCT A2㝥vQ-+ϓ[CCcAxY4RkeKc$xPqCB7{PJ 60> =9\i'chS1H+ST|3w9N!mefyKut:xyxuZ&#jQ+i2}z/6MDpOp Mu9*PTY JM1ab P49K8Iى=zs8|+JKaNO)`e5;v {}$yPRE|sw S_UX q3O!XZJ8*P!Ha(҇Ca3 LSQRP )2,}_{@~e  a*JZih)Y@Jd" jZ $%#};:EĘjUɀlBC}Ѷ'l"/e$tnL? Q;8" ,7SQ$2XH2 %4k-bNE5j \~n&flD(NZt^WAJd20*DT g7IB ёBqŤ+)R" ̢0 ` ʃƦ&  (2w`vG($B!0Q-CYW&a: (68$ĨkCK)aHR I#hSP %Aߏi͎'.0)@h(2p1Tɣ΂kpn|Áp%!f6J !3f+>!ӫC+¥!bYh -F@!PAEMT2M4 MT1S(jTTIp0oe2lE,lJ (EJZ* X#0L9ڋZTr8.fd!X` 8whS ~ FS'C?3ŏ"濃\54-by5ܽ~cs<䬸n ?${ %mD=Q5rZ~D]ew]&F?bMXv!DJKp1|74]_;ֳp# ZZB4ɥԺkNrL~U)oK\]p , zAy0XvȤC0`q`;;-LqHT[^wdz0'axAe̚*:}3㪫cQƎL+ $m+'UI)z1|~Lֲ#qe\ӈ3u ;T@toϴ91;L;ٺa]DY831n̜cDMߝwSnL30|1 E3э73vdvLu3k5p!M+fغ Wv$R Uo7ọ 0B~QD/w9H,l`GFAVnB,32֔=[Yn2ʪۢ Fd9g\Tn7bI v7i#5kX +ugi4\Zmm|zr<~ncWU)gY콣Hp8e6`J|y/{ wk=W-t浙6\ͺٽ -Ջ銠КIrz\Ze;\O|pӳL4DWnU[7v{|E|<Oo̧PMQq|C˩CJXj]*٘v?&U8ŪN8Dfi'bfv$\SC(ݧ`Lh[!ѐdnv M$i0!7φ˩j6Y[y"17p!5dC(94RlLju%yqsDC"`̯rTV:#HX#QDYc5'ֈ=ɤyCj:M|Nmu|ÝrQ^-@Iv/n' l~ aJGcxC`V>tZ3Ky"Jm `ra4E:Lc p#A";޳:צ=ýD#þ*rt'Y dLr b}bfvi'`NeTD|>o"1>i}jC-wgVd!_&{GXBIvGa _}_'"5u! x&`9f3l=X$6KQHcI&7 \WP藝ѕ\ ֆ2)<Ӽj -صGk|DwA@[d2>Pק呩P6Hy&˰b#ElS򬳟y')E4ޒOV/v#r5mcR3DXNn0,MNda+;" i|&Ӯki\k7W񠶾 ÓN:q ]k$qAޢ(>Z)nw8tA@B|8_w֩n@0QdEt/v)5#mi (~|b?+_puqmFݩܹ$5ח*h"A'֒/D1=)C`y`eO8oN=}0S`|Aܬ=xhό6 =†^z/7b <+{mP&AtHh G?YHg4 %fL&SE HMSE4CKIDJ<ʘX{H}I$-}$_0/A~",a=r }yEy:Qh:pW* NĠca.9$o8gD"r*ОZp1MJ"(Δ)Ӛ!P9*"m6ˊB a \N8Ih`~TjvID]DWyz HH4EHH&;*snLDecD}x[׺nPPbi&|z'pAOם}fUUb|& ZCb%wi9wێ_$ЬGy 40;xH֞$8z -DD44A@b / &x(+ݕ+zs$j>I3&]0b3 s\/l]'Y9Mu7ILz3 Dp1uXf ⰱ> .yNG &O7+0-驈h $=p݆ (JL|y}i(w{Yo|!0R1\C<`%)Έ1<|~)ɽTXfGyEϺoTs(v k<~2w !X)K#[œAGs"+(o;xzPP +@<0_4H9h'k^ְv}nӗݯ=us{o:xMOj䞸r\rO_U䃌/~`x7+ěH؆|8F78!N^%z ${>Oh}s6GC4#@y3_D @BJfԑNv/6xMG)%#HeJCBБ 1_[0DR44DLUiS!LZ UEBbD 366 Ҥ@H`vJ1M.F!,4ʚSCh[-;;]'g0uwdiP"!&B)iB$ @H,ku~ f*_-={X6>~< %? 󓂪*GHML99hVSІ` E)OPv,V"4* J2*"")0FF ,8D3Dh¸ݕ0(2X-<*0$Z[v8H$H%d|=}F y9==1Mw'SHo{S NL>_Rø"HcA(JTgwLQQK`5Q׬/⊳0#¯b9h=!ȁ߀ V Gµ)H7P]еqxt^F3Zaol9s>m|.%yI80cP&&~Gno"1b5 [ʈ=!T|`>;fY)I9$N#QEޤ300dg=TlWF&}qƴӳ3l312Yhy! !cyT3 !~n=Eq=P csWI/*^V%=Q0!!`]3jw龷 7~׮HuD`.JQߪ͞]7Y"N NGq*o0TYKffE3%(QM9 Fd7'.D 7((LpzL1Ԓ4,1r^&E!$f ;#V,ԩ %:9i6 8uQ!M)݉0 3U̇\" M>GH\,ID KN1ZmzՔ;cAQ 0GSfh\ކ-Uo~(±;+TsGӥ;0Me4C+Bl(MRjb1-RAhze\1 hgb0]@z)x&s0<34"MII[V-dv1_!afmR9 ltZ۹VaeAQffaTY8DEy5B| !χ.pK2#^]!;s\\0lkܖ$iBL\<8Jhlᑈ3uVhMeub#k$B87 v7yDB#lrxK#႓ 2B &BBK<ᑏ%BM{H,DE3¸pg47bcz<\cbVd%P<8Zy\^D50PD,DET!ŁE9<+: Sbx X8Ė̅)6ڰ5ƴob6ԭs-xGc{J< p'\4I%Ny_.tlA3CwssuԴ$UyuYW9d(c[hթI\vFH`1g{갍CGm_5s ITsuB`a/RLQ$Cюg2;EI1P-C:sp:6'y9l2 3E &0dP$=rCC#*!x'D w`0#,9;Ct &`j %SEYMaV!Bp64WY8؝<4 Fջ! pD@Ȍ .QA+ ʷl^V!e!)@")r!È#~K qn69ᐵe08E.iaMU/eAt|V'~߻t<8b E  \)gch; 04. v(_NB5ɣB;k!*B` Tc Te @JJCcɁ<<"!A]'>#pTN\s$:$وr2+1 !5ˬ cj24F+ӯ9mi${~?m^6. $8/p6ຆ!Z8`@*3$AKF(9i'dCsR wF*y>@fi(HzB3m]tpQZD~d&z%G+v~nXNN}>@wAI/i|zu{J}P'.Sdc1;ʍ)/ԤC‚յfpT6V%z뾿>B"|ߒQ>4R+X70?+ؙQS(F @(JJ*X&"TA8{׿?L@)4TTM-3L(ʔ 9  A)A#(@Rzʑа(=M-akvKk9ƭcD;fgƃK1(D|kɅ?///7)I t$(oDWt&ף,bR@hO'k}5-V2a0H!51Fa Fq#,̒UA@qFh $ʕ)NEJ3AX "#b*L#f"Bdm̮$LDla GgFDU.4%B`P6`A GX CUQ:qhBJjetWװըH @{!0 & 2?ycrP̕+o\IL6[ Ar$K9LĐͥjѹdn(J=3N8..^j 3bIXffhMU؞A)H #@}iFT^[>]v?M#N(t)gCƣy\8}/8#Z0CPH q$DB!$ l $3#%Q*: %R)@4EP CBTB!Y'u⛏f>Mw !tGDϞp5PXpv i F5m$#R`8SfmEJ(FY8tCa&%o‚c>Y}j|`{O /;bPy@ "$Ph]PnЎʜ4Y$D Q)h)"(P(UbH"QFR` !"@Y !"PHLReL\0i&{]Lcլ;'_d7%a O}z1Eghρ Ub2b. Z?LZh)cVQqÉ[y3x",ZfiӒIH15^}/gڡ|aĦ2F-ac,CTO2Ys~+n Fݸ*'_2"m=~u>`_$&'a  UiZW]*(ġS~T 9rQ@,- d0TcL> Jb=p"C}{ٚYL ClcnLzșQ^4 M (>L8<Cf``ґus-`,<Ιg=oBvh`&WcXvf ˘#h`$98`ʹ$*H2#+RҺ6LLJ ??hѷ{bt_?*5*B!$b{99uYu bdhn3BHƂ7n,c`hXgl4 Ȑ݁aH`xO@h%B @! Z9ȪB ( ib) =AT ! pTs'Oxwos$9$ 2 |mb)%GZ?~ڬ}AD}*B1("}Z!hu>JL@P C"4 PK(B=)vGL?a(@pOABaaR("*db {,Q|hDEaIB PW ώL'Wdہ<< "T̞VZZR))`aRM 4T)@$`) @Y #;DBbQĸD{e x,ͱg ea2X:a $HUU0s>4Fm_^`j88rac2\~S 4AQ'MQTMVQFH*0Q6B)GO<>#vtr)V*Q!8lᘖ%Q%|nCtqe+`_n EAFIj(>˶R*ac|"|\d[\4fRY-(|.>z"/H@ܨ#Y! UOv>vCC=|O!B%B0x+)P#4݁>dVb+{8}! ?NCx,"JQad.YEYcAoC, 0_X0JH !Q0 "g DSq$R b <5q 0SCRA"aSQ & ̡.*nbF~GH x'9w5""$aA!Q$%V)(&iqoHQ=O4i^bF_O?7Q w ް8x@q0\~D ]0b,>~W" S@1Τ؞sv9F ˱ϊ }[2Rde_:6!8$?"Hk& 8vd;L4:MFh$KwӜc40oe:YNI)tr78Ax|IB@ 5 "׳nP%uх0xp@ ?q i Jk!YJ8) GAv,7|!JJ)"`J"Z:@̠hJ(@p$q:ш,PRH~ςqBHEfPBD@&;:b RJ R2 (WB:J(hI VB".@$"3f, m7Z+m+ˆ ";r}  1sdmt85::!cBF5߱$pMo HN33s"zHM\yƑ8o5,Ff;)-m'8jU܌dMqɪPXGyTҝ6_<Bʔk;3`͘kfbG5 ?W3opCzF<̵顆1Hm5NBB:ɉL_kRF=!@ Ĉ85 =krP0m )= 8D Vbd3+EN9FƠ0 p0EƽzF>Pb. RέhL"  uܢ%7P"q?.xχ9HsP09{f:"5G9wH-Dm~Kn M*O|^VPz]fH"STY1"*tsmcVb1SE>'s.@` p%M K?m0O@L<>&A{;R{ϙ9 = D=G@*]c y'Ļ:BO'&Z hb(aV)>£O*= z3xd$hXjfi!f$f$ YZ!() bhZ(iJD f "if)&H%a%Hb BI"  B%}aDCxN^r CâC)'1-'*+Y0EgP#*QƶT,*ĵYrƯVsk)MmY?$"'/tĺ0AH-v2djA5ޤљzx~7.%30 Ƀ!=O,Q SJ:((A#b1&q?Cb¨P*-* 4JB)@ҋH$%ET"N0qpH# 0( ;]9 LjDt_U"B!Wx `'?!|E]ϋY|! 0R @ J"PҀāH/Yp9;p˗l,Oװagu3^Ͻǽ:e!jUD(Nmd`ac1N@`BHq@<*F~%u ̐Z]+t*oy*>$~x 2vmcq< W~He\!;NfؖԶ&s uc'@LŨ'S-5V-FD(جJR'C6V%3DO{}"gba7X\?M&}v F +ЭU]7F*FR ! ',8mH~X)=*{L7:mHlpع,ȇ{p?q< -10}V;~ ea#XKv/Qt񖐇p#I";>M!|_?,ΰ~RUDsjaHes%bvr9?~Q /NzdJypU98|:ùJIcӪ5(4Ëabڐ{PtMIy8? ':@oiU@K'x˪Om)=Ϸ?0?|#JGVG@oGd G44W  GX.go`H0 όe>c9G.qhDO){1@ňQc|+n(Nzhت*k~^юzGyw!fռƬTeỴ̂{ɧ볆?&,t?x: W>Cn7JBrw\p[W;z_-{/"ƳOZffS30W;A-~O?(lBX *a݃H]e2dRߟsZY-Y_W#iL:zӹ~b_ͣoljs|3?q~2>aT?-69f͓[$H( Zy"|ߖ=Lk͗;}dԟ|^ӏܴP&ś¼?.LIS|dvq{z: uEƠhѿI]=c'D 1K6"e?*K=m( y1lC!s~9aNvro{R끡}5USiTQ*,* 3~n@&(+$k' ) i a  rGw/}Uٛ绶>9P*(C|%*Gc:ޖ}o{-[c rv^@-_|=^.˧ӭ.x3=(8 {:7/ox=tiͷc휇o{i3t }>}_sۻ{(y7`tC|>S ePV{w{>oV]ˠ=盺ziu7^ꝞUr]А;PhCU8֭, msN}څ(|j7K>ǫʯD3vq)vjʯ:J5( m hP֋`Vt@ݴ5M{ͶX@:/gs `zlݵWD%uKmKP7w( (J{q<xϧ@}}oEZz݇lV)@z({Y:ց! o|ú{ݧ =}%{{p(n@:=h_ \s;xmnzyxw_;^[W{;]]do>Ǜw>x{bZY7|/ow{uu^tu Wz7y[mze}7Ϯ]hp;ogt(=tϽP-vJ'մx zw;y{f^skv qv76{7mンQ{G }_{oy;]yVhz9{uG{m>ݽ={4}ij^}>wum;vڢlYw6t(7{ov_tF|}ޓ}7g%}ѝu#'vϝpfn|u U]i9K7..tvW ހ։(ҊϩSvv{:bX5#Vl{f]]龖6Alz1޽Rϯ5^^9=ü*}K+lzṎ{`9mïm=}{0tTz OFAv0<};`ɲY](^>3Mw][:vƺpLzYnsdwRK֣f:y%^;jm*@vXş}>{潽ھzϽ; A3lnun`mw}@Hyi[3Λ^۽wϻM>ч{ޝi\/:Tk /0;Y<{׺}gzJS5]ܾOnRՓVUo놻ݘh qַCmݣsݷ˵GmG_FyÖ=oyjm:]iieIl:@}wP݅蝓ݡ(j; zt{_0DpF7Xi;.ާ{jrfw|nOt۷O" 6z_/R( zQB@ﷹP$<:5l]}[>bD7^vV{޽‚8b ^x٭^jn}d4՝ҬK2*8`}utW@҇Wqg -#w{t@խ>9}_nۻUG}xA@M4`1$ M2S@ A14h*~DѣM=<$QH$& z z4jl4M6?B50C@BhC BPɥ<FMMmOSz L44)(&@&`CF)&i@MO?= ~G'P"HAiA M22&$OSD43_^46oTJ m[Q_Q?ODEA7e BA@ 2"$<3CPȘihPy oF?dŨJfxE9Z*UE~bNuI|ʂU4*  B"PAԓI PNB@ڢ1?| )2-QA|W@ J@J 0"ā' ?SEB ޗS@Aa*Ĥ= "R$sofn8!8_Ⱥ}K?ܓ956wͬ "v9K0U֙cITDlbuݭ.'@_5|n0U#1/I>(~@xޘQA贓Q\23˒\$PI?⯎j Q[r=nG&obJe^") J|+#wQ 5 V B:P`ލ?mO?-$)Y:rJ2lQ{3}R͜Z f'DW'v8qRMQ*%]6zۀ<•4(4DiPhWPRH HSN?£}stO,d$@Cr"6Gg¢})blB6 JzaE͢U4RsVK[gIsǯ0]W_,0X~E=3h (чeK[n5m鮋g8d89Y3?˗ +Bb&qι)yV<lMP ܚӭ^=zDl[aǤs'@Hʨ>aܑ4Z_ z bM6k8yI@|#BD*NB31I("$cIχ=' pBi͜fֺ䍸5 VC(+H@W901i4f&Dk \sD^B9 x! rJ fLw@4^r4D6IZAlAb*6I5G :?Ǝ]{w>$z$rSx9ŵ"law-Dǘ1hD|-IjHrilfmYN'i ?c51.C2olXfK:f&ݐhPd"jT`kGe[5Ȉ֢J0/;D0\F$Ñ8 dOݲ7aQkw QtG.|;Up`~@ >S~ձ{z=0TKTल7n6_u]ZRsƖz||u;}(wD{ʧ*XXۢ) I,J(3AA6V(d#mǜi%x.IB*6vCI-J1Z_VK4BAu % f,_vGSSQ]<7ؽ-gvsM:8_|gvR*Lf6S{-v J~|KD:h{y<+A m[%e9[@ {6Y#.rNμ3TH4յT-(c1ltL]f5U^5յў}UéMQDc^+1_pB" dw| i1xI+t`Rh844(i6ڻ ɛdbzzh)+3͓TT4jAzeЗ!_ .,{ˊ_0C0°Z)~4raeYYŅE2&P1Kr Kcmfs:۳[O*'՛(`v&U0-3SɆ;O+: מ4Mф21nЮkOɸ@ĹQT1n>rM Hʩ&E#=7A\"=HƁ9Fx;z*`_,MM,Μ-Ri"ܾGn >.2t t1'[䨀 4- _fK4"ۛDPӀy542{_3 4h mIF}kCbsBHB,,uk6prlg65[aQg"=B"58wAӷEi4 RM {oW;AږU Ǹ G|0~)Ċ&hfa =E HsÉeIp#D;%dmѶEakI;h4YSD]05[rTKרlq|dR=׋ }^/ٛ\7<<2)sCa$U|Y2/C x/6cػЀ ̃(m_X-, `L =W",Dx/2r7n:m" 8 h?M_ D-8|8GbVwv~Ji$iawa2+Wa17}oCgvukȞo#gpvm\|I#3oy/M܁bxuZD}5/|F6`G 1Hf^=@R!F%F sme}2`LvU },ocX hlb!]~sxg#6h5/gw l fS΃.ΊuLg q Pj4y{kc~XzSZzt]ݓO&A066 }(hziӟǃA5OpG0PLsɘ4#{49^7g_}TDMh >IqL@VD~%{~>?/ƺ0our9a$&LƊenq]%ćNF@W.!_^U_i4mW=Qtdt<?rm^phm9ud6t2`4YpQMԚ*(œ]ھ/!#ӎKh8>T:{Ʌͬ#QR(>Vd!48Ǧr[9sDQXwqZCjcvVQm퉶?o]dNNܺjx?[8bޝiL#+ Uame bcN+uA&̵"xޣdWy'!!~Q|YN]JPp=~"+O!a14ɓ1aFI"M2`N qwJ =[Y3擑 iJ_qʊ$gt^GccN4Ab?|(}v_M]% .2Bd4YT^(G>=X>/x>>Oi7JHKtb%/f ?ήա$u!_DHURΕ!50L-r".w{b")wujx $WnE nRƠMV`zpLIHi)D?&Z75iʹ絿ymxp܈B)4\"`֙vhef&_;`1Wn:vP%'%ЅS{ln}N5ULm\䏪xT7TNr^H>?7/ҽM%ٔ|CvaOs0tH+:mUVfso!kLo(c0hYG4x{'RRp:Hhj*VJ"%hJf E`!w]P.-<]-rf9ADR!1e!" o[3GAQ2Fgٿ|'"aUDS1k}TLRнW"" Oɍf^h0oVe CQ0 4o93Zh;Π 7Xpɭ(rLCˬdkFơI:9:tNwhk("6\}""m։h@p٭b:6h;F0Q` rŠ Pd CHDFg?_n9j*.5~#*^q \dl  C(0K#$$* GS4vo+*8s|-?x N;+5vK+܆1&pOORbxn:g: E'ڏ@8CR !o='M0Ԇ8f$lmca!} {@R hVLجq0Rk<"z,۠#9wn3 ]Y%R"eDcF߮#t#zTPDuSWERꇿu':*i0`0vD9Gq-[ /PSzd1 AdTP@y!y{ZfV!GO7Yٖ8CN`@E)" 6ci4Pt "#`|~" P ~:CpBԂTCsI fj$$"*YiO&y$RUCQ)("*6Hq<@rQHH^y(C{%4bB YS!($ztJ2TiU@䫥ZPM*I"tҥ iz$QO*uBxEAM--dQIQN*yv@$C=a v\͵RZ]*tm+.må:I&" X X "j*jf"&`$%Y`?ډR GdsBu$<`TCTd :H_ўOA:Dy蓋TG@,# @4%ۻ*3$PQtm3*l>1 ifB2 "Аy:!1];D)Qz >)PJ~βƤ & hl ͐bd! ״1BH'D! @@rP=?D+J"C!SiK0]6 ޑ:ÑxyA"y}3Fb: T|OPQRG=@ JQ DHI8BdD~2'<= $,*Gv䞤3Pc!0 H$Jj,vxRAZ.@jl sO( QCbnt-=>oOk\Bqj1(336%7_6Hʒ/[]"\PHu-Mͅ/L!N|JbJh @h RJ`@? 9@JlZ= H; zɤ T:`2Z9 :m\!O!TKC@HJ!E Lq E Nq8pVj)J aKE44ӲhuUUQDQgMiuU_X{*Hj8 704'zjx28\g5tVAG߄_2BTT(Tz+_z:< i4޶ЭKHRDu?d*M/QSo#b}mCr(ZĪ/RP/ۇ!/!AJFNORPyi t=ˌH-B1q8*| $YydیHfއ 4C14g#JG>_YLqFET9ҙ _ PpyK DqVsJ'E^rf`Q ; YHN1}mv6H-jkRed&1T~3@f:.Լޏa-R*&B(˄rϙ;I`E2c}VC!gx-[3`7d:8:C:e3< ka"4h{ю'b>?ɽ Je-~VI T{F!Q:>yO晣"g 9¥] QJ2)˜"oD;{LOw-{+qRne\i{x 2qL-c@;!u`!@Δ39&{ADD|lu;58;3Hr4T$ s*8י N5&L4H4 #~[5q ^Pa5@>%dd| YS sZa~1_nx/|D)jBrwG>ZG6ӲH<$օp('=;wx}!@1\V`䙱/IygucXALH@@9EeQ"B{?9P?|-&Sdrk=Tf ͖vH**MQ'C&CLrZ%JD=lRSnç!ˁ1tN94tIGB$d90l&-fN`FpAfH C$ PId,`CFMPlCٴA٥ 0 }q; *?auTSZ,N]tee9Ui܆~pb3kC~xTqԝY0>^7H>W&j 6 C! #̆f"c  (sj˱#[8ZǨsK|HtRxV ZB+U##:!@Hs"kg6<Ņ] #mR@g6E$S={eNɌDf {hz4*.cI!EYkrei2L*acVj&D2e$u9"cGat@(2ih Jy!PFy. z !( -X M(HJB)КT(** )Z)B$ B PKJ*4LO$҅JJ@RR- \Ɔ((I)(! JJt.Vh)JV(HAe@8’ÐddQ04K-"QIB-(@P4TA(&BDCTR M ]ƚi(JR&)I*hhZP*(ah(Ri(y#BiiB)JP ZhJ & RZBT!j  h) JVB (H h@!HU%!!Q n!tgؿ35kdN^snB!y X[y; C99ID'gwԎTRG׋jXaa Pef:ğOG}%1m}3<>Y VLYB6(LbLem9垩*)b"*X]^ɲ,gB,vfFw\bdyx@P4Po>ii$T!TmO4~BJdmk\:YeI>3 Е8Zi,!e > 06(Colny}<ݟ9]MbH!E(SBRI HUHpԋX@B9 @}J[؞Һ휮{ZI/ 8㖤~'>4BfL~M>]Lu84ִtw ۴4[VIÚHbYE@+iۇ,kȈCh))c'Y!oI9!7>}p~GHH$(b fF㩀Rg3͐$l>wE@q1ƿ <E)S̉Aga?OWԘ緰i1&ёR>|_7~^5c0RRÆy9}6$B4"va:}0a0 C2 .yM ii9ȈUU tyuU aIϞ`*N h*" RLjrJ 8A('RpҀh(4+ (4r@2M>yH^mќ 4tgZ32@!@R$oݎ|i%(J$`b L(ek됙Bn37Vcp1LĄ?c0)uk]ÂG64!ㆷRqΚܠ*߀WJ*F҉\~fkag_l6o7b ]`e

/5j=hoKiAd &HRIaw \uWNVoM`_rI R wrWtw+#;,ʨ;Ng]E&-x6؆||{c. I$Z5fvϠ.fZsy%BcJo lO* UU(҅ h3 L/9 ;> 8_yFĥ~7~Ʋ? UnV:5.kD}r偅A 9Cd ıAU=Ê 9O|:Tcg_@RhR/cX!qH@8"sfBI ò;/Lә[\Eà sM\#̈Q>8 ه_oah]W|vL5DxZ2@ ?}V<1+el-/vϻ>|j!$1 SBIo j"O!Q*I*o g!X3X}L>nUת3~"; 3PeaUk3m_)e|:ٹ{m! q@Uh%>#߻lZߦ{%Xkzl;vWI/fg`~_7|[M5ҁ,³̓00'KI'Dqꅰw&G44>!tDc iǾz8lt mGJ>S۶G $h7γ""c;E 2 XS:ct 4f4ۊz{|WM:kW6ytL#aVX5(yt!xbnsuz-L+C`yq}=֐UW,j [T31R3ll%pP!B.h3UG YfN,DHC|ށ$IOi_ire]`|@g>#Jfhbi)2b&O% yA'txl1Zc&3z`;$,#.7͢$6 lM N-$#NyiS>CU{Q"=-9}31GX`V8TQ cjY5c{c] HHL`i4r8>E3e4}MQ01#8t9;^JsXZRygW5ޢM{n*V{46jߴgvEUUTUUUQUUUUUUUUUUTUUQMQAM}3M4UTUUAUQxb5LڹBp>o_3݆}RÇ섹LfD^̭$Ǘ'a+p3$![nKɏT.dBDR~mN9ɣ=ee&J7|}4Ӽ!J^q8?ϻr7{u إ!2YfͭnmJsnxMHup},D"h+ 6MhN>Z[ׂ]T"4uc77ERd,aWB]/UPū,I_5sKT2;}EY\ZAjLxBtl!\(]P“mZ(h,D[:8J43⢢#)Sz/^_5h?wCk=bro; b(.j륇\hˊCt_B*eag+{|NGM׾iA+"";s=cwM]BuU2i PS*Q.6O3Fy[A 7pCآD:nGoscq$b {9$-5@hҙm' c1`c9A.axIG3ksѺlS̶NE vnBt5XpS% 6:IA.L[DH(Uhzƪ)9n:*mI4HTT̂g&'݂2Ѱ 0}g}z󭽜O-5}UzϦ*8&hԢi~4g=:Ȼh@B lA[dJBIu -Dcſ5Oj}ASM=VS{Tvn?.q7#**)Z /}ٓ&9z1& Ç@C Yh9ws//\xkhKST+gӓ89S7:[s"4t\n䅼"IlET9ABiqvC3! p RmZҍp%cwx<9Q^~bmk@t{mlMtp YY]ř>Bb" F' CXU@BdR# =Uװחq,f@gEt]_2Eve:' Kj%< $,˘CKo:SrOsF*D+ؑOE[sy}a9J5Yr"1X PaUo0I%Eg#2NdQՎ]| Ӂc:qcp,JAs5Bz6a\.g{aĹJvĢEyrQZ5BvOVç0k&ywBiz{i'$fSkVvIk[rC/\* Y2mxnE[1({n3Г|ido>8 E˖I0vC7EL 0ފἇtQ}EP@Q"vcSfcV)"OܡvGϝ=qa֊裪ݲN HJ c]P}(((HhA;PPd"1ͩ@SD\g$ MQҙKO3FQ;=\~Wx7Q~Uz &C;EK孲&ҏ_ &QOno\ h:}}ۤs K72}NF0/Ԋ[3J`F ö Y2H Tԩ/8jʊӬ6a <(Q6lϜR(&{s9t|Wq_ Gٺ)=An~*{V\wf X㼡ś4w(~f8W-M41W95:|%"|CL]u+.r LmaF6yVFӈ:MG.onlrUb2W"'I` G7 i `7*[ڂÏ79_vy+R}%CH.jfaɨie:` ωNWɉL:ASsW5qIf9g,m x,`\ZPӠH Joif.-No}Bf͒+ 3_Drgh#@Knzrȃ.\ٔ3xEFibq9*xmӒ5:VGe'Cv<Y3xS Զ,|ӵjk*Zx`i(WS>ҳVø譠6𾹁"wDX&J)PDn9Y&ܱnZQisu7z2R$QLfm 0usLTr^M(mGFlϻe&Tʫa^'G?Q vq^h<ƎkK*5.[,cNoiǍts1VHH}yh=u} L0< щxt=E}<1^Ѓǖt<ٞ;Ѭ;8 $I ΃ āIn &M6'M}}l!@Д42)B D@  ~+hI!% pr(fAO Cd[/6u-[cYky') J74 uBJ[#K')pvư0M!q֡]?486>O9to z H2ƅW߾{C?}p10Me([J ^4SA%зK)@ЧDcCDB3Fg]gXߏGiq=> 3?ya?ϨƝP=#zror}$Qfp#m>͘D/㙄Y%鬲m C SI^wgޖܸ#GWRIW@9CIJȅ@n֯M;^Pֵp"hm{q-mQj9eWgqVaE4 ;!,"4g"e4_AScT 8^-\hƹ,RGH1YҊ Ԛ>|<^ײak|Swhf_m_=N`9yfBvqK+ʗ^׳>[\ T!JCR :Xc+b 1d>hpؗ:aHǙ}aU52X0a1Y쐄!uY !Ɇ_tZ s_*;$Ƣ>k=]\j|F0bZĪ͕5(4) RIMf1NN Ѫ#B5#VW:e3]#Pb$ߴϴ~m.IuGRde`"&5C71Z<3qGZ8e[wZAimҠӶ 4j'+&eBPkyV2!dz( K`~y#! K,剁Q?>=#} NZE.V1.W-' }H+c#5QM( /Ǯp&W{RhvNU|Dˆ#L7ԍbz귩;y|-lPO6j_0 9-u5UշZ8}nI۝oU#3fXr=a% uY+Z;$˄(5>{7qa[%V$inlv۹?cӏǽT(}Tn>YN}d+0ÌnA"1VPs")Zh8t0[Qu m+9r]F8:!Ԙgrwqxf{g'lS^R5,WswXcfek4WM "5AƲq4.sD9 驡d8OX˚KoxEcbq^;,#.93 C֠>&:r>/S۳h_0—hf%d+ǎ*v{2cxzwCXQz_Yڠ)|9Y;.#sx6xiW;YrUHisFP\4(8i%U Go Mhztr$ך n1s%~I [{3m/yٻ 0T-*@d7ݎN"ŝ]Ď(qj1]s`gTs6[A|PGQ#+Uzo.9Sı1.`z}mj_CFr)ȀJ2gq[)l+S.ky{39A%Dz +KLnz#(( C2|blC`i)pϞ:D}k4lگ,Ü}x^pyUm4oӎu۵FZ`%}W'#3M2fj,"RSWb!2-k2"OoOE9I'XYZ((/A4JD1RZx@si5EL1dg7.a"_lth1餋aG4K=hi"wUdݾaIr,v; x rkJ2]x9K`!ͧ4b1!m`>&bKԽA%'O\bHQdj W[ u8GPN ϕGb}nggƼ9[}4|S#kI @SF|xFpW{K ٜx3xՖ\n_نOAڅ%QdVA9#Z҈,d-z{ʑ{|zg1S(V +"#8oI$(J1HV]PtX5[#H4te&6/Tu9v{J\՟IS6|4Q5B+gM G#]0đ47 ,"w~8> Q>Ax~z ̒SA1%3!5J%E+W 35 x|U=KzIG F9/6?\B.Ozj]*`SE K oyZ ] I rlN}-$E <}oPD}їQERQE!EA f 煨E oSm^b_Soowoqn6VF)}N%1gPxzԑ38k"S?USnO=fcA3~F{ٳMr96 b|!ޭ*$zp:3q2fk6VqV 1bU58pUUOUs/JDYV́j&{, &*eI@‚H" PpD@DXAmX1:ygAVʚ LClKOګO>Ʒ77~4I$joYð|qf5FsgejaQI<ͥƲ;T͜_kUÙp"EZ he $ai?|)Ozm6{_*vD[Sg7TՃ32 Qf1%w4w Z XƣzF8"b~w֏3F~WϿaH6TI<·D{a1Cl`@:4ϝϏDc kɼ'KiUOs 0!3f[hM$L9@}~ɬ@*Γ6חy%E~MWQOVө_D_wAٯmSC҇M$c4^ &# GJkUelݿX^)Bn;+)'M%΢xn=煒o+d]|-fG[2m9['DUe̘54#I3JN'-՘f&V?Okw5wf_8$~h> Z`ԛީPy4O\ף%|ohᾌ HrZTE֞dif[Sn^OvF:EfN1hEDN+V>lR[H"{A|#Je(@-VHElEcl#OK7,Di)F6'c9?]cSӘWwq<~ DRƘEL{Gz5t]c]D,~wp:~lj79D45tT[}TW܄_wo}߉Uﺎ|{DWZkW\} Ld헛#?+Ws/ܡQ4q\K>z~tg*,gB#u0|C*uhiN=Y1}h rtϟU]E#B.Ɩ4+$?ୗYB661Еc+l^N\Bl%*4]zۗ)ZӦ(ceVgcN4hjlT-đϑ;C? ӏ"/6G>4mZp}tF/W+}s|GSaҘ\P>?<ٍo qĞ;O{μo~/My?m.ۅWmYumalenM]}a]vaXUyouw5W~>s5|&cf@G;2-,yiq!ors pɛza ?*q,m#?|3Uc @k@־MCZ$+9.87~%'d< /xr4%c ְ^iaEo߭q,AƇ]61{QJ_|Cen%4_NB^ ?fǯU 6bٳc \z W'բvO_ ?)Q.*_swj&ӫlE ׅ2f𕼬sy/ȿn9&Z@`k/b&(+؊~298& 0i"&3ff2%C5#ɞyWˊ57$mйNHf_=>_ &!!) OVnYmb_Ƿ鱛<8Zdߥ ֻ!ۺUNKF6|óuFjEK^ǤP^xw+U-`SDFwɥ[GډiE2FE3@FZRvd0!W770ܘ<*C}EIXk|syvj2U&Ju?푾c`Ѓ OjMmͅE+P).+= ܖB6~SHڥyE os9T c2<nx4A; D,D8m0PJWM]5x ԇxa4Gtd̳29436hJeXDۧdI60Ǭ׋}6Şnv`ᢚ"(4nNl ღŎ:G= gѹIW_GY͍g)+ r Q7p!lߎҷoz(zF\Ou|nPE)`U:,#2t> J^N}U:?;]FOW÷vb$߱]ә Dхu[<%N֚3OAߑQ6>f؃$rX0?uu:1bݠ"&7?d$<[Yd2f!A.H|^鏐ɻ "Nc˔STl@F&Xؓb8w<r o㍛SIhy!^fj8LVï)w7y>-ڹy{yVcyږJ M[Y|ŘH#4o:SHHفKbl㠺pۄ}q\DpbXm흣{̲˰P[wv}Y=KYb{|{;G5+K]1z vpUUOnX6[Y!i3Dgif /dýɅ;qaN!c>>>>,#Ju5x??/޶cvqCNl4 -!CC_4csu1=p=>O' J (!v7 ԯ%)E!3;i$_ˑQF%8%˚θipP%Co-vrA7!]9 "rZ$2AKc&1[K#R9qP)Y29&ZMٗtƱce*q%9h0 G//$$rbI?#Zv\FQe`d|K;ƃTpa0mb^N Nd[MA6QS])N`9;%H.7h8cIF:b"˲C"ЍÚ PT鑄h`ŕzB(ч[obͨ(ű%5a`8s49Kg3mM uS}6ܲN }:7S:eb:w@v{}ہI\FA> .6m$-RcB>9mDhTU D3jȇCIrRIbL`zuEs55N//HF#.Wikm'w-sۉ!CӸ= 1F1Bk#$Pdْ*SH:6f@$;`fb5"4cե[kP`)L ļN1B'%<>z9DmN\}F8K".2*G)j&[6,M]L,t|Gp mEa݇籋x"mث) T6 (1!3BvH[i`ZV n2D FBF</^-9a tQ6T<DdU4A L3QC383yF1af=^gS+>߇y^FxA`dlʿ%\ゾ,۟Mb? \vz]9T$hh#P%4{:$ha!1d.B [EUUU5UUUUTUUU;_ *s_Z1AE ;픾F.I(Jż>YX51H1 9zII |Qcb12d(̚k$4\&&hD\8UC87{?z,QE?wPL0>DmͿv"hbٺ,JPA}R7zZ5GxSXE*xL *T@ ' DP`7qd OֹD :@)J`?HH~ߘI_@)R#?a:)W K4В'TX8wN+*?q= l>qVN?mN% rGgLfĨnt6 *ަ~7vyӶ qG?~P;aF}Ouv%E5nW?\}Ӯ Zv/*,Yq/˂#O agNtkn3U+)ST%d *U{(T9ĝnFuT3$$*|S[Yte 4_?'vn??:?3i{$Qix`9DOŘ`t0 "DC8 GHh0/S\F7/Y(2AZL$&6([jE$@#H8EB'Y 4ؠt BРQ"btK&GQQ 24~Puaӹ';3Lav )0`@ӡٓ ˏ  P!!)q o$>i%~_>o>o?X~`7?oڿ/ %ogۥ>tdg? Qϩ =qۻmD Hjc8 YGe}7ɑ~2ofjqg\:;>|ˀuHL!Nɗ3/jnCw|-%<⪪G++*=;]UOd!V`t|8$} VQ"bpq_`~F5_Õ{̂(Me0I1s_9>OT8D1%Ǥ- kj d$~FJcyzd>:B@ Mh:- r2A!((IM=DJ;?y*AsL y& b q {G{–Kz6gcڻ٢z! ݺ<*!|17ۡVsbl!Y XLX*I3͙t& Ң@64$Fx9\溵nRݮݍ1K3E,ƙ*0gɈ)sy}Jfy8ƙzn@ersl'Y+mַ8KAks ُJ4g,doYh"ˍNvTpևAU',idwչB/)%)%N_\ҁ#p탖i.X%L)@ d sz'^?#fS$佃AasG%7-]u樂Ov$&IU.@w# 61ct'?Mdl@;g1/ꭈ>rb7('d~:v{}J`';i\s !$?1X4vsf) &15Q̠IuA|jɆ0t<]S'LLT 4(:,_)=执R0{4LqtuvFJX&ad#dX#q<\#;]1}pLBBIT8XDN$.rgFXr;%TӅ!*\hl15.`16'Xy[l?}<c0b"aH WKy4ی1ҺW~J!1wAä͂$7[2RKRɃ;8}Χ#èac:a(fVPSRbMh 9B:ӣh6j ["4r&LҐ1)G\0߅:n`nDb` f͇)TW<|@;xC,[ ˀĂV \hddq2Gm݆X9ߝP+i.j9!&^"whTPWUk.?~Z)G4#;q \=kځ2+NS!2(GKk"13}|Xْi3L$B7Ȧ2077I".rCHfX>Vz^h|RBc•Mݵ!Mț߮/h&BG ġP#x$*U P1ĈfO@2U3+xޫM1J>3oB(Ψs}'!u(UADAQDDG8sEEE1Tb_+DTDBDECDT b##r:'vX"8~#""",mEEQDxڸL]u?WOJ ڢ?x8b#iߓ( 6ϝFrpj1eK3Ȼ3 2~_ j2x,F b+N[rj&6of7Jm.mM.p`nr86!`WSu_j{Tί1NEAd?PILUK />aTCE(?s\j<כϔ"p};L驸`, G{Q}sPR=PД@#BZϿ왤ڃ8@DrPi}uohbW"͏"yٲ&SPճҎ3LjxjҼJ6fU*Z]AGpfJxTe7<;O`S|^NtmwONs-S(6º5zN.f3i uCsLg[T,N R%wϖpƇ (\%vh譶6?48 Z(8#b찮[7:՝˨ǗnA< aHZ QFJ36T[’!;&\jq倭Q'kIu4]AOɧrJ&ب'k%g(n)giGUiPjEbƍ F I6YFP[vzi_chGlw8Z.b_=|0:n/}8.zCя'$xg̏qٳ\N;~Lվ^' ߋl'g|`UNe;)#B#53.}>̊dкծM8]VDч8gD0c_ m21#IߥG)LU 45s^q!K`vBj(;$Ns0n}Tæp`=6FH,Z֪G "rkA{H~1zsj4jsHhOO7$!EjfÓkgO:f]U_a*{@ %|YѬJ3HS #`ɍ6ZcZ;5c>4ZLHc&uRy@3P"Z_XWMs*v.J /py^_ sϼL቎Pv&t# 6ܖwF.xZа=dfhZZڷfvKRC;0jAEFs\V5bEvjN0kahsIU;6_lWE1$wy4_ 1BPtM)"4MqAPzjqN'jnvO {l!3}|0g>r(#t!HGzTa4}tZhC"T UkA3a au6|К#Q Ѓ1;bY UT-A7cknP,%֛ k\HoTm u>eh| W*^58&6a8#U/(gﶰ;qU@(7GrfJzNpq Za!LBk~SIʃk9EfQ ﺨ͍4T5(aI$*vچ !,z;ev F4$!S'/a^ LZjDfBau˂}}}'X9Bvl3`R}& )Gѵb[Mϻ#pւ%YdKnjbcy--Zh4; P [u>r CX4n7߸Dž'>f#S2C"{%ts}&N~ uFI 5;t0٦ܤ8 iŃ$Ն@HCN{fҮǐIZݞo3%DXU/Zh^FfSOQj}%aMxA ^_#ȓX& l4 7FןOx;O%;! `64 LyCcO&ǟpY@׷c5u.'r;MYǕVV676^ܵ&6I gE$bvowG jg)qA'ϺF/fC&:EN8ǃcԽ i ɺ;3Dmp*;l:Dq1;=S(RfJ!^)m{;) Aj)&bb*P758l#K ydmb}8i)j--1gHv0VDga4%QURK(06M~h |6.چ(8)8@kdwӨxMɤ*"L I&PS$I_@q z0I@cf .k2ϥh|zc7(zGܤ:عM"oG޹^߈bF<eaKu뎌}" ?0 B&DX={ T ^h tK'P@G9(!Z&5"GT\ ;lcC:n[YO oX6yNEqeY + ZB )ɡԛߏ |(MVhQ` °f.6 H5_XZBpVw6Mw"XCQ ri2k{f$my}{:hi#VP!D\ :DS'i94,b?:ۛN窻39,Nڡ5=f);BpJtac18CcZh~;r9vWo7>v r?=>mG& PIu샰2ݤE2ƤeAM/Jf*h3*i=36*J2px3[gf"Rn  , h0ڕZ!c|E~12Cٟ-,x\66+CIC u P5_r확KP8[/ש4jl;H2Jk 2A:Q 7im9aܫ\S-V4L^-]yVCQl-܌eEg0jM\\jk9Mx0ݣ>JLs,pue˚<9"H= GrQnm`Ғc|QJ:hzQyrf: _+/gtk]ϿNZCe/j97Fd{Ǎǚ`x(쳹:ӼoW_'( \a[jMnb( $2"Z!"O63>WCڨǡj_sO(&g{eωEY7F?ƈoĿt-O&i;xVMM/;:<3Դ2PvpCTX!ob9ndl"d@fR>4P~`ޝը/4BW(Z#_E[cƱHg'%a!=r̬-4hBq!t4~fZ.PVV!YC|ڐ!0:i V*4Wb y܄ήa$ڣsq<»3ʸmVo!徽h}nc=QXH8|>>SawU85ef9vQ덉uV/bj8tpkkSeB|)z # Hĭ?}xw&$AR#p>5.D1|6IӦYd:1ShB(bTv_j`^#R*Z+-vcR1e,e[#s:\ 3Gɫ&F|2?wcu[OO QP[*HHzp= k1;ua3(,͛/b,kF]vNH1}@j _MM>r HH r+t?+%7!cp7*gFe*ύ[uVhK8fhaG?]hSIQI1td蔯b!;; N:KV¨[3_ߒ|{u2`Hf+Ϟ9cU[λ/;wS۝xz,_:/D3~Irƕ}^rn+]i#\'Md#~{ChM]#z.8cA1$6P w?c$rw\DkixZ`X]?Ok3q{"e`hIl$n%U^ z)yT(s?n6aUU/1gmTfDJA-e>Qzk/jV hjrjo F\tn/g>ۨtM@oḦyAO5[j~u-:S7qǘSkcYvq#TiYES@HUr4m eliHQ)]pZ)=]FE:Dgj}F(АO>߱7기nxBGƒ67{yCf`ȭ6-p tUrК^6= +F6'y 2]/|-LfTb*i6>~-upB=?w%G WzLFz2!ACAA҄h,rOg\3:3R\7ͽZ Xc#=G;{ÿR;/F*\HnPZ+ ZZr28p" @tsaK 'z*p:o4I (dodYk Rk%VTOJFKOmΥ܆9 fz뾷$QĨV\DOe$T:dz 6fS"k]QM06܆,{ P]HjC94~o38n@rųW-h- )*4#JOGĦ#?oQ0H˹+y?LKû>HI,\R{h BGs+Y,hO7\r(:Ƃl2REv s-V'TF\|O[݃U.e3g'FZqlkƅEM?v M4Tͬh'1@ cysa|?j׎3Ƃ)3B @U{a]۪}=V9*--@%VO=t0W< ̷h&"plP49t#*pbݗ4>9mF:WDt"t SEL-b #Q_ F9PPFS"[k5OFBo ~bF,iQ"a)&YK@|/Pϝ0qx01sUMl3, bKn@h7xT8t!2eB4oϥV_*sZ%=6vYM"k^\J%5e-z:;|뷟yfL_04fO?=XS]R'[њrL٤Ѣ DCNe7>42+amiN\84+`Ί3!eT`L^Bc?Eg(~h=!r / vؔ;-%L\WT |2Rk谇)C[Huq_~8){%/u;P(JU-Z, *4\,B=GGp])mQ*._񎉔}Nv|ִ&g&R(A # I Dl~t}^?m-m^Xw_|=U}04zo//C6xWn/jι3Ϭ綕SqW돕JeXޣ]U\ӲMЮ tS .+{.~4=/LwUÿW^c1MO45CfNeU:$# މqC%+z;³칺9~fYE釯7Ǜck&淋|nӷ NU.%KL tᇑ̕eg"jt@ ٙ;=rӺ꼛3pzFM/)d=?OEN5=+W=>J% ۲cvSy EetWr(:ssJDCI0jZu81sOuj~Z|KR⾝^Ys|ܰ (wLiٯkf⫒1δӏiGzbV?x ?U^M^N-hEKbDzz$IN}X_zjUQHp4OMwryMloq_Qpwb^Z2bf"~G[8*QSV Uw2GGSxd}orFu$oyo/;c.vAnbXYg% m^$>/_zs}_cuhy?ތ+uOѥMRy<ױ*曣jkz|ۯ7Mb}J4CMUF%o cq[o%׬(װ5'?~秜_[?/_]VQtK:1e(P˪p岢9~{U-VCy*fӡn|>ۜ;3QΨk)tjT8ߛ8ED}sszs@ˠST %OS8=]]Yj0άz^D"txx5yUg륍Q`UFdt|9è?uRTv3lzјdTЭ(tazi;s84rn-Bl=[_)9ꗕ呯4iIYdgfޜH:|V!͛=guLk aAPmdxq,cD -6\|Uz >B SdȺ54~V;0mr>)v@'P#u4꧞kmT]KMԛKQ5^~Z>Elw fd40ֶKɃhD袔 f1訩 i&xU\]2+힉+,Lr<3×lwBy [7,潄Н4|oM3@ɢ1$w AS:y?-iH7ۑbY[Q'/cDci2~\qX!iO鏛%N!h8Gq<܅73\_Q?C }34K޵MIr4!}jba_\( *#0ӻ/1L_)&*h'WpP=K1j`|y27J:hoxܪ^:w-X Rm#E ނ " '<8hdpaGn4Vh;@fG@y뼼j9LjwGs3jb t7M ;†&a@4'/,a$B(!Ylr()dܩ=9r91?e=Z^rКƐM?Ggt aCX7H1Oڇ&*+铴A4Nf"J^@A?ӡN wC.3BJ=Rك\%E.ֽ~L(G&|\v52Wu[0to(s610N& FaEІ7GdoYD{=8|p͵՛A猎kJ$jܐEՁnٽCtY0vCZ Q2ILT?<~'sي֑'kZ:OyIw4#W=_yd< m' #l, b;bI$Ʉ{$#7wʯ|f12y+[[y_Xb~NУ=_H}qUEWn#3WpxƉ;|cL樄s^Ǻh}:Α YNAUT<+Qo- ZʡCJ~IBEbbT26> zNj4JBʁ@.B= cHL/*?ӷgѕ"hD Pt`L*Oك'MCX&Ȳx)\^Gܯ{ݗG^1:8Lh`l7oJq7#n@$Iino"Qxޜ9(z@EO.@NI2zߜzz{!׬hX8ЧpiY=gzr]m>p}!6, Jl-[Mq)::9.eb4LTO"*Y.si)X/8-+*c>ǃaI0/OXzmGǑ-kiwҚ%' D+/KAnײ4o>b;1UEf DLَ$RS?@LuPH8˞m"AY@j~V٧i ӮTkiv; :X|6O*!|xA\jZhQ0իEX\i:60wLCC;J%y纗vtDac:/owP|M 6gxh|InILHTk'+9:x^2-=skOލTWj9xux#k]q^5]AԾpΜtacY.߱x=-f֪Wgb3YT|DouZ+2Η]pmconjAʳ 7+\+ơ?3YXc1>EyDEoH$FXHƳW7#֤ޜ7/5a}i+îzK^Bs`%1m^i*Lְ^t3;LVnOa~ ][]exmn<9zuP7  Z ؘqB@$MIњ{fiqN[{©Xqg1m2EMNa7XN r]K9԰R4ʠi [^# WVҸ)HҥZd/hzWC;]NٗiESwx)$6E]&gOOfj'a^nRRI.PP,kT?zk\ghB\2@1؆`30#Τ-DåFhr=*Se:$) ._J m[}?qh3OFZbV)Z F+Hu,[(~~ߍt쐝M ]L=MTa 3$)ʧ-N3)QCQSBZΞk iLYKzc"}=Lӊ -U;Ɍb gB&v]k.'[qSo]g'$4B<ߪidnr8Sjd4< Le*,-?!zat<͎H4?P+"g{5nl#66fe4k!PCCziF5$Գ?+:>E"ż5]+AgC 6sM @)#&*8CQ,_HxI1Tj޻inf9]Tr Z99t[ mIsJqYq4y٢GF&EFUbjfJoln4'Xl nmTZ5_I=Fm+ OvsV9!w*;Gjɤ~udevz…~kg7 GG"~pUgddeT;4wpXxjecXB1 VŌQIt?U!$~?sW-t; ؊Yc`VLvbd= ՎS: 0DZL'Q2HV ߌⰒrd95uT1o(1MȝhKXUĉ|!nteL5E܎KFo9- K\wWwwS*2!z <4 J>@zqG\@L3[RS .@T"XC3P4 VS aȌhCB҈ԵUM1&,% %zx8H(;E > Le'MӾJZ1! CQz7X0T4>yh,ij]*[t!48rMƭJE>$u*jVA-#SNvLy;Ŏ>-@9ȇ@qi#A/ZZ/VΚ,v|U(4eP"_F#)! 5*2 ilVz\nnr|vk,M\c`\gB"u$L%bX&-qo"NgEA \ d0|Ybi &a"(EKGlbCo=mǯW7I&fر0z 7fcL݇." R!1M0Rf;$Tׄ )3JF$gBf)0 Vi='2fdL=UQ PÚ!Vpmf.fj0F ief!!0J(Pz@w !E U"[zwÏW%FCsOwޣյrB0V[ͤα-"L>yzh ==p)|@z^6R$ IðVꮄq4O㞋 lB}y|p`]FЈzUAtG}nSNWАxH!RW 8J4q#x)>z'H#2B/QM>gB'wZ@O@נ)'ן7ErN0p5>j)xck:N8g 4yﹰiI rg$]%tXw+{$+AQ^".2 >D@~,8BHD8\ :燬2GGJ6}04wZr7n[v\2]'*# '6;qF`|o9lG-We=m:N_WM>N|"xpx>Ooo'zӧ⮔}{u0k{p*d݄,-2*~嫋 Pȿ4_+ 4ΟwShN7UMhއVwO%5`C=jfE+J\O,ٚrmQ7fw귁  k恣6['*kэT0ke5wmNmY\YlN ,0^Rצƈfz5#_m91s S\h,-Q+Ƌu_26*T[{,߳SĞŜs i 8SVuQ\tX)d;4Z2‰w,s+eؒ\19mOwHoJu5'jNVKL])\h)gH][1ڵ%RvxK H>Q{9UpgḦ֦d^)c}=8/q;Ouy_:#'>4L>v'c)^.'zĐ,{©a}Q,c_I9CɠL.>Yajj166慴.[_~$w蠝;\Q x<gUfBeM8"TmeypESTYDif-L](hD1D%[Yz?| v W_/_ƶcNlx ]ĴG0Odpk40iVʈPӚz,Ժ/3s)9Mfa  `IDl"&nj׈A9;UZ։]b...OrMK2#׊}6H B @|NG 766&/g:r+<1G) Bb3Ck\սBqmyp Bp6#^ԉvˈ"ϕ'xuc=> cyIfMtm$Dh% yg iăg)PBLNv8dB6];߽iNI=WN <F |>o|͵E5?DRgO7o8R#)%6R27S Q1MMN?# ֱc0!(">n_~vX j f_D+V"F0Pm L FBXQKzه߀KOQum#ˉ\7)tx`~zM)+D0@&A,ӶzB[-[FE-DリxWk݌+&-!$2W%qN2Qrȯ쮂4ᦘQvC ('?4SRBDK*E,:pdkh;G.pOb*r(H~O\Mh$@w۸?tVF7I@b&m2 (Y;!w=u}0Ţ Ә%\ )=BhEh,+4޳ZhȵCwzQQ 41>(z7B$4Czyx1y_b҆4'nG@i_d~h DB2%1w~Km^t?que^kY~!!.({G*~((H~n.z(5XZP(x xCy- b2M7x!8!g%}Fᓦ _|eW;-rK/D2TRO!8 Czqz&ӌ>hrF(܀pXr TCB 4BD) P韸L ݣq!\faRD:.饎> 2id]83{(Es-lC;0N䩉;iȮExQP硠Tݓͨ0E58Tk4>K Fڎ(Jd:/j䗷ʆ̐ļE]{xXA}'Coc7\Jc;tC&تg>dI% JBI$XXU1,tM*tHRلF<0?U'6T[+[D?60+AnوTzeޅVho23r;opD3,.t:&~&ɂ.׻W3.;;骃 ԅI aIYAf7a[*n{ aCe,vKRd3f•>_ h >o7wXsun+诗m+UO67s &3v6T˾WyWg PоpuFVuQUo.BF#ҠCȵ +dZ$- )chqե%jt4PiwP}QدOÏd$!3Tf_7ծN<3qq$qi;U}SRyES e"CR6)b?Z1#{ƹW'I9FgX |b|V*|gP/})؆2Lνk /R4;c_ހoDRQ}6jSCiEΘ 5n:SԐIBhJ1vh` 0r#M:j81kmK~HV`=Hd$M62^Wg5}~w2&^<YЁs-(c%2JB:i DvmRZ=R;$M0hcZ2$`×-lγ>{+Vo^r-NvM3Cs1QNsSd 7(5T߭ 0œjLPH]Ƈn8x旰.>mZ\ӥFMҀۡt}IHB]xBrpb\IL߶1 Ju'w叵g A="t{n{=6[)Gw~{1.=ejP^k=D1z2AIr7'.k5mjPyN5 hvNS8)VW8_⬥  QN.J𐻉f_/k4ۆ`CCz49!yߨj(feKkSr"ջ÷iucI~K~wk G:wwwN/wI8S' GV%>:㘨voShLf[:e:(.gM:4Jjxx}g9gxq\}ҍL[|_Wp_B+b}󘖍EDa ip|.]S%)rYå^\:QZ;ޯP>GyLb"լc>.^.ᬲ|b$raP~qϖWN`\ s=MHIWM]aK 7ߺ'_S_|ƽ]5V];+_Omz*~_i,ͣh~0s¦d<<ّ\kU6et4.D|7Zs 1I#(FMV\m[].FFY~ W@VsQR_ZW8xt9xf}FR X R9~/!So< M,|Y:bZ!4V(ONt{O' 0yoKoPfٳI:wugóa5? ~Ske>7DCkY9٬j^rcYsC>|%zbzۏYPjBk- NNϷbW(Nz6D1N1)-{[U׾7 ˄lQzXWmD&'(ȫfU ~zM0VTvfF=6PϺ2)0%Ciؕ}E T&w@5Pia@}?:7tޯ7B<+Ͱ{PsJ-ֻT "BjZ3njN,8!%#fߑwUA'jQ1e[~'ј^nϾG!Xg=quS[7ueH}'3냻@y\j3[}gm*(j*^}n[} R1+Su^Zr| \ŧoeU%:!mN!m4)篚V#!쯮e4eiҾO@3 bZ}| ؒza3[n-73tO\|<}%-AH 0RoP` ($Cy3RWY7IH٩)ߛLlOLR(PCdz~JPy΅8E"jȵeaD7VՂc(MSdkœ3?7"״nq.Df*BWXૉ"siwIy\ 3i(+b jyM6F5G8%4/$+)N Wxjݮڬnj#G|L~_M_C= `Ȇ9Qk&\bMd?W0!0(![LRc=`3 11~$@>½n 9zӍ[)u 29#mn.jI| g4h͝L&LĒq d&(;Oxگk}!nhL1DKc?W?_`3%%83M3R30'V(/ϠM5B ܣV_U>?ɌlO.ywV ]4~zHN&= 4M4m6?4!:;.N mLj||ZT^g(*|p6"!A>6&tPj̖Zycʲ,bhfV&F$,3m “eeC19@7߇N^֨^+lՂN ˯ޙ& qh[#rX66pIa5/Hi>3H䘄E {?Qu_kڒ> 3NcNͥ=")v ]7o)OG35N(h+3Ιl$$$$$;ULAT5 %WLm%ז)ec`㍲KcDbNsVŭ!$vL!;¯x bDG~׼ ,`0$̓]浻?+S<Ղ0߿] ^oD9c|#;e3-(͏:flyW ']ۆ͒IT?oqr(j'!~(?|^T. 3'҂H#&Q<<ڰr "S0 X](+{W+D?W!(!H"azs`Qg+,׮tI cCB Ax g0^r-3.3~ے2(f ݐ)!C4^P &s|a+?H,46x`LrPr.fǧi9xZ5X7bv(:2sieXf-#3we&[qq*y]b`̘"FDp`O> j)hh(" R$hbej)(X!h) .d[g 2x!xNt#N0zwJ)o@ c3v h*]#4CePg㟛[ F022kl=ƻẂ/\-Hl%盖5lnRnP;O&ăru#U1x#e}8"؈;Hj\pvX2Q,uۣK0*eo[hk?)n1dZv8>#Sl c"Jh3oc0L"7=Kr 7ݽDbEcIM6ldum@"#·kUɛà \+k7B(RWjʵK:O8@0_.cb7B$_N]r"X)CM JM3I]XT =l-pJP ,8*'}y+w:Μ^S/Nj d!ꪳH21i#dF#q1;nueY=P r-scJj`}!G{߀O|)~y= :/tkަ6u*&ߙgs4ω2^:u]xBGɂx\*&ҿF_LQ"dPơfbaXh6-mŬ?5\#Mr=tqQM\nglY*$4t%UA_7wUSPԨƖko]z=hA8 &,`bXM֛k~~Ch!$^g;fNgL Fa(|_嫸~rO*9wvOJ@2o3BOBز^"3߿*(0ٽ~*LUrbȜz1kf *^>Uo)j{$7\oBSqē$ 5Gܧ?h$i.^VC,`:?;pCҋE#*6cٯLcqf*$Q) Q!sǣoB HQ:|Ԗw@"~[a8$D;FAέڕoXZ㤢vBA$LoK99E|ww%I$H OvJ+1Uw(En4OwŠXZ!nxn˫_:4 ;;oB`ԛOd=s}ZNGnc%aL3g`_8|o0,bgtsU%FGE&/[9|B/k`hm9ۈk;wCy>U%R:rw@긅_g {)5.EI3:'K(EhV&&jw~z~5S2FQw} KGkD)Oӥ5 ^軎EgAk{QBDWYۧ5Ďny!aoץ,loa2s=SH)DezV4F ;J!tIӵϧ Q4$sz3U۾ x8-uώ3#yt--SVn2-}-rmۻ^ k-Qqs=J{S8.r=?a:52EH&|/ w=<XAdmBy!G8xuWwF~CI ͹1z&|;{JS$$~7 .ȀjsHdLLkT=qh#`KҒ:{FfBV+bw/=sygA #۾BKJ6wI _]Ą [ #?7^$s< K˚N9-gIxw;* )檆-Eh;o9;g 'Z"Q[ao sG>Wqz5j|uL1j@ 4[_`Sb%ӿwv 32LeA+Ҋj&QBU+$ 1kK$Iͮ5g|CDD1kyq(DkʄyJ =gT91-J0PtCbٶsNg['= f7Ϻ:~O\]߿[%P*,}Vދuz2Ip;oy(CQRXɻ|wK]5ښt]lۚv\*tJ%SS 'f2q3X g5F; 2*@|ߚ*|E38!ZI{Ve< `O_;xTI2h'&SP7'UMr'3\m8rY~xC◿?^A!(T6vxښ=7z4f .4cDN.龎!g4nM$l"G|d5^8/l/`:MnssiCMk]1[Wz<{.}V3󜚗7;V}%̙F<ћR$5lm#ig (1FbR`Y+MȁzVQ-jCW4taF"te$].kM'^;{kwmR[ -G ټI Uqͪ3n 1D)|UZD V"a))i 4!E͚g2FkKC hlǠjCGÍ&w`9C&p1k1JeOm |_]Ą|:S6:uFAE{l,fһCp]2ցr Аxς4Z„PlmrB3]ގRx7s-|wvK;lPQzF9HLx;4cVS6ɭ;+8lH$CY{&Śkff4&>q5|BݏlXMs\9ݲMG=fE} ះʄiԀeE$1<}]n] ew}1f!q6HY&縐L9 b3(J(Hֈ1Jwum}D\z幔Me!foX˳em+Ʌ64% r1(A$K@4%"aZե+@3HKHM "/s2]>'y׭TWqWUUUBP$UX_N Nǟ&;E2wQ";H|>QGwnY4a3:L #dA/m>:jITE;EsAQLa:DTLR`)90JVAݰb/@"I L:!% ʯvqnpK^ZB;"usf[Wgai3 nXr9^n1[j  x&cjv P!2ƴ7sq̈R@^e#a E )<&i 1'{lIlҪԻHvB*wsߕrߙ5ʾQֈwl:帘,3̊fpBB;C%Rqߩso)1<9R"> Ż/sxr6i &j oc֝P,_;0'J록"akChȐv϶ڈTػ`=hCn>\(HIFG}nGM_ux0Kپ81^xλyKkyxKM+4;Uq;dydO YllW$9o>sQsOJčw`H5^߇olN],thk;9 0i][nEI 3 іNBszh3xK2ܷ} ̐x!4(쬞Y+l3kjt!,t36.age@ĄTƖq0&HcO {"y0-ee&ES!iS:hxQu5b\FM]vEJxWY  X0=x%ד/ gmӡ> ]ZU4:U_mfx2}C2zga=6]:P$WRQk~{+Y6HvEtyXuOX3|ufk~6HWPxc瞮7ӽ)c=~0G7:n::p+/!]\-,ׄ7\tPxH7ŵӤΩnNٯe֚x'+)UuQUZP2C5,o%ML pH%n80^*[q 1-K hkZ)qHT00 0% "'|Q)7#KaOff'/Ȓ RE6QK+wa3zQ8ut[>đ',ˏ+ !d&ֳ 8(4Liň71hI'3L4~> -1$(|0U242GF;5I&/Ukt}F>kZѭӭ6ij17Ou@CUc+I=X55ttj)Fuu0}ͧJXL@n5Fy[ 8Jn'5v%E]uSi|oV/?Z ڔOhn{DÑ%&0~xmCbp.1/nQGAeS?067<<׌p%19׏8y1$>IX13.A",˺6٪ A.Og\ޢ(P(Q>ĩsm$0؍ٱ]n|--$Ya*\Y$K;Α$]Hg =hdy2Oogs T+\Z pӯ mBPQa{,}򃱐:Dڇ*jw|uH=#âHcLL!Čg@Uzuy[yp#UU~INc5^|UUUUWUUUUU]^9Ç=! /}U_vUUU $zNH TUUno_ 0*yN1(ٕn-› _Y̩݆]HADte0s58s[JD`{h7QQT ,d8e#aOWCWE~"m%KPD{>0kw;:UU㢌;U6mU7\y}展k1>5}wk[4+flG'|_tz?DbDD%>* g0-F/ 9rdX.V!WV3aj1uD}7ڀh.\wf AnPе9$I$I5|"$p$I$II$f\0`mUzOB?zzUUwx=/ߕԣϞmUU^vjo M0ꪪm_7Sd6E&#( l'JaXuJyUU<4 l<K>߶~]'uxf^~y4J-?-HFfa2}?Ewfb0MK74Ǜ+G+Fy) Jo_ryβauw1.vc9$qeiEW,cEFO3CrIHJ܂AiV츸qU^B~9Jzsloa)UzíAS(K_:l(͸eJVݧ  ѡD* \݇p4Dvo?sض52^'?=m7n Y!Z|f}ǝT.|{'4ySo4jҺg]3m>.}0ypuSC[r[.WȪ9eR#,o9a\wY\vnN4i' >ծvIj./ ΄,)}XgQ3;BqawE>< К폷'K0.战[jM`Cxlj6ڝdNlC쉬6[R̨SE$fŪgG-vg̶$Yu 9PͰxZg gC{9ɣ|0q|;kj(\ҧ/s:e0"!*{8"ѯ~[5rr5îV' "%cBWk4x짙וհwy6A(&;hY2L%"(ZȰB 4>r@1ّ+=8  Huw4 Dz_ C"qI:NS /fr`1sC@6Hezrm%c4H ސ9w <'ЉT1`МQniFRH֥io ¡B`q9JuGn-b{7^(27\y;@%D , "n~+P8sp*իSاJş4X'6Y]Q4k{ChZ⇅ʫ+9FqݖfM+b=x^N<#Swr:|d+n|DƑ~;? *|*kq[m!LC]K4Lj)3m}xWwf, >+hZY {E?+lV]nlM>k +p\RʗŸ?\o?-:*Zǥ4Ut<*<Gz}˪;øYSaKPi_S~ h⢷u?dpEN|NTZNz7|;̞>Z<%8{S|]ok7us_ oνn%n3%(^0d7Ω^ۀ&5l\d TfM5Aauw짊%YZ#Ć:^ZWnD| ded ܌ huNo68s?}**<8}kdz~uUGMtGۢHj[tݕ)`i8t8rꑝS౎WR|U[(?(0;/Y_;_;op?µI_x`9bԽ=zXiH:@< C*Ƣc"A k39"yz*Oҟ?ug)ȟQ\_d|Gw=5_nߺiXK= uЄFi65nkmQJ'Ecz]49`S>нZ+tyEb9UW8J'5q <Sz6gE-.Ř,Z[`izsBfؿ,UHYA_[_$wV?{RʀJ /r%PS`¯UiMQyگr j#oXyݻ7>'LK^6e9;>F:MA#r$u~Z!cS]ycda)mD[&*tIx/0hI~Zov4RRwR5Ʌ'>w&Ì9晹L7?.}/zn~;U-wtiMߟfՃBDI" \ Of>Q*QrdzqCdzDԲoҹ[S eV$);`Mn_}2(<`()I@QS%ȜJ cc}Ҏ봛|-JI*6p" Ԭ>S0GhӍ:ޑ^Z9>UgeRqæ,<^䳸XmH2*ta %2!b{OW&A͙N崡[(^jBjfC\E o/aOCN؝Q3:(m)_]d1wq9bTF"oE4Y'1!jȍb*pH.P "TavHmw( $1YzE:La6#֩>)}H#-œxfl10 )Ae:tȬDĈJ -ӴtsndqԁC_."ɇfڄ` ?} U9kQwlf7kv1B LDQQ>Q3awqdMd&6yaH@;. PǾ27 ?$(vtn@*BBMj9`<AD/Bs硌0?1* Mʱ@&C IFb*}J Ռ? nޤWRϮ1TVcy.!L&h4 PK0v&I2J0#D3W=Ġ*mz5"aq,T< 7fI&R1!#x4__Gz }ÿmQ1 W&-Mtޖct A&>={+CFdRAI릝5.nqEl~?wISMQIK2bæ٢5հ36M4JۊG43U3#X m}("LP6wY=\( 5᰺n_foWɰLj/xn+L Q}:I{ds9RT`{`'D.cr$9[> `U2U)|Ǚ/6+ZgQcGM}OOW(݄,HtΊ a1o=,iwS vVzzǦTR +SBrwU"Zvdls"('hk=9*cda5|J&_oxsbFngU!6ܛo76NwzWBpv>NOeѮ(Ue=tyF5IInsGe]Te̕Uǟ&W妳rs? (ynTY-Rvexpٷka:w趮;W`zWK8LD1Oqe)nuU1s*V"Nx\f2MV!fLŽ1;j:7bg+5/zg8doMUeSޗXk68q-Hixh{n/R,oa ㌉S|.?/!8 ! Ɖ2t=h?Q2 *iL8HL%*_}߬}$"B` ~z7!OĐÏλ*Uj#"}pqs|5ô S>X}$fǩ?_C:8;#ny/Cׂ8ZSSGƣ/T&OZx)9[/l2.q8kGw?8z;EGY糺\R;DkH\5S?d#K~KOE.@Gcta TiWwUy;ֈLJ_ qOɶ54KauڸDJJ56eD"fE,5UHE &w7G pD굢Ăۖ*BZ]>MC+VB6J&"ENoP#+UD)J-&t+p)Kg%?B5׿pǻD,yKҴGrAW5A$&1?%KݭeYt[E c*p) DvSheQ5gIRRkZXtQo\>^^مdK9r]=zD:pCB!Թ$T>4cX@LFxs^7&=~o^2¹VYIޓv_Au ):?_fFы[y[H:MBmxCݥGq zİVR;V?l|O.Uk勔-tP %dYBw=tL-DpM1 "6xzK=GTz *Rh'FU^yxo ht %rB,7&u3c}Hjq"׳Ł5_tt: ao՞rQwt(;T,WΏUNTM1܋۰VAW*Qc4,b(S녪1 5O0 7Ԙ(*H0%%)T " Hb"H(*T~F0_/DhalrY;)ƒ7_ޭ5iEڟ?գotٿdTЕT~Aϧe>{ CKe?Wcm"K2Ə"yb A4j;sk0iI)W2::ӠCuGIxQ4.`ZL霧.,|i'`<vEW$ErP =2@#EE0T# :A3$C0ǶWJ~A!SIU(_ToFD:"±Pf&d a<ϳ̷߿BYAWjAp]/$7BCy]v]Y?N8zc$ה ?"A[ TnCy<%F@$#='~T4>Q>@[yџ c.^/G0|QK^|AOxR3>ӛЉNǨ p8 vA|6ɢMA %E(ʗf7>̵}MXV$>1F5$/M|;Otl 1csvbv :_k0Xa =o g` Ԕ;Ba crn5DDnۼ؟wfLrHcdmH!j'4p4 |7_BuO8k:1lG9h獌`z!0[0?~'(|'pG>XE)1=_m#)`8JVXa 0q1 0a B1(G@}e,@)@==s2ҫ? 4' y!PyC d#O`4W1A@ w9r! Ӄ3/߶BI)<<$Y&@7~ouQg1uoJhvz"PH .h/M6Lӏ0f ͮfV=qGu ZLÄibGtA񭷟3r^@8#22Y-S (H{uD3D6yrt0~2yN_Ɒyw o}0mV+G٪aύP3}xg3 >uc\LU⢕ sp&C׽?o#AM\ w<b䔌"+(m;vS--)I5L-+5l.W IR LٴCxg'g:pBŻ6k4[)|좻/2 p㧮 n5~!-I~jɴ{#4aLyy!2eno?=??ϷW><[>kxz(O΢|Q|, CK=>Qi) :xKfqHII!o_ӯ{?]yqUK(%q/(~at}Lv͔3εIɪKd FPsrT׼GSˏ7aE%sOƂff=o80Tlnrpљ[GWo@O٩?O_ ?b=uOC|-J}P31| 7AAtc\cx{4t>?%8,eb1CQn03TДJ$&K8Kcn&%ńɱ^X  ˥[yo1.88F)C/{>e *nmg> <aI;>SDAC1Uh7N_:*&bTLzn~piH $$LGJ {'Ы^^OgugqcjZ^;`J&BCoa/΋ЂRdɄgs6>6;+;Iu_tz"Y$Fm;a͚t a}>}U_.<'NF=Ѿ?j&fËߛ|}5w^ !y|S EKo׿Ai>N %rrWˁzde1[Άd{tvA䩳>}|K]3i4Dpb =g=RA=~^N>J?"x,x?Q]gqBvHaDgau[x';اv(ޅ~s"t O.A+K{6*|Y% K?=O1(AX<~vMi0 Lքs$-q?*9\Wnώ_'_=erX立P{B4SE9+tYW% 6]exG{(E_`F%;hv*蔻3FN[ƪ젖%=GJ?lՍ G\{Fm5K 8eENڨxh=ݾ>\"nqK(]L޹@BO)R_c[i|?:^j*3We]e7]TkUjݻN;w݅urYͲUQK;0fE0u~xuUL(L^rh{jˋM"13[Y_P`y8ᆰϪP`rJ)* a6xwU;9ӟӁoÒc1¿> _{آxvQ?\_=I}*&GW|$IF|1Q(K bz?o\Bnxm^lQWD`Sz&nd<=c~2UwO9OFVUtzOtWK䲪Faǯ*[t.>3"_4 Ofn=~FlEF#3T02>-gBz)ϰyMb腆\J;2.YOe.(01hL| <-wr( 6gޮf;hWf:,#v[_516.mKei} ;`{`664Kd AEtQGԪJy 4yIYh%M:>>ޟ&߯ӬlY2AMELW?ow~@:</G QSݫ l7rSyTeOo A.Ikx*7Ns`}-WsO=Dk ,J~yMIsL(./Ns"7g~fFKjL)FQ=:(6!/)茯|;6s֣/gժ-_ut.W!꧉B~|-M[%ܗGs Wۖut -Ӷ_wW-ÿ?^vy zoE?)}E#1K(w9Rj*\/{kSM>L X ɠCުWET1`ztl^\d0Áq35{sƟUf netZ[#ugǯuG(D $G\_sx޷ͅF=輹[ZuQ8mCo@B[uLSe*Ir\) .Cq*CR4 L͛ ei㪅LG}($lh+]PD6Q v5iO3"~eT*4=Ø&+9g$|{ _OC 9YL^6>L8iCTo_!lSuD"&mEA)Dl&¨=71i)!=LaIy6s,@==4˲j2A؛Lt~A ax}W- &4m[>9J~Ns~H 'Nͥ%wvLv$@Z! 2hFH}{z޸;޽i;vNu_+Wfm{+_Z[qt:vNq%x~[z*z*䊝P@6@|07~7ҀCب!怆P8ʏ\(xyA,ʇCC3~Ъ^LEwQEJdM5UU$^/kYjR{55b8q곬\TшӘg};tRG,!v7IUOD55vCK eI+m\^gyt=H](TC\]wfӜ;OFs^z%|l6KvUQ=W>+a1x>|'կ57$SG覯'v/Aʼ|НPB:2hq:#e)ϧ# o;7نO y"rP߉ Rrwxh6&|d#&ZA]py,f"qРrTx:!GbZ^! Lh0NƌFZXzz9yO2Qb?ҙDѡ ڝ{Z@~->^,| 0AS@h M˰,][3 mmA6G`5<NPZ:^ 7eA"7S։@fڛttt|녨 liydY1! =2Cf,#)lCI .)qbʘ߃5t.m[oL*4d廘p?5~#5HP_![@Vgӄ Ͼ|8v+MԙezS%*'5Ih?8l1m@}qGGA;& xq=thH5 \XLx~q {%y~OCt8i>a2~?u*b{'GxgkHOEC a#= ƶ̆_n},'~2ƲсϬt11 _]O) =XP\6c@6DCJH0iI9eBU>XSiHXo>) U+ޝENBpXhܹ܈BoN4zkpul?lj/, SJ!.GQ\VDݥ4 A$w_qmu |泉,Yn<`7[ob&yZ<` [lqY;dɝ qbHI !$$ 1Q14Q5TAdL???@B OHI`On5h+JU*ps'v7BEBPsg|se}"Omz\ϳxpBe: w\T?%`EhcB\Å8*b}AĄ2 @z>O +6c=:\?w{Yb(|ȑ ΛL1iqÔj]a6lO-h`;0oJ c1ټw$[ISK>Yŋ4'Zjɩ1@u:DBwtXloraǷxm{T{_ _Am}Vn--!}L1@t4@>sޘ!ߕdyn:^+δGjt rD۱=*~i&"&`FXd45_D4L1f~:6Gѷ BcZ5V[en( MI0aFSܛmmVs ۃBI@~$֊ߙ$"me]"A+ѡ1lC^H>>>b/$|wVۑt#HtHuȧQ]PD6IIcF 06lM],X_ vMO'A p+ifKRGQK~ ۑIS ;HEn(y u2 oXţX,B"?0_XF1 =RD?l{"Aq0 a`X =@8 x zxb (&$""O;P{< P8 B@Q DR & %26 z<7y!Ԏ3Zke ?6At) GU3A%MDUEUUDUTDTDDEUDUUTDUUUEUEDUUUEUUTTQQTDTTDEUUDQë10Vd#ô09neAH+t 9GD} ?!mg _ _b %WG?1?VY:f͂QT2ƪ $*" k2hJm&#L!5]mh"HJ")k,h%Dmyx%BO pz~/ζSU*$X f$`&aJ& HJYyWaBHSwnƁlӨ_PwpP@K)^])-_uA ؏9cE+1xNV0* w0Rdd`Mdh"*HػXHA/$7z_HmdG(gb! ŞItAfSb#25G oqme#4K^$@A#3aKE'E]Dz`{9 <LM˨22D(@Sa.Io5YB:ހbfg}o_;f ])Mڔ<a @ ] \0ᯄ* *~W6!d 3Ėso~װ2-I$S nQC0K؄'p*#]J75F!xR)b#&Nƒ$fBBa!j`b<.;\0wNW@&]4;UN[IT^<"L!$,#S Dho}6l!OIЃp wCɁ/{wA3AA~cCu ه\"3z ο܎M[ C>o@/9K Ss_zy<6h%&!rUo'?z$pĒ&f8TLDD 4E5<߅ -/5~;p9m} (|?/;HI !$ITM~6AQ=H8!K1&:=ޟz:tb _ҿ|?Cȿ9WO0X2?@~%?FUEgYCjN16v$ֶ5|jjHIzr@MDo;Xis&=3 3Ƒ?i'y O8X6 ,RT5LfRFE9=M ֙|ZȰ ZxÇb-B4QD,ŵX$&{ff3c[k24]BtKk`n[`~DC %}_{!'r)08ƛ~# j$V;݌$95چOK6S3iM"drHW^=G<(Gv0L9idaCœIAG\@x@ߦQm1&؅vak*8]>_iD;?}vGGr=Z' t"w0lnK?vy{ XH Q(H/X>Rp/i$q >')p,TKQ-$*ESTUUUUDUDSUSDQX+Z*#lEEUDPUEQUTETDU4j؊*"v4DRQ9LR6r9p=ctcnI$26BdPI3n,vdsZap/T +@f6MIO0'QX4bYH}G=.X!wO%I.x$%`BKY]iC ?Ou<#PsU8m>þ (6ngC{! x ^jKFֹ*G&<,G]~eB<^}.W=F%'@7h}8.9 ƛ,t&6Gɲ6Ou5\9d:"2!7=?Bo>w_G5)r觇 0w?O]ɾc4)ASC>,/{8hիC93COC;86OaeCe+aRfk`fb G,s cfb r8M':i<]}:\÷y^Yl2H6{+<Y-"Ec]ZfCq 5m3gǤ cZ@>f-O$NYxK40Y@ L\a}qh0AlBos, ;_< fG%eH9~4Q%R?Q@̌fV^JBQE1'QErz۫s Ί"".1AuV=gi%}#0Ol4:`wC(Uwv̪330 W{od#0DH`j@,՟>wUE0g&|X ,!BjG84`a?@;q;VPmzZ`ޓ&BSv; Y)6Dofoh$?ƀ1I 75nےvc7)Pkr駇Vw3&4@:o7+bmo]UM|?dk`{QpIpVdᴡO7ǤR썓k(y^A;HR} Ƞŧf6ZYkpUQMlՠSSd8mo&fKj4yDt!8F`n\z'lr߅!#얠N`sä&h!I]t.cܟrO*v(T{C,B) Mυ3xyzw{ Xuڗs#'o"p*jy؂O ;J[FbLʁj|=/ۊ|%y>}+p3[aoʔo?P|| 4(( |F>>BCbȉ0MdX>m|8}tGAH g#57,h-۱ȚL-A$lM[,0gQ}x Bҩ" $iȡ"$JO6~xJ<MhCit /hSowp9;hu` mXVhIW'Acumi=b7.Ǩ ?Βx zJbP>l8܀-z$ K7,@v=P6[{LC&E-aCCQA#JY{vrĬC2 ւl-֠w!jDFF<4!*0{Ji.B- uֽXMaD $6: #bioB9vh6).Vp]Twi8$RzN3G0T дh: qowyv37(>kz,ip"";>[l,ASGɋ޹}p$,CrCU$>ƪ$$A$䈒H$$F9#nII$?S[ BjDjeh % O}hCS֝I8t?'FB4b%[|RBj$AOr|6 M=%wr!K_)4lΖ5gl(/ڊNJdOLYd!0dj |8m4'9:@` cm=َ(#OPAE܍ #|jbRdDZVv ?0PbXpވ ,459,TRT8q'.lur@zQshU`nb^|X>i?W{yA(O/ϔv h:mх▚FcW_ci+ngQcQlSʼn:G)(^uz{O26 kkvzqEiEpia:ui0z뤛+: ΀Ȁ#M]MjU|Oك{*ˢXdq7gBup3!FG p֢i?TQOd{IcOYa-|!f#4AԋT߷$I#`G((G~;U]TEA?UPOA}|"9NJG^|J)*UcäP@D{NGw+ڃuMM?`pH sq?:ϩ$h@ ]WϮl!ސD@˪*mCNwou~ҋ 'OSw-~{0g>pqHe hRpl}%N"lMP܌%;6*ar`ݻ51`U>MZkbreH+zLyi(@ۗx_XD%BOAAaL~vW-r;H%x=pD4Hj~xL܂s =;+qSϮ=7^' qEK`6M\2(nɨDe)"=#mq)2^'(*<<½/|/~Ӏ^ĭ;3kgI (d:/'LwRںi~L8Z2lZi5\~̚?zu]?xqZ>Y'8$ã8Eh?PQ+n^iHex>Ý-XCztC3@2C30}?ڙ˱i@ű^q:xt~<}}= nBP D54X`ff (Ɖ"< /Q2xxC0O؁80zBgꮌ:V9*HK ZDJO`i^@ l_T>!k[P3ȶԸ/![A$P"w6D$YXZ)0@<Ȝ h?lP2@ي%( XNz|wk&J 2i3lRLPn%~sW!Z_rʜN'nww_.0)=f-% PX =_9'0j =w~oe{<_A1̗2m2DU\/;\7%-}:sd'i=$aei7ZaWc㋼ųSFf{/VNFݶx &YOX(V衙ai94e8:sC_v[`[?ƽb:X='_ͽxMoJxbqsٺ)`J`"BHx8Cĕ;CL7#br@xB Ї AS0~EOQ_iPh-*7rl!,5ŮAGz} & eD29UV{L5:,L0 JPlzUU$6 .}vnݲ PRE 'e[}0}%y:Jg'a!u (lcLqPC& h,αO8 g̒_YPo~{Ѐ̀l;xu5@E+`.d70 1(8ى'G?Gq_OXz}^|h A"c;אf=Ap Xg~Cpb~CXE{ޝ0*?Ws<J H6>&)AOy6.L b ưLEvS/=:%D$HN;gL7ˆ҂N[K5П5 95\sm=-4k*>Zތ_;r8g.(RYĝ"v3) 39^;}9t;v߽̐gV"lckasZjO r^8l 2diY2[&ṱW` _z]I4RwH`vz>OMw?I&sga{q{6()w=D.1ړ,pxAR73D]M`}cM9Ωv^b#~! :@{0`UXczr-*jNsgyjGȇyME^(E%:jD»;U3m}dKoF3x\kny6SޥO=zW8|h2+VτW<3O._,l{{$jؒ[eSTlƸ'lyPjWoHxg_-ط6ȷ'W3dZ*ZB2>'vq~007glhlrb99?}-џ)To4rj3hEYps7;n^ndGC:3_alS}OGvms*эUiě_gϊ|X? ȡt"ފ P&ʅ7^\{HqMA"lD뺾_Bڪ[;޴O N.%z(?}K>\ .@xHZ<-(EebqMU\t5R Q3`%*cֈChgzTGTA!JԵKwU%y'O.)! y=gw?k Ai 2&a1iJi&Շ9~kKۤ8Mw, AhٮrblyhLwݶ|[KT ֏uC -bexM΂}:^W>HF1{nGŴt fm'W_?f򅀳ywqK돓Η{EtH9wC); s*=b_wb-VK3Uc6;5ѣMy21h)o:dW\0U@- I%(hbFjہ"aA)55|rhRh:]쇴򜆿;>}ݢ(  #*JVypRy: i}qU UQ׮U~ |otnHO9Gt2LQf;}D(0៺ac981Öڑ&H-Cl5eOtte@9Mf ey3vn7(aGR_6J: [Q.C8~yUWv9*T? 6f;N} ?y\K5Oy`Q%>:NcQT^%{![R}i  xf7fc]&7Z^[()a3gݯZzl(gq7K3=USwU3.f"""&fng8-lm=jY%nKywKvmm&YzI/$|r+s_:GɞfRc/\:j<9Hz&^pU9!s7 w*m{I;XCL3%-=y Vyw]MZ WMHED|Oup_Q1̽n n_=9h^3f7H=<˪)Yକe]^"*{~nW \+s)to0tx$w{k_nGLzxU 8ӣNl!UoKU=;mr~d#Sfqi?|tMx:#9z|]o^a;u? 鎞HXM{RBhܧ[EYTj3~eǪlOKqt'N=ϸr[+;bOi[-33apĜk{A \±or㠚M4{Ow'.^^@*˫X|p$33w!_ݩQ ^Ri&bq2lϚtN歎|zm\l٧&º gP14h(<i?R;=6p #)b--/@oVqgc&S?l/O8KgVaRf, (4ȳ\8?ӫW xBGy?ttRjePBS]jUٯ/Gm攰4eEjbTml0-_b畞]T&շi &D*ZmS?m^E4uR<7BXg. 2MpJ9&_9F!,_⻟6g)huxu%5iv}f$.;Yo,< WtDOnsi֬ gF!wlAzF0Ѽ4z}z0'G&I>ychz<ǟD]I#騆AvCLΪx;(s;tx3SF߮xxnxGm|{j{a=xpɒ NjD[8)Jn{zF0u 褴bobR! (M;SJ??L8PFM̲@)ys՚lH 9sTM9(ŋ EхuģqɁ]J!pN8|I0ߗ |3 5u)gw )CEdTj~~ lCi1]ʝœzu@ -\cvm.Px- gI5 hkgP۟4k \b̥ӯEНB,H=; xjI[&F$*AsHo ZAmQkmdމZօsJ [_0f:@`W1>;Kj/ll>ҭrkjJ)~g7`X pGcpC/6CAU!uA \L̖d4r?Oey_pT6kЅ:N]ufI4=$&hpD}N"Qs]KHLg }X|/ЇhwY}uI:sw=ں5N3g#EuRݷ@7i)CD,,'@{HdE={GHd12Xu@0w! aZᠩ`]& 9@LM*Z,v8A8| 臧AQTU$BBq›)ax=q,ѹlJ5T@]׬Ӳyn{'o4t" #Abɗ)@sh.j؎6+dR(QPwuQ$¯ĥ0f6;}sx{oiWon@D)( 3^{kͦkaߓ6MQTEHI%@#zc.OC W'D_$:Ƅ'SGl!\$d!= |`:BpϤ']I@xH 叚cJ !lT 'ڛG #or%TbƠ^Iy(L>&GkC ~7a%s,(LZ4w}ӌH83MKh~ o8\7Bҫqtx9o>g!Ap\J IY3 o,X3͡e`5h̀ëTo uU}GOb`z-~LU2 /1H?ɆL`=}ͷA~6)b3XXlV9`/t.DѦAgH=isp.9Y ED O @Bvxafr:piIs:(7'l$^UcDQCla+=s_Ϟ3]e%G72ޣ 1SAٳ sf w6 mUhkgQ7mM6.U˦ ", F@J[`@ǩ1v{7q0Qc!)Jnpy% !,i/Ow3jK$n\ |]iGXz[P F1llIQSce{-RZ(A{o= (@'%L] h.D;(`8G` )(|~N@C}ɉ d aA`2<|w{p bSR @@Ё #,Hd*&@"Krt;R%F!SAJHR =sЧ+n! ZBoiR%2 9PSIP"A"}ym CB9|(ٗg,,,8뮺뮺 Ɓ>8">2dH=}gc dAZO- Lx(xS2 1EEǘkk3Lf.H48?t-$C%@LQ}B& v۾B{^sԀzh{/z:6%g=<@W>_:רhtd%}̣m=P?Q.dMa8^ ʐ P!~n7ݩQR85EF QR6ƨAXF Z&:Dk˘pt8H8A` +'t%úP|Mi֍]kE46P`%*EZL) @qtQ::t|$?Z~"Ϳ^25b8z$A$@A$= |xp_Xy^hxx*ҷKi}!5zbVRg`l&Y!db*^P)"DiX`Z"XXJ~_AD0IH}_:BR}1A=\ aZYiȰ24 r@""&)h( bJR(RHTB"*)d"Yia)j*J JRe$IbZb)"ibbPj XRhV&d"!)*hh 2/ZY`à 2QEB4#HJ@ ! I H$i \~huҔ}!3͝h:#:`y Ҟ0\]p :c"3oqhf-"`Kƫr h% f&V?*A4ln46"@AV3 61 D3Hl|QzNY(`?OUDSnD9.X[)!5~"?ϐ;c<wz@:*'5 hQWMm$E 0 0531bWz R|1 Cx7o@%=GE} Y`&( h(D]:ȪCȿՖI[· uz$(ܓ1Ϣf!k8@dfE&\uCb fVBp93 ;(DYdԵAFpf\u?z.Wt }9O5 $ E"Q@Ӧq#6(;zyBvy @ (﨟gUCB%|efR  B, @LQ" 17HA-S,Zȋ=|r\vsa1Gc0K>(zQ!$( RB$=@ $MR3lMlp,@AJ _ˀ pփ؁O"H*!BD Oa9B* $(*h!:5i=~=AٻߑzzCaBqfDXPRx~S 0KՀˊJJJEpJUET哙ɣ1 ua·Zf1dsV(}rj<> U$ 7bq@+%l1DQj "hbRZZ Dz$ X : z nT\!e&:Ŭ#!)W @w"(E¨uD{\B6JS K SZLcڎMY<A4H_3o'a 0ma,5G;J|ˍ=Wni'YVNteU'o}85֒>k7#e(]@He1tc8i7LV:㊓b3hll %l"iNP= !^*0LJ33_.=l+S E;1a/pM|%**hNXQ1<@@DJ""NY;lwa!sH5_t!ܸ .5S@)~E7w~ E}Fj3\9rU.)zu3CG< ^ڃʿQ^yJԿޥ]5twshwZaUXY_8us޳mcdc)g"#4PdE`OncR D]gy_p9s:{1064s*.&H8I&ҳ-geV9ˤ1 A 0ƣ3FHgtNT6{Pq%Bh\'n؝~pɷzT9|l3#5ahI'tv,Ly! ήj&< zDĭHvHgLsMRG#Έ[s)"z%ԑyÆ]Ӵ2g3s:Bn17"m6Q}ۜ&j$,pp1m=w8k+9cW\GNX*ۘM(Ctfn'6ٕmws-t~AYtܧA .zx&y ٻ@y'Z gTdK )%WlmΞ6%rIQ7t-9 oҒ v[O<< 1ql4T \P0H&#P'fF&a$1B*۸/uVr7I4ɣ L5`&rD?BT|ӘTO Uhȍ3[[oYےMJ !=[4y-Bzdx`|74%+j`|QS螕fa'vgnE5ϞaѤi .LI9<nEYI5cW[ 㓅JKM]VIT雷e\*[IFRa^5Z--Rhd8$@Y7G{L3LƂ37}W#ORmل)wj 74ucifHv\bStBI Ǟ ~Ne1;FZռ SY8o/W3gJWK2]7WؖǤlGaocǝex!ps#a%;CHDRj}2 6#=낖sR#;;#d:Ĕbr=]ě΍6^C*),:va &hF:UÔhHc >LG\hN"C} LJt\$.s֋5{v9H#ZOD\Lӧ2&^ﶺks=S!&LKK \O-fQkq0$5 q;s8mwvp߻>>!0QA }Rj J~=ICC%nalzP|`w -̘1fBfJd&+As KqȤh^sxFfզdt뢇 =J~Af?+ӃPxmE?ٕ6( _`Tv{,8 4t߂L0\k"/.<(sE|׀(Y ;uLA+)uuhKǺu*z;;ij)A\D61bcI2>9f[F1\!?r C %s 9qA&%{v0 ~1zrR$( n/B|mub0"h-ի؊R5T'1 !P3S4 DPD4U2cF F!k0XU~~)tp!0L8*f حg7tGK\lϨ -k^䷜G2d1 AH\В+!3/Gg!+(XD)ZJ3lRol LXFU-,@ɢ /, ǡѣ5IK!5b+4 Qy⺓ǮA]`ָr;Jb( "<26Obe^1# s ĽY/[ʒi&i`?vy-P+&g=gz~R(((&)Gז_ 0R 1V`:h) cg^ 'e` >}cc?D!$o_C1H7ka8.:ց#P0 usi Kvp{b:[ʯ<1>.]/;9xEspedv][}403  ү͟}CzA^#^ѐ*rQ31I25;QTARD0^87[AE$߁y02C2L uj]'E{ME* hZ[/](Hq۴x\J3z)j^<.x^zVe=.w9<3YK,iIluJ!T25swu2Aɔ1? ɦXg(%Į|G2Ƽz"zTɾ%ݚos26#ku+M8;ލ>pi {R9Z'trb8I)Y'|{qP1D`Nu/đ@u<($}r=qes\6nS%ڨgqDL1mGS5cqK%ah54zzլ64w Σᙙ^=mPy$cz{Ɋ"*񷭈ק5ս#UMf)ȉd($A(ۑYX+sNz3fK&ع>#vh2sNue];;:\J{*;|X|!B@3̥Ⱥ XLj;uäK^n3y5VV#! aDD3SNIz|_L iBqtBHW±{z];^D)9D.deo {LACL:j?"6f<o>=^y"9a~r(" i&|"hD&aS0 "、Ù0`Ao I$l#p $X"1sّA:DB])Xـ ,|jɷ:ń\>a|G*cR2iD)42VJEM0Rk }>ў-{?J`)A)!zӵ=\L# ^E|j$.*m<ۻ ݐ!AGO~0Ɖ"PDC?S AT|]Us4зdӆ;? 7&P-hVw7b!h55kuĚ˪,bhe[==<]3%&&;rhA™&T`"MFbdfj"J0li έVzaqIa+hҏ L tQKҡ}s2zv }RIeL%|{;Sxnu(|}`w@gIc9`DH `IG$FDd=6[Nя.+$!e/~wnǏY[ U<1!SɎPeE-X$'uWHPB@M%$.^$<Ւn$A [oЁnp0^2scT;1.YhJۑC(J-"44qx/!BlJ4f0 >'0Qf?G7h{92a9/1NEE)Ϟr|8,NS:f1) 7ּJO0(#Mܟ+h􃺱$]]s"I5GW- *c1S1Ҋm=u]u]uW]u]u^VP(mƑfa2f0s9,qBY`XVXX+kl%T\H+BDbJ^O>rn͘mASEb=ԮSPҹ$4aO4BI$_<ɾ Hn LDQ1)f"M O:dC'I( LXp 0YEc׵PRHR&87rQI$tnޅ&9L\ hצ9?{@)DI❖:obm0R 0mtw<Ƭ>׾JꝷxMHvzt&J<wWGpx}N+Kaq 6QE4>n< %#߯yK<]RRYĞbo& ŠX:("ym͝d@DM*#=d#l"Y'ks~6;ސ -32϶|MmlVh*Ht!?#iFz3hGn):+<5V(z?-SdiN[PaP~Yh ~cyE7G/"Ty\]ut(HX5E*d+&٪ 7 PaK,`8&%@))RٗWVL&t#wWwq' XhLBd);<`C[-68,S H (s vhB{#VD{9% YcM6R&4cJ`:7$Tlbn:6Yʡ$ϻ"WPtsx(ЛEGBdOA| LM_o.jPgUWJcv=:< 1O}~X}鮛"ߊ0Qr;Itj菚T%}#Fhb ;1 5ӡț/* oky̜lE`Q?!w ьg 7}.=gb3ŐH~0!?8:X`@(H';/3ݗtc+XzIs_φ"ݢ `we]ck $6U&`3w;DyL ˻~=5u!+R*FMCd 'CP$p˂`lP9z?Х :1(DByD VO=2z|֑ ޞF֍- Da/f#ՙTCDNabE]/X324 \Y[@ a:4X;hϲ@tA:b8v* NyIiDm TA!UJ3[M,0ogb/`ܲ*==hA,H$'4lBǫ `p ڛ0bB]pPzgȔ^x3#^[B)8B|=) iF6DŽEO:Gq$ut"ăB<'XO!iruhP=H 2O ((OEMyGg&a>MVl2xw7p3Ya{&1mHUѽSa"ʨ< 6ߙZ);{?ZH)s_#FL׾F :C5pI0A>O A1xB`1=TM&;8RUv]BV%u6Bڅ e#BLw'}^"vX~Œ%AćρڵDokg{ô_EJƐTRZ)He"{ٸ\z \nwqsqA$j)M eFLěe97|%rՁ3;ʎH0nx2 M}]-ZDh;oe_7"t6CPQ$Jk ]kG6l@Ϡwt%*)S,M%יB"˖Ԗik56$B4I%.!Zn0r:-w&m(ڌbfattF?6m$pqwn-<{CHyy1\-il-0@v!ڜ5;1N t|]}%d޶W&:mEcrM.f͓O54U#c_L 0홞yg7ːVqH@M[&}p^vi*i,Rl2bPBX PMr k ^2Ayq_;GIC&m=jl賧q fh6q:$a޵71MNQ;qtoKC!zu~e18fȘg Y|3zHz6L`Jf#5?޵Dj.b<1w1ϜxwQtX1;ӻ#b՜SJ_eM9oU3.LBkdܤLi"HˎK8yP=ƫƣ $x5Gg6O Ȅzdɺ<1,k jN4xud4+\3$"Vo:(k&kAdߧ7@ohnu _x T{Qpl㨺]6 B o5] Fv6I.]ӎ.'˛Smp&4)gsaF )c7|])ZAaN2mrAR ߇X[Ӷ xG:Lm~Y/}Nk'wwq'wIwuǯ[gOBq'?qȎnt|jr$?!MQ3xGуsq [H-KV1 M8Lu #v TAGF‡IģM3&Rν_klB1)7 1g{m[君xb/SLa8&wyї!ġDjꆸ\u/nҁ/;8'N'^p)>x%Ďxq wLwFLzWnE̻gO^'RLҔ;'̑L =R<|Aoa$^^}p vc(tQRbQF_<#LnǙRϿb % oiT7DJ.0x|PÄ1F } ӻ#$ق p{x 8% r'T8)oz;uȶ`b(F!$bRS؇LcOCqf.:>S3q{ .9ÞM~ifrJYyJ%6ӎMDLU 퉏 ^E`LclF8V2cN8j;ħd"("":g-s4}Dܒܚy_s k;|\R՞?dP?9ow||Iès (xk4[[MUf"Re7:\46JR_Z}1Xza'wwt'www[nIk}''1Z1R)b`v_S]Ϭ;ѢWY7qYhPz1}AGKXMSOfuJ搽ǚ(\dHYAkkkōF"(Ir0}}, @IJJ]”GkGXߎeπծaS"X ;'[3ɓr%0/kjP~y0z3$|ELJHEՁ+/=toL>w`ppONJ@\hS Ąm<^ln8u]F'>w;1QAi(ᆪ/)nYx_kUlE۴m0zL`{z&4ǃ\IfU'c=V牔$Jb<dI<ϼL-debhQ4xuq`;!31AݏBtCZܽVwJd-̦h. QESk q<Ꮗ%>u`2^8FcC𑡚xX"͌9&RHI#ЛxxwR{SѰ NYp^`z:C&@X;HBKa朄q3$@H̱.g>gb$)0xIb=EaEIbEx&Ⱥm1={T>'Ggʈ.clL9j90Hxp8BD: 1wH],ROh/e~spx0JJId9SO;D yF U -,il P}4>EIcsUto hb 5G]#9Gl! 2hˊ3(ӳkYED g ˎ2boC.P>poBǁQ19 ݱ0wvxDN9ȣȍ""$]nA7TȲ" G&7 I07ڡ(w7FP]Dw:/K_n?zȨW層0*E IQ!|?ǝ@,hAz&CoxO10[Ic"d@ˎ &Rxq$!|t!LcHS,á`ē[P Avtz d` %@Ԉa…f@ݭOSVJ`V"bfbVEΣ".  L>na;ᙾP3GaJx&J`0Ҙ1Or-ni>B1{|=m!r!*8 ˨m Xdyy3o2BͯmhΜt)LI@V2H+ϋό^ muDhbIbi042 PLI9h*.yvΛ*dBLD:X3Nd$KN⮈b)6Z&%噊Իhnwf :#lԅĻwɝ΅6|GH\'K3J%j AP"R+ʭZ}S5\u xT&$q"܉{匔E/.QϽu}ϣ} *\;7~~qTLGvD]CHlcw+3$UUMN}XI icm Xp 0Q׍OQf(ncei32pB94N@1affh)cmsn7ꇈE2Q)D}vO S$@VKH$f9ÔQA!~@NA!š !)U(E$TP_ z3?ղ@=b 4H{U_v>#9M}D!(zbUPϤ5t+# "۳;~h ?*34-i"oOIaj#4bo$Vww=?I{ zHapD jzVCmr]_lK)\Z(3`H$ ?q 0xzlZ)^1Qq _}w0aIU͚[ʆg g7]@CFBIDZErG%i!bz 9 `h@:Lf}0$&ɛ5, rd>G~Ȥd!r榝3"bP9\>qp=Ļإ" q)#Xy38)N&a:&#\ƍ32~}`Qpb?0BPj*X1Aǿ噠zLdle Abki iSM4DDDEW1.!2;B%A v(#<8c>`9%mMWnm@r(߄Md abMT<y@a E&! BaZu1gR!ZQi`!EY% $5ǩ(o?s ȋ!t>OeI /EAWwp<"_uAE>-e^]ƑEc 3bTp.&'sS10=x@@ %$0CA=^`=#N7ײh{z^#v\RN!eGyQOPhJ J5J" 8lnU!:8cMtq@z h)ٿo"H9޻zŏ_f)OFjaOj>@ݼ":@iC9R9 KeHTnh" /h ,ZPɬ|/zo}-O!{kxI#E);w'gs@2ywA B #xV(+|UTr;y HU`PqD:U)!``HC1^"اm-*(4aMs;L04A!XRM1ZmBE)A!aJc6M\7'r:!;Q#5Fjh45PBPsp4C'i'v" u#)77EN :UuXr0*glD:OJ!!$5rdl^ȓE1M+Pa V@cWH26Ȅ hKLQl{7&Ŏjn_Fm霜d'tJl $I{ ܩHt|xUT:*BVy AzV2 r(PAE,=69'3@>|RC&i` ݨ7+ C8H}S=Aۻ6 &e`KnM̚GI@pɉ@4)aæbD0A—yB#;uHlkzT-Eq)lPo[h`oD2hNaP HW2 &ei:G7 { U[qԚ_W>8Ln6$=@{Fl$W(20Pwyz;j[GXɗFj{60m m<V6&VIM$TMP$ѐ)>V@ hR h 4Pze~5xH5͘䃴fqf&~ꢱKTa9zMp\gM2g˦B"bLNIEJFʘ5tKnۋܬpq`c9P/CW oa[$ĉ:tBx2a sx$$2M,Z]FV4C@MIXB$Rޏצ.V68q試KAГlpomRI'higTVV kz0+o6dkeLcr%5(1iͪkx ً09GE']f`|Q>!P=OexN ޷;GsQPxxHN: bwAwVQha0^h&tlquA]OhNB!!P` DDPz`WHPhQ[*UTC2WK/6b@KItEΞ1}̊214Y&tQUWJSC?< s,$rwdfy\ b&V'3j׷)$6F1e 01%T=QQWl8qioΊ#Fm!QX"!! z%r*-PS! UJ@"%$J2"% XBDab"Ta%E b\tS~?/><11vDZ!OxQdC \e_;Ow;ȓ(~(T!BD&` #!$ H ʠĉ4Q"P@x>N ) PANac&xPU)KP OP@BP*ӭAHe!( ""JT&F QhR Rf%"$AXGCA;^|J~}3^pX޷oEQnnLc39Eȶ0߃W$i`q%`q ', p\H.IPDC=9BPN# \ Nn[)6|1 yZsPT.)PFdJMPok)dC!!, f,1)W )h1 vk A b3(%I#rȲSc{jH;z)7̶B>]*@VQU} *_mďzPh7-xR<BR>ePD(H,:Y_aDp0D`IMIqӂRxԡ)9F:`<84%_.AD|ˁxM@HRL(Y2ͬ4Nn̓l?%OUl}[(WoaC%t!44t~h@?D/G DEe=%P"z(J &S <@Y<0 n "PDJh`np݄~Oq9h}qtUeLܥ~ez·|j>LCX C0CuTP* Eb(  yB( &j)B)^eۨMQF%P.N SuT=OL< :W?Z !eU;;qWL&#`$I`lX1k_9eknQUqzzMd8p]DшqPQBr_.q8 &v3+A-1Hm2D^BDX|,/CdCG;1 hu0Rx́a1Ds"<&GSlDk i)t@ H!TTx PwZox=ii{;C~3%'c +]&3yEqD"t,g|p}&8@!$!Bd$3@sDhɧ $B<{ܲ qgu9آXy.1fѨ |#~o0~~/*VS;|tFfyby|N_h䂷 Rjt Ho7$9l>zwS0?{0O{Mq^}mZֵ^@(8#KB|!(@SOyڕwG@T> #Qٸr,Rr,d>1GLAz ON->2~v+_k,C'ЧOOqqcaɠƗ l$& GU/D }Ӧ0q٬4HO1]hPWj|HǞ[XP 'Îʺkk$HHA's0ɇϬ]${MulDdv!nѠ @MAL bBjaBW?þث·m$j#ޤFEkr0)4(dܨ3\8fe^jJSC&g Xl#{,bkr|^Łp-;S;2Gd Oնeȩ,0ޮa^ ÷ow>͛SfT5[WR<#';BP*)'{@wYx@đ ~9аD!ip8z}T!9۝̝O N$#{[9)̚O_o N;huCx|0nT92&+0h᳇ o፷tT䈄nŀ';kt-| TAp2 -2v}e=HuBȞ. 5+D)DďO A>~~NǞfub\ź\43HI>T&Bh)G7 9B|΄slUA)  ;q.ɞ  Dfm B_w~}?w?޽kZֵkZֵk\?F ӏA줛4.5Hۀ*f2"ǚYx%_OJOw-|B),?c= "(h ##%hZ+ "7!{  /9ړ¼@;䤡 Yoi$MM `pEC]G?GXB.!5!) E+sA+ciMT;' #;ץTv'#IuݨCÙlCHr7q@[0@4DQB>6#fR \!EG0Nvh5.X<gGU!` 2Cx*hF` )Ti0 aԛ1>vtHo0T:^KZ[Ҿ$ ՗Ӽ `B lŰдpC2M0ہxծa\v>5L(qUBBc ,oZe45h1y;ً8QGʞa8P:1fÆaنAD;**cob>P+@%[=M5XDBr$H]Λl8RLԠBP B,bСP"˜.ǃ~8O'X8E N`˜B Μ%!j+Rv3^iOJ`ETBB t&ky PEٔݽ,mG)e5918U F慛& -aKkwfOHa-v0-@`@Ѓ)"R H-*+JȮ%J)@)BR)0Y<=j>AڠyOdߨ.w>+>ހ= DES߹VEA)zto?mݻ' n]p& Im>zD\nH66c<(tm͖;b"JOMk.:2$[Ĉ[` ª<[NvMxO0~NnG[m𵉠kH}G#zT ܁+cE&G07/A8YGPvQX$XR^TlzbW`"B$eVMޑvHV.5Aջv,"Dւ7{'+$讝fvPbH "Ѫ6@Zz" 1 8Ů}N },~ )60F.%LMTۀ4a]?Tz4WVC԰3l~i7*6^m]~xM7EmnUtB}W1EARxG@hqbiԑ@BtwI+o82aRP{f6㠖g%vϦ_7jo}ոqNbspCX F?Qn63_Ǫ'MBTvjT ǎz{'_+1VxC.C@1ΐЀj 6~MosHbD'oՌh H n=z7xb)ó]өX*"Hj1k ` ( ndLU@yq Xo#r ACy$h`"CAB[vv rQ^w%4{8@z7K?sDUMD@U]@CAMby a$t2)oA*f9$AMsgp|v* P!JҔ2¡@<Ɂc˺5 9ZѥQ DU(W> 3-[]08w0Ca^]}Ub~oaD 0+A`` 34їiՑ1(&_=R owOøM%$1SDQLQDRCKPD2IK2$I<~7*pq2H@DNUaU$,,owy)+y4&!um1b`:? r{G6GbJ rw֣hX t DRj<ւ,~agf`z5^ [C$q^ pX1kKX SZhc\PF *;;΁<=`S%*q;%==ШU%8A) szli20HvKQbF\̶4 1 aog$80cmcLP[1A㎔\ `Q5=LDحZ:O;<z$gN+, .6*AW嵣%)tHJN"V4+ +0hm Ĥ壊\)/UA }on6top/`b–-.e CCaJ!$$I4X"J1pJ&I i bHJF%2$r*(* "* XB!a BbQ$%JPHJB&`(jd!)I "\N$hhZ}&כCTW:)txq:r+"`(4`=2`Qwp[rl~?rQ7txs?(tzp#ĢB!] 2LjfAD `w@H7dMky&|<[oڅXJ9{ZOBR @opd &eƫ Dmr @]VSƭVک BA I)&?*vL#z>992 ! JL(Oo4@xͲ$jlb78 xh0!zu/@'XcH`^ />"m@t?gId=}rPuf(٠%V {%1$IqD|s<選Wm~1sǺ,k댐B":XϹ+ByĞoUx(:@#!ʦCQdtN!c[ro j8nހ-hV8i0t҄nXM,1_}1k Lj\}1y}a|V,HO B g''[&@䞤'\BUJP̠&H d$AuIljd r'DͺIјlVhEPX,JXCX{>e`g=؈@! U烦6le>O|`^z蒃lgqyl*cLk\Z1641s^͚ WL f1– Lj#a4:~i/׺lm;+[k{M HRC2@,JHK(qyӘ&R$]*~zEJ@"UnX߽ǫOp"(k^BT,ׄK0MM #ZGY`Pk$ qz mu0F)Tt3o.L\sN|UsHP (& \T-d,ϨYRemp ~} y8 PP 2.UAi/ k!떝c{pr)9rLp&9~P( I1ԎFX@M(@t8I 08'1dEP@K0@LD1TB, AJ4LD 1  J`/X.R+)$ t^T_A/! }4ǮGouhq* ffhֵ@Vdd/D"PܣB?QJ? 0d _p*/n$ JVH70JQ!JhF"q(LTPD0P(q 0PDDXb&T`L"j;S2II&bn?LpoFR#h)z=Iz~i$JD7;o #ɐrl(azY`> OfI#c?ͮ(0%6= ~} z~\z !% idwsz3*jH M;C> Š#їm4|{LMI@=X&&KWRޔ:: $ U#\AHDofLb)tA:]t71WI@ eH|C^ToaD_:E<hōA| 1?7зApq+X8;a\9߳_zE6Vt$ AZWvc ?N/ ;]yy?YꈮgVS>Pʜ@9sSOw!A}Ӵw #`.0 bZCOq$ie 1kKCZ=<^riPM!n8U9QEPe .qd߿ke3511} Ceb971N>eG@L3{5UȱmV+%;@㒥1{W1Fr\07hD>2oQ e[M`5\=S56ʽ>XN;]T d]Y2F pQ<8݆SK.YqNjnG7+@7踒*&|B+;toQP E{xkF&7njA3cBJ8C]o)]6l1"$e 2[@@9w4iV33*0OSZ.\tg0 7L9ˍlGg7 `ZC?Wja3@7f`(`J f4T pbԀֈhsJDh SE#E 0ل 6N2HppD)֧Podcպ|%PTT9 nS+:ݍF\5̜.rx|zBS'<N74 5]ß||O{80;tIY_g9=E|  iDZ?L(w"H'?;r$0^Ĩ$f*s7ʾ=wc9 $$O3S54J,ȂA4 R@%$@A H!,$Bȑ5Bba@\#A><̴ab:a0,l SmLΒqŔ'A^j9*T;HG;홀Bu6mҪ9U+?"ߟ_GfSȞ{;EQ<cN x-K:(zOT"q`XrT4D \#;{M#">5#"4ؕs?CrOe6Oo `%R@I$4EA2D( E`СUmu^\9p?kx.*Rـgd0:! 'lG͝d5? *iٽ#4 AFoJX^]D(Y0ElHQ5N'Gd&n! L^i'~=,]M9ReHd ƖFM+ O&Y 2%aLBH:kDX+anyM0,5綻CF@jVڈjE}O҄kM1;I) #/j}DK^ 2e  d{9ցǴ;:*q/ғmR>o?fYN 2_z,nqbDzO9\|T8sT!A+Am,Z\KfgGa0/TYL1]M-*I"JH!c:~6:Cs8 HHJV0*FI->2(Ѭ,bEfBUd2r 4(&$DUd..^8,0DW{0C銃~Q.BEd t9]4 )B?+>|N%=AMktc)F@_A#b#DJ H`I- "q4]WW Z!L TZ$wGSWPꁃg)@|@g'x*d 5J;| FF'LSKP,|˘yG CyƒJG[Y:B;:H*GDPMId#%LlV鰔!ϟ-I߄0H)(s ai C[R/]­XQ8P.(?7Uzpa Af~{L!nB|ǿZַ#]s/G%[`-P'S.4n4/4=Gn>y׎,c4Kf('Γȁ+[!?!# G_9Lrи~>;$bce4;F  ,FU_B@9 S60!5 HQ"A 84F*0L# 0 M X4lGtISG!孎D og[}0z}.Qq3Q _zr { miPS S;8H3. ^:bݘ!・4Hj*kp>ז${gxiObG X& P"EZB!ZARYe 烇7$.˕*ny= - Iz D(40+1s_H8_g^ӄv<;2{gV`9̢<&laF26쉴B<0n`c$E-5Hh HB I*Z2JPX KE4Ԡt#}RP7yg9| AI:w㻎;;TTVg}I<:4{h$ icIa>yDƄi-z 8T4_]tG>4[ߓW4z-(bXFW1 7 Wࠉ2<~SWUP@@DN"dOЌ<}>Dc=G>G&>JhO"rOGq^eﺁM7E/a!.P07_"2S1ā?+YrV?ە]=ĄB `I?]2DC ! ’JtdKȱ.|iCP$!$>#'R +KК2 l`LAf }DWƷA͟ z2&'cКCN˶|mY?T^@&<g׷gW~ie!\l]<[[a =v_=^_9Y(Ȏgf2Eq_XyB`:&<>QY$"Kj!Qh@ [1r5 |mx-^FpCpl[7f( 1fZdѠmeFصCBb&37s+&$AKe#rhTY m͛&q`T,pH,$fx%iqdFdQ&6Q2InԆcMX2@:'r`}\&[8kl77#@l0{wi^Lȓ"9*a&:iL$fʆ~kF, xaZmdIrBPVyBX@P=\)J'BmhFk!DaA bUɾYSG}`8(ʼn("0I+昞:-0+m@ VY 0P !H.Th:ÿAt"On``wA'Y_s)@R )j9)O{oGCGdiF)CBM(Q܊rP2aH+q (yPe@I@)EʊЋ ÐkDA ==5PGpӓۇt.U^.jTiH3v(qH!{}~ifZhx꽚J4ƞ&!DM%!SU<ƃ5 5S0<H5r̩L9q4DTcLlWaVԶFVskLKxPSGUXzWcИZ\1*iHM }0}X\ r b!LݍAz]a=QD`i"$wy2b9˗1_8雴5`{\z{6.YxXKHLf[eƌ1$8{)KA"!A_(>R}ZmZd5*:{oT6v(l.#:N2A9O40000P0QB`: ~Oa1N@ €WT@TtyGHI+(=>Ȯ8LF3Т%BTC/x.P=H7q첚Nu w z ā$nJm?['3'$A#,%dono?ok`BA!=-MѮ~R}P.:do6u8I(qY/9 .~;#z}3`h-7j;PVi}zݡ4bt53T0cw._Q)˭N6 [N0ɩjv}9|'qAƛ؞15rQKb:h 5*;CmOd H UZ% Xaf$1@| +PB-"Jԭ %B9!*pHH9i$RA!NP6r(1/(`ePaA ]2z׫ ϙŶ;drzeÈuTT@r{_!t3dJ 'nCz%`Ba=nRb8&`)2so(8D <t rDnd&!Nrb$2d(s{>galRvdAO9!UQ6 cgITRd ﷫uG|ЧFD΢' wO& -LLfr%, " e]SsT@VSڍD D vyC>bS8+4#U-*)``Zh#C`i5E!4 8$CIU \زw1wF!ADT=Sɼ(+:P `$@%3 i$(0U 1U!;K! E@ T S V UdXb1F`* e= NM N0PU=J Bw\Nf" ,JJh9GCa{+(iS]j1S P. $Nl0,B$fNs%aU; N:$0xf3'Ѓ(l3']kv*}GE B "R #DQ,-(ڡP (B! P AAǿ}~QN_RRB5B|P_}2 ɠ5b(f5`ȦGO$t2pi$QeTjC>ܝqMLuA~cv߷գE73a[sC+ ;Ɠ_Q"r$A% vW:yR$&f9t;;Տ ߎR2% T3_`j?d>j3?vOE6mn?N!k$otef>CLR#kJjCP |4={>|4dydSPeoTF`\i>{d*'R343?$UE(;ߎkL&Vh>KS|b_,.:{Zⰴ/f̣ꭕ\\Nܿifw#6\%L< IB%~, g@l Okvhv֩&*Up ]\`^QܶAސD}O>I?57&O9BUq*`ۜ ^;B Hdd@FR @QH Rf  |t D rZ6 TFb( &$j* H T cO qy! Čvq/ Cv(Ա-gLHMFM$tY05?'%qIt@LJ[D=i37qTDlr2/. E`b^ ) S'Z@4Б]h"")5/B`X~ ȌxDcK!e e"O0#B6m*`Xj R&2|א6J|M''o#%oSbGA)BK' 0{6XC:Q Hv@EIH_ey#>H@""ҫ@̊O4Qy/2 ;J>7׊@7H-*@BaI%:w}#x_O9x#"0"H8>*JBY(2&It)IEM5|.Sٷd~M=Y-82vؚG4Djp͠H5&N5CF23$1.57b30v@"V9IpLK>6CO?LhO1f ,0l <}h@R!IG/>ß~}#(HFd"Q:ư 9x9v%JM"$3r dւʴP TPID  p$P $dA):$gzΎ/ `!JcvD$6F@ Yh+BQbE#uBQ!K =|8d0#fz`$ LH(8@4v}:{ B6tRB#  '9X`P!āJRJ P4 /|P=dAFM(vh ߺ~{^?>j"цŁ牍w~:؞Y('c4'0ǐ!KńZNd &?񀷧KJdYFd1~)L,  LE4ѷ:7($tk( B G ,0GӪ0:/ݝZ4x<*1x>OsWNHHmA9Ta4ADܔUzer?o9k:8 :@r ASx+=RzBsj#Htƛls,B P}]} iLC$ 6֨vT1 P o<3戀 >I 2*U"xɮC.#&;lГKX IW0}y;ǡu1ΉxYFF cnxf'p`DCP eks8 ˙`\]n~`a^}v=~"|R4C 0~  2XsMxLWz!$eF^ 1ď0IQQl"SRNU4fuQ+*R!=c0Z%AACLgqÄILBq8'EA?1*?& &vpC\KPO2!vߪlkA1INm'RCEr%P)"D슂$;|dSglD м2ErD|F`c1Z4Rcx)_*."HG1O#31&HY ,BQP8p\$9GawA8(Ǭ15%A ! C<].hob+fa\G#F'€斻$Dt$Z :zy R1 5$ ";UIrn0xS 6#^ ϝ҂%v෠u6 H+\%$Գ00jFa5sIo $ffAcK?]>^:d? d  0Q K! 1AOOӀPEA%O 4SM4 BD ҾT F6`AD'b9? jD">h:W2Ki`IlR27BWJcANdABIPOR h>ko[1w 8瘌Fl'L}UUPe+` "da;EE?$G$GPDJ*pBH"# F;p(])El@GOAH5ȣܶ9N0͈ 2^s$,5%AO7Cd24)_Ʊ1Ģxľ)otd@u{Z8:0+ɚo.Q^i<}c$39yR!qg#"~ P!c h ~\Ae"B9Sl5U|?w `\+XDF[h 5xfk׻_z `K%ۀyqjS$@<9UDl'wْ\Jcifw${c(9C1En5^m9A3PN}JӢ5UqKH; 0AW߃$2a!!;h7zd*&(oKC@>K`ۇgӥmoCV~`Eo^x/ˤ:0eH)&L U@F! #C Afګ DP)Fb*py=R:z{`>EPQD.j)Ԟhyy6neWI$ C P;![A!I=<-UgW?=Kg>RPiTkߌD;?1ƘS.dE=Cya  óN'mh@ {S3'c5IMkp}U$7/h/OD&"iª qrx z*@1X@~B@E(PLA"08"C sd ``*IhDEJḇ !.2m8Hy,ʮGF7j"F%XAZ@ā%8`DFLL@cf "$,#P DBDRVKF-h1C\X HH aH"@$ dF*t@3Ӓ ) $CqZ2vy44{v >$1 ĂD}0 N<Ck="ڃo!8ǁ%"r(r 5?;"HH%fUy# !'xN'_0 H ?$_~^> A$K C$)DJ8pᨨLL_nqEBPb{4VTTPq TI0U;p3obA:Kŏ20LR$1H?50AMqH2"!}PQ<_2HHQ[ nۥ!]Р_L = =FsNH$ሲM#!XJetc.H] 靸BH0#S^pDB3egCq>$'_5D׵?Dm^Pg4DTy I"x87|wt!O4 %R3> ]#:rIޣ>;I*Cu&m2(Ocbaޛ x/aIӠ!gB$ AEQS-(Y]F@:\|>X.NolFN:U"v4`ѪBX#{ɴ''L$d3%gOξF1ƈHh/fؔvM23K`!ZU1m2½kP)O :0')h% b6 rf؃c*8i;9tFOxXr}#1 $kq$)d z)?C ģ¡pURS9J&^)E$" "mrcz%A"p6{;?/(:ªe<t؉! o^$OD*a:@!T?Og@  !7w4 $YX B &((ܯ;(Cȟ $P¤C!DM20-D! LA?8zcg-!X c7Y&,#i# [mX`z<&tL0q* aGȊ턠hg{ =`(+k[˅ZqQ6 (#*RzV`6tr4|ccBF6ĎP-d6ߦC 30C};trEd"LHb"Y +̊{L~g WHo%!B;G+A8N"iPQ4- $:E%҂:1e)Du ix7Oo mRL ј>p'E)=`"='\?n{3n|߯A 4Ȉ0 bgHwQ3"2r:(Ԑ܆?zX~8v}(^Bd47i0/Ղ"y;LgfrI&DN˧;8q/4t/Ms7f:2!)>ǃ ~ɺz2&Ѣ3NzWʘ`g yÙQ;PUfQQ`eMFc-̶"x3^fQ\!9GִfǭWy>=YgǃEWV8o7*jd^h_ϖaX]-RagǞ8- wfcn\z/<˘=d+bbȣxQ7cks5 {47s%Gw/nbibÉLxEvbPydQmrE>!iRKph۷AS<~ȒNyvff~^-tǦ(尡v;RLdǎk}:Ж0k- mℐdj嫦kG lCP t:YgE h8=^v(1˳Rf,6ppO˄&D88'X' uKV/M޸nrI3n:kT.: lBq z7+9m(FYB~Um9#P=ku C\Jflck %5cTL.ga,Cxj$">%s}%0DqiDi^ã3IqS N\z4ۑEɽEm$5g&Foֵq$okmy3m;#=,rZ"p1T`kمp|Vكnj|8tTxuxƒf%G8d}88Nz54o|WjCLL!d4wӱrhy3IR;,S' k} Wvawpd &KbaXQCX@;qkӘe̓tQF[}k8$f(HXAfN uP:oq\J0f8] SȝJ qΗʦG.#EhپB*0\`Lu;N5BʢS5aJ 5Sƹm&I%$&95dh |`^""/"^ rÄ#!$.;1lԓ BG+D[F,B̳hgcز E9+(8("LUlٵ !3ڄp)!Mm2Q2eSN(mjU񲻛$3ӑdd̆fRt($NSds:7T>xaSD7 |-43(8 hW/!Q<0 ˕ sX˧y'*Z0wa6}#kcQ<~o~N~fdH =L{]rw_@}45@Q!H/;kfb6XA1 CpyTOO(5,&1FW1u;KN8gL FGO9fi88J&H~=Pu&yDyWЊ uw{f͉̦7NK'Sy%&w9`պuKNS\wI; G8^VNNtz9BdZS͋>|) vH: -Z !"FvM2HTQi3\wo$ Gn+H:=d+CfHgzZ^s*|d&/Jo4iəբg;혎G^a(A8(ZZvN&s#dg_(WJzđN-Lv\bd` $(iNUw'!Sݘh(t`p!={CvPDt,n4ă!A+:v Mt& L90B!`,Xx!џL’Sq )+s0Fp`;QosذiQLPN8$"!_ha,.D^XQ//bL772Cw̕џ~6fy1> LowÒ6%UJAHy/OX3QO5,F" 7c9BjaDGb5_'z;O#I @Xث-w|ưwB9: #2*w&,wVn(Grw7"pp&o!oӸ}'A}Mr Ɨ%4)iFri~S_>E[N|&?/$IKE=⩠6\wcY W^v=*(̽vK3f;^"|ސ )b@ q1LX,őOr'ÓGl-?#C O)C?zYh8M1NoݧI+{:!aq7_ޞ%B-`0Dsjթ18 ڭ`kKd)gpC@hmBHA0hЄ: 3xS/b}-A`1b \"+bGX5 I"nT!z:zS})c'*H-&2&u5"{Q1tvx(A'9Wd?W.C]{Ռ_' @JZIPx#DE$(e={Is}Odu.:βlh ! GRpN?/5ԉij):B>YC`y8xMct}PmiЯГiY$':)yKөj(I%G>_5w|wt  ˬ,>F.hA?NI}C :vIx @@$f܀o7 ^;g' &8.|4.F4RD" Bx]Ą DR؊:B?n4=*qמٺ 6[Hvb8$FU'HH!]|b"\2$c`r=Y>?qA1 jiFb蚈vr!0;c@Z3dWtQ̱?.W@` irBvБ /! @Lt<9O*bFPC!iM,@X ^o]>/n/%_ɤIf8%㣒C>Pt(n:[Xȴ `HGG0G.LF¼!ȭeQDW' JARP2fA,2HOC3%iېDVZ=9Ijb1%<氪ՌDQj=?grc$ I a8c`DXMr?n;HpyS@PUU4DUDM4DSUǯ j"bb=/x1;!fHU:"M5AӷG"[mTŗ8!P h, (AuX:EhJz w$sTw>6{(;ڠ:*%*PD1"i3:_㌓E-˸ y(V22^Tڂt`t:z0󺉑rzuMS`] pNb#䢤%LcD>r $P \.&H<}4퇘a;%{vOr=1Ƈ=.}0;N\B&CӾu$G Vr!,Q@zo8<;!4gjÅZ3buj`٢uBQI r"2HhnT(nN XSJtx;9iS!;K:neK,~Pj$GW<<k$Ҫr.+6G:ڼ3q6dTtډHId$W  D6DG~TJ_:2@uL'>yd$LMs2F{m7t甩)Wu>)fg{R޼M,) '+6oL{)G ߜ䚼ȳ1 ) 3|9KHhY4:c}M˾҈08*[ bl]6R!H1a z2fKACJf""/){#nQl9>F.ȥIF?1L>W|GxjGB%!$qqehӃMj@ <'Fh"M3p]#z.") DHllr :L< p*IN)8ɴy8DP4η>38hcmJȟ3AO<9鷭̹(]562ےbJhF!Z˜HGKI[XA@k~5PBDZ=PY0IBK},SYIQ0^QdICBYb!]k-#"7;iX0bR@֌.1&,$DNmRh+xpرGEB{tü=3uhû#7ͨkn5F8nDm.m߻+GAO b+lf:C ĸhhkhQ>yplGkpH{8O+!i=3v;  ^+I/Sgnzd !3Vݥ8KƓyÝr\g3Q˖Fu#&k:d6Jnʯ \n9#_DC a0rF:hfŏ#@ˆZPw!gszf^7 ӎ!ma|0&; Utm"1h'ͶP jn鰴r]X`Ѧ0v-_P1*: F jh̔0pc4XnHy=y  2fOQeLN Ͷ cx>AB A@  dn~<4 !8Ex!hlT^;b~Ȉ|zo rTXii&|5*&-ǀGtC٤"HR5khrߢl&Z ؆3)reSk*GL9ƖuLۙa6&Li^4brx8A=Fim:bg2tIlUT|&fHFDm@<`1E+ ij L^sU)6\]de~|u,r vIjƺ6Keꠍs&=yAhw"jDyHw0jkwgxHPN[`DF!T]ޘ UeN #(,zQx<#(#@ Lޕ(Il& hEr2Kx7FY]̘?,ΨFFևI} dm3%fAPbEa%eog. Lҍ LdIOܛlhNZqM(@kF#tpx\1(ъz̦[8bc/ i| O; d +hg%N} UsLͥ=EW2"!EEӯ37q J _#t#п-! {qK$2E̾ect hDLgvo~tX8PFR@g+pן:<(S15&h7Ss4K.Gy%nѺ痰?Li(I9@ǀYw5:`nLfG>w8J!Kc }B hN=sǡ'hu04@.T"B%SK@m0c .6qn Y;ի(,4X 0a "-Ҩ0U.0XP܄K͊: AGH 2uLiҏIcxIN8d8<#$OC^'9Zdy|<>A  phm0)  1!DVe0;X"f.b\+2ð&+(}!%aLfI8H<eN3%^83tbi G5Adb!b"dL8Hpn@-*{!0d{$D,wOh)+ɂk`0jخF-N*g87MXwm/+lG@F9D( E ӔFT e:OQuQ:uҤȃf$~$:B@/߯~,xN >Bu^Xi כ5!Ϻx7F/c4$:,ە# 1񝄄/{q?o@L:L /OzS|} L`zIDxwE;|g"Yphj) AhdPb" & {>o](UPP2@ϒhw޾I!~4(-nGfNpf@5<5d[Lzp';2HH! ;#m?hDr/QF&S?q6STQ354a"MҌzͪVˬ0) l1T^3뾬y9,PT7.|@)AG`w& ʜc!BXQu75sHPmYJı8t#આwdOehUhuhaE!HD(%$BN RSeR `*bb* QxJ1@L2*HHC VHG.U$+Tp yRǓu-؁'sq,n*3Mm*l!g%wMQd(q8f)OW 8{\ :}GB|!znpy~+ a@t2,L )0Л>w_2焟SE!*x9yO|U2`T ,F9ޙW 4b Ι(D`"!c n`y=!e=̽v'NuK2G2l+ǀNHP2#m&J Z9`7u'̒D8}7THKW 0W~ t DMIA? =40aj(=D{˽1 w9Gi>^'j`Ȅ4_mS C ?tBOm?r>С0P$Gc- %*}"AM&M=d|yuGC[ͿɉB2" wfLdO8P镳gczM ^a.sf Aфre{8$ނHD؂א>uOk/DA6f M5 im<G@!) cHŴ((DUPa2kSħ$4>6Sgp߄%5س BZgp=(Ox4Rkω.*R]} -P/bVsjǚ*3&Se˦G$n4)0+,jY\y\7х12߄Bvӆ]["$ڇPtyn&b-TP|lyCq 9FQByh\\i* OIeOtRMQEW1 { 7^76 rkm,¥R; Flז>,MX$hͧ(*5Z2q $(la" ȱ51HEN2Rb-U1 2Nq8mqpfT4R:Pu932$$ADYUq"I N6,Ux$RBI5Kju%͖ IAGC $c 02Al R&LQ -!Lf0LY3 / @F>8; P 2 `)bF$P bca^Q1Cp Yd fΟ}D9Q<~< B!=-&KB$HSsLc 7X#v!&ԑL(%a(@6AV+rxό9IsQ|>P)"! % :ޡDN*PôZ77!y邊$& FaTAb%aX)bA@ Dy@Wg>t0l0*2 {JܸYP!3stj=@J7J<.qfJL%&FHi%(=4A|֛;??F A0ْiAMЇy4{N|v!iMva\r+Ú{OW$LcbJi>h *8A%'3(((6KV8cpUE2$qMΔ )H(DB,D#B*H8lg1 M, . 0D#II=jdC4A7Oe7cE. C\섣L6Kxu-&?_=&1֋?**X0!B/I"`P FGSm>%\B@_f!=hBT(:?7 /| FH;ՌzaoΏ 1H[aQ%Q᭵ZDIN\P^", !L6/,mR% aEb_0";N!}Nrtj4&)MF+I*U2aZE$ LAFfTvD e'Hwzax3yM;' `}I4Jl7+ AsU:UO& IYrCyڈcCM oS#wyu\cD1Q*òm;̼! gsi|桎壳/;ٙ9x[mYý(R] T)jw&뒟. P N85AĽaD"'` (qdb(  2 -I afء R,#{"z[|>oO>P]p{ljNh4A &SA9F&Z&B Jr#C4pNAPІ#QDjsplUDJ%"A ^BuH>"%ffY{O)H/x @0wOWommoaa}ÏD:Nz N;d(I2C@%4-"L A L P%#pxPi%43܅|ETr]c `!~T t 4f%d:tqdz\a:';9F*HbWtH_~Dc2gīe )j'~_=Wݟd! '8 =xpOlx̤ԉp`zC«qD? $PώJ=?ab$S Hc@ᑴ/nj H~͔0crarw =Ɩ?U/ƒ{_f#[v4;&y3A|O/TK?O)0tQ3)2!Cry 3f`AJ3`&,SuJLWlW1! D D~Zx#Q"kCvNd4T+a.]H&!0ڇ',4tS@e/YL64034A\Xqz:k:|߳|峮YK N[n5!1C/eh]S 6|TslmwѮkԾ9Z#aИ o@Uؿ-s$0I4aLgnxU#"DĽ}?R'R)G U6+LeNU&`" CP9 =H4X-sqd"I7l, DOw՜VC$`1 >%Ϫфa>jSt*IA2.Ozzx!_a?iQnpPĆ*Qbr(7dcen2JFXFؙ`4e$ Ci䕢,e9@E49phd 1XD$r[kv${>_/(|"@|pE=@cO G٠_ypMIpjnArRl-) J }\'B6DybcpE vI$0,r$4-`#8\I'PfI3]4&rVN0))* Hd<ҙTGD?|IDv~"&( " & (*(&(( " b"`h""" Hba=O脠8zWYC`x(! "eBIPxf0lV"(b((PT~β*#BԠA0C@DXm`w(vJ*%qzA @B"$0b92 2E-4 E4A!S||y1"ACnz1ST0e(+uAwjHN`8>?d (#|mMf++ZܚLo7Bg!M*sSѸ /> N y3=p?8 gH/wG@*uFe}lxE UPzy-&\u`ڔ ˆ2rci)2E)Xq\6 pRW`+|I@Xޏ·Iq:=_$wG74ItPa  |'8F'u̇d_&Ln22nlb俬؞ ̽.0cוwNf峱1;:yRs}W!Qo189i!`)m2fBy> */"a6p0VbE#k̼y:[yY&mKiGYRw R8Wd6.VBAv؋bYDf7N;FiEZǭQ+-59H5ҝ)=F\)'qki:@`]<;,@͙sWж"F6H6^&M8ee $#(g{#yn}iu.O{N<-}cߛf$ 2|o0$|.HR%:l* "nqEP0/[ N ek.G;s!J>R-ZPQ23Ah=o0ښWD<`Lqch(ť$R0TA?4 tz'm`5#k,vwa^s(.$!ğD2WJi$w?Z_@P}$ trP0,PC) !$ $$ ’I)0 $8JI0 H,HEp2 |ݽ8jxCҎot:ޝ}ݦOCo-~S!B!>mpA|Є`pHJHC>G DC=#P)ē deR1Z2J5mbc &/sa< @a %H%! %H$&`4aB}!"[aH$d&R`Y ffS  2@ p阔 dl?M9 dU3\L,.>FU kB}Z ;&1G+0~Њm_Iҫ<'A1ەE ,(ߊNPI+'(t=2@P Q+JBDPR (2ȅE0$CS0C$r)@>@B Y)DeL02k {!f|3ppfiγSó ljGYK&<0,W9 "\'LwˏC 76 cVfy;V-b"smL3QkHv]. `;Mǣ.XLlМvB"Q>c]Cg)rff/蜐;~'߳tMa0w}ٌ#1=9 lTy;kL`6c L$AF 1ild#6RAI.iūRxI{H:X垻awy(3n`oM|SZو b u4BԤB$Ƀ*f`̑$Y=Jr\xB/|+OZŻIaGs}¯MTck鮳nGHq>q<*f#Qr*P/ KNz\s1ԟq~%W@Oh:#x%t} /P@cOd$` @pОe9f(4Q ̒@IdNO 훏v۹$+>EBYs1EHA(@}=K 6y޿!%4I10RЅ"+%H L0A$0QEUAE2UD L$(D,HRJ 2$!( ?#hYD  h:EJ?yf y; .P7SX|HH6u4Ceuz+q19;%oU\ 0U34O"1/B'3~z)$2nRh_T|aˠAvֵ`~{), %$w ܨ1oкAYC6:Y)QS٤ D:^t uN{yN1W EsCULTL\6.;-P/[B& RW!DVQGl! 1$h fa5ɂ"*!PېM VؒfHDvJFPJŔzXF'%S9KիT$ٚ竼F̀zk1s)($ID%z?r-{lat0m0b"?W\[?%:*S)S'QS03ƺ*~_cOV ƭ&|.n~o.HTDE1ETUEK QDQ$I$x(c9sc(5V_qPq3 ]1C8/w>H39Ü}LkMcb |M0'ƛiBիsfͯ}$] P BPRQ HU 4iBl:4i((I@hhh(jy&i~j^ZR6a)5!A@HD $HD)M'}&>N>9p OOO s< N2<Rg}|}}A PteAfdZFtw@uǧxOKV!JBLSEQ6A$4 $E/6BCUTQAIMU%1DUQNDQAM{%tz͘oƹ͚ _9}n!վ:m߮tI71]Q5 -%% P4!JPIDC3:n:lu15mUfo>tPH7Ƿ?㯯!=mxcR"D рHD}s_?7j!^K;gӗ~(bi3 (fIMB:?\xʄ&R_wQӄ'\+eT7ȍ6߶=s*n'Z8wSQCeGh6\ׂ-uGk_A ]|F^2KpdukE#\ըSk3'\uXWQu2!E:R3rY駎VLq)yuk{2#,1'2$+}AxP~T?zfUgdƲJr?I Jr<+d:PiQiAi!TQ$VTTUe ;5u@bN- #ISDm)z) ZN)(!MWznD9(Pz(Rn$GD)@tx|iޠ$% @+V`i 0AUt)׹>YDP׌w4A"GL:oDG.IK^DRau{_}Ǯ,uXNg꙾IUx9s"zF!i TL>oo~/3xow\!3JNDn.N-&_wkO<[00!5?8ҙ?rST|%t/I* 1o1M@EO7 1/3#'41&wֻ~ GΒ*((wIݩMr T!זV>s]sOև  8Z$x{;4N_g/qٽԹ>_leZ&/ZQ$R(iw&p:}аJמ(ƏBMjv }xE)_,[|b+PN &K>zif-+ZQ-}ҝf^g!p-~.gYKӎrl;*k)B]%QtlodĜ|>~ `0M7Kp~W ];bd<}^]}[Cު.A=s}u`mrzD>1jWkUAw^i4)t<~1._Tf.$O ({@v 7xÍJߟͶ&ǭ㗓˻8RK%%\s^x+vdHڋ|nt"8~{ּl95")i|PSm $;Ь{efN%DrAYCG;"nܪir wR:{"irJ'~\ќrT~;R/:ųШZBbc*霦uykVUJ(x"=hڡ7)ZboTd;>͋a:B_E @_T {0L;5#ܼXƱf3ev|UHzpQT$I$LQS1M4BR% CKCMR- R @s/X}[\H,]5V^ 5k'=Lf|'p:JW}VVCSyC=p3vx gqF ls<~t̙Np#Fkљ =C9DQ4{ )RE$j@GLLB4;1T+=aAjtԾ:]IY1:m!~z4ϢؚSHj]:)D7]wDiV!ꦬg4"6f'd+¢GGyLG|?5QhCfuw( 2ȂZ$;!@ Pw};/az'bY/oz4ӞwqnCO{ꋵhU@8Ϡ}س_Y˴Qћw.[uo[H6ǻ˾S_n_`]Wm=[/zom rv:@+=nkJ}8O{na*N*5W':÷kJqR4O֚m==m| !Cw:r{:0  c!k>i{n۷/aZwwϖ2GpIH)yG]Uk}vO[םvop@ nDnG)ż:={=԰A5xF`u97Xtٚi6ulDءQ&_>:.y0wϺ=ss;ͭZAUX[Mq sL;yT>nnww{y]vcӥϾW#_X{ֽ޹ct9f6{ wҺL{ZhpVٲw{vnbN̅'(sx .W@^o(ounz5Ԛ;]^뮺eI=Z Tw7mlVzPU=s1+5iR60֎v[Tm@1Fޓgݝ>J(V;>{G%}}ȝPfNuhv{i_=w٠nKYGOoFG]6{\׽ 5U6X5nݹ)No[fUn)p4#*Z{f.>}|{M΃J0)w)ӻއ(ˆ7ݚU wv{}6ם/My)i%wپv ]綧z3&aN)`2FBZ]lcScyOR=z뱠Rl袂]o^ow5n Hmuh U]b\Tѱ "?( LA'eqhvhUDTT!Ou h>l)tr2*ӂl)4&т%P/@`0Tą %Qz!JLaJ "B0sb)qtA_('U@*`!'K&RHw]F`bf0FGYß8Ϯ{a=@xBTT"{,ؑd[̈wb2y=[rj` YHMBN)MFEIˣr`~KLE};J\ޖq+6K*; }z*EQTϮ00*Z]Z1].tlI@Ɍ(RQ ;K;Oo]'m7L!n(;{ς&\U_@a RG?f*T,A`"Dc|P_i_mW+P<:qJt]wY vjI$9!VnC99(٦|7U؍?\ a u1M^i@dNfm`)_ˌqѨ]迦@BdF:6Ht|?`qޞ_'e?ʸ&#v?(}yS}~Z#2/Øԧ*|?t-FܧoaLY&|_s ~nq{`Oj U3GoYRk&}[5~Fpy}](=wZOk*4AjJ JP-+ KBԎ@'9J 6aKuvqLUE%Q;Rw!͝]iC] 2+"\>LnŒm|rBsHm'V[%'jC;sʯnoKYUPpm;XS-4 LKIF5#{ AGɯ ɔ%TlS~ckƧ-UZhXrC`rdx[$YMwq 4§E#;u߇v^]fBJ +{&CN 2>/gV׋G'/ O">2Vv!6HZ#¼ m%j%.*|)YU։Ij{WH)lQ,ameǿ0N)& +>Ũ߇Joͯ)3:Ș)(UI$L!,$Ė`hHK)3RX7~?ۚ~M{ۙPb/TCJD$m̖"-Ĉ@TQ١3.ln$dW{b>ІiYݷ2Zhl%DS 黳=)֫OSGkYb"MXa /݊t$ o¹RF+%R7ng{"7 $0*`~[9ǒc߉8{J)ǐO(3e+,(H}db "KSCYb*m|׎ڛa*Xx)f pv5S_ zQЧVSp⳯< bV#5-3;K:^p? G HHcQku)dO]Dr̼[HȕLQ.,μt liՅ$)y2ݠ :V||L- wK̏=KF4Q-,Tt1#W`ajKvu4xbw*Jix16Z(Z׍uoHoER|bykTM~2Ci h_&zXL"?w|kfQ3ÆWTMt" j9_>菗\O)Q[2P)tBH}X v4Gu%?t iLٖPPҌD{DQT!CY:c1ږɠțTe%b݁e>Vs8)Ttp?&GIv2ñ|SىyTgɂ|:Y TtI~ %^gh0d>(7(2FZc~$B(EM'ѿF' /v-3ol53B mi~W᭮wTs R2c LX1EUn멳TuhuOn^c"HN?E8fZs ~#hB%m`~Vj=u| 4}±ŻR C8͓ɶF]W^d(Q$TCӒH(2Jc{j$M 1T tTENtQ(WDE}щvBbŌ[JRTiԻCީ23+=M5~:7IBjRTE8<۵cW3(j\m _>~bS).[O˷ aPIPt Nc}tl{i _Nˣ'LRjF;fwX+d])o _[;y]m7KrLh+ݙw' yK 3 tL@!?)qVč!Daݪ䉢2!ǥO7_0h>O| 3RHߚC1&i,ϓE&MvGݺq}9<1;4-Ȧ #FDz9]IWZS3K#CP1>Ә-0®]CJ "IL̕]q~8*BP%$y"RxMEgƒ^&m"<$> i`F=y|:CGrAn^œpIwmͮa;f4hnl>1yQ<^Ѫj|,ŚĂ7P U/5|ދ"]_z)QV^uoyM%ꩡBr6lb`yEiZ~>Oie)CpqV+Ix8MsIQMHL#kH+(lJH?_4G`z6=.40>CIMey阆+M&R%{J>NOMu:멯2漿GqtaNgE kaqfRq+bV޵7ݴM1b}23R~Q;duJ6Ͻw"2,%m_66eч*JbIMv0- [n(M.N k))+3"㯧jMP~Wۯ`gھLIFh0(hN7+o3_]ĿkyC)5dyJ$c>϶cmO>p̅=lЎVL2v&n N/)YD\mH (b^x#cKyk s+}d/\Yخg3NPG3KnNkima|(LvAڥtsCE^- R8etB֍\\$Lըs:˭L[BS:q±7j(ᆮA X \dJ$!i+}l;̘iFI6& d!m.W#ib ATATbq lXf4k,(R!m -:Y2|X>,=)՜Ӫh&&I^D_,I\H7,yVV00J~,dLQ_w.j}nn!HPPU/z:42VjF#l|c%DB|nhI*9ĥiW-6MOF? "1N\qń `4M31NjC"?J)\\$}Q"~ ;;b xU*֠Z,eשvaRlJmjA,ǩ|-Y%s RPré#m5t%S 5E`\גn5rG?k..-]R, Ef9,B>YuME[دW]qx?ZrE'_JZݧj?Az0{v U'u)9 T_/5I}}oK)a:vHWmYмd/1?5L?dN>:=@ B{2RԟӰCR@PVʮ$㛸ex8bCIGy\>Ͽ^]ES7vDY:?ߟ{ |uOn=Q5?_f}sӹ#ԎR`E %8kMej&DQ C@ؗh˞8D~fgzf!X`W"B]b*#u\~L:>ז(&&I2qf8K<8ao h/UJqk07D0m]ci|1ѡh YE5\뮨HSk4>Mq,*trKmٹEεwVQa &dnv7rXd?1xv#^Ӂ`nMB#Mxm p.aZ*R$Jlی|2RĽٟZ$<8&'\?(mu55ɘuD{ع\߳kܹOnfi'LO@q$qA:_*luV?R N}{޺W= {np'd!6P0#H#B;! &!8w"{%W+9&0קA06>XQ=\r# id阨5#IZ SE+̙EնBt'N7 Z̕0}5j4Pȷ$Q %]UQ(V#t_Џw~Z-pVXYd+B.omfTR_UU}/pZĹgIB:+[|^\b"\`ɣժn fc^s].G(ۛW<7Km\V""!rYF3r4!3`-RFڊ=tvm|tTƾ{t]zJ<$pa+kgBkhXyս7"lPpZKBI,ZsFJJ{׮rW>j݃]o0no"a|KP|GzTAQ+d"jT-Z`x%2Q=8툈N.'}nOe|%BRZJFI2.@CN!O*|#sD;i^}Dp($b`2@:T-(dŒG܄t@J+BD$TPq P-0HD <@ôk@b4#PN@# huF|[WWej%bQL;UJÃH"A݀79lksϿ" 8jB4Y5¤f+(؁oyT7lbL(x3)"@spKЁ:$|XQށ[Ϗu Fp25&$"U@MJ#TBS G ؕu*2 V2*Z*dLReluhp|8ؑñ==2럅PmVG\} b|ejу ˗^=r!=F`s ['ZUq:N)D󜴇Buֵsg8U d{{1qd";Cw;7aXGTNU6BM Dryw9xqoG(iz$Nz= ؇a5eO&X #Ɛ CRƶX!Hy KI5M{ۆE$tP}'Uh]qvU,Ḱj}oxrؓe#,DYNKVQĢ_/=2(c=vv kF [f5$7<0XAlvJwAyXM ueA)30J6]TlJs*kduw:B!"/p!W҃/zytqGRYDrrCoRȱG r|4P-0 PH۱ ^^vPcjH*Z$.cٜvUMC@Rʉ1ʷmyj+QHP,Jč) Q)H D+SDk U(Au,J䫒hMB(av%~NRbDCBMcB]1;BdCi,QtCmb#(5*Q%d0@4 '"71y@E* {,y (=%yGomSK8c3ݠ;!(H(+Cay%hֱĐ-l !l Ċrpn0z$T*F!$Q lI( gX cMP"nW%?]C[McHbPd. jԽ$w>aٛ}6)s}R szl}p&mvnB..R U%''#U+UGON w`_!p悷Ƨnɶ $b!,qgM:j,Q` PL8n 7cn9qMg't't2dZ}]zC!a(T8%ΝRAC6["02bdsPj} ~6qLy/*m(4dk  )J1 刂s),7) `?{ 2].b,nGaq`~^Eqd7<6VsKV8&\=sHD,Y~t}4nMnY$9gЏ$e\$|l5JGA M$Bj2t&m)/-\XnR0tL:o?"@j|}rb~i9mazMC$9AJLl>#@ZZO 96 &M`iBfը;u]V(ݐj!ES瀽㷐Rl?.[Tj %Q CuY7N; #*xQ'ŊR$hJrQi6n'D1G㯷Bʖdgf갨 <7PBb3ɾ'͓}jE n )! H {E.ODǰ/d12@VPKJ}߯@B2%y|=@ᔒҞbިZ;.E{șIȑ_ 0o𸔼n:V[O~i8a#en:$S,EST< _$,sKd`hPJC2 M$1m omMמ❹aE$X4Wf;?f1kg9M7Xo8a0C kUK`Z . pהR%|5"jOH+ 7 `)9 @ZK2Gu|_ZmwvA!\S(-Q2)inRC.r@n.%qeq>old1E3CbZ[jqkM%N  3Զ~7R9mW!S0"g@ۥ$cYqwXtaXtn/'=kF3V ߈ b!8Ou{^RG,(BxmgFlHBDGjh0F@tCF" &S\ތ0`d2C~Z7ҌٔFF0A<#F# c:,\,*%LA_fITMB#G-Dď P D/8@8^7Mlp4BqAaĝ"Wle3C{b`L}vlCU, f/BhQ&;4 A3)Y~aچY0_a'1]hH^1j;fSzLL&ɉJǶǽϖkĎ|z{9 鍊-hg&/I?31c 2 E7:yoaGCDcVys! .>2]΁ƙlM3]BgG Mӳ6OX^#4x{Jd>!#K*K3 r\fAk(d)>g֏MR?C>(>i=+]1"@`e8JD)4s( w%fH6eE8fQ0!B:j14L6{EZ*VŪ4Ҙ[0*T8IlwV#k f5ClV6D߉]:ُQ|a |R\S1cH1TL(\ٖWlMYx224c c6K܆ ԣfk0Xjj+j7"@S'_^lw z&})a+%taD&߈p &`/Yʼn|v U%.uzz iEB)F-_ڿ{  H]ܦ\@Qrڨ6bKMb-ljBѬEY-  UX-"h1MIhƍEX 6F&Y6(hcBFřmTQ6KFiAX6X,UDjjddDj`6cd5I@ZlUQFAh#L1bĚ#cbKdQ&i,Qb( IY06*-ѓh-&%%hFKRVJ#XE S6EmcQi*F6,j1h%dh*5+a-jƋITmFQcAQI bIcUEEI-bIIQEi1b4`#l%UI$5E#T[Eh`6т[jj+Eb(DэhՒ#F(b"mXTjEbETi#QjUŶ UDkbъa$lkZKEQlb#%h6 EdZ؍IFQDU+X-ZQ"mbԑB)$ 3F#PKVk)Ě*1[6J(jJi,cƲh6mT[QETZ-kIkLcY2b 1EZ*6(Fm2آfXV""6ص&-(%ɪU#clEccXF*6[&6ږlZ,k$Xe232 X(VlcXXڈ*FѴk-hƋTZ-b cUFѱElhF[clRm&k*Q5ElRkE2Tj5QcbQlFƌ[ѩ4VCmŴZ[5FKQX%Ƣ[Ebj5QbIRZɢbk6J6j-kEbѵb4mhj QFl!fUcmVb )QƊE"&+EF(ƶhci"*5ɵEűڦTT[QQŵƭ,jBhQkEКDX[AZmlmA%Xhbƪ6V54ci-[&6*6Z6EbmF1lm5FRmQhlVckcTUcXɢ+EQQm-Z6j65kcm[Z F*hƴmEƋb#kF5F1EXcXղm TkFUmXcE` cQckji+&EIh[XhEV6QMFCV6kb+cj4Z6mVň҅)TB-"BبmQI QdXckѪQ5jY*,mXVѴFX(մm(MRmY+MƋmQFTmmm4lXֱƵэRm5T`ՋXƬhhZ)UhXFبCj4X5Tlj5Z+F4mDmXjmXb*kDlmbEj6(FխkQTVƵ6* RhP)T(h*6kE6ŬTj6+bբTVأb1F5XQUQllj-lb-EQDTF#&,DbEA-E"#dI114EIIl$FLb,c`cPZHY-4ڈ5DVhXIF&#clAh*64Z*%IEM-(Uh,_]:{zvJۯD.]w]?=5 +I~Bsv߷w+oNk۷a v]̖Jڍ(Eӈ4= *t᩺:Q$ %_NgTJ"n &C$"2Qm='s r;4xزk w< ;yW݇X9{#lqtQtrxs)>L$dpR!ݿKܣ0v|TETM}xԛzc Thn1>WVFj 톡++&CIbJ2}gF y]0wnHjg;Vx*ZIVvwo顕 .c a㿂Dٲk%m .5IctK1L~XS?^|5|6J* ]"~ jm!²q7P\$nOŵ  @;C=&# Y +dYրeAR}?C_xY;18{o)s ](x!IhmR 0,vzIRC r. Jf?s8b&[|=LO=$A<OtjߚP(`w,Xj `h-&\eJd ˾N^Q2*eynW{ꗖݣ6ҳY))1`I 5)f"hY+H4&v3Wf_voK8+x"c0~T3o/zwogi55O&^ӵ"Ga2Ba6i&ŽkPS?=}6 W/Ogyp/ѸyC0+N藚%9"CYkmW> ~ N$µjZfI! K/&&$ w,++w[o4d;3 \VWa6AVn av8-7;57>ͺnh`Nhц8;Va3:PgqOYĮ `6?豗I&UK\t6lcm>;\qgfnҦ Փ3y^{dF0bdL٤ ijtcݿVًX6"Y᤯e0[P(pE^MGm;c]ٳwmǫ[oTl!Grrd aҔ0ܡEumIBSa1s< Ȭb;vUTb2h׽ â㜰|eNܥ"eWfŶLWjpQ+` 3Xc~#C?C"e$N&0ϐ  4!ߎ201vbWv |7mᲪݣgKuϙpb9g3mE=i|O\yp 9ݞҵ&Vڸqۍяaۣ^٘}S3. k J4qB*z/3It% uAoF1M Og& ;GbS <'c˰ҝh{>`/:K^J71XN1zaۛyN'PlCіSB Z(xm,i;Χ9I$"H5$tkOy7(7vYaI@IaX}$&v;Ʃ6=VwS^iD^5>xh6Дy͜G QGn얜 DJV(ݒ: +q"RϭgF]Z"W^0J$Hjw)ҹ! kl;pyQJT,zY)SRXţQ&aqc֡*&@<.!#0r 8ì.Ma0(UAaVc.M:ba~5ғ&R&: : %\_w[vHGǽB`_r }iޤvw>8Yaݚ*V80RGnW+O!hGr@A݀` $LLϿc ZpA,a<$s<Yo^p (UUTBM:T=!a=RvR<ei=n&̊aI@ CjX`諨}ap?@ye FއV[=y-A`ܣ꿬 .YT$=.q"Nk5gV6fKmbYɆ#i-M;Z,S6AEoB޸k2 a.F4;c.&5Ӳrc{)᭯%` c+%rב W[cU$o,5D%A|M3搵(:^*JQX 29xw{+ebGzm-g J`y:wKzmx>MTNfi3mLp81> U5YqO۠Kj.^F"v`y*n {a%y9J}p }x;Μ͝HT=׹ ncX)r&M\ґNiݖKѺgm}z،#3I*v(hCgk!&NrT?,eZt]84]c 4OϦ߇ksUJYy =*LRPA{`j] tAh{];h[xdh~҈Lpg2řyli|?ϓe*&%m})yh7z,AٯBTיy3 :.ms) ͻBջ,5 IWi$B+ w7n}R"&cf fK9Lv=f[.vT[gi iT'<6mNu$[TuYBat`t΄4Tu>͐xRP|7ep^-FP{a\9ȁ)zˋ)m!xSfP՛!qpqɷ{5#$3K)ݜ^m:dd C ?\h_ S=ο?!(Gszw.AȈ~üoއ4'z"+$58¸@2a- ەxռ:}\C3_Q"'jiE1Ї;C_~UBx-dteKsܬeFlz_7u//k.=%F;EpsmL]0ͺͣ>m{tL9Sf(aw GlD]}zggVU~m}#huyz1a/hިG{7v߈P͂1daXݞxNԔggi&gMo"Nѷn$V^<+Y{b=]wБ|2yu{}-|e#S+19㫾۾ߘGŤ&Dc((qWe{3fmKPt +&Hق,̥GxX@FG 2j t Է]>Ȋ_\<"}z>ײwc~MM=b嫞hwv(?*Eޛ̜^rh}|dONXIK$:#uqtR%-7(t[<2Z̓Hd_ 542kiau(n'1>!Cw2t(aǍܦQĹw2L0̑J.p#nzw=0]BW+"bmS)e& KդR|-5>.%җ 5r w+m0ЙoЦ<ŒLxe_ku[woǎiRCh2D [4MYb5EKGdJ)7S{H)H*l=UCW&7\fvxfǏꑨkK.-辊d[jK7(x)s$P?]zd.T%)zV`aMX&+_BR M0}<3p0Gߤo?>g8SShSMo;i8MeBmqr.Iڴ98enG{a'RHd-U1ZY# 3kS˞a[]ya/vU5߈F/z%I^[#c ntʛ$ʥgH`:m^UDpNfccVY" 6ҍLؘ6j7:kǨJ  粞l ]:(M|X`{3(IC[̽ޑ\;]@~5?T'Ne'K(џcC/ 7-Ey ^ xl$$ͮ~L!6pg~&.qjo_DLFfcvRm.Z4es@lCN>(Fx!Vq^Uq CVP}BP&`k` 95!Zc:эmNjIp+mlnn)_i*ηI4q؊÷(Fm^{ X]BT7%6״\;H?#H-}}P=0IJ j&fΙM2MӏVfinRN(gγAk ^<#ފ|a݉]L(awmhG}S3)i hoy}y-dBNdr}z|G(̬YR!0xj(]5EE:7[W*>l|_Z XQ~nH_?ͽ,·]3g֍ך|FHM|[ID|=EX4 58gχ ]):%k/89/"y9 ;bղ;J8ė7pzΌ$5>HMۉ{>n֘3ol.FN ܤqwN'}0#b7PGlt,ωV) G/|K}6rƞi8vҳ:0\ L׍)!d'~7/O9ppNQtSlvII\>zI]ٮ鑮IO2Hӵ^Ǡ=KZ+kf>Va*ZӬsLDגW%-d󛁲1.,V$I5}>!0v!v]DwɚcAMɔ9Fۤ|)U^,0nx<d[(֑VtrD=:ɽT' :C*c}`~%ʣN%ކVD<@gNI_Ի$6.nIr)k+نlrdG7ψ~kg)YT#2p`W|Lcv x^Uޛl$u6(+1Q4EjA P 0!_b(wlFa - 1L>_B#4+,$7 {h.K˄z^]- 9Ɠ8f(9e5靰 {P^H3j4D*Moq4:&܄VOg^{BB5N(>$$] =j8KGϣ .|bRFˡ; DO}eW݉u$ Ž4,ܼz4g T"u$-퍻9H;Eڪ &'G:kJgNǬx[n-1͙p laKPY1}36ΎJbF9]9j$7û] C#n<ٞcB ̇me']>} ێ|Ů֜M ͣS5dvIvSl^<\߄5:k208ЮNLpSj`/GUċ&i׷tש_8Tc.m˄]hDذ_mӽ 2Uݭ~Ӱۖh0[P>\|6y1roJ=F`lD]Y ='g_~;#YS4fZڮm{;e\-鉶^P=Qn*'B EǵVs:c_&4 [FǓm wJ_ ;;fJ$bVƍdԛcX+FT1TY#d/[Ѷhؖ%e 4҂(5T,ck5ͣ_ J,I w&q36##s,eopzdldXߝD*(xJ!6g}BHAdl70I2a#1h5~~{;ORSD_PlǙ&o޸|?z\-z²8]p㑅2i9s:_>^2  e‹\ݗR \k_fl|D0Nj])sYzim踕.jk|^ /Pv}/16Y~-wJ딺aNt ;汵>qN/slj.ϊbszKYμ7D4M_di]9MtQUy*wVL.C"fc߿Y`vcn6q>A3 W{jꉻ)x &n;-8˸@+\0n.YVgt1(!i6eOlcnEݫ#M~)z{jo/׮-{۾ruU߾'.0W$Sfin!;@w=یT9~]k &W%B!@ƛo,DBEr6齥 ]&&Ru”󩯳w"vЇ8Ӈ ^S97 `uhO._5V=5fk/qum _D^Χ|^b0љd@(pa2r1ԛK 8ffywSgk߆`Ď ߟ́}lOoֲKs"m=?{:@e8qM9{.( CQih=¨,l4r~8AlFN1k8@T8^HG =ĚҭS _Sܹ=VBF+{-ԯs,Ñ sP5h-G6f1֯0wÁX >ӱpwXs0.i# >ݐy2ZiϿyyJu#'f0Ѵ6cn2>8b )bٖl9y*ҧ'jDs8RR䰙&3 |I3Йn^4GKpy/m]a4: %>72y.m N9t^1'j%KYuAp t*ct'# I/q*8הּC㖹=]w>&fUji~2pMfJRqN7lża٤[]rnVU¥s!,&E-=iD`kY͓f~)I'vblL>3zVURuiEUETw®LeRY ^W(pf|p ()E*답I߉ n6IUֺ!`D9/VV݀wSv*NU5#M^ʀ| (QomQN{c7z"`ן>:zT)Nuu@U %*lUS\`0g=y~؇Z$㻵ytLUOlMF5 xv[r7w\3&v*$7<{ߣ qәd-kKw^>/5ţ뙜d:"IbbTbmvW/`è9p߶D? sDg陙6/>usƔVsrcЇV[!n[ݼuMe)"D+8e3omuhRn:' B7:aGS 쟀`] #DAGsXl{}i}^}S|qr><&izӡtO^w~ad#Fw xΰE 62L&4kH3w]%MGrSU⩽wu Cp EgO+? &J$;_VƁ5m=9K5p8mv܊zz3$k?=Cc?^^c\0j> 3snN?g8ٺcTݡK $g̑qξ[ GŲcMq*l~\8O۟jVy}+g'Bm +BS ~@i"%Cf@uu:xY7</fwh^D9W:=ψi9^,wߪyMhӂf$yWH"HzQaɇD8M4m/qwHf@9iېwݡL qŤ;|%qrG.CV\3Bl׹E`DuX_'ŠrKo\wq~U9RO]棜S:ZgʶGtǤvř1IfY4TzIvi-p<ųjQ6(T;;z黽6$T^zs9'QW )Zr vʳ=5OMykDdV2`*Eƃ9@P^D@w8i0䝊u\"d5Ɣzni݆ilfHKtRKܹJpE,=R` tIw.i El0YpJPG;aeQ.nc2*h>0#!eD7[CN л͚5nq4ٿ+f!<&MR ̨V—nəBwa Ws"؊Dͅ17jJcxK-N[(֨up+CD󃲉!ѻ N9d.J,G.ֱX8V\[] ˟ |j"V3!4uj6DʏuXs@B`68y5x7r3݃~D5?;m]tX" "|`{P_?;28s}{`i^N'oGk>O}]qM&|ߞ[nCW15ܙM=LTJތ)0鈚a;=i 98 \ &f D_L ^ H)V x@Jˋ M̗PS Hz80Barjf2cK|_]UЂX iY LKESh7~X8Z Yr;TM^EưF@2 X.y`) 36箔\h隴O]xQ a#/"Ǩ!|YF < h 5&)eڍoUgv8U´fOD a- eۮttQ%I!m7c2_h^j ڰ$ͽmMk|ZѝԬ؛,pSU8VwIڿ *Nz*4k~͓̣9<;=+,VN3mxJCϾ$"W ,>vkf8}-*in]a1 x30p.cMM=MiJ/{\ٗ^Js 8%LJ|4I|1ۖ#ZṛӚٳl׉}ṉ{ݚtNjh[6X-͛'JWHs*'G:M{f,t鱶|4knk VG,\ێZlrM6̩Vo&zW]8%}@7YϾ&ԇ,mwt.lu룡so-ʗ  &1LϪv03# 9=;)Eurk`.~&tƽ64 + ͔Dx͒˻_:8I ]>"L]ߓV<8ն #%k9\>n`d֓wLh}}=EALCM"3S݉!R9r6ڔ, [)2q%#eyˍ[m1K~VF9e_/귳?EzJsp0xlw#'π0Gl#qqS |<]YRS!; =eM)P[c90v^IJsUQ˴莕q!/:r|wjADgr$RUXzM <9ljVq2*!LJI`tJlD`cItlސMWn/5k:J}E|X˧vrRЏjn Ag<.y߹ΰOvrf&ͥ| NOuyv=MN^\{6Bn0|_%31(g6['_8M ev s;7tu:[ J]d{Q>1 [j˷noi|YMkۃ1Frwrz9=j.NoXIqJҜvUF1r/q%Ԉt9 a#S^yiap5mqz|C/G=>"֐Y|(x1g~i@JA]3m!\ҕpNR 6+PAUR&?*h]n}?-Wu2 IW4xD'(H/RPfqk,yMuwg)qNZc3 ~UD*똏),d>בӵҰ7i]M I$=* @e0!<2-'_3mQ*#;a1jF]GZ_t؝@8+>|9y8 8-|)b4񫯝d`W E-O~T>)]lvwNn""ap|SBsHl#zjWSDI$TXT5އݴG?MpDc|69#>bb\M'B\QvPº*La,yo-V@d] =Un7߂bɗtSž'GlP6&ϱT‘LkTdRr@+1_30cD+'|WpJжK iusgj*9cf\UY QފXO&z@瘝5oJb'u:xMi֛|L `_/]cowZq%t%"6Xc3ڦ-ЉD4 !;:ڰaԌkE~ Qg@ "DDzg"t^=NklO>}FėrWwh_ľcs.'QO"qm fwI-^42=9]^դ'ֿf X2>HSI .{)#.ǩe..$4] 2i3o㡫 #.H('N> ,<|@ wKet:{J] S"JO52ġ[菪you|f)gM_+wN岾+ҘO*ɟ_#3׎3&J\C&a z؄$lF.@$^C9 0z!_gMgT0f04 z^fXjf5H£n\0! \JbD ixz=Nޛmrm[ǏC#%󻜀sپE]ٷgc Ļ #zLB>$؍(V?;0Kp}sPV |Q#.;{@X}Wf.A!@CSV̆,'ț#TXؐgԖB:2K8#RQ|fDۗM]&u"ĿN~Ý}K^w\'T DY7wY޶"BӳU*?ϱ{tf ̛0|l@RuJ&I$&H3($&i: ;g򚗚3Rtp1cPMݦtw@liw?8 °&%!NN>Ɣe񮵥>sᙗňR7`:Dg7m[Kb†ͅ2t>o'gdMDٛ'(㉈׀q^ƺkφ-TzItUЧg\\((.wRۘ u9ft}eey ~ڡFb݈߰[|k}2B|ya"Վ}7v< d[+< 5'&hHAz P^\tT)PCk heqS$I1BL*0vΗZke+*EDr"JT.Xdul#>ta^ ܵ'VRy7z2"`3ej`t0誒uZ+*MM"9ҫCBM@L\JC 3ߙmTȊ%ٙܝnvGڜ_Ȉ9FTbǓZC8%(o+987ݞ(2ArT<5|;}wxڛ۳sLlt MuG\ް:_+ԟi Lĸ'ŏǐ&!4\c ԭ*FϾ?k)!^0y͵6/Z\T9;5kCy} (Mf C-LVTQm0U$?h2j1IcJw3D:}Θ;[IrgOFVX1C~?Оt{>yg-%4[I_@b?g'D'?%' B`as&@\^JP94fFLp~sRK֓0o@a{dށCe-w-bwI"UBk~`WefOm`ȯ"E$a? XAh ? Kx5y2!&ِRFs"O,C m?㵷(Ur!RqWMEO3EQ_bPW|&3,vH7 f0ay#b๵L0ח=*&/l7\ "5g+pS8ݲ/i𭥓sBfIx#'dSE&!YN?yeOCP(}}R)?(Ǖ[PÛәμK꘳d$ Rdǐ?jQ~BB$KyY /RSOIx<128.ɰ| tk<OvuRGвZ ?9ed _kkRkWexLchP)<j|9s_H{쯫w6fmjv ;Oo[tMOI|Վ}y_Bu-qªV:am鱷o Ż9˾?atrd'!"jcj[iNRf&tCb v JH4F bhWEX0ɪ UA@uHFR.JD0$ԣR8t"eUIv.\@Z"avaC#ldЁ:M [,$Ǔq K*dfVLO*FA#4#(& i5^5]hEDq@fpE܀5E&$6qg#;sܦ ޽Uw1y˔h8Xf^A3bsʅ"p&1 )\mai֏O{釚`Qr'APQT&~?kX,b[7S4`2_C6O"( E^\$ &Ͽe (URrLb{;w.0MEAHR$QEFc *ղţvH 48*'=C;%!HDJ*P<`` v48`.6gy]O;e0J |Red8@}o8aPq$bYjԘ1eSM`6ڟIMf&J4q_TK*ɱ.V؎%&B - Kߺ^=SWzq6?Ə\>lyGek:xSY}Fތs@k6z^Mn&&*g n^n=w~=#e;^f"& 6$a%.Q+u?w^Ƨu~?[<,rV8rj^|ly%VȡښOuNkK|(ga삍'7EfMYu?swy _^4REup&[mM]{~l,zK eSeiQ=S9u3kK=UUh?.eJgmwѽmTշY ˋXBX m 4[UPZ Cc⭓ ͚ ц> 3!lʐCC=ocos$=ݽJgFȜ6F͘F 41hg(ÍDD)*RdMX@hPv^Lvi,ؼOͬΑPbBY[^M۬{N 4TUTL>-əoUF4*w"^s3!\$ӿ|a0i.>Px8U (nN{qօjy Lٗcqsy~߸8Kq/\t(NG̳b ?7S1N8wu>Z%C_JjN $: `sS,.iZ61gK#N"$[%T_2?4BxU\bȁ d<Mfs[ڋ16q?"c \gn$J>u+kS~QS .Ɓ`ތިTC{.Xwb&!.R 4uݕ,_ٖ04 ,&X4*7{֟duk@?9s=4/_1cizZ0QÉgu\GWBUQ%A0NUqQb 5&HP﫣"xpf`D2FXݣX-bcDDỜ#ܳӯS;\t5U@+š\ZwLIe`i|:~C3+}x\/Cvǂ\w¥2Csׄ^9::Q2fϋZو @KS٨R=i<ltvlh) l%p03GCy cMu>!damXQd-w@HEw|]wËc\}MI!Z@?CǘN^Wl+JN!XvcMzsV׵NFOT!C#[e2Q׭zH6PO YP͇i `"ȤRLrfo2,ߺAd 0UtP]lN)'Fz)hX=P4$'<@zf1p]z9I)s(m!dl2h.3jsM$joV8 DR:?QY+n*^3҇t 1/q+6U+#ORIV}˰_!ZZ/ 1ͿR!(tq4?CC@klFE0y) v6]~[Ӫh(w.h<`±  0(M}+yU9 AX8;`hD55wOT۵@ˊpWu$Jt8KlƉA ~7PW`g8vC$ ~P*'he "Tg.a`HʸpAowwwؽ3q& f!Z =e.B/25'5`fs=rPzu.b8B+ԏW4P{m_Ra?IH?ʩF%?,Ll΄LlR^i.߈z΃EeyMMh/-x2K teLIƍ( 6 *I/|5>j&s4ik954!P6ˮM(O;l@d  a}R=#RFk]=:qz؅$=GdElV)3]kuЦ>>A\ϥ=h">ڳW 0t ԢwDt`yY7w0ۀĿDΠJ`x6# {~y֧c'pt;\띿[/۔zV$86xQ)2[<8okCW{":}!{}mDc' I vvw=}``rct˽鄂/\v#' ],'<bj=0Lk崉 Nu 1"u~H+uN5n肱tC0?85VԖ3wxem/X+WD. Kv7MtBށI`;ZJn,ݑuF3|gۇeZH]E–+b0W/\o?$ѫqL,lXǗSe8sC73pDb|6k]/UroO./] ŦmxVKLQS/gѷfⴛ^G,Jri[W8|&6?IɥI@΋99v8|I 4G7ZSm+m+~F |kN|o†:(?P"X&Ųҋ^aU7@Gy7]Q'xb]d}-Cc?WCա>:CTĵt@ $RBҘnbwgqKAWJ﬏TRHTFDRgzSϘ"3M᧓X-/#q{Yc)ќoF@tv(bʒNèX&ݣ$qаSj nϼ~߷Ʉd8Ø&笛޾[9 K0~fءH<\s؏lI vgJ U&iFM?I^xp%o΅=>4]#0}?5^;\3Bp9z 1T7J5u4_C-ɼ'$0PsծhwA;Lc)yk㯷߯<[,St|MkZֵg%;I;uӱm;;zNyE膭1qfO\ "S1'dtVү!8FCQp`&BNM(P6tr+1%S|OhD0r`mbu*zroǛYOg%PMI(Fj΀ GuDP"\'!IӒntJB)a[^ 2:SOf yuJtKJI{Dyۙ~livv4mɘz:f3#z^x:;qF٩:ǺґLG8 ^`t^cϊ9)jgymfJ V×|ά͑dH@^YKr<߫Cѵ 8hcherMG"}q z }ŘG n=I?'֤a~68G΀Y}g=#U2(цF{>/٭?4J`qGhz3f̸aY!$$;q6/D8 wMɑ7|\ fo _ Mw,22!kqP/?38:<-QM7̤=O.iBaw213.PcJ-?nFwma!KUBG8ܻ3&-2*nhw8n`ξC%hO]$z4B.ղ9PsI$KRY5Tɤ]m=W sLlw P#IzYA$Jϊ}Wɚ jԏ'~NN6u3y!Y($`iz['j^u;ĚrX|=-Hc-Q5nmRC ΃O"ƥz)[-^>͜"nBf!ŸLЃi6^ٞ=nFO;%wH1f?҃}fi>Q>Fhy~;I[קndܙC; 7,ŭkZֵ$ ؕLrYh_t>&嶍atOW8q#7*&n%j*$ y#akM$|qDqփbƱ.| vFP- .O_0\M C$BvEhdf>󟣲CRXeHsNf\p^Wuwݷ67)Z^hAiNeϻʹZ`sWS|r/.*CVN:ҼDNU9$'/tVTwcՐ$BY_E? 46wױwcٱgw a*)M{/-2m9hK=S6߆Ut.XN߆>.35}E[c÷ +Z:. 34eKNLPI%ƥ}yI8>%5%iCݶrS9Öb5aynR  BTez_֥Ҽ"X'+`Z֖|{}NvzJakvϲ6B=zyS73f^^׭'qN\ltbfԜC to_ka^1%)$ERHOpd 0rb,Vv n*f_n6C2uǖw2|"J <$BއT2f(@ Cgp/$Mdz_2NxcEBK%,{P_%d,D\ F;H&B-IW,QTjO?tt![1;g>E5ݥ &yn_=Wf{Uۭׅ,ct5\4,c;xVNY?}>hNr7Su؆ܟY؇h\{2˥TMqJ'Ҧ,f2}Ra)7'ﺏROeV)I<^@|t#k6E_rkLdbE~z7 B~ƈqv'c8Eƾͧa{3g1sĐD8p$r;%]*̓{CEuRd=Q{<.ldю?JF }' >pM$8wHvnŖ2H e) Y?hG\Ⱦ+7}X ԥjڠHA 6V'R)fۇ/&foΆ-d,[\ɲU{ya":yZX`m[r*wt,kmt!3"jBYPj#s+{1Ǎrgӽ.ROY+IJ8)߳폆F N%$Nz˖~k oV:O #*(PI:rL974I~\|{wtb`r;MDzg {llœ+[7=n~7.:[Ӓ0.{+tT0Ol':oU.!H #ok^%VژtXa8 b^L[Rci;"/n I30nWxFhivy'X,z]6#~ xs.oWljݍgWn6DȲ+2Cjy=T@ZȏrlaxQuٙb| 's}gʣ5mUm~;ĜFf)^*Mh -!"0F̧Xݏe(vi9B(g>h٬t9Iw'JNRJKk||g)˭\.CDlc>ieL|o?>a:a-:.q 4{)=FX6XmDP|rQ&HaIņTBjS18&lbܻTh hΓwN(ۥMsH[\0 N}b][uk5$əNH[,{ h[DЩxxrk3g:CEK?B:<w.yfzo}lPYD.c}I;31v^]A~& umf< 7vgl<9~Pe D3OȖ&ȍ]V@ffך^9{KkmI| n~D ^sss8NJ~;gC Y\f;_f?c}׃uLݭzDH6'Oo,kϒ9( ; .iiocbάu~@'D vlɿ:Ii iwqt$&jj>>\7CCvF 0`B2" Piq 2zfcBTĘ%$PQ B`G- ׃0!\U<w@ #q#1SF=Ea!ĖS$IJv@RlheeD; AJ542(a 4a Do'QT\FQ=f>km9Q2eJ^r T(,"b' AZ1$ 53Qbf}I_݃}pvz͙}lV<1ylo){gFi]я ?nL~>?_NM{KDzi,EUbR,g:|}:k"Nǟm%/YZ'BcdqYwC{}4JFȋWOzOJ+v˔eX3wGiHDb"%p14>7y ;Bq1#[a$̈́/oCѹo$dbfsbI9Ev˵i rޛ'+S'g]΅q~gJ!(IK;TlLdJMnV_]o4m)Ҽ`f@h(_fj(FkMdQ0eXhFGk_%[r<-EW 1O\rSlnQ_̽&ɣJyдJ0,IHZ&5+Ӡ#I!Ip(Fej?@;2# fabAIH iv K %i30`'#hICbAN%EPWc] kLm&Yょ(aH~4@?y4fш+6B hZmѶ 2OQ;|p|#g/j*D_>>pD`w@qlK +aeI4d;)Z3#q@HՔx:<~+JY@sD 9l8h D,VrM;a.IHo;zL4Z"lߕR@Z#;>!>a*R {zO8[ ~H;9/nJ~8a$ʼ1a[;'6 ˢ\?E! m%8-F< ]GdUdƒd.3=aNÆ A<2bdc59gȅL}Zc}m tVf@hg@R:`'e.w5yG}x­x JSlC"s5p=jq#D^1jsrb]xh3JZ(b C׵ǍN V6@mlyroH2JZoMG*֗-OnsnW$ߔa/{ 5Ɯm|}gs[~Bۓ'zQSk>]f;N+o:avwX"}qפ{l3wFTux{THdwk=pb;u {';~qwNٿsr{Uvfޙ9M{S+r c33§-p,frMȵ Η˝jNM]L$Y-jpL۳.J 8($IV>IZ'b/+=zX%[x .IAhJtkUUVJw7<!x&^(pu;%A9VzQt6Ϻ`l45BDêt*=|v}=,vܫ'Vg?耤# |4d=sLRyci[,1YP(b2 `5԰Z陎Ze2 }2$n(ڐHB"e٣TZCA N)b#Mp.gYuu°:K!YAd˹Xz<7JN1;Ì$4H쎃2mkZY $L50UW <@Z6_yʻ-9J#XΘ'(#vO}RD:: .#3[Xv f$;*;+@EjbP{*4C`bn9ogfN͆ǗVfȇg:R;ZlaLFJ,i`$ 㻮q|7Y@WxTX)e$?4CqQ76 ONWc nJ)L3X=\i.B0܋e4ao@Gb_Qm .7ĪA9pUY'q8 6G 9z @UݮdzuipȡfFNˋ00&֜6nu$&;g=F~. cR%HՌN .#ګE1]⯟UݶeyLsUiaZ*&nsH$`4*04j47Hjni\ho/=Q+=ӚDVj[c3Y!jrDmqzª nCW$ESNo9Q{|^x dլj)9^p-ˌ% ]A<qלrykoQ '6i,iv,A @pH.F*Z`V}(`TQe@r[zw/md-f.(،6!qҨ|TV6]!7W0mo S/{_aI *q2'l+ #*Ka:2gOJ PÂ_=nç{w2VނRnos{n6񝍁NBZ/BtzN_XB#10[zh21lfAn߽cHbH| UxIiLݍ{^TPml[N9Wʃ{Vw , FtKIcƥ\ 1}܈~}͖vafw##J6p2(W9U:ѼPP^T걩͌Coջ?C'AІZ#w wjk<:x5Zwu XυaTwz/g{wS89[c4o.9S0}{zmF1K[ǭ`Lz2uLn0!A`ⱁXm3yuTַ̋Ӵ)8J s\ov.VXs: Qߵ j;X~mJ&xFH˜-TS_%} 3t^,Eq^ʼϟUF bQ):ڼ.Uj}(JR"-G7sqխ@z{@Q+61Gʅ( sL1˜ W=nIzfg0ͩƙR(/.ȁBr12rm^9Zإv"e ) MEx~mG/r7 nT+Nj7Fu3\LEu*.ƭյ-k5<;Y]Wy)8b;\۸SjgrӼPF/'2g뜾1e|-V` ^{^) @ k$isϵ]"%z"y:s7NUso1a⹾:e %EukcI].w8}+QUo͜z3HSdNLlnR5IWaضs77 /60fI( Ⱦgf8x>w^%/6]A 4iG˪3`:Qe[M0eE܋` /R37eB 0B,6[ځ8x]؝JBI$7&^'G {\p\NC/%LdЫhDI #j8cH|oiUajw@&\gJ`oK8.HB +uD#Hԑ~)<^ֹ2=uȞkNyc1(9>?{ƠNmq5&rxG.C5 X:d޷k<=J 1ʌb׮sRI1GJ:꣖x|'Njt3$µX[. G4im,5`( ]j)PX,%5[`> O$LS ~NF/'.(8|R쎐p*󬛘a۹w]c@$ -0dZx@8sH! wEVqC{l^:PΚ(vy7jݫoq 0@(@ـqШstX0LKyE%6m oYoqxc5rp0:Cv _q#Y巔YMsp5kTg|f 3H(Itf\.`Vzʴy? oX&ő'yLVveb=g>㌶b}DlqI(ۏ: HTE0QUC٣ ͖VbWA#dA3q %ä:(AjA! /yԍqE F}vMu(*J8544QoN*b0GJjVEdp(hg,u/2TsY6Di\:@i^ƎC;O &$qvlZeb;F7 okXuVG\JH X$]3ɻӊ UV?*w@8)k<$n9&8P8yjZ pJ=ox0;n[nv`1@,-}BH(1ynvWi9;ҹv Kjġ,>"}Zۍ5r ci&[PlXDI@ (T$ߴp7Nt8.i8lըB@VTp#. (WNѽnN  @/mAIq[mik`*}Ģq߰Z 4z9ƈ9Ņ!`H>#!69>6-bGQcp0A-gۂa6Rav퓖i@Vy%!Cow]J]Nn/5ƸI#^{^k_0_bp *p:PNAu$E5ҞQhAd1wy1w]>>d@x9gfwjٗ~(;7%d (k#jlZR Ҁ2%Yux Pl2Q؝0pdѾ|zf((DDuXu@PLet9ydf ds&Wɪ5ZT5fS 2##h84:,je!X6v'AP-- Vg3zeF C7 "ת( QPHȳ,dR/,뇯 ][ @ 0mM !2cwmUcVB1E- rj=qî @ AMBuuAjy6Yh*xP Cj5w^hH ZC# r,xv:ߍc7'iLClmjQD`MHm6InAFF6>AۃaiHjN.rH1%U8,`Õ2#[1@5ϖ8D[1h-2 s#z|=˰{FFXP2W%<'': b;"ރQ}#TA%D ,TQ'c̀nuQBFysZ3(bR$!-\nMi?p Q EԶNt3sp&7h/9#=Ǥ-cP@{;.bhXmԚ2H(!Yw\ ][b<ORFWmli]b{I)%< 68:\I&RTne׺[f_G x|pKHr]; 1޸qP+as .VroɐHӱ_S}YIc*=&]{;P)xgG#+ w܍ 05֘zA ;x S 0(@#,/={,#sW|P M1`{ց -^n(0\;Cƹ/ ˗fFW#ڪD}VJsס᭚uF;C׈[WliO9ﻌAܚ0B *41\6;rmʍ.+{Y[{#@(9 Ts~mV{P5 ";浠qB(P$'.t6p-CĩD%  gdݬ֩^'Ԕ$%\< 9q "\z _14kƖD)=̪UtÙlS(rXx*:tgFnTռ컿WOR޽V!DJʫ^J^W ;tFp<uHfo\l'iGc1Nsğ;ˬdzp\+m\q;$ f7xluk13i][-q{ȂVKrYdaqXJM^SK T8#QRcϦ܆}f# `w{dg雘!3gu\qtgGZ+W% WL17wxLnOe-#l/뤮0n'I\b_b$aJL"(3_ f3>9SJe旳\i$=걮 6ƍ9IVgʴWWRaE ۝ M_7+zemfL:;.wskA4u|~xwa&_O½8w{vо '$X 'BtYvӶTpxOm.OTx੦x)ا:Ad(vu8V=c$Iby[FRU+UTATκW]*؅©§,Po_ٷeWߧ%EAD ck m66mF|ogm^yyY;J7g8aK9`KHh)JPrnYv5鄡+F}#'3ٴCD!L0支]7MsK5=LY}Mul4فA2I>͹ykC 8[ @6QZbqzBzIס6x\Ij?C d'M,Ѵ&Bmpnl|鰏N߃ G6U4@d$ua%ԱdPhP6& VekNd5*턥t)ގSXDnRm5ydm$#14$n*^`8y$6<ͤ3cxyY.T ALRPQ3䢮",9Ch PB܃~U׺:&,ļS!f!1e&jYJ5w aCRHe}4 '23nr7Z4 ;?J0-o_4i{T㲘5NM; A|̒F{y#x)9e4L2L@Hf0rgYK%p5uM.Rˎ3|/f-B3j87Åwg6 U%/u#IJjT2 UAT/ hQSW{uxMr#A|CP,]ҐwhKH* 3% * H h׾Uiʌ`i&3dqnQKZ ;2: 7yg%b9P<_sZ]K0:+Jj QQ0:FKiJ( v\|[¶ϙ~*oo'/$w8{x ׎2. 7%qηJ%clTBc"˷kfRġ*i^Gt"졾.8u|˫); ʳq&vd\QWIIH/aO{rH%@1(o$K4{U+ W k!N!D0v@i\ɺ)r(O&hVu=o|0y klЃ1cjgz3; Dȣʵ>K-Y&+w\C98I2DSR z l4l6nA38ub'h'c")m 8Q1N2$'<"rK.H9j>CCsvba f3G#3DM5l`Q)RԄN[WL˘2s ٜ$ @ 6Ki=^SFiF(֭AWwgs2*‘{ 7!! .(x(F{*#ӮS9ƎӨ/A|% V&8b1BqE=6aNr6t@:*d8iXC ,_k%X(;M%O&A QAqOfoz HohHSv[ m> gy"#qk3y>]j-疭;w4U. ǷFjigwNΘwW; pS>X[s_P{ߏVg|A֋~L2l&B$] E#7# ޳ymDD&ٻvN:f ,<=LURKmrYaW`{}tha_ڧ!On{3jog& XL85%aDq\TԏE4qi*U-ֿf2atӘ X'%$3 $mkXGCo !|]cO-p2µ}ٮ\,}]_eEwq4ޮ&r7`oSIX|܋VtቍK񦍿0f:{f(/Z,1vt!$:;^; jr_F܄/ϳRoYWݛrG,Se╦y$3Z]wuF;v*wS?/w>M $xﺶ#9;ш0mR &1ϳXw慄a?/oL?;M<kX>j1<=n/ycS`{߫nCy"'!m_Qk_a;%RaC6NO߼-Ww@S PXp̯2+HWa*!VPkE2@@~c 0)Vz~lc5`LtI@pdHl Tǥș6wrlz,wa!.Gmp%ɆG $!cEuRYDSbԻŃ?{*Mַ ='riF$YY`Gٳ:[_i4oO #LN6A[ v`\AG#o83(Y۪# ?$t5ze\)",ɰ} ᱊v6E -&$7p׈KCa_عֶM^ |@r*ml ]ž3u!+]+(u拪PiޢVBӵ5iXKRb]g;Յ* 1J*(D,\A{bYX2˛Q ]Yտ3=x3FWܽ8ysjÒ? B>YX_Y PPDǶoY޸_5)1՚M6߰ ZDƫ䩁А~BRmLS*U@$?5HITXTe:փpA@U˓rs4C/+o&JDNl9GlU4˪3#mqPMS!'KD|N7F. {Qe ٠VTxJDߧzwH@Bm_5}bR)͗ѮR?8?puA^hT.$jZaΩ-t2L6o"I6iṋ#I8Ͱ#dưhS;?F3T>Ldߖd8Zza2 gp5m=c|zγm3T6&׽ 0BDjVvѳbɄ U%B!8R+QV*MeOdԭMY4UY@bmobb`̎)a86 o"u6,_=74q @nMɌy5 %w-=ye&љJI=``] ?x?5> ~Oә?T⟾Y+*~J';T1 ?ۙrvUi[SQ+ Ha'1XIz\Dنw򄆐Rq\+ y`?`կgsN%6(&*fW0<0Q}:$_٠/o~;^WVkEr;Q-L"J6۬p7LK ~Zm"D>.۩p"Q+qmhR/1H 阷NffeWd1fǤ9KԾ~׬=991rj= XjqOFu6fz.=vmN3u)\&oވTSG:ofy ChE* x@#Ns8)|`SiGy7L8N)CwY!OɑKZ s\=j*( 'Q`OMx0mmF~vbt#Zl#\VWCn9ʝd:qC,Z:0åSdLr+äJF@(xFf9* s 9[i!!]q׀˚@āP1FJ:O #Pcيֱ2J.+#bGA$R84(r-+|-(Xxfe2R٬Np"&1&)q1S˞lVwdTm*ItN$vAZCh4Һ#a/Z4k/!"ݬbkGW%۷DbSj%{0 P@qH(v-uDt ˖)=T$r/|Ym qזȜ^yI :Bޤyh ` @/ AhбxKLnNj-LCT)&/w<5ԹQZeh1DzèYQmX٥/m@( jRgbNT{J _yY!Ńw(=^,ih`Dt*D haBGjr"2[gWu nC*8UTT%Ba|N8LZ2! 0'usg FC~"nj$bP0ˢaz(x\ G6MPtD mԆ 3+$LQL,3 0% eq4UfQuJOLhi)!'k%6~J]OqDlȍl_4Wok(fN<7Ծ PײUx71ݑf=KYh5 FݽL&4 7 9 ŷ61 ,dl`0\U5emv2I{N, >6ݺ5h=y;<AL0TNúӪxPO:eJiŔ;qjjhhm&C!fg4qoxd1@!y |\?͸=J!ӌÌH̗zሌks~ pphP5U~?ߣ7Otwg9H_+dN֗rLW4k¬dXN!+=rY|3107܋[d݋C`_B~=:O /SJSvj `RX}ݿ!.zt y);SG/c óe!#3N\ʓ!$O.*uPqYʗZC7y޸'AGnoW;]v咢-HbgpAkQ;$"n21dX1Ko $RoBojUc}OEPJaDm@@jznZFCP8 ?Z$@ۙa e  (@Aoj oo%4cb2ː@@J"rHé,*R`1Q )}܆bBlKg3UTз!&T r?5"_vcD8 H_dhP hD.pPdVpZL+Dl3\|M q\P3Ρ*"$Oc dgJNI$8=TypDUeM@.Q 8"P-Vf @#H%2eE6)'p8a}*@R,7DӤ ez cx2 x :XvuqWӑym$6W I]?x y^']@KG@w@鴄?hI  kJ,(>ξp=< B F fulqn6\v24ݴ`m`R mXc&f| 'T&x6zFptdn Dη'8Q  ^!"#N&l eudrU-̙(r%Nb#2,8HWw.6(rՌA&E( em ʹ#BA9tD,I$fYp/}G)&.)[8E4L[4rvdWЊ̋.hpx1+2fN󸭲V=c##g[op:j!AF# |ZnwXܱD$Byb,CeoP)ga(J!:E+0 n&;;\~F#zpeEjb!*-]u[^a6"A~ OFMͰˠ0ǐedZK02 {rAlgσ~|HvpY~e%=c_SǾdϻKϾ̽͒ W-Fsۧy$=#:xt w9{4cldm<$EdZ֗96a$HC^*l,s @Yw,B&ik6 TG|u2admlR0 (| }&&^l  氭1w1]Qz2J+3i2*1r77=Nͪx42!s[r@iT5tn0igw`}Ƌ%ʒBtc a &x@mm6m `Œ:0 Ja쇻WsE>G4)b`jǰo<2QC[<l[TԶu|~\.Jm۹U1\r/aiw;XX)1c覌Vx9drc۰ *{ 8$4ZNtD)Cޒrv7 /@ 2c 3; i16wBC[l50 ޷>:~y$b:I@ &>/2i0x0<`j7YaY^5iv'SAn`hhEƒ= >oNJ=do.@h@1mB K1Zê%;ߏh..EgRF`Nn:H-5p<'y:zpTkSM:ȵb䐍CKS8w/ l^9iQӳ4Abim賶4܀ƐbDߤ~v;vӓ_=$ZѲ[FȞ`+bqȹ53AwI FqٕE(P) JSWM·(eMwhڿB`ѵa@#*,MҜ ÏQ1ekOP'Z֩hN٪Y4=NjF# o+PWV}{ B߭]XH*([On]@\fg} l_l^$.ӘnDl(UzP2T4;xUh=%Y:+;%-0Hv}aba=w^LJт *K\Q6#fqMi ~y$fŵ!Ybu,-qJjOvS} P C3c[A41AL}} 7AsF'|dc`qݷv,VC]OV1t?0:32oQ`MzT/<^xckxRrȜ@kZ(v4,YCUV8U6%kBRRZ6Lb8E&fIz鞩ڥOxD FS}X|6_3,9ʻ2^MRsу,De]m9W&`KiTL;0;(b _RHupI:o ;lauF4dzo= ^UDH^ߓ Y Pݏ=L2ZX>Hr`}y7 Z4<SLSH8 2sӗ1ۉs);U: IT:_ٝX_ Jt3lݝ~<*eȤtuU!V3 F 4:pYD%P)"W([Te0mF"F-0>I 8^:COT+\ ']VPV(5ڞ#nXu˂×,4)ގ@10])k,bꎫW=ZET˯G= {(sᷡX )[7MX*ڲ=`3Vn]Y޾βHdYtL>?q;x q:r8:tHViW5v<>~gwͤpzy{Э>>g*9䏻M|tv]C[9Nȁo6w?ʬybRU1- RҬJcSL:IӺ/F I)Em,,߲Sd Hpjr1T;Nx&ppClDKL[X@$ms P{bcF(zi۰d6i),Ǘ93pi6Sl#YvTvV64QKE諻x߸ ԢӦs5,u_/7cf^D4w1G|p;9sXkUٿJR+˟]jdemϥ!yy?;yj~\xG|k˝n7sqNI;۫Wχb73bc&9oc Nr7>/6i߆8i5.G7bݟof2k||b ϓ>TڛWB{tνzaLH{Șs# FÅ=Ճ+Jz"ʊL뚳O_?N3DSBK{ hw7"6pۺPG4c49P9l 0jM.S?#cND--F(6'S6^3fYlcgZX@>k\ȴWQXȣU򎢁Gؔ6@`6!mzZxһ ) Ie{h9Q c2n5dKfpô\2*4Br4oZwmI9(kZК#o#. ) "7ƋebHbd",LZ%6 & ɨj'<]hװEH"l{$+ԐO^D$^H?ZEK *w0M<=YrIm%'͕𭵒(Yh$xxpviH}q<里݇.q{1V %"- /2|XMɗRwh51;tb&b[$zKԢ1Qu[#{j"ws礸(>=tAfq= i^x{U xq: XF;M Mno֘dv(Hsa|4鈡u+(O؂~@[`Q2@Đ^j񣸘V}h{ٖDaJ󳭁ALCrͧFf#sKy.dp !tTx Z4{-!@Сهvld IܪBdZ1Ny!PM3Dͣީdvoq;;:BD(gQ ."˖QqTŒ0n|$q&nLeY<ͱ܃vb>举rξ|AE|GFVc{ IJFz<{-F@/=NlӶiĿC!$X€cQcQU\  .m򧟧#|;暊\n/"_h eD,D |0@jzZT)Djء4/[);fp9'Q %v6toZ oD[uFHpAbc$3!"{;5ȅ ]x]*>'@\/ʬIOD2h؉6|OM[G*(qLd&l~PD۵Ձ8aL6f{Ȋtg=tTyjƃN ;h2,0,Q=3:Pyo>C4J4)%HoRdi)) :>~-mWt@xLQ0pM>~sС94kFč4;0O|@6H)@qZYKm3$"L9N~Jk(ో;W$Spntkn9t8>f2\z*άtΒCW3bIE0:]+ˈ>|)HP (=]8fFi/1BY[M J$/z;ƶjKMEr Y$6 ލφ0΄ H"הע,9P $N=5%K 24Q2pə<鵯"I}/X}AyР6*.Bd˓'㋓=h0wDf\\{[aMwwSeϷ 23 g$Ҥw> .k Wro6(qop6bYͶ)D5Baυ@9z5N,)I$9`XŇGf6|of)B}p89L1qZמz3b #8-EܘIEǮ w6#3`$W\.wfz &nF8> 20׋T ʎha &s&.p# (U;k*MeE  #+ᦄ$ _&H#c7zobm`© 9 7Y 5pGg+uiEŽX;i7\4,%wNȺ[\ǧ(5dܾM}`{0}rÅW>XH"8dI&e Cx;hO*{hcYȯ8\Ÿ )o|d0)'|MBbh7 R},:T[U}ftGˎdN@ ņȪUJޜ`reOּ:0xB#3 WA9q 80};SN]( ,4Bd鞆FEne!<%K>֖aJrc \u%EnfRxԅtc&_4 j/w6l &سfxv+rb~xj"&4&eXi]GӖt'_NB.;:֬pf_S>>n:a0l}jٶz^mgY:ۃ܃H43RJK<\]#|r'oR =Kn$}86~{)ٝͩȗxJ_kTL{OdI;gJ+NFZCM˭!H`@%_?f0H=c) %`%&2Z[wMRX_ӁoFxrf>S(qyHɳ<H@Q ObAcN|R1Փ2]bhRٔX%J;i~|%ne4Xdmjt FW=oN22Rts(4cEǏVo)@j^'S%+3ppr)DžF}1fܐ> d @$j#C %0t!̀,Y새(+E^BK0>\ibtȔ5`@)-9F|#˾ .l@ J>WJD!r;R6#!o;#;K{W=Ɖ= SfU؈m 9\BeNlJ;Ɲn/3C >jq ZԴx&I`B:D; (s78lLh)&oKGV/2jD"-HÊE;L}  aPil2̉ DD}rJU+_¥ u b1vѝ1a2Kc}fLW/t)A*7ͽ;(6#Ū^q˭O/z}Uܙ^OŢϷP:5|HV-&CM3;4gf8c!̹Ȁ^&rSuN''!<|葠aR{k[v߫-\c:QD!k aIX+5sX XzAF--!" "ƪB[~Ѱcba!.KLQ\Mej)>)JPR$x=HW4#74OGScn;B}}6&bW9!.KSRqZJ6(d=ڲ@[3{\N֎jH/ɍΛޣԱ7hwNERNVVG{)m@^$2luכ d]ގ\fifؒ76Hs`t!3"w1wu*x $n\$V'|,&:@'$ O#$"!^l !82y7va{3PTA0Ծ9 f=_A# [?x $`O}L~sěk7ֈv{y=&F&M8̓&!S,TݎW746PLͨP hP3puj>I$;)}Ru^w<?[؏:3> 7 }T냳So?;λt'y y#2B?޼g4 Nn sT( ox| zQ4P<5Jc^CBsD}바9$d6r$RFiSzHXd,D\`ɩPT?! ?`S)%: ]t?&+E~ ]wT?!R ?~p"9;VдXtT!@A( 82ۗ+ ' <_b%QG9T:'$B`# ac r)8()&B⿨@a!;w'I j৚h.tGbѾ6X Aj A7-?܃xPИ<#j6IeXGWY%]ޭoZeh,@dIPkX]p"ׯs]û$m#P+TiɧwL]vwN=]NvR *d 4ʣDdC j kF̌Lػw\]~XmI692A%HHd+p)e}:Pr?_ܢ&O\|OűIOUh9ltC>R4QFb;~1 WU)A_^w9w B1-[z>z8= N3>(pIQRƛfI+U lm F.ysӻmVTr%r`sѳP!~& H3RRXna}`r-aCH H@ @@$I$H| {4]UQJ (+9M ar#`ˆz"t]QY)@훻omv bp"EJN^I'yi`*6$݄& cm4n( ?o?oq_k s/xȕ*$Ц!yS1ٚ4l|crpܧW1(ag,:D Ҕ+BBBo$ $Wd5㏝ZMy7t,Xmɦ B%5^0#]5'(1 SF W+׺#4EƖ HŐ,=aK|tSt"cM"fI 6_tE@|DMK@c?A_`zCי[s>s<"aT1yC/ B;z^QWdlF pðND_&n?3v\S"6ne%x\ I8?G005dɀphf9X%t=cַuyD4h1ֿ*GoG_qUUTEHkg.xs?.1 /噘D$` ؅G/cD/r).C%o8?hH "d9 x^)>Sy *+%L~UB> |q/#+<{}l{)*.j:kF#2hvTmΘ%{iFz#k|~(]\H6Ȁ:sq|s*~~1'.}Gofh9fbHrE֢֐4;[)ѭI(-Md t?<| mOOV*|՞:,X D}e)HRDxN!8M9BԞD9NRY>' !/_ƹ*IgY^/OaЈx"_|.g@$I$߃nv\ A?SW9SbP( o/7Єag H?2e'&MC= NLuh F`QX P Q"VL2 2fb3fΏ+ 3Fy?ƩwNȢtvQ`ŊΜfdf**zmoAKdUZ‡*5bVŃ䊛}_Y~+d?E~K|G2W2&DH6n@M.}K-`xu9F[J0{KGjl=q _gI] Q>?yM?i7pe4LWP>/Bp;0`31#Ȏa c#UTH2~R0?Nr_>Cov#dHE10(#+#IڅͶggb:f L9LgfsQCϡk)L@YAn@pC>tvA  |MCfy;͐> lIsy 7va0/k:fɁ {mY'C~ #Ÿm2$;Xia'lļD@GR.MIPNW<2UgLd>dYA@5^#V[菵^c#(^6``I4'PTĵ>31{$/lr}`}uM!(bf9d;I^C7 w 8}uRv> c XٯfZ0UXMSFf^YkzNDR!Zoc&8q;3n%PH-P#a. hE 6$'̿2O ҬUUW!w]Kn&ln1FFD)m#/-;3KCzA95!R'pn}f<"ED0#$8B;QUQQWrG6iTD-|ǘ Bx-k< `MB`rl8OLDPEL Hi,磖5ER%)[dFcnA"Fڿꫀ&\MєpjB:8y*bۆ,DmI5pk H'h_ʛ71 !o{ =Cb;v1*>4!H?;4MXb6fI,ccW聣)}G4?ƒ`WhVI?ߐ;N) U4~ dXd"R(G~STv?3882"1j,V6`a҄tK6,R,HgT1 ,\D Mq2V͝66ZQf4W31`Ur:MxD,5uNsI[M6ԧ} xҥ">vAX(2ʼᘫow0Ү M )1HѴ"NPtSR5MSTR*4Ru<$A8sל'Q kl R|_@9p"z%`pF"Ey)v?= L!sr-_*m5IRRW^-UƇiU!42%v#TaH0m)I=@`_p|?2;%%*a'`6Tk"6xp8d6@_Cni/g07Cóe(iDVjC}Iff,nCFOXl[qwE;5i!2"#|;'iA`Ou_+D' (wS$ 8#Z-y/3TD]R6ug$X#oee;QDkP &rLh?J&]|(&)D H٠ &גH [~vrv$u9%)MdQ!hm3ֈ.REM] j3#,ᮇ2ÉpfwtHM6t_5A$qdeb^!I{ I&w3ӎ\<{H  f ;:wUUR`!ы:q^C#d G 1|0!UUP 6'2:%hdeiZ%l&`EAeNQ}2̲\o8CkPu38XeS~z?7Ǐm_f?#Fpݥ`oBn[٫w+G_> {|.d?a&0kbR@Sc*ϽQCj\Q fu ֛Ceg_2N]:D6EZRO__} pIv|KV<Ȳ&@H?kƛs;fikŠM̴Dd#T2dfkO@d?FsJop:!(84ƺNi=' 6M0䓇(2Qɓ ]cDߑE8:Aϟ"UBڑt~j@z.G~nlc|g'Nmi #s,k}^rXR%u8(Ր!M򓂉>tp G~^ӷ?9 )SQ0+h!4eYr,6O 6.[bm|S]i-@PfV4fã",}')p8Z:0K(eŠe)(ϟ)09Os+nNg`Bt.5 'bxJO0=u Cڈ *vH/ ^ò t눖`xrB y\~>Q6)H%~t>$4/{&_ @|7P[,Ur >urC&(UW-X!y}Y,=n4 }V7u*@j]KRd[bra'}^iîcH>DB!LP nD;oc'#M_7} W1^ ^wv'wQXl454W~,iՓI/3N5 |?!7ivOc_rHFDcQA `mgĶJvH {D㱹 5zI)8e?(Ӱö`LB$nUKY7(< 87NF TȗvO&§0yiΡ5 0wMǣ Ml&-]|ˤ gLo#O]Xod^=#GIՒtt +YLa?DP2` T3p73f j9j8:H,[oJ0i5'4m8LD/j{/zɘb ޒGUg5†8gj>g|L17 w s6Ce)M/SkUB}'< E2b Kf&1u(FLMǎ=7kepE,#0akP \2-+-jE8d~P=+JX'.|x<d u|43.к] '=q?8TZ"8@v̘Lvó~EnB4 VXS%9(* 0}YU7 RL'd)浂17#OŹ8&<f>瘄]MEG$uG,lR?_ľO3>JTrdzshff+|hpǣs?se&`L<8gD \="X1&c5 +%2m[ok,":=(H8"8ʢyrTHv38>TBXVZT9@PmPJhgc`%}(;ZG$Zq&,x"ixgL,e.i<^La0P I LWTHplVKb%dP+AT q"MV҅0^)T@i͚P00(I>5ہTnz'`GR_E5$&UͿ._mJkOs5Z.GO#o;ik2~}ݍFSþ5gryn9?c;?熗/y: oҸCcsP+muQ,?mcH+2%QILKo"[%:wG*y"duN>q]Zj5Pm))lcS6)Ϳ;i6&ڛ$ b+tk荓26F f4jhYI gMY11 Lm`8T#K_?h Edwo>¿1_)K/WZDmSn%ٶ РM'YfowzINYƷ[N8%V(I8 \J?6ln|%r xv|W "͘,!U<:fKݱ__<; ~.MvL{ g-> 6H↸͎79[~QbHK}^'c'R)p;>ǸQ*6AqYpjdŻJ:e  !rq"h!ál0\q%ԻuMז+oBnH6s%ze~2i|evs} MKk?/ZaI!yG|s%I}%;LlH;8uwfXYޙ9I˫"iiլ|HkۍswOKEd#8;Kmqo׸^G<=i9'V_ 8>?CO@c~g i(("`'zltGA^y;#ѳ:?O^C;G<0U 6P lVr_ -PRS aOf2,x+ c`ٵ쎍C :o̸?FdK5Oj׃K] q!.L[!$ե X߃^K"X `-aƤ9$(!$z}f,C3f̆ŷE1DyŘ.^/@ˏ74I IyO/ۉ58Io8" HA /[3˰^d8;I nɐ! ȩ٘\8" F@K۔EKUI2l_y6A>]=z_(˥ܗET{??755CV(HvŋSyS<gDlTEONlpO<^}ź 1dWX@)\[pyu5kTf=9^ '9^̜S8a&Ǧw3{KPm4&lVF1b"*`EQ QTfime:ȓKBCM6&`@(Q HZ D̫r*1 XʻZ67B XINb$auΕsw*W9cUm0]*+4JlRՐP4P=$0)"p2A'01 $mR'5 h $j]Q3d5/'φ7 j^Rm\e[NϧC$b8 dJ'j!AsHG͡,AH x@g*}\fa . 3.mZ-0_%_C[%R0(S5(XT#AU\*݈U">dv]6t3I33.z_mH@P XahULb|6('zҿ`Ywȟ>~)a)%"2d!ǰp? ADDB S FT c5"IbI03"Mx‹8N8L4CoSlh`ҩn":t<`UdPDFl6 %0I ގVVFfTC"7.E:X^eOYPx1A?!~4ӹU w̡Q `q=`Bhڐ7U46C z9=p3o\h6ǐ0bAY [įhsl`r;1FT PB X( yv Fka!tx}D PHR-,4mmfF46xC$3`5kMMD `DL9zLΞyv bʪ$V32Iiws.]=ۤ% f,LfjIiRi1m֛E$$fʬa*Q0iTdfILlc %ʓ$&`Wuuݸ 3heXfe0ܷ;Pl&XQ`T"AFdmFlJBD08:4S:4 *i*\6"CI! !p"0s9Ww lB,#WH8=5ȲG+3> "0C `آyҦL0.%¢ñDyLj0f#" r G}uG!=?/:W5!;e=?ELĠRqXZ)s jb\& b0i!!enJ}2='涇j h(};??씪y  iV@ @'-p fdGݧo~@{/f=Њn@6n\=\tZb~5Wo29hn ARR IyN.¨j_%|xش[ '8`U4wtm>< pS*~ l a5*[;/RC^l @{y l' D%ʶSeJ$ ! FP1r\.s!(ŷL ԅ"z! ]>Yӷ7`;FI"= |4((BOQ IX7P!5f;wpϏֿLLK C-,D?C 3,IGx| y1|)"P YBJ;Ps!Rf%#&D*)Q_=( a5cGs GrEwroU|2!ʬ_Q20(+bANě̌lͣ0CTD ĀOhzEibd~d&Hp|=wTHEd" hI6gGSQECaSd^;&}8i?;0AUf$,`O?HFM8Y-UuWHQB,b4ڀ0"XQDe}/ɑ5v(I~(sA8/f $3?("" i-)[kJLM-UVjSmEhPU?x4zN㗏OqVwKm&ֶacmqjk9͚q 44OEo$,I !FЃ a$EL0UP`( 5( u)Bc 5\W3m-RodikZq~ }eә1su{y ))Xf**j"DUøgS8k-lbO5{dËoWQxm<+2WNj浢)7"@Ձ M7w=׽rinZۖ*rvFRޖDm{`HȡIBb#7 *|`F ƨ Bmۖ$޽OyNP"U=0y}1EjþNA*fz u"`! 0C`L+NP" 6vo3  JV>Ѳ̔1>u 9ODPS0ڠ ]1GO<sPXkVb?5Ե^ 6c"Nt U 4,Z~t0;1h1#Џ{\Zf_4iדY#aD,^9m*w--V`Q6 x絃aN<*9 qlb4ԡPaMյny[$B]Sk}ukέw޻.h&xȎVcYdJ៎aȟo،-csb:U#'Rf АCLO㻸k ԁ"yOi`ua{&߃w y˰P>r}faH`D{ EQCCDȇ>#XwF}]Er46؆.vr'&tB >_:ۤʰ]pns@e G%R19O[9oVG876O"+*u@U^P/vdk?oT)!f6 6).ʂ1t:^$NYrt)JPŬim6 W⮥5@B7s=>&fAR#bTv蔤شAFX"),kTfEb]_dU4 20B uBT|%GK1|dıޚKglD.oUzAAq*b:u7Jb |rLEO(jGT zhX ' )r[0$ФЛy: R;$\bu^aZ(ExDUM>|8Ă VNE(hĊ^8Ý]DE Ű֢4yƿސ})=}YoTtS-ERPCS 흅?/}Q6 Iu#O _h$ hJEⱄ~@~:kJt(׫0| ݡ.UJ3Rʄ//a.N,g8'SZ()~3ܒcfqQ|1r1DC8PIs}PS_&|j!A)~*HѴ(D{|2~xH¬rh@G%PJ fB+twf$\'K?%!G8T Ѥ6BX.h:lyQ< d8_ZDxRCA|8kWk-< l_K&|8EjuŤǷ$"i[ @N$۞SͶLLfȨ iGKEKd2g}$289C}_DfXzҘNJ8"]F W7Yy͈߱}XwJ0S,fZv´Dʉ1y@a^hgCY#u$rtzsd޺x4,+L. (uR6to Sƽ;zl3MC'#cVA{3w|}:RT@rpC6ΰ#6@΋3+b<R9J5g,F,sꊈ`=v_J̇7KYT[p !2l0PvZ@\l({pŧBIHB^P8/1.JB9T{(˱($ !43gsrME _J΅WI^Ap)?F F=i!`#4q9]`^"#*=wN3 pۘcGOT*?v,=5q8`*HGT#l(#33JRVr3&#fU1?1On**|6ጊF%$ 11($TBX kLXjŌXҒi-+DBD4H$"f`M;B$JI:G]:<0ݨai~~uC! )jT=Z77q&PU",QKaf`Uc>cC+'Sw-|DrYqxKQ~]L#pAK`@wž>H{Hݸr{kMs[yʴb*euҠIm'! @v?T- Dz?O#83ᰬog.A}w?+O,D9?ŤMWabX+ȆH8 J,lZdmIfȕ}[FDaY*?'+a#(]~6\m??kzݼ^p!~ .Wy&dBO4'.|_߁1h AӼ.YrZZk_k3{]emU^Va 4m>RMGky̛\C^^SjD9 }b=9@!C2T಴S @v~ևau'az}HpbZB#GS\+Zy@~I2kj TEL-=vCq'~U@WAb?zL<:8`SS|;!'. QM!L=UaQL4Ygc˻:;ؘD3N<Ŋ\Hf 3DPE\Q,! G#[hX .ɁQR#*2םKd›n8 @v&"hE8a&&HY8J;bg+\7h)k(i,T i4=4yGX"ZTkDC 4cQ+QQ`B#QAF♱1B83v]![[. Nh<`Q曃.Z6mKǟ}v-*Ɔ%{'5)W H;!v\eوT]P1U-dqF:+e{i ,,@8:>9ۨt۫uQ~yr q(-Gb6 HP\X4vf"qZ T1rf|> xqZ0 &b2ETBgay"Uɾΐ ;H@@r(a !wq(ֻ3lnk$nNB@N@-6VRz1k'e?\lbzX1yoi ~-@!TFi{(%)(L8٣ajb8@oeMG>LM)/cwQA݄5iƲ d]$iy:o%=bXa=wQaa*z#In#) Q=  hEwJb'(E^#UKֈ"2v*QHHu#z+YЉ3^0ظc~-ChQh)P-m\ 9iyiB4|]QĒs*+bB=[&ZF49w\VKʝ(j -BA׻w!7,Xm8ʦz2 !֙ VvC $24tojuJOi mwܦ`:l S]o.Z ě8̀csev7JVV'2Ġ8~ 0ቴ/ZxV u~Eyi4R,2a`;?CMx<$I$I$H`["cnG!k K < aA dF&y-c 15tɲ$Ͱk7jC)YZ6 ɶ::z N?9_-e Ø`y0Paq ;CgEH`4ڒ0=B_@Z)ݻd$%JUY&ڊZI+L$gk4x^3hJHe{CRy1RU7 ""%<ƃÀiztCހ?l"{!?"Q9tϙoͷVpFlS4bvdhee`D\W#mƑڜG@XQ)` aG6Y(]Q2j1Q2`2nb bI4&E2$S(j,DZ7nÜ`n8ȾA~! Ʋ;XΩ# Ş/p ~ Z9-moXtڔMShdeъ cdC2H^kܷ{vd멱2ܻ^\,_-}H0d(N)& [fA Hck`*3 C$4`Ɏac"j ;CpdS0wIl(*U$4~0{;0 xCs]Fp5'R/SIM !s M^j(`|m')佮, eBLjUU i9[ &Ui{QSxۣfy Cx;ħXiR'YbTޜL.͍UB " v]-j?P##PΦBpًXRA@e`H{8jͨOLE0͕tfvK7C4Ƿ)k%qC9h`\&K)d7Qos\:ξ{#~C1#Dtt`!N[[Lt 8~[E|8w Obyb`M``b}5f(|}Z*1iڎ$ !_JOm2y@=]`/lTG_lX& CRScF4JuH( $baY) eD fDD4J.C7yszf$r`i;q@0ByA 鲣AC lB7L^F;ڀraΊmܿp'~,y$I!4zm uPt?A }n(G4>So t-:΍kAfnKԕ5A7Of$7~A4^)s/',;6H~6Dt`ddQP0_aY?jMx;NHr"$4n&†ۍ}vdY>Y>#7} P`#; ӞE?*_u\G_X<ɍGh&6m=̓V^m9Z||{LN! v `U!֚+ lQ47 xhJH3a0z~!ka?sg^ўI*Xf讴}U 7@5͎Cބ.y1^ho~p@wbF OQ3)")"i1k"(3Ɓ%gR}.x6IIaP! @t=)ٍbz]JYŎ4B|%lҽKw}n'6P#fo*nHD!Č'v+ϏjM "!Lȍ~O\m,E䭓2ʨr(2[RDMFUid7P$3Ouk0rrCj~"mֻqW~PI GmB-ypD\j QF!Ց5Lp^ݰ-0& \*8@& jX@`B怔Б g$BE0rP9jczp.-v|j.ӒK[WJ>^c; iV)/p` ĸ3rDFI+2!e4X<5Y ^yPK 1 AD ۭ =Y jGAGv,`3rgX@L KBf6zl4sݠ9`,AGnƞ\,0z4aaFG~=G]ӣKY Gğ O; ^cA V €|p )z*>:'6 _ICd02 %kXuj)4c,3c}B^JF}xۄH7A=!+wz _r{<˦@YGo0F- e;! 5y{BZd]/ A"̞J@+6y;  Y BY2X7JZUK(Gm<5c5ZCMa,TY tj"06!@QNZNțX p]xT2-] K@p8@ tqto XfXgSS!K`NLdks,'"Z;Q8zC% 2G~DW ;HAI[ :$=y^,c,yyrC.C*+! -յXֿ\8Pֵ (oLdRjjŞF\'#󣚯ڜTwQwrfR?R_>%-鶣CŽ2wN&M7M!\^juH͏GaA8ь =Sgk5æ^6(t1','ȕm ,B1V .F2ZTi\DaLv.ML4C$+P-) 4C n6² Z \o!2d m2$,LeEAF `fhCY."iUVUpXk}FrLvMd r^!NΥQH*MBoTpT d֊f*C穧MӚ1+6۹:qWeök5L(adD:WSu9oU߆qo=G+)ܮ.87KQq;JN!w3L8֮ƴHL! k?'HZ}ARB_)fV7PKZӤzEfuç_k=EϹgl'@ m9 X۳.c|E=llX緽Led[.[:Vmȇ*0`3]#g kX}X$Iͺ ۨ)q,p*5tĕ<ꦝpjzjsztfe2.!x$Tj""܍]UUxo-֭C<'q wZd8kdbW{1uNRϕ !AW򹛽mS?xl=|K˯6%=漎z]%տf",t{c`p6 }qm˭,2*QkQ9vԄjw(%Bv,[3 &226`atHTkLCib0 ,S JN2taX{H\%WlEӇc< Aٳ`TzdaҌʫ MDQ݉ >0M( Z12V~12q(hV$[ G%{RCvQߙ'=XK(E`r6,0Tp NOp8GsE%:aRVRm4E$(Tڍ22,ʄa6bFInoCvF(bDmڠD\2U" .R)$]XIA(*bS`v38hէJNҤ;-/vvfĒwVYD+(`.E+cZH妠0Z <lӽ={{}5pKۮL)bn^O1OU6$i66Y;`o*H&"鶪[m6P͗ h@+pms9! j5D;c;x`!fDGKsy/NLlT"޹35<Kmx!kd8FT*`NRbՆJy56h8̉ZWڵ@؉F C!@;(>̔RNTQ5Oc#*9i{>+r >NaMQ499 p<łcQfcA0O2iHV%{P3RR y#ψK_$Bw-zh4e1.{{ C}Bz&cl! BH mfI dH#nLqch}nQ|ʪY211;`66qaa03&i767]L10Rt餳n1FMns]bӡKXTgvs]r[yZUK-.@M2&iIe m3$lJl H $$6`!'ӑZ $bBIXE*TbեhhjI)4& &w A$F VB?!4zBG㎶qM>`jO!a![NNg>=tmW̘tS!Bm7Zc`1f WӚ.SH"Hj C^y*Ss!Sމ [>דM>P~z7fl88;CpnLŘ>l2Fb4?` # fDϷ(8ykO;ŗw, |z󧼉>/5].Eh0 akJyW*|ax}\^[}7a=䩑aʩ.f0& m"h;bi-h5bmDƦ֒UK+UIIIkTV+dVȶjZ1iREmm),V( J  a$U$eH IAhH~6|x=ҧd09}_W>_g? 91pD4DRJA J?t! 0f&h.5vVţc92 <*(jr1mu&IK2!:!F㍀<`7%nGFN]28Ӽ~:{磍NP l4M[NBr:è$(<0S&71z?jABB%$<%sW ''٘ #k>/e)HR&}0Fk̃17;]D<ӎc?4&K0m#Z҂K< l5W@Ǥ=_cGf0)N~RA;!#}Fs9ʣ"]W2VyL|'z'_E՝z>gvi ro@=i.wgA&iׇ a$RE!iD]Y(V|19vߏ5UdFDE#dHel#d$RE#vc 1) c,`2:NN1 pbbl112f&^{| >  ԑA>-dCTm폓x}RDJU+20}_e"Rj( bRT~Ss ?_RDI diM@3l?j%Zk(PXL: 2*5QyFa4qrK("&dd"dDA>vcDAֈܓIRЊHn#;U@LdQF9d2xf()&( "" S`ApJ 8JS&J:&9>.A&MhcH65"}G~ci|I v'b *``LE$N=؆~x49'k?*ѩVoux×Èeg $WMiFhgyYZ:V.OO3ga.5Ӈ;1q*H .8p,8C.Dj)|QA!Lc> kňbJ!iX`0@^CA'W0kNj` p`&}hwIئ\ADFchtaj rkz߾t#0IH2An#naΤ-q\CU1nӎzk5PkaR+jT)G,0fF3Dd Xffw v!j#o94AU+[HNW! ASXaeED&F} 9^y)svu$l4o铧7A+%5#GQh|aaDhv8RoQϝTxÙ`(@ u֪H(CN_,h[r]{[*wNW0n[*s  8j/IVv 'B6+ѡ dPނhF"OIAGPL6S (b%ʘP3ʐʺ: ]᝚P %L ѕ7*e;УG;zE`PSB_5TC5f1p\ww&$>P]HiRv{LX>`+ɠ !c`fs*ARG[u-4HJQC uPG9k5R&[bQ$+#ʄTD6٣JJD,K pNCd!Dc9|Gs/6hiu0|ġ*"!%{VH8elq XbFhGKľPey~0 T χ ]6YX,(#;|uS2vfdA `oCSܣfAU)C4̹p=dNYƂgiFiUJh2s@T;a"qjU$sU `Dd otR0 x$rXo_8HM Q *B9"Fv2K#y1bqPIX`pu"9ia"YstRۨQNK3oa7!$$ :.+8xMHPBʦ0duº`ѽp4J(Bt8AadeRpO*h:L2el1~l|CaP#O36> &wfDkSE)@0@Ч.J땑0nE#H 4CHDT psMcm4Atd_$v6R LYd( !F:y2ILlmr^y-ɯ7ڽ}X-ߪHBeAdNx D*Se]]*RɛYF5jJfԩI4dHd( H) <̆s!@j 9qC`@ %Tɲ+ԁ 1`gDA,,K$/;UUv3Y7& " Ab"hj|T4Q __Q/OQ= "26EPi8j׺z];lid33n0ꠞY|5Dc簞Nݺc`X^y]٧d\Qmy^2D0`/0B,"}!/7:f2>ԏъd8CRjqæ>g F pP8Y}V M|p@36}FD;D7E&ņa}IDSh0ԢP7҅Qmo+UV? /hCN?V[OV0?&9lτ̒yt\t (4 q8nZe3יeDv4^:i'Zyht)Ǎ!j(FVd:Etib5*Zrf{lQP"OǦuSWQQM*76i:AqTj;QC@ɳ 6Nj@-(!DyJ80ܼ|Bn KDRA"Ƽćt@AŰt9>BxA9zg#$XKLP!<&]ZbOz $g=yđʒMu䠸i$ -@x]1*sh vm::a"@e]I^Pvȉ"wB.vqnhLލ4g&pKWK E7&$q"VaEs@JUb:'9pCWIdm֎yM<y76l`v#@3C @0j@viLd vLDȏ6_BIDm&S!a6$ǢX Qx09IZ T,n'!$?OO]?ž}GEvCe`Hs.DD'B;C%$㉛HH`ڬùQU9؜39! TiD.CT*$ϋQ4ChN޽ 惼 9 @R>>KvuL_ SU|' ! I 'W~dRj^jx`;܋ٙ`qjȪڤyeDHnb{T' 2g27D^v!!m/PPQpgi; Jޟ ԱB6D~T[8g70i2 6x>Y6gldCRwCT jXKgeEV[ܜ)Թ{BPW*QK45z\rM' 8p`pCd!mz2R4ʝAJ{NO܍S1R ,ujhbRB ׿^#DQT'1,*8M>d1E,l9gy3$fߪ\VS ū;c)*q*#?x|ѣ=@Oyaf1m,qӕ+$M\QJ4w[lO` phiĆK]03ggIDc"`a̐Ī( >vO_҃r TfɝЃH|Ѩbi:ÌCg|MYݭTQp$cYNr(sx嚈ϜW'O{`oG )"@<(& iՙ9fWVnqצc̄ĐTU윊%õ+ Do "| ?}j {N@{j#B|` YьCi(T BefseQ")@WH ) v؆'T iz2!9B;Cy=U͘ИV }q3{f A6y &]"=D4X5HwCȺؘ0c36#YIh(?K19ɴ(4ҩ ;r԰DoZS]K'y9`ޡ'בnff-Z=JcgGbC_*AE vmw*rB \q>—1rÒƞIa$ !ׁ303CwTzۑ ʊ N07Fz3w)6 L.6:^;gl * 9TD l~%Z0Cqe6gnPwe0(Ƥ b}>G4/H9x})Rb:kB CEz.B!"v&@A ^Mp~zS޽hb "ArvxE0ßf'S jT1``K|'4 {a ̌fs֚Z-9GŹ}ܔK@S=,ö/j!t.iʆ֭b})M ,Jf[m"Ik@DANBam*{5+ a4ȟ S(k5#lk(u L -Q@@٢(ppAf"5s(lXq r[Xؙ"c,-cL`3$V[%O侺wd$Di$'=5ӎ 19Ihijm.gtmtnu76!1H2HDЩ`V6I aQU-Clc6YtR:沑f2(c)H2UX4Q@vnΒQ#[p(YiZ)WUjڍ0ߩL-#pU*#"qpd&,#ʴF 8솈Pe `%>N6PM!G! (hyK9}xkIH* nyDvB.¤"LH̠bF1I_Du)/]P(T sO=Tn-+w^nMdY>+({xg8IsdW-B+{8f>GPy[LFqTN6CIHZ {&!E?[X%owtN!+*<4Zs +=S: !5jJ & R vy z(.s, P%dDCkeݲzGV)%{T(,ƷeJQ I`"d)"BZPD7v;bkfZ͘`.kxhM@0LĢJTچ g8 y PPX .Izd/)87O'Lk;r0!`c)MBhĎ516 *7CGʰ"g.ٝ-Kʍ|ɂ4KԾ;b: 2 Ŷ1>LM6G=z71 n[!! uxbsռ#:E(NJR_Th{= Rlj2$&O\sH#fc- *e!*>rRv`  !Cp>R"#Yh"U%C*)Qp'>P"l:(kaHK$@w*Dҡ|RP^M4O a%%$-ZI@+) )tkX`[h%H,pEIQtI9s G!Hs.4 'PC<%#y}Z]vG"NӃy0 Hj]x~TAɶ~[&HFP)!"h P2!,DAPGF`3-=hJY~/1o]jKp9Y @ԽF!͠!׳oevOOh}a+Yq$ 9kmN`4D|6_ mB!`a!$IXh$aP&JԹXIN^h|RH&)Ck3iVaF* f,*IDӅQq.چssSG(Kp-"B g53 dJDD$KpS CV-÷ߍ pb1cenm)"-]Vt׻u;݇]۱rk^v(I 7al`n=^mAZn"B(4Id4ʙ||]mt8^o]59:XHEL>E1u{;qډ9DCY&к5.1JU00R:v8(%PmZLUJ#)Q4F40pQ64kj7^b1o@ƈ dbmc"28cj8shj'A_`H0w 7<|vE1rdaN:7y,J*fE4t"!f2' 0h܁!!4A'S%ΜCQL@=Y'(*f)^J=yB%+UE"B|b:C9$iL #ȫh|~( )A}adŗffPdhаmU[.N`Ī ҊD GwڽVlSM4m҂I;jvtr+0-(Ͽ=rO]>QNAM%6Ϋ-ck ɇ]w潗2̥ۤf]ڎm\+[v3 i59ҵ @L S,I5lKf[f43D1FRHM& BT UVF$čy&D5  `IֵCJ)*s*G2$th|!?RO6Hy>f9OK1S!JTIځ6z<z25an0vX|~]~F$4É*!cxP;O5/z]u*b'.!PEI!KAA:B ؒ@ǧ鎖1aa͍섊j8i13LCU+ :<i0ϯ%GT=S[mHR@4|0GlW`:NN |*Ԩ+tJ%3Fh`Bv`䙮J<mKF|~a] Ҹ6~?t n7qf眣s9`?>3_VfJ-ND䋐&cfDuQq ΪrP&Qɛ *RK-e6.w6l7ԡ۵HbBGӬHLI D rnab:K#0srG Hvx??lґN%;(L˯uu- 0`(~Av4NHp*ӨIN!{<돛l-^~ek/h$ qe5}-I6'ރ.u rG )Cx~xMfqjdȞv׌x\4v#UqRqҦ GtK L* Yk0 9 1nXd Z˥*ACa@ZFd#LBe=ƶFwY:`f5\Qm9MI #bηĊ` YIey9ӼeXuDePN2LXg`ҨCu1&Кf43UĒ:`eA9-Xtc(ƮLEn%Jۓ \SHZ-!,~]}#G^cZbHL?> $&0?_?~*RW> |}j$!-@>n11ui҃.wbg҇“Gv9yrOt*/+!IdՕRԘF@ *p]xyay $F1ug٩y2^[H0o Q?A08ǰ$=0d}P--,ЄAw"55[d\Yi0cFâ9H.wɢWG9}:l88ձpJtO3h䑚e\ۏ(=ىiMDGCb.)Y4V( hp 03SFC#QM%huPrZPP : a0Gݲ{!9{DdvۧΨ]X,~m}ql! H:>;T!|P|z;)@6E_M!j2wuEh+*,bCZj&dEQXɈږJ,^Z6VmFѶڋQQ&4EjLKQVIJalѬj-hضMmJh֔mVmDI-6Uoʚa2YUBzb8`0Um0DC@Rpp>790,B;d2W߭IhC{ Z- E';õ/ҾE]~G…IDQ" BxŸ%QfXz ,! ]1ڹ|,{k H-COP">\E偄 1fkcK$]5))EMV4$Lf!JdDD^"|!TI|/ܑF;!O5.[Hhq981qFN1|S'%='(F@1-+-um& &i2ҒJٟkٕ?48ۃyk!(mת CءO]PErE=6v"­PI$I$JmMj< LfIqɱ룎IQ91ꥥ8HCc:sLOZV緢e J8WyI$p?0ig~V}yBs~P"ډ!V8W:t~0)ITBeF@1r VEJ-\5Z+7D!*1 ,R @$"Y6? ~=n/"m~e%cYN2r1uA:I0! úntLIBQD1Q"Z1mgL6ű?Z7<_9"+gȸl/%"z0;J ܾ?~;Zp:cnxxICy5?=P'@V(i %B@ 5(U{F *1 e>G~lryZ>8'K *'!M#;!>P 9U462t`jSy  dns)]G6W+뮷θn.7v"2%^rIYb(8p2Ƃ7AH v4u^5+#)aHfm|sO9;Q\(؏WRHzBH'9ňSmHp!$ (0( H6:M!P4}qIBR(4y; H[27v%xJ%ؤ1-%-Sfn1;-8؛?N$Khai0 f/SN<dv۞Sy,a |MI 9sq l&+,=R6 bl4VJSU,-Lu|TBĀ@B&NJjgig& H|U~4 Q22;ՋPF" l)!{WpE E4Q R$bѸl(;QD1]Nh6@ 7B4l .B@44o?j֛0HiwtS;Вy3lko+/1N5@@B ixĠ @d&}t@%G~4@ ^1 @ @~,0Pܟo>xO|Ta񟺟y)*J-M0SRҦdJ&%I"m4)YHKeTM'ڷ5wP?c>>oqD HXo@К ӡr?0Sf~M,;2r6!栞t,d 0@8Xõky5۞OuooUMh# 'LI@c^\ "GLbapB9 B\53Mj|4-r@goY9-L}vFsm[ICLFb@]]s7'w}|J|y4 T?nMQB hQfŋV6Edu;G& kW&ļDBã[l7FW٦ZMNryѼcU jӶ=(VFNsN,.&<.DG۩2G&U-, ;a8c77F85 *1%sm*mCعlٿ@~P4Wא!wE{NufdbNAȆrbףD~SD!64Oko dC=gĉt7f黿7|yǯy.O[ ?4ka^ u ȖÍöga"0cޡ_uvyb!}zaLhmLK6ݖ&fAQN{A|wgbZR&8'fcP}J*foERRR8,X> ҪO'۱H:Ƙ#>(tI;X肣GwvYRS>yl]ظB)J4~<#@+e\lIiiyL^F Smx @*@!lwh)Jک'8=0Xd%P4ZaSh+.K(>"~ ʂlA 06@G^8:saOS״GA}i~KP\g)2nBFo1zPԐjG \+ѓ[K+(<*54X6Tk41WMdfM0ƪP 7`AddƠŢ `U++8k2  cbcLT$SK $vOwxcPDbsELpdM0 5`eګ 4i ?001 ,! 3C9"zt -`aC K 9ܻPaUZdۖ=x#\g):AP`qv4qIvC)-4eR:CN-GB0u6fDh 8A|WÎ%!P1RkB2Z4m;d?#4 sSSᐃ]Bc>9ڲN,qo,KҐ`'`?!aXV|Q 8QC *&*F6& .7SpWU%PڳONr=>1F?kス;ïMdL332Ep ~N0l~zH$EВ5keK9Q.UsCџRk,Y9~<کO@@_".0LcɒrHHqnX8j?di7|-!*b_A1jPѰ7z VVdBO]$zWmr )RW]-k64o[kKص-B/ܫo_7AӖٙ@/mw_WʬyIqIRA =_mj63lZY%lC"jTi AH#TJD*D(b&ف5ěXo63 {vFW͂4a~Z`¤q!*k *jVF<Ξ)?vxDӬ2LeG؃kq}{B,3"ñ9Ăw\C6{:^ wQP@IpDb /s0mٛIT(xD5i4NNUE1 ]Fv" l( VM#i 3~:pծv7`>G!@ʌQۻMC]su4S #mkK) JJ"PP4 P .2„@0IHɚϯQ5 >uȍck=l;Xa!4kk/58$}i'FOs@tx`hô' R!ZXF G`5R{ᡢ4; kaώ6=Qv=؉/9^O b?Od￾+7#  ":Li4sl# *!%DŪ1PbZOYwkC% #-[T*B6+!]"O֗|KbUS,ĐL3}G!0p`Nf8?Cc=; PJNdRSfVJBLc쀠_s#dhQZ_BY ,:$_{/Dz/,r|;_d.ZB3b+AZ,_n} F\ع%S#JGǥy?$ Axvu!'w=m<'k̈́~ I_WiWyϠ^~|=IU}sćJ Ġ??Yz'0T1>`)]Sk  c39Hx@D YA+IeV( ].2JЁSm=q ԾQbo}çi( vG{*_qݣ -4HKucK$B88B3 I6;nZ|lD h")e59j%3 PCT&J!ʛXÈ6*ؚtHhBT+0s*5QWc$ɬ#dwrh!i]JKApi3*EV3@kr ;ۯMmchqRʫa`8mVsby`4XD1!t&Ҍ6&Jsf$bCKX!vt&PK!e:41Sd\ MG?Tf 1$<$҉ț9 iB(wO'$HP GK2) Ċ VCZ[-mZZckGwO2,Z* z sfEC51|a1Z_ U+([nQt74r㼯}KIRn#ii 2 >7aRr<}yOedJvp謥P(L[HQ5&]\Bk\ ᠉6 UanzTG ƥ\0-_ Pp|=:Cb* R(tu龩J*M@&cV+Kacpmܼ$!8oXhc2xJ Щ@N^$>33` B%E-‚ @`Ihc|3# 0ě %2Q515' ձiU6A@АO&\Y[)TjJ/؛cjT*- 2QS-ZURXI'  ((:Wff@cLc$Q!}! 1fvXA(6f\6o<ܵf5s$Fi %&ô˄i7Իmh2/MF{s7s۪4e.T ZeݵABT4a)cESPI4>CRεMi?sdha ^6 %(FSv#`%Ijba\m4lc #KU/7ѩIF 8!#:E!H`xUa9.h$ٕ]@ pi@6!I C 16&V 't7>Mc GhR&c,TLZwj$2MʽŒKfƑAFj"jDQmK**aNjSIsoE HZz[9M 6H0_>OF5r *jMccBXFbZQ)-[_;v,-m^Hk|a+-z%!"a @35΄ĆTav0e(yO@WCl~[mfI _C;xCHaj(ȉNpl|ɲx _rO|睗 'km2JwZ߿JQ[$YZS)6I2E6DT(L44*K6 SYiUffKEH>d>튭lZh҈j 0JZ@YD 2d RB9@@B*˭^lZPQ26#ZC&Ne8W3L|mڂ1aPF@B(Eϧ5nZ%_YF(A I7c6Tv ]"EJQtEPNAM03?y~'Ny*Bq9& Fu4P/Aτ3kL$oձ$E$,TZShT4HfTZ̙626jrJD )(cHJ  .JmTrL=^?6j#hw'ɥx_UiR+h!׹(jj" Kf`81/%wa}(#GsR{G`ҿj#ɖElŷ/g_7 (|S>LdGMMٽZ$#(Vn|>Ol|z,\$2IB1$_{/t)(P&J9L@vy:.|ďs <q_ :(@Lt0”ɢޗ^+޼ 䡲ݖQM?n.5&0mzWX p@EtD@6.dL41 $PxM$ЄZDDhP9,"DHa `a!&- [ePVb|vԀԸAI7@[B[cn\畺|$$(I"҈J@1I;eqےlZ4s-|=8($EXp2mIJ#o)NrRM^ժWJήMf)\,ݵQАq mdm L^0p7q\sV^E iA5¤i" Cu^URڤ(J[)A pKDАlVD;.* 6!p 8!Ͽm"D"[VURU C-&4X&Pã5&ѭ3ctPT2 GR!DL卒$}>9\~#>)b@Pk1AR4}➝5LL=Z͈Db; )# >)Ez%1 "rQ 4ϼui#"yne< HLH{NQdR* ~ohSqZ 891 a$ֈwii\Po1i4L m cM&r pxoLYh9!:&)w9"6.Da0[Q JzʽjQuMj)' n8[Aagv:dFWD}?^I)~|^`e':'GqCgst>P;8H邵Ko!5XVO VO@c>'.z42&o7CN0 `bcD . .O?G(v1)G&"Oڟu}Ǹp_Eуe>V88S9pgvLá4vUzV++3k1VMPh]Ԡc H'#ڭF ImռLJN BiZԣ Qp;a(H(ygUs'LF8aPK@l*BMG 11{* **$փr l4+L1*h89,.7ݣ 5.3BكcȆࡊ.U!1C f*.D[FN^;N)wI,"" M 7סNEC6qp##ϯ71}.˘\҃ @e4: AVI3p+#M`:&=5[#",d8 CaeDv0qSh""h#,F 1kXV£7OZ@aGYEf*!2[QpH4K H,HgD@a+*|0҈O1x-%bTHiJA_"@ ȶLGgyٌQ+;m\>|uzwcg ke-E'dCN]n|!TL.UBRh6Mz$S Z2 }QAE-@"( kD#`!F2֠`'B?s=?w~3|h$aO 8?IP#*x.Uf&Uϊ23 (~0}P04 I)U">S昵dFAAQʠ0i>jP@@J;"(dtPx>9JP"7OWG>NAQlP^õ9OLEu]P&JE165 9}>ny1MbrJcP9@3X~GW 4P+%f3,jڣ DY)h|Y:c ^xN :X0~zg; RͳƋnJ,up5S5t P4jUȥL4#mXz!#D8D {b" 7P>8hw}>p cgs ̕"k֛l,#d 2(d ZW6F!ĺmoɶ,uc@2!Vl1"hC#,dm- B"HBAYyI9ad1&@T% _C\&r͵kv\6 &(Pт'Abӯ2 H'Ry,J(X,FCfYFQ9R$2^zx,x}?="EK͘~N)U[T3[& UɂD؇#Vv duK0V=q}YẪIkpgo\yu/>,UdL:IJ9y*C\WK-a덋\7x; P8@!Ia!&GNO906vM.'jvx@0 ;@A& s㩫5SZlV(G{>kr_C 1wA&<q!ßU10E),0r(CQDm0lQ9=}vBM`!?<#DHI}>5 GB aBiNƱUk54̙mj+b E+QJcUmhZ J#$Bm+%Yl$!b6ʚaQڻRkrۚZ,[IhZjU)5X\6mtTb!ɥ7R JUE6&KH6PQN&HbUUQHA2"dPALMJ[I6R 3IxR<.lj6ovݵ?M6;M)y=<1i"T;GC|0$3ޒ$}a~ܶ߼^D/"i ~OsL G ~EB=dvh0 A@+suwb%B D7ps۟GU  iZ0t7vD*<{HPo ,_d_:|}׮8j)!fJ:{ԍRv{.[hӣJ%% ^K΅c_3d1,\OVhHt~|I܈ E"?Z:#A;ZW PAO|ɣ/,4R hY;>MygSקY4PSK99j8_&mk1 ڠgwisf36s3%>x_;zx>Y~gNjSiw) ^lZh% XrP'c8zFPP2 n<#F4]p1~1T;/-<疌[0p#Q;5Z 9h,<<>^\4<Ŗ&dI>NX>UKSqdtŹ8 1Vh55Q lC 71<|ʏz5zYj {q| ݈OV˥-߇5dL-1c%ډ(D\|ٲaiӛO&f;S@fE2}1}G̋Ї޾t>Oߍ&6fo}>!8'{IϜ'C%Y'"iEF6w/wAU2O݂F [0PEȌF65I]JXsPc L1L@ bj@i(hI"wui5]$cd>Ξ;yQ% ȱ"uͤM8k%Nvh4FƼhW;fb3 R1DkV\ngeuN\"M#%\yI.sZ.oiI2QhGzQUd׉wu\w2ʻ-6-U )VޯY,h9vۗiݳu4vjkk9dsZ"i7bedJ U%XXcHpCm3++VFej&wndNB4徧TT%Wn oU鴯gE`Me]M _دx WwmIEq| #([r 3&5ܤ)i{b]7vEݻW1K$i|']] Nws/=zkzy)}mmDʝ@ 0"›C`2V(1CJrMUgN-M)(/0~#K$.؜ڬ̋2SֶfXGej]xcX0 !M:1© EӀ  uSfP]pڗ'wl4 PE%c`k% KvO,ivb|#1b5 61y]"LMs}J9䍴7+HSĆܑ%;3joy-+v{o*3}\* #}1e>MirUG- 0ٚd!X&1,.3`2Y & 2T;wjMnV҆VoG&cnQ#Emv#c zH5h&D4(ГP4PF " 1ԑLҊlIN$:HqiLj[u+v巻Fjiq]$-0 IBMIZ\hMk[ϵ^kC&e0ב.fAl:Lbzf(#[F|Zd+F M JchL_)RZFc@@b)[K GL"C<:(;<IHҔj(FKI[m Pc-ҥW^dz y B=z2azkoI("cjZ>_bl̦?@уܺqmǴA=Fp4l71NGnAoYϕ)DpKn{n8aC@7 B~y=}#+ MA8]ɋ-HV6AUPD ddF1>t$L!'$O`'~zfK=]ʢ{ @0<Ο3=?!H @~n\n(0D11(X*fhjg7&[b.GO8q 9WO }>Iݱj5'^_^>I[Kv+zX19ow\,J 36,`hR }, 2sC|ĴDэU`HJdbɵ\ikʣlshV9f ;YjSQ&a5;1M{RVN?|\=j}!$ Qʀ F*Qb%vτTJMd-UBHHYHg`d({@OELd5RDԪjZ$H_ !B%ba9}7@羆3=fg?dxHD R xJRB5 5*dvXIHljԧ@$*!&tC(~J`"b[@i5Em$D !!8PC`BX){EI:g˥hTB%S>/#P8H ms[od%Jb@DB(@8K=!y)+L`(Iyߋ׈ ͹1>_T "aO΋^lNgA~2 7? 5~%b?OW*:zz=0{=. M%il5ȖiR`yZ@'(~!Yk%-%*4RmPԖ[M+P,T2$]47r)[A;v?>l.H*2U4"lĠYtJ,Ih`[ksb-w\FI%w^e]ȺEI]׽t[vWPH8 X-P"`49RT iI#db"#vcVP{xI=FytWI(Vmԍq^)L&2 ȑ @2Į8N J&,&@8V_⏟_%FѺ49X<@0@1M>?"N?}#:\e;p⥀d-,A%De(wI-nn\kХ$ i[HjNkɺ==SDUL:˚zbјR!HU$X#l*6[ <%ǖHhZ+ZZŠ@,*tb@,][iZW_"X4ik7RӲ e;ڷ#6z-hCs2@N1Zso5Zn<YSĂcT3ɕYg:r! 1Rl0(bMq&Lr(*NqUڞR+pKìT˙VltI$d<89NsȫC`b>*cH>:svCqEK#k)Q@Y jˌqf4;_h**~DՃB$l\n**rcGC ?ucMB¦BS2E @ьqo۲!`&wH{,3J!ݴr?eU6j;ý=FD&۔+ܜDݧUr6OD0wN+rK˃A! >4/@!J>SQ9ƸȐ|onc~%nEFH8 ^$)JR)aaՉ_R V3Pje/):/szHrOGqvgAS.u'mToSa͙ޔy/ϮMi77\|nh/ s\k#4ĉ0Ȳ<{Øi$g-N-;ZRRUC`Ǐ 1(ʠ8>;kڻ|J/5ȗ!E]E^C9so7=rz4CK ״Yw{3lbT"߷1)e eel8,}x<ߵ:F@Ҹ.Kn3S)-eGuLTȗ=;#Z" J~"KU&! Wl iq)Vvu^O1`eM]whwْ5ԖK!da]>m]ȓYmK%mn_)]:>=AH1vWVL ƼooIyӷ{# ,@R,ZpB ^<:œ.x^˔|lm!!g4y·xt`h]l07CL؈%qLpf`6p09os٥erDHz T&$N˜_<鬰Ɩ#8*%麏1SW|G7ا0Z7ϭgfEno6,*}*cc2C@BScw&l5rVks#mZx<,4nXd;b;qf~_:ldхD" '#ɴQ gիo^yKmc95|ۛyLn uux2:RъàL<|樿7Vp^S  ]-aqOP(Xkre1(~i:P0!畩jEʃ !YOehpՙ,^)lAeo)UC~ YwڳbQcYp.}zL ]|LuRRD£JgLH峝TaibJ:N3E ԍ)/1bݞO2቎̉'yƃoY|%)Q(e|AFlCLql֜jktywj)ʐ:a.|(ܕ0M9E sҒƫAWwn[Zk=T? <7MJpC͕!둋9!Iӏd@'Z{YhINË=.byRK*ʮ!U ,rhQp axm _wMٲ}{evtf y4&:IQw[ݳ->u|.VOmϕ:ɢj칩sqU|=Jތ]rcm,k,TDʮWfgBұX0UX(Owq+* Cr1.H*8$BIC0N Q0F؍ 29!axcTpB)#脸o!Ƈd⯓EZÊ 1pӊk%aU ħ /&T$1ˡ %lz-64a;.Nx2a`L; N,~Q` .5=)N!! Pl\ 3g{߅@snm.cQI*Ij_&mETHQ4<òX%=ĭ}OC'3QH M8C<j?M38&I\/76FZH CnGg3j(8zhV\"|{|h֫,?x ] CDTI'ۻvpw@޻۝H*8]}#w({:' ' 怶R&i-,A /&8zD躆N"&`NI(H6 @@@&o!>?wNzh spȈ,YHzh* ogf 1z ^0|zɸ{RE'adu;K5lhxAN$T0O\,F2y_љ%~6=XD[Ho7fXɱ} TߺqU,wjKj]wqhIZ$><. ՝| AH{4hQ^]zWH?teӴOݓ=Xoz2Kf|`} xC~<L7s<M 8x^x@><0Vh`}bˮ(\C3mǰivmm)i.Qw|Q<Ṕp$X^S(f=o0>C=-{OO 9_>z!!~{7QF*XD@Bm^ <>H(|}GĐtz׿ Si𭑇SGs"|QɊZCU!${X SQB|9ۧ9_FǫNAC]ka~ /ߓ`4!z*Z2#E$lD,K)4)>ץ*4.buۚMjٶ[),Zd F VHJ%iZQm2LrA m!!JS ;ld0.} ?$L#E wOd8?#M#^ht -4Hs@c@Z7BX;%L0Ym0u 8aL`embѩDM 0jml.$ ws.U!3F$C m"uvb/u2ӻ'v No#g1b&u[ mL G6'acih AgxX:"S/o{Lta"7Ȇ-X>O͊J3`6dkc(~qP<@s c,Z*4 $*_l~@42_S&ÍN@>kՆԨ 6?v=`Tae}j1s3_Ŧɽ'>.gN~c^ M6T7>$4yx]QDo8댺8nݵkb^y;)Msx (%B&7_uwƂL1&#, ӂ5y`}lcRY+笣ξ "M^G[g%;4)2RҚ{뼍ɲcrf,B'i`',)$-ꦱwqۓvCu|%-3Yi77xHO Gaί8Վ"Hy䫠C:IUh=:"qF3|9vQT$|m81v)BRXDnvmjXUXU?HfQxD]bzB6̋׷1vZ\1O9ض%/u`X` ) HbCrNnvqH)A҇%1=6\c90ïth&!!c ȱTzV(qN̕jV6ʑN2T{uui$٨ `AsAm24Řslg3{T`w5' ҝ 1k?(Î_11 ,.+R|# 9ݰk)P/Xz)AI NrwD:ek;oMDТČ]d\2νml<$ܳ * vQZ4>6_=N2Roa=Pc~ : 2 m xz3 bR폦12Zj8;ٚ6' aIlf D8 <@rJlֺ9hyf~ft1dմ6ve^نq.Pcɪ<4HЍvEo/f3 3h˰@7r mu3a!2z82"@Їh ((3Bf=/Oml; Q|/&@B)n֋ƍ+\/]DP"BS<0w]ˇ끉eې=d>QƊPˬj͓Ώ spa)Xh: Vk(w6U SnG N>g.) #J" 3zu4goZJNpXy'dUSZgCmB䠝P9 VtS%?#G4pR\T JKՉc ~ʶZU LIٞKJYmӠБDc "N`V nrϧ ¬MY$mz'I6ٶ}w6 Hmq9Ɛnqg\w U'fp1DŽJIPƎ]/ `6l1h3FhZfl4͓S ]f4z|` PKdSYoM= l8\\ bRR+㫩Hް8,0Ī((D0aPxGjf4ikXg x,K59#9k !`́\mCG-^Qy+coph硍.9׆2L~UXdU)T"JJ]0Л/js#A9 '%}R WѤF }w=b]9ѠKQpzq6G0O4]Cu_M/le ׺kJgsIGCQwvCF[{Jp~ձlP H7<}C kG`6 ZPm֒h0MLuֻZWc]u4ƌ?ĤEZg}.HThyBaK"ʊϱDf05->>r}_r;sKb]uNL6]WCˆ!<6sac.i6Q;Њ혅ӹl**^9hzcL^5;@vU  HUnzsi;Pӌvv|gRͬHJhyGS~w&"s:4JЉp <nVizm'yӍizΜD$A& EQC ۏu5[Qa2(B"\Yu/1KϙJN/3lgA+u2 iU+ڕhgbMR34Η%8Y$ P>zt·=}nPL0lk(k[LN2U']ק{ẙ|,enQ ׶䙓W eg38NLDzT'n3]# b(AgmAD8/"y-Fʞ!ocJ) ,">#;6 k偿0M'9ITc!@WAt=Ő(btozG020LDrn)B& x۫¼&(KAhPhIIg>9'c0Se6LL@8e݂A#x|5UlpY Q+TA0RIStC`F"$`eYA#"A.l0M"`Yٛl3e`<w2f86 8 В=xXd1w{Vx;I0<A7wo& Rēl#$_t.1r9sd qH+8H 1GCGv8(@ Eh 7g~_ Kɛ'ݎ !K6w @z|%f>O Tga^y'$ &; ix7|X|6G_T[Ia@: 2 L%q$Ti?k a>'/.KAD!4 ^bFI$(HXEB J6YA"% byCR LR"$$Rx=aJ)JV0|\nJ AJvعq b _gݭHF=Cv.B(CEo,QQ@<TK#yT!i`{|75T+Ɯ MbO,LZiLŦZ$ `no txVFJk@.ND0PhcAk7QAhfK-diڮjAC[2@@J "L 4PAQPEheBCqf$IYH $Y@ $H 'd6g[@_T61]?3fFڮ OѸ޼ RQd,qњy\$Lְ|%8*9pe*bPLL$gm5#6`=dkf2N ےEZlc*Eb9"F C#;I Ti$gr1|'szH"D!DFK02@f*d aȃ"6Q[0{'1dۓu0좑bͰ|T oYF(H8s>Tq` _`{&u!lNYyEfb Uxk(6Gw´J0Z/><ާs.MQq B& 1[u舖*jk (UH|'n~ jRU3Ywlw pbT|sll3,rfi,Y az|9_( JFdȹ #BP;d&ACP-)@dlia>1pѯ"b_IdY' 70YT:PGl8u3>C;ⰑL( ̓L5vˮkr.`]݄iu5JjguݥkFfUj2`T,0I0xT]NGiμ!Ξq AT=ǝ&ӂP N"i(b")f d0`E{CGe!y݆ϘuJ7 "uԄc$ɛ MËl3i$ٰ|M~ &>4 Biz4 ( @ $D)0" 203@,%"%+Kl(!5 O2~B|d#Eԣ$(@@|Em*:f](pHvX;-!5zM;aLA-˜ pEٳXf+ϬNŨYd3d6xns4$ mIؤx8b"wݸ-0H~蕭uD-Y̅H!QsЕ =1NeP/7>2{<`~9 &t8˽Ш | 壥Yb.3pNNb?x]('H1a0'sxǖqfɕƲ JRd!F*XXՌ7i wxh&_`B_OӇ w/fyWfPo@$PVrF ~HC# N^C SQNE5T3uR|V0F)9D ZTA#va YHSMvO7n],k4 _ \>on8I}K)oq?wV"ԁb^av3334TWqOc<\`?׿4M}sm7{[}[ L`Ј`I10C ap\٠5ɤ]!JRYkվ( İ  @'|3;'G Tzu$v+<jә?LF`ܓԕ=wcNo SDfa@[,HRf, \U12Aq)` ՏX#z Ke}O}ecBh\?I(BJi*`a0D"QLA{BhIa!Y?xh3H@IBIR@^yPD!Hct]>_-}#RkO+, xO IVҖih6}@$yBz)Q >z0K?K˨*~EGÍd/|]+?wB)i:ەs&xg\!INtjuAޑ`nG*8B@NS6D702X U֛j"HkwzhtEA˩ Hѯ4"P oʟ%!~wo,UN7ueRB0 H٥-zwPIu^p?}äO̡wƕ__eٜ5`D[fA6?ws=|zI:2 "BB0Q^o8~?$d ;1.I(%>DACs|L& h~9P:JYDԼ;agIzO7lUo_Q)}Р gY]kPǣ3O~JD)O!'DKW0%uݤM]vڻnZu^ܯzw-6NNfjҲ103Zתқ f-3Z 0ą0P*$Pbp!"HXU%Z )c.`VR.$(7&?} H(1`#gHGXA2PìE/$Zn=yf6ҬqlEڿ&fY":CU:*L[eR|<|fX}3Rw2M5Œ#T]kjtIHI)JI$I$I$I$LI$I"dD$I$I$Jd$I$I$dI$D$DI$ȒP!5v,&21nE5sـd72ol3en$; z(J U J8NQSWh}w)0HPb$DDF#0FA1DsIu=ʽUyErۋݶ--΢\" Db(""0""""""#"#1A ='˺@$@А$;Q\Ȉ1=ݮ)'w4S",QU{MO!Mi|a*`K50 `Tcɀ}`V˛kZdeb$2s2;Ƃ8,0pt3mمO@ޒܻsr.EsH'E$b`dfW/zl0Z zl24ɦ# ^"z4R!Jf=Z̭n:058 Lf{08fANsS%3O(ߦoٹM˒غw\I7]]qQu%(_  fcl:!jrP?q(/'ՌIo~uo:EM d 2J d"Em[8ON.nxE0L$Bܯ'͛Ϧ">Sn⪯ ((t,aPtC,DLTF57e庝ҋLuE6ɆLɹ:a q8F(QqM5?l26Ń}HtP8E6Im*"(*;xF0;Nw2G<͟p8`2JbH+擃F؛vمE/PU%@0-%,*ZklbAB)$*ㄦa8 )c$tb$ 2* T~ 2 ^_0 BH4QQ4kQUQ GPIj*D)(!H(>h_9yOZ&5ktUZ?39Ec7prc * l ]$bP`veG߷G!c,4U{\4( 3nr*F K{9qFl_اaf59^ha-\sgl0QI.\H&F6!~FW$1qNSqD@=5QgO֗ ^AVS I9|W$-.q {٬%5\s7z:L.S*p jݏf`1$ 2o ƘAPLZj hӅƣ :x]3E᱃{lcЬۡ|21M^`]j)Eڣ !h(KHt^:у%cł˿ p&z¬HC!Tx:5 έѩ6Aa$_$iJJ#H ^ C!yäL} q׼DtuPq؛:I``d<=$cdd 6B "L ԔTɭ5MIѬE2h؆,-*)hhɪ6i$6`)(f$ T56,h5ɴ֊ƚ4@FQ-ɭEcelmf[aDIMTY! gUٶS&eJ1 OlLe< *2`7#t=P4P"o9lm/x7NЗm[a>"]E'ȑ_~oYn@9 9!JI_KVRVkr#$Hc(C6цMCDHd' Ģ,*4"I0bP U%zCmَ` uUT{q+;`\3?~DN)\G&H-!O9}كXY\gƢc,/}tKP䡢im!}=ɈPQ?f'(M5_kEQDACndTȘz5~)}~uD!(COۏ.J>G3G](ViDT)R[{_>4tH|E}㢡w.7N]GlçM4t|<꾝uͭ_c|joouwmwמ)\<:̓׃muv-S}{^ {7@>'0 };޽^'>8ykョg/d^=N'y>mFwc堑;TSϾo{=z>ﶙedֹǤY5Aύ`4!4i>Jkp>x+= sP2@k;KkJn^l(mj Ӯzݣ7wn/] G/֜6z>\.@};>Q{}UOf0ww|77F[i}0sN0W.-j6YZ,Żhi{>"}l o^%>+w}'@ >ƈ$5f>^wޓ xyN.î :v J}w}ħ׹AoEp z{ovrz jуU]|뗸y;ows'n|/g}6#"$WwAx>6m+{v&+FGmeP緻4Ԋu j6PoXO7if+@{q]6|ƶjB^{m瞋秸{P  RE/}֯}4˽w׵};uΥ)VwO^wizo{˺O|־w l|Zf_Mwww }޽}ss|ֽKn_2=}mP.[ڻ.7Ͻﻵַu|דV茶޼M\îOx6>W_}Ϲ>Ǽ׽= ]}Grz]fϜ[lGs[ʮןqBz(}(;{zINѪ5so <;>{18xo]>qyvG>m>yMuY}gs<ήǪ0Ws}}Ҕ"ܻiӝjP {uսu]{k{PvZM:cx32e4::eu@4mUPvf<4[Kz}}[p`: V{.q|E*j|y}^7ٽ[z׾}_K۴O[1>fүs^} )Mm'}vLys(i/s}ֶNh=k{y}|v} K׽}0]+y('qvu <嘻{Y]_sڽ}}pjRz{{nӪ̻e֜m^.o{o9Ig[q(Ϗxvun՝{[nizQZ;rMn}h(soL!6`)}%gv/Vfy'=4}S}Pu3Z=mZN͏}U[d&Wv˰w;n@R$׏}巼ohPHD;Pԑzғ@1@Xګ֤*n}qucz:_w}չ}{[ {_vׯM۵fy7wր+@jڀ譙 #m;ד&]AWޗ\kPu]q=3s@g_}͗scwޱ>ﯯ-:xӽ_{e{=l4km =}{ϾMwGk}7{z_w{SH@#&M44ѩmQzM?QD@@M=Fj`5p`_B1ĄADB%'dM9?{sN0[3g@ G3Oy0s\^E\YUoVh O(8Kq4X"diCIEMJ QHeAN!Sp:A?u H!ʌ(H4%E4T1 )2J 81 S@"9@pAAQIȥ (J# @(W$$<00UMHCJ)D 2L*#L@+@"PKB(( (2)JB8M+ZTTPRH82ҀJ)!Ptm>S!V&J$\!g+ZFi--q̍ZEx٘6AB@ w*q\ 2 "E@lH^iZ ̣=d3`S8;e<;)FPnxKG 6owޮ$R8kZ \qBÙ^3^cqu$# 2Anx4/5( (^b3ogRPuFʀ5TA!*}6i krBR_`L334Ȥ0,AH?<4"D!aPiwR⁑KBQDRfZiS)lU%B0JeRꦂM]1iX"" nuKkL)3Ed8kѦ..PYXAΖg`L! D{ ZJ(b RaT%h`}sˆH-]Qd`dlH88^Sdc I/F ,\R (e* "B)X`"`" 0ne}(4F4Rw2)2CN1u Xa,@Rb%(<填'~-JE 1:0-AfdҹT@SK7`GELLĦ#vW+,-b2CN!PH펎p_J TpMyL84РkLjd*XѨ@!:oYޢU.S&/!@6V[c^aDQKGAOq1Y&P}y^.dBy#'c;]𞳳Ef~R8[#2ky5?\JY&hC(p𠡷(go}{]4dϽy鍕I~/rC&j!2leN 7`EX^%֎nnbݡ灙b!N'Z-t2نl@[HӏfČv12ܣfYl8uWADw7*-ڌfNvh8I6n2%ڜ)f>:obP:`KMKG DOG4j晟 lmpիM>tkeɁ&eDXDDx^Z3-Kv+#Dd5E=7ƴ=礙+E8S*a2(2,v{4+Nx])(ʜiޭWDٌ)֖⋈  [^dmm 3Сi^m|0uyz|\9;1yz^Pd L!E3#32IM#_kt(' r]䫲'h~lH ()( 偔Df94AJvʉ>95E+IM0CT AEEIG@KiY06mIHFHҋE:eXW4^7z'<:jdT.cY,`>lIPQ4AȤGYŤ^,j8Re-;L *~!PBL9*vM.+BO/t]nC҅QnY:]IB>n\(,jX\|(Kc{ƬlɵRv D8;ȕ3F[EYL5c-)a[-IHӼd rEE~uiN;CiQL*7+:wa׏!Adϲ~TER-K2{Ń>jܒ΅eP ID;iVme)揿lq' k G(GQ SrQJ-,olO~<öUf}fS˩o%& є&,VFɪ[EPXkGЦR|1.&Xlm-E"RЫ (P_FAM Ňlo62- mO&3Bν'ѽ`ok,J)0˿ҕnn(* 3T,ŏR7o8][F^C 9,IHN^xּbj"SG*0 b'02p2*%2rdqZi9,L֫053R#X4aQ'(2)ŠN79$IJHEi j]Mc/qӕ^IHzhrX)ZN]aи8ɧ C 3 lؖ(} d ǘ[Dg[. ׏X;"8[eCF@>0̽/n3 "iEM'Q~c &eM]ZqEđ)ia/ll0zkf kĒ{OPwKbYĹѮfoК ѱ׋QqmU#OlD_K $Ȳ|A&Tiq(IuKDRѺLȖw'Z=;sz,Yt֡'pV1v("YiuRB`҆F:I4 Qc@(_X)UJ@{uf=ސܸA 5X0fً"a3\"i7IJҒAJ!7Co+\t#8 f6"{E1[OnG BL3>!I9R3‰&yGB8-DOv;|=PckhM='ބٚDž9ec%`)$Gat `8.`k!$6p QubZSU[iZxmڊa~KˮfϠ<*M|i,ɊO!gd9=Tb 8ֆq-eNF!e@)Ro:(EN% 10NW9*DCH aݪz! 'et`u2%ɲ4Bؙ`=u)@&H~ԃw2ie hpNk<'p2#׎;ƢI3 JaGiSSA%wB|F4Пc]I=FaNU VbF\Q2&،g3XVL2[恄+2XmCqe4X}[dqc[B&n#,L խ6F,`2֍g;v᧷8]+'D ajVh佋oɗ؃6 wCE D|a"`(h=Sᄑq34LQRM(R jɉ;PIęPQCr&d4M4j44SQT1JbJ PSAM!TQQ1'߉ܠ|)p?TAIP3@H;u{YSHBc;<{"eH;SO  bPP/ꆀTv H[>8 -D>U @9gRX piBh>>K@A 4Gyz[дG?R㗋5u鹵 _M}\0k \qqK !Oޘ4HBSJZŔB4DK0UDD4&TPK=ChGpV{%_n~FPx.b$bQ*p-{$K}UЍ*RrJi=2߄oW}'$vV iX<,˽RaX afcKU6N~^~ H&pxkV_w E]o0$#Oȉߎns8lgxud `!i;-uliҙfXUi- 1$S彣O7^ݏҝ9#4齥ޝk&b;ٗDHL'DqMo+:|-mIМ&)MOہRndYz|e#qT?`58;Hjj$i( GԹ(JF) 9kxC(Mimu7+z@dtAY8dJ(BzC >xv~HQ(MrVbPBMD*dsHx|.@O-eɟu/lLMJaQ'1iNl+'|cUA 4[aWLj5HQRd5AURAKJV,67Q?+) v֭1Mo 9&TBKdATA5 HSTsd Jԙf`IH@0e4qkY`jH#3Vb "a, fT\4Z{%f.IH_IL%>]C%8QģDUv+`LB,J$H1 2^%ҢRB?).<䚝Ő! p~0߯݊4!{ KjWgןnNCJ f9>%?`D~t*5;x0n&AՑ;0-k2ـtbV-4J`䛲 $)!6L^FYO)FT$Ghz|Sa;NO'fvPn'hRf$w4 H .DP?&`'ųE\0 2haE&>zį4{,(0BJiXJ%(a^1( "3$`,,"\'OI ED/{ߗGX$P>##g6:i$}oTP*r(S.FaEB a B\Hs1%PREKFFH 2DJ3JpQFAd F 2 D|ˆiSy*ecB$CCCPYMReHKBсj]I, Tı1/B7nUM%nPpOț­-&XeC' b)e( +"#&02 ̜!rV ƠQM)"%b,MAKHGpDo@aw9i:y5 ̔m4 CDu"l"bvH|KtITs5hIB 00$( J  $)  H* 8~p{ạ̑#pN0'm"]8_IQ2HC > zOa=#ŶvvwC"gLHӥIgEuk:G#2ٝuΟs avq(͏U[Y$iA95okQ"%綩,J8]Ջ.F$RAQ0 Ch=޿=2nDoRǰHԇ!6 HR6`b8D$CSH4F'qDjUHp$2ؠh *"J% 9!@JS'rЅ*SփnE5R#%\* Ja*VA6J@d!CP`&BbZ%bQ <1X h  ©̏" (75VjF29L5 J` bѢ̸P]p~]:r{'V@4ď g5EJsw\S3Hsi$\q|b(#v%d6APUb=rD&FaAR'R:9& t<@VwCPoOy&!iC&H'xw']8/sy7cJ5dz%~r(nuPH'@9.^q9A<@89T9C2Q|voSU}cY)!>Ѵ?L 2wbݓ7/%RLN  wbLbJkܨy/QM'Bw@94v㽬8, Pxaa$Ċuu.  QP"D=nJ @W@B= p;?bJ]^ Nݛ'phBrt8m_Rяjra9@t&%d`4[ur3OQ#:n̬N;pNþ, qI0ri\+0C=3~LyCd.Ⱦ~PA!G Pgit0Z9.N(:atAkn"wȕdQ564Bz!2C i# E@=pW1>ݑ˜7w; ZyDiu(Ws2Fs}Ɇw|[2.r (oAmSJ|@{ 4qWolsC.t>N,ep4 Nmҍ-$u~%b Hz;иo*¨" &B!GqS@BSuSu=v*jZ{ !34 Q>w̚zd#P2fvi.18c#]eɈNU烒zv D*%~fLH&5d2@C0Ahy!Inx%wc#c8'LADNj0yB^ԚYhKkċ&&cw#yS+΃9AMY҂I4\0)S\9ɑnA/= P#96\ Adޔ]Bh"&?~^m%1ΆEc2&@q4= q¤1" bZHwK(BC)@$4JcK2aELtMsLYc @4D"՜I)H%!Ȕq.)>hJX0`Jf U+F5tQ5:k5"?ޢ]´!ml݇RQRRB^@*b#L6ԇ]Jp:Y{<tER!DG ‘߅3͉$ #$Ç" 91*Xwδz0n*Ukf#3/I.q HRÓ ̂jgL1%If 94H-R BPQC 8x;( *GxtUC,X]Q(4`nWw&(@ + Y!ؚ~SvM-L . q+j&|ABdA9Ԃ#!BPCt{1{k[i ovCW-KCGL^tqd?ZxTݗjg9K6#6k6~ȓAK7Cb#Ȗl "63!R /ߣ3@b^=dybkP@3pl1sۋjPiﭑb z5ҞϞKox(湤A× |>E~2iX򺉷tڽ->Wq6.L_6EJ=!oo t Gf ݶXĿ~olZ'x{R}| >$DdxR,p\#E֑P"5K-*'gYY\+SL4 Xxy>͇  r'%'3<:xEw m3E[7)W}{i8({2@QgCyfP$Y7T ir4l;BͶLVoqv`wEUB 03m;AN/~YBi"*NUbobdGFPJ7jYR<6)^<6]tLE41!&}<ߩDE #lwo|b9 bU3۸qa,k!03]Dв Q2_:7?+o&4/>DYj7+\.rkiDŭbB0Τ nvD^"iM2$II{%^lϿ?wÁN+ppǙյk&j$klhݓ\yjH&Lqa8ծhG-slWs8 %3ws vCv??^uH=KFO kkzq!re HřX@Vf5%s8HnQJ!N$㕩Б,lo}ZRe7 u lD4sHR$v:3YUBnu ry{ǽ3GEqqxDB\Al;;O}ۙ퓎uLiӕAImZsqeޘx_']q[ϰz*u̒B7;TκYTZyטgK"#:IQيK!މT") ZHZP" :-Ed4UDD=l<][^'4?'.~ZZ"QOSSe:Þ.\ΦFӝ_1X4/y6/v]__];?UNoiS ^aѼg.*b=͢}  ǖ#降cON!Hn0ܤ1 "\nF㛐^뵦v 'PhMP;:;q!z>H(߷"#_IZSuGP؟&Ln tUEh>{(>laBHuwczuxT^5+ 3 bi< ?0N1y G?*9c-&q$H:]`AWczSLєb1`;04u :w PR'1S+amo6&6"L0]iǭR] j}oe.x;#do4!6xRhY5;!?͜L݉L١rc+ F $IKPq/.""*ND[ KWRS74ې[m+y &b ۂjYI@Px(ܵ)uM2XbZ@5϶7Bƈ}!U{wȁ&i+Gĺ,DK\xS^X9H'Τ`AF4h(; ]tx/n9{bg f:UC(Y|ٽ-?W2uZ=Ֆ&sCͽCsRY uKa$]E%Yt07~nkl %z#uƴ:>;~B&s%"dK o*!* u3۽IPyOS jI7Bž } yuk&a .; =Ї;V?l sgֈ"%:zkC1rgnau`S3HP- @s3MYu!hkQ^rft3sHsQxf,ոCDas %*RkP4\јۅ!([#0y58ŠJ4AU0: ۆL㍨RNb䈕+E[2,x4h5[rږnLɢmek ٬ʜckn\q7rIͅ7vȶC(3 ݱ113${W{ ӛQ p s l&HJb F.6pUUJQLDbT/x̨G$D ߳-6õF vDl>$l&!?yU3e|, IXfdمAFJQ(EҠ=瓖XMR-Fà [|9umao5}ljZ4VSŘn6BHkd.'U{I.4Ϝ9?z0`k=ɷ%Ea u ,E}k!}/}UR|.u8,՝utG5Lh[ښBwĺ/j*sr| _{YPۈB)L_]t*I[ Jg(Q;𞬝& Om(!Na>,57ʴⳊ3$"t~2@X^H0|+q:қ'g5I~of' :N#Xs΄5)E **[VɅUݚf5vâ(>luA`D(;ȑ%k*,ZQOoN aړT<z. Bd3*ϐZ69B\A)OnRHق9 ]:XdGCtꃐviUM /r"MX4HWH J:XҠQM 80*C'Q\ԋđ+mCTU)eJAb`PEBPT )E*3YF +fhfj0!^?~7"^836LQuC靎lkcR)òM"\{0@oɱ}F䓱Mzq3ӅJ3E]š~J{sɮwy&-al]xQ#թFT% ϕb[CHVi 00\-BmB~sUι2n2D(Ŋ;yet{yuP>)=YDd]{8|囎>Pp0p ډX_Kg:wuA"r }u@ki(W~l>3PĄ) $}ي 2k 5_t3ke "lP@絪@ڜD0$ }OݵL6>ȃ ={ei ˊyaC$ϩhe.e㇫-~By2Q?ƛr8x6[oU&zky % Dn9<DZ_x[B488Q_*pa^6m+(ţ6?h;ӊG*zj8;v]}w&?3}"tK\f-+6DZlYX3;)^m̸F["B"kJJL8tR۱ 8"wmɭVw7| %2~GMxR9:r#b=s]+DFfg;KJ5׺&jq:% _2BPSq %%7aӒ;;INzEdp*5옺1(x;VOtĴ0$$A0T@AKEL!#4I0}=x硠`t9](r.M ,(ƾUƊO fGljlY0*@։w;<G3m\ RM7O"f~o;BӖH6vQ"Mipi!aRfrgaD{Iy;t맰M4!K ~,l|mw([5&K=T 8>_m>n,r糿MԮʼnA]:z{O_vU{hPl*vYE 醜gO'8p(tyx걮>F&2m[P>>:]vT&Y PF 5g=Ɏ /~90d`ƺ aO٤7p8% _}_bg[RguG.c~ՆZIJJUtHu ʎ=0g~]a ??ץgrb>cvIla'/1ɻGS{ÿ L1 ; 9 ! O9==R/M ۃ1f4alJqq'yx{a66zIU4w{D;Z"YFZQ,l25`eqXgp7pix[`}p{`uPUUUUvV)_Ϻ{t~0E|JHHɶOV|B{Zufl"]Z전 @tq ߭omǷ`~=`# fs1׎Wːj0@5r@po~|!AV+JD!}WMдS^ e;:Ɔ{D׎FS7c3" )E"2W$zwmcxD?%7ca{F`Չ @O?Wsw??nKH9eYeYdTcc/Voj(sjRKفeaװ!5LXYZ Ϫͧ]0EDE S_Xxgf34~ꅛC!kD(tAc% ׎횿q9"^Hm?!sɟÏv ~<~(*$ȳˣ쇏P5Fط>|;?O}T\~\2eN&%a) k!a(.=caw8LRH,d C@rlJi!h `|ĜEezS?S #^:櫞:6~4nT0F(϶Fyh;i.pPXv$^U,r[lل>0gFfɣ5iiMtBstdzy(UUUUUUUUUUUUUUQQUQUUUUUUUUUUSUUUEET$Ԭ RL؂f/_a}ƬX1e-5jTP(] f .K8b);ѨLSXHWc:no:b6]3asolX|gf:!@Rfř?7?Hf"c\ ]wYeXRfX3Eapc(>@w~I~'v' ,V4m+c5}wK#Wp p1hq@ csC?46Bfmh|ۃgI$t&9?t#clܜJ[\v"f0:y`}[3'}WB۞Ӈtƀ-mu|q*c٭D`-ǩ5bugm^ ŎHc(d+V<)YL1T7.<9&Q"#Q e+x`/ mzvT 0x*8m˯~2șvCa+Չfy_* 3X/>V6¯r!z͐ hpcWcOFZ|G{:wDFwF8=;[M4wNt ^4B}vZYIӳ"ڌߤLfj4P;WrRۑY.;Wnqdpn夭%Mё$͜Yd=D˹0鎆6PLGö&Kح.m^ ao wf]~Rޕ:ch'Q\0 萌gSuYDT[&1122NjsUH- xǦuD =oܩ 쮫tzЯHaˑ+gcp^׵VlܦO\:֕/m rd\^_n̘\X>j00]LLC*,bZP/ww;ýZCmmN.שW3=X"[̂ 3x >O:v)߉|GYL NpfCr r>i7~, @rLW愡};]4`Wu\Gkv,# C.@Sc Icm cӽoXNȈ:,QDd8_8/fwBv))oZ`D+>bHc:;/P-Sٶ2|/ht^m7CFfdV@1r!TQ٧ m(B G?jz q:`X~W,k`"˥Ft҆XZI6yg]Dbi@q)UOzX7$Kb:챟A?sDS1#]+Wx+\>WwZVg]G[ve`~LݺXDhu27]y|?w},P4Kx*Gš8bjhCBa릥E,9r50@`m,aѠyAg`..ӿfANc7PF&S#Xw^lZ$Lb- Db-/ؖ5fwѢs0~^$8vLyTd`nē w(I-ڜ%ʚl%56`ک t(g}^4R[!BV,c!Q]p.%N=&CioeBIZ.Ĭi 0iS\X7tYXFF>|fkai f쉉<:Br;wtâ ΐ3nӬD1zPc`>MN/Af4u7[-U$E{3kLtRƐC sHMW4ndCQ?B7/EZݟGsa$"HJ[#&q _a% n]4l0.߱q3AtPV{ |͐>%8zO@- ^c.. $a z;@3 H(Ik?}}/fqDoy#edžEvslmśLyלaeܺżXYޥ9;fmKY&XLxf ',~€ž h(PhVKBcɵԑf͚fAޞ2 4KsSÒ*QV7$#Z[$XCHmƖlsN58=Ȕݪtu~J]oD.^Pdn3b 2WnVr_HBqs[-nMӔ/5YZ W=\qpIyDVf66>ȮYgiq1-̫˕O;db单}\qe! 3$"f`6vH6 ޶~,弚}[=Zp|ip4\Ա/fH td^OxZBl˭3kյ`!0;1D"+##kzv I(l4a٬O l{<- M̸lfk6_ *a]_\JoՌ|Ɖ6Q+l`w,afW]$x8qM*S1y,'dH1_Fl͋.;[_?Yv%AY'dx+(_$H]m 7}UV{5 e47y[ca ЫL+P%xy oy !7gh&#Ȋ^_Csl@`KYXB'3E>9λ$2 )6|+ɍ# d?1urBD)|pXԉ)0-*NH = ݕ&:> ST h²ZeO@st1z(UI7C/]n2pƇ/lݹaX6bc@krb`=/~(OE(D(k`&+6x4W!6 qëCt·&+ Pܢ;,p1 $vYs<2pp6hVΚz^r*_V^yH^6 tee(yd D\;*Sc=᪇d+Q YivĆvH#!^Gh{6ٲwNn~s혦mg- әg^ǎF)>M Cr ȗZ63ZZ,44)>Y$ !2k8olzRcK᫳s>/\/-yE/?S>Y2@ ȥ_4C$AJM!A4!0ZZ!bLaaibXk0(!"J"H*%(YZ ӁIT R TRHH1HN<-~{_Hбqӊ&TI(ŀ>i|bEXKB_]DX'O9AIK&#z`]7Z{=OK܍d?=0Iw44t Ro΃]Zvu~e!5v[K sɞ7!1JX}=z"=~}oJOs #2{ofGo XͼDH'>cc52p2gL v&TRV1zՑҫ9]4wil9L 0-?TIS,1o.Ik ^b.$l29ҡcEͣwF.Qpi$6r 9iI C( =N ]phJfp ٘lj9f (8:#K>z/eăe_c6Α~#(\OepP m3"!QC#8P1*Ih?O.c! !Hoy(bi x|!":*#AD3c ;mAgVc1@I{MreBR氒^ӽ:Zd' zsYֳwկ'vN2Plppi^# 3Qi7B.B"%XXc޺`iZ9(~_;(Rkhl!]2m 4=8zv% kW쾸F\tj8$%HHIF׊^lx8 aH6 Å4E2JL>5}GRȏi[&O {BA亄>PcLctiCsސۨ#6 VpvRf^Xyb";?|(Rl&^NTw8.4hmsh2@3|o 2c^KM 3Ⱦ:s#&~lknseTo8]ןۂ>eq1Gq[1ކyfqXZn'HU(1'>7o'0țWdW};MIe;ۑ p&Zϭ^8>rq5/l7L۸N^uP\⬅DJHݢ.{#)EMOd"H0XvPP<5(w p|F1}K O^xegJ<[$Fai=QWZY. ;v$+/sؐ0@b,~a%9߰3I|FO9B&$;Dhb5lI+vz+zN<8`{Pm{tkVBuݕ@:JBےw֤/;oFòD@f{}4KފN;75:cH\>~+zN7a h;šzy{*ǼE'7Ǣ vנgB5sJjG0ג8UY iYT+gvםK4g!;[o3vtOej=q)'m ܂$B63|JeYCp 0-r18sajd0$PS{-Y~[_Ff`7mBc?Dzn&g@LFW~ᑥv?]o˴m෢˛nSPm lEy[5<#6.=fFGϢîOcuTbk/LN TUܰ"{Vn^S%2J7FGeoWe8ZUƚ͏gq|:<m,g+XvN1[qs`煾ᰣTZ{۟#a:AD{ e"+ĵ<ℯZFW ј3,fOb|av]b&4F h$g "0kuxLJE3HaV66HXaD>cT|~v 3Z6׫܀y "( B x ;#7mG_230 H#օLPNlz:J(,g^,hku3b-/7q3qWml׺ r6_uuˋ>8c{\aI5xMܔ&1M8m# )Ǧx.sEDۜ!(a/[ EVZe,t#;۠;[[Yg~[NRWf-!㍗8+us-3rQwC- ^gHt:tαFL:H 7eТ#L,TӺn3Ō_n'.;k\2g+nnѲ$huZc0mN}hq L&;l\^U 7x1Ҝ=ыDGj{(#06 ֹL!qUu~p٬$gMs!DJ7;n3[9O"B3Bn؁{Ehv 7K x-iT$K@|#Y}9jQQPUS?< 7EE&_NttcR)T_s4sٶq 9!2Խ 1o# zeiyăDC^*V{< cfݹibb>c'6> 9IUmIQ:;b'5gcV/l:L}gÛu|-A{88lޅqGZ!w>ki`GL˳yO5o'福xB| Ζ$$G9A$fc 8MBb=:\2[ czz ɂW$f>|G1 [G Tl 'y} # =+/$E͢<}q]Qڸ͸Y{.+xPjX[G āZX܊pnI`$J{F:' zY^M*mwض%vt uz Pn[luIIx_zzm,Ol(odEgr})Z3ӷՄ4 bD>](8"4ȢGxJw{3]57ul>Wǵm|$l5#4*|8*G8l\stkV󮍯g˟v1pܞݱRAШMaN8HM lz[wEm+yn8h>ˡȑf?T<oжFf;tv[Lr-{ zyx7fiXq-bp~2фͺ&ki?aS ~' "HMqa!!YqCHzԀN)'-*C֚aor1Qz:Jl #$͝HHei5Ѓa56^tvQ .M# jOg͇LCDR@PIbE13ЇPqSto2 7u(E{&b1g!!b1 ÏϵТ.7]7;jE̶8pUtB3Z,agk^hٮ'"/P-,"A-  B âhh_eLAD 0&ʊ $4#B)CKRp~mZN5{3bšJNlMOkL8K2V!5mnΣyxr<8 \9:? zOSRrb$P?Afa%%R! E)2PP5U(QKFa@E -?ѿ>OM>۹m|ԣv[j47V*ms 95?.NW]oYM=;"Ow+V: (?]e9*: 9q,yG|l1[0VrzoǭYRole{z .y Gn%*.;eep[,š Oe,+e,nX.ݱՋ?3&GpЄN*L?>Ne(`Xwr31!<=]7Go7aRg4E`_H>oN5?ٟ_mmְJW]uVkZֵkZֵkZֵ,3 mB6NKRO3:o1V)ނR[{%`j2 -:X٫|`sPɴ\g1 rN[u i 7po>$LqwzI9e0%'o_x)0cLvܺɑ}|,Ctj[>_wވ7"%.: Y2hI$ #?SY8i뻛H#Jϓ.l񏔌z?q􋓎j:(ϯ[_r/d&n6(ߦap'HΧ%4J-V/Oy69+r-ݗGԼD9o֘uy2nB ][`;7pf"܊CaXwnj[bć% ?ʶTQGUԚŗEuy?{őҴl6ɁA/6|6z"X_gF$| xL[ֳ^mPć<{>z}CIP8:&(0Pa #7|v2^I d6YL}»VN^vf[?ߑw!sy(3LY>A1̲c8Rvg?noMIPl}ZnH:?Rc~ҭkXֵcZֵkZֵkZֵkZֵkZֵkooZ|L %G0__ዼcśb<-Xg=D⇖`1;1ңђI#ErowC|F/5t}lyU5~6] TI^p~\QOo>PLgöMaF<J݆NԗH 3.COb$7-x`[\MG.5.W I,QRP 4ꩣf_".3IIG{A%Hh^mbϸ3I6z-u )cJ0BgzR Oh$6AG+S6ctLȋӈƐIa]hD oH?8gt>ENbDKGk`1j,, =B,wU&ihXnK 4́'rro3l=H1y3L:bIy3FtmtGdή\ky,d) TN/imj 0X{q&hĘv)ډ'T,l6b`[P#fb'3T)r_YL4CEMKf501ڇi~޸wϏGeӘ]t/#u҄NxN%ǰhS KF4O c;SybNIHLmՍ:B")H5Pbnq_RyIArїW$%rѬ5Q 6٥ɳ;Hnw/ݺDYWkH iӰޛžJRXx$YPdm+b,0y=k$A\?<Ppq`QE5~DPsHP)HYHS ``ƚ lݒu5d)΂%) O ́ m5UE搉DAlcy8:K؉@E$6V [/FMq!쁟L͚%wM]de IRq,38qtHÕRmlauDQYbr&2=C 18""Ej~]<Zi;pN"Mm_,qku{*ƥX@/n}8?T=F/_SZ())=Qc%"2#&tvt2;:R~eRͿ1Wp2uG[D.YۇI$eQ:qtP1v#j +ktr zN ԓA1kQ;+U|V KWZz*J?y#^ӿL֧mQto]A75>OD52%ľ܃|eg~aj3rrdpjjn[NZH []@hG~V871qEE<{RůZ !|Kb"6z\JTW>ߐxLh3%7N[>cNa_JNz,j6[iRBb=p $8D=֕W.T T| @M [z:)v50F)r(|ŢV%-5G{b=$V7_,P{O{R<"d  kx}DLd|U+EK+dZ1^5("X08Jھ0ԭ[wc;uƸ$ƹwp[P+jƞV 2՛ i 8D=f+sbe35/O9vN^[FS5)7Nh>8o'I nf2rRrB <ƻqP]uDT_hdvԴh!IkdުS @iE,#f^4Eïᮠ6؟GE®U17sb>0A$}[:~Iz=u`<#c#晼U;?=|4>[Y{m]nZ|_cƥK? Ouq{FwMs ~q%qQiNտh\1V?lT>g%nvyo-fmv; ʉ7" XKAEPQD! |MurY>tOѠˮQ|?qI_Étew4l\$fJK3ĚRaMrL*ѴYأSYsS?;#a",*P!@U?7ٷ1b-z[חi^i|+ξ7M۟`#}!iY~^/~- YL嘟L*'iDɁ9.p4T*{pP\_}7UF_CߡMM $#@Dh0%F3LT!M!Bh~Ӕq34F Q-GTv:I.ҩ5G:h뱢JeGu;rN?vNѷβēl'D:R٢DHuRVtlu33.Rk-&B;c8xPgEzb14۴|ح5pmriozno$wwQ|EB'gٞx˶H  mg1-idƻ_%`CG9 "N'd`U@= E#6tz7zR\Nuǁg&AMDG|eH9c _m:@h;tG tIlqi (с%1<5 ihP%2fb&e\8g:$A{nTRs9%W&c@V N.OQ7̴_ؓSR x 1"eŅ %0"}AA 2x/q,nqbZwP;*vzIGnD0PBjȽx6d\c2"N[S28 ;  vfDBfd!&,>_7x~H>~ nF]sܘq ӳ tb}4|_k0A9i t@BT':sO&I;| e cX7ǜ(5&вհ2q|#&>1|(|1Uė/}sk!Fm999a/uk݇O+,/}}~ vGONͶ>HtZymI}}<1:wY =Rэ:{XRL]ص;:? p뿧5lZy|^? SBâdw{~9n^ߗ߽,a1evSpwϷ#n&.5&Sݧ==0O8^ez5D,r5F _3ԥfֳ A2k%̋ZNVt鷦Vt6xb9(Q%S1fod#r-{ 3u#1/c!cP "~oMz̃s6))8YRf<L0pm MD؛Æz -4Y!A O-(C-2AEQlJ`BhPHȑo(D2)ɅKi!ʦhٽH)vuQ&pO :`#kjF-=0k &m}0q0|̗|Ҥ^ȬLCo Q n_&h_o0%ēOG DF07gb++.j9Ph''XyE-M$2:&)O?V鱕cA =UC&H쳴lH&.Y(xj+ _4cjU}vB ?bnyNbK}{SۼuL8d\P/wOyzowm!+])=mfGK {~XmœV90'*δk|Wk.FvqKO?أ ЫlK gAl$HǮY VMCawAW.֎-}kQ%&١i98q 7;Pnp4++ǷnQ| )0ݗK[FKRiXô+O|6kIqZԞwTpF䌋]ʋr{-rxZT0&;w j>ӶP +±ѿŋѺsq:22Pݵ 7Kf !homgg)C@l@p:amm|Z& Pћ:WRGT6SWqg%W:_L3:je/t9[?.ɺU|9xTm94"0izO YKQ(Y;>hZ(ֲ͟O SU̩+^cMs޸Cqqוgqs|x).TR3)Ba3J"|G=KK'RI\.1+v|< 0Ėז(gNr=abq)fCّEwr31eC3F6{?}tei8)4Of/^evndz@`|X||4tz09%Ǧ'w66%a>Պ~\oz}[iDR 6F$zE*!!qT N> ktĆmI(r5~8j?vdͲTǏK!]Y$3ZfoA^ӭ/MhC "bQ3:*U*$E}!9 h E&k @,c-:P?iG]8:?n*E$e L51TT^Kf**&b(-beA(J*gYbQEEQDU5EEDTXxڪ'1"D$l.DDHލB/K/'0< $A1M|,+;&/ja7ћ kKFljqb qi>.wȁ5݃U&i1Q3sdQBxkn*m;l ]w2mÁ! W!Y~eapZ|?}*1p(;u$ɚp,7P"K9ds]!띑֌@wf&x58 +L -Tqō\Yb1|Pg\0>%c%:Z<YTdğ*wlA @{ֻŚ͔l%Ԇ&Lx#f%oWC[FNYYҤ̩;~ ӭHƏ8U܃ vVx5%p^EaQ)ͺA/[桸  \"'`2GlmCRQ퉆ߨ<{q< ujB&D8$.'˼LudK2CzGf?Hi9՝=,q7| c>a+XZiCbu FJGf%˞5""/*; cUrf: z].Le(-uAҸ6:) AWs+Ŭ74zu4w` "DzȤp/dyI GP@. сL1hwc‘Gt%nE3\ڔF,  BˠQlUT.U4oCG93b-bq|'1iF/6$Ɛ/u\&ٳ}+ދ( u&vnЁCs-:y $oOaa m"OkQVGbBzQ 2GnsHh?Ha[E/%$}}}V~Iψ&XyhwDL$aiuO1,օMwA<A O(Ö}. >؜7(MȊ,v=ϧ13{1o1S41^C ݓ_pL=mFy^i4pB5 p\$IW $ZD:b ?sjM97w: p@AԴ#lΎCv/Dzae4$ge-avTPA/қ&q ZIfsBd m"~BG0PI}NFg?p 6#W?9pˬ:Tkgv$Փvah$[*o٤rd"shd*V,^&m#M[KF )$Ѩȹ"麈ޒcy.Wbn\V8p*CM+u7}LU'FY\f!! 9/iI<ƠI ZG1z%47AA&^ XkkA}#dCA6 %Q\ PM5uiz;ZHi}TuBi9܂Kd8?~URbz#"p>eRLRqbIcys,6nbjx3cTTg̕4-_2ZC1~R գKaeWjEƳ ocm]01xå[J0$3!<>o)sH-uSzq}~(̦V)冯,'P͍v0Y>J? vD8]qnQ\&_go m|4׵}Yﴜߵ9VY>E+ uQ*d~'uk%Ip!8lY7Dա)ӪL.Q~a|TYhv[rVV"ؘo%E/ kt]N0E9{DAI#=ӟv~~{?@ }zƮfn: n;7I,_lO~>1:ak[iղ1:J<_9ݟ GjRI(+hqu`vi8jPݖOǷd*t3!iZ31۲Q8u`o{#89@F5psKFFBUy976@ٙWFt7,uȈ]}7[ng)5u}2% )̀t`.^Zm[*eh4t,gʂF2EhyWA]+BCF~`; SqK%6>œ@G4hlks5dGĿv,xD{B3D\KٛͲ} sTk$lyPύ{sۅv+j *;^#a`V[퇯n/,KR>峷_%]ew׺M6_YK:a.!KնBz@׷qACk˾ʲl/^X9H-ۡ;)&oBڙ*H8F+ќ"bJ.rV(1sOUZqt [nYes!aztB.i? K»w7Op/Lܮ2^gX G 兰&Uu1a%˒Qk0r)'2Pn0h!]@ay.S=H,>./5#);m:wYK Q}[̟6BW۲\.Ь{c7mV7[97Ƕ>hd_fIb[ҹ)3a+p͈HK8MgBD`LtE; @C~kYMr. ;.l%{퓝? KAkSX2@/ΪOGIUm;`8#ȼUK 9\m6\°z]`8pzz5 |Χ%K:v+]%|Zuj*gd;YžzcxDQewQ b@JжQՕ^Ќ5$&?Fn4J<%31Q 㣮П]%>} PA1ŀ9:-_hz~Fs<b?&}m ;p-*.~N1/_Rnڐ9:h=F簎O~lQ˥/RLR+ޡ{|:OqI1Xv֎v[3n|vkPh&86Cg+uƒa֚\-%0((d(~x2>}6 FÜļvJl;,{mɴѴ˪fw1Oˉⰰ{+ dɚa N7rBdrwv⾭$W~]=B[*#MP_E,.YB>Ȏk c 8li. PLI|D~_|^0S=*[͞Ṫo{HE>οKi;ݙZ!!^QR(#&tx~ՙo1`מOԻa1En؁X7C]tհ1T0zSޓ\l*#hi"|׼DDPz<'H ag`& 3K|"L$sA7b C>1#(9!9d9GH&U`"ubдx7.!xŞ Τ,7(ְ,cM,^<~dH?ZcF{eTNVSw͒,=%+HΕ,g!~!>jiǶk!C>r`V_M_dRS%ʞF,- )#/_n_DnXA}X6[)ySę[([mWi-f[MpD1p;yl^8V&CHE6h2_?2 g}?z0zS=l{N 'rs5M~1z\In [ Q5VrHh֯h!Ӄ@6TBI"}|gcdtQ`ٹ>T ,䚲AhlcNBz3':j)Gq ,dgu,Jf!8xO=ѐF@e03f';R;'p|CDNupݟ.hsGy{0FkĜT2JBB0L59#5yz?)5J-B xS~2]; eaK퇞n~-;QYdpM'o'm煆~;ܜyzQXL8Fd1UgnSg/Koow:cqfnfa8Z!paS,]1{zkefT~3@5rJ՚rxᓧޟտO)r} ݪ\SY+Kz^N&?r' IC 0ud"E o[RzY8//EVאb vju"Ņյ*:(?!+H2 ҄<"ֺP׊wt ?į߰R+%x~=:/y7AZQhvP,d; F*g&s{4r} ӧs,=R.җ1WÆP[, tW}_٣%'z4y7X :+Q~V=,{,b|VTq'TDڈx`[D՝q&5VR𣪗{Ʒ'[g-7S򞓾syHzΤu&B!LRoO<8Ƌ9̀gջs"@'K8<鴵t;R^ v"7)G<φLj*AIɊaL&88pib*pVpg7M23mm @kG7{.]T9lfݰta)ÄZrZnv=UM""J}z뾷 rr}p~Io[G6 +SE ҄6;5gȑW`a]R:jڞCnyĶR7:gЧ"?뿡ߐ0$q0ߡj>w{A5"^|ei b '@B)kOkk)DBt́t({gswWo|X1duݿ[o$PZg)Y8&hfY+ 7 g_Jvŷ({ӿc<"sy9,FϽtXW烹ck4 52"5%/CX,/"tN}crQ.P7ټݓ3mv8Zc,lSJϒ&W(af:mHKs,U' }##GP/z#i~SCLLH8^δ]CU)87:d : ˀMQF=;04m-(>}k%3 ṏ9޺y=dGoOuY_ ۼ~'w֎s6R)Ɩ7{~쐐F1WzMo_.oXSßX]~t)GנNL@Vxʗ,Ϸ9"ZbE~xof;yD1Vx!ҏF;dqIl`7RʘgbLd` п,髵Xv>LD0iUiN7MtJ͌^RNٓ(XcDs>In ȋ]}{v}8'~Qs/F,Cj=/n{Mpnz,;Jyr&^cԡz,Jt V8X'ݛHFF#R(sSM.sЬ=iW !&LNu]TJ#B.oi5+y! TPk?1ꗼ=zfeO2u8ӹ4i W+#EvjɥW>jWjEĹYk dXZT`({(?T$\6ϥp!o۬ M7[/YSP3O%-osv͂#åy`Dv" !=[:ɌJ<;l w(`,=roBLPY#BVQbٸ o9xiӃg~o$%AjhUow4Fhk;09r]iΉ'׀̬VYD=;φngcSsY_"aJ@ uB(&\%!Ie61> h:p DБQ!Ɩ@aPAD Q3D&=@x` RFC"6ԻdHIl b--J bSּף$}ÌQuD5`8 U 0fJbҞhγy,<'f8[])hS,KD P7u|LN]}BA 'OC1FqB,r@9P$`'ޠ0,)`ӘQ[C֡] WEuBSp[q^-(?/"b#uC ICHQnvcSs3fޜinQ rI`cg^baϟ#ӻٯ@'!*l@sLI?W4ԘnX |6~^~*5 ֈ72yO71< 2E**C%X& Bj<](:!8i PG((}4 CȐI%2pR{2_wב D *FWaTt?N?!BhOM!AiWn$%pj72f !e3po:F\x f=8ːSF(hq|;n*&Q]*PR-2>AJ90' rzݼ⏌KdcB?,h]Ƒ4gn;y%3gn&JPqRM#6J.H|2@  #J|NKDԘx>Wa]]ndba2(YA"Y ph`$-lYeK}B?Ѩ{6Ay"< XʥnN֛-JO>3 Fٿr9fNE7@m:Ơ)%cWs-Ɉpڪ 9˛ZxiF!gq(]{,m)ꯅ8~ m9x! E~ (] '@'Sk4h[ϯib6w$3Ԝ>gZct6\c)&E, Y, b@E&}\jcjc:<,"Du'î8-J|1Ÿ1lZ }  ?)^rV].Tj"g8,C ;zW(4yOqW1Fe\01\ 5@E>zw֍p<: :(1U}}ټR`%vmΆ1}iG @-xxKBĴ?q]]{1,>ZtVo3/X&!͉J?VyHa3VXEngklW8Dhy~`6l9<ݙk);|^2y7\.T;[^VEq|2/dl ~3`i;Ei%:Y57'@`KzOI.17|1Թ=d;zv[\eֹ¡mq0+} v[~Wq ލ+}/D2W6jg(?+:ՀP 6K^cSB80"a;r7Jg-5⬋125x1qہ"C=QZul\.ƜO>"+J6c- PQ%2rpH4W7oQ"4x:Vpf6sްܰv~ho&>.7-cwXsZ3cZʗj`́/C٢!.١ڀL۲ i``LOݭh'kqs]MН Q;1G05M'd .rԇ#Ѿ8zZ@E\H:LY8;lMAgI̕ }v]g]tW~8z} lĦL6`8+1<'٦rY1wIe1T7dd΅Jg5(je!R]}5 zl.y1dD332uN1.ٚ T[S `DРث%pf4ZR & x^1sLlsD2N ݉:6NTa"woY}XjYETQUݜrZ 뉋"]E/Oi^9J.~PjruِU 9lz-|53dW;Iɫzs290#֍9tݺ=RC_0ϒ#uKXPO`Y]i,em$P{_t- K౩(_]0C=|Rlkt=,E]ܗFvB[JG J$FBqF(:]H$AQ4LUc;1ˏa/Rè%,uQ4dwGAdvqr@{rۥ3K-4Au3d!Fj 4TA&hLhj8HȞ者kkK02ӿ-lݦ4 RPەNE I2D]McuS^"J˝cMhjVkP>'$쁴!9u>]|cSgxD 蔗2j f. &\ nX g=) Σt9vTA-XQ%{!e7bA>9yBFx[iD7ѠJ{ NlO!aW࢑ϧct`g[.BѲ.)-zH8MNya2yҁvy^Z`FEȝ*aGy3Ncio|m9'sAS o }rBe2h-g~$6I" W;Fgz'5 ޲5f'buݢq!&$M ;:ILJ!_igj H~)C򘏳ɀM!/_9Zga ? T@zҡ(sA=aJa+$''ʍFſ\pTGӀacWtmSD)C%+5JONjS:ѷgE"4c\@r-j9j/B@o >k4 ;kU]yH& d1Vt]> 80s»G4DH E0ox:fg9">vi^K&Z:}$y)Xp??c4ʼQG$\;:tz0.TDN"Ogt6=Bv77t7`K[C0.WX+vc-_>vt-+?`ل0+(t=ܼ\a12|"݄a "g[Pu@E0 xm rJ|=|,C'Ð7 q؅;bbEpގ8y]iUzu]_$e?PwUnH Qg)ܜ2-Kz=lG,Pg Hv lUHȠ!,;Ulª, @RB=aYd ?9s}7^C2ɑ0Aoh!<1#XBC SrLWJBN.`^59OcS"nW>+w9sz5fŢCe&1~p\pl&y,|9\I/f.TZyHA}0m6 >[IID.vd"j3fz+8W,`-3LYJ!K ({YnpL*J* 40P6 ]4/-} &SP@&Px/ɱ6ChlGL隘swxN]Ɋ =Y,kW ڍ$:X82ol䑒B/0$i]dM%R2-<<4% ͚>7bp$JP(Z;) 䃙I> <xtp T]JB(!~'6A.& ?>렌j =ҔKju:՜h[0oK4`do9 d ]5yy'~Ic&,i'G_O^=N=Z`&#TM?|=Hy0_-0m̌" # 8kT논KI 1\F|eC@ԨT6<;LL ނL|=#;f֢f?Ӎug7]`ps8Sh,ef)B7<= K6D3+jĐ P?Y鑲=GτD0O2V%( eB_54RjS{lk;__\cFQ󄭼x kLj#MaC[`Ū U (fB{S,ۥ$(w 2ZlkX6͵T ;ʂFb`CuC `dhl[U\Q-lnN&g乆Ew/޷PߤnO=c2%Ōӑ{x^hi">Q Sz{oHs^T13j9,IF[G5J2u~8oR KB=9?~O'-̩ZǵJ퉻I-N\frM,PEFo]ڹο; |X5X}X{#M JGLS.isqP}+,'J :ACY6j@"bc^'цii,]7Ip4u, FJuy>hFHw4_@zafm`hf%vcTHFqMI@BE!!@&6@")B&@ TiTtKS$7eAٴ?K^K3X`tLka:g1BoHjBET-?\LJ߇= ֓r_iFcI`F F.D,xJ1Gn0" р4a%rQ'ߟPPO8FsQX8*it0-&. ]`kD5os#$%ՅKD;CGz b5"n`ŅKKvqأ=^_6eN;=Ǟ3; Bj Kl|4_oj0Z~a;56 <G D/Ø\e=3-!,B@i96#%7eޏ-Ɯc-_@21A3ē=<ِktBo0`;*uR0ʸ iv=qp mȡh(U`^ }7η&2Nj%"݇zS.%3C82qKL-@Ϋ̸lچP2Pj/La[B(`{x n2׊BxzJ䅆PSPu)-7i9aNeQIk/,1zBnܹȓ=4Té%B{ՄzmW7jnFrhdRB:pC UtFaІ"v"#S|*U+Δ"XBEkƛc> 메>QiTxu^iFJ)K=x!MHvmuUsv_-nD8?4` iv#x)&1ƶ?n^Ol4,gP&mH`H k)BPf&D$STQK3YHoN'78drFԛ\ tQj˔#6!' iQ:1J2c20am@Bf$ "%2!+dM'U:Nk]{sPVxC%bbS'da#?^F 1,ym$K>NLJ=}ҊvM!UdO_orz?ea95nr/r*4@NjN'p`<)ggق0%P"g-:n!!uM/`i#:8XL DsYup~IH8I|VK]cp4w*͜bi (`a)bVX j#u*Zao>*̂`**&iS I0ӢG4]](BKH{(9QHIY 1Q_w}[}lb`3~n9MΎ7 >ExwhuuUC2b*fj"UY*KMr19omo;? OQu1q4hۮcт(n_TiJ&.L$5=;}Rv˺ov;clޅ77b`2ϻ=7n&2L CC]@>?a@l/RdQeHYT2eo#vڔvvj[5vTac %b "C$ݯ4Hm5cN yŁ n߶SrM4D!o]Ζw{tN#"g]qWfepˋJfAO7a:98x?~_7dcԌa#ˆ} +YK> y>Nv}AHGhy݄c嵡t bihtk;Fz7CEwo>jf+׋w6nј8є@hxqf`atWۥ2h3{p͒@ A_5ul´:hbL)VQpĭXFgW{35Tlfbu2IqF?;pٽzziڕڒ8;3d:֌6a$ eUMR7?q+s~pjk,[pf>OVѾ|3Ǯul5a/(wm L.UC`LD H7W@<''7{8%DW`,]xwt*! ƲzDhD }J! !t𯲐`iI>Ν^.;)c=#|{)J<ਜ਼HWӼ%hIhL[#4HѶԈB! 5M[2"13²#c%mtwǂ.+y%!3#|SLOn>GՌ pU~mу_0o\Vq>x5Hr!?aLzcVTo7-;CgKӤhWoy)_v).%M_~XWC릛Dj`.,>qyHp4C1hVߑPïw %BilLa49`<+<,:06fX7wkް:0VgYm[5 oor=[QcmMvL,7$]^ tf-(f-x[$uRLbI$M3XaA([I[K`a+ZG@΁jNd܁*w%bwr8&*]\4 `cV?3@I6+z8E)yҁFn!/.(W,k~9d5Pf[3WnB_}]jiTioI@xGoq=5&g^KQPۙ9̓Vn#^m:<6qu={ L;APK؞U ]oK4{r" W ?oL,o$W-v~Txyî@,m*WkoiKyw]gXgOQQgo43e 씋*JoQ;8[n8YfE[d#q$\򚱛ktm[[5$$̸^42~ 2Wffl9(cC&@׀ %DmEGٟg0fo,|4"N9s K+}Nu6ƃ[!].Κd̨hk)w b125rQԗNMЭ{mn>;B j9?zy_ jcB+>ߜ&|YBQGKYYA}}]~!S`*i )4r0ξix9C gcۂH3jinRn v<71d-ĸb{Jƣg׎8I?3٥ݛޤ|gmii4;nRRʦ^>s^`dޢok5gw ;tYgFjX+9ǢK&X] ARA]#A0A9 I0mj 1vKqb{-A2e;>_X4͉[`8p>nA@`J>;(t5Uhitt:N3=&m i0'b  Sl g$ٰBˤcA_զ9  t;;N] h(fy.@>܂vI-%Ҿ] gD |Șa%`2 ?\ ;4ws\4Nٗ-ՅG/=4rP?T-щR-NJL`JlGIk"\wj @,dpfo] H'Ja|;r.Ay "')wB+!LbJ1P߾H! Ö)ގ$}k m 0$tfR|E<,&c! d2-Z1Xt8f< k^MSܙ{*)aѫ~ʐ?yU'Չ2Priu` | I$Z=h؉yQU=Ypž5$ՆntGMm懠qtc~Oad( JთL.2aG̭}R9j"?x (F|^z[5!~F\lM4S6(o޶Yc!gW/AR&RwHɲQSVW.W:m GZBNAt@)QGf4;=4QMbr8 "*#`ؓN.K~kLN.&Az{4U`nAI 26]O3zyaC)@ 9]`hS(ڎ=>'-sMYhH #lyZ a߂52gmv*\z2S)Yv{׎ (aUY0#Hjwúzi xR-C E[ҁ: ifaxbvCN1e6JO6>DVBkMtMFnuި[gslj=lތ"! \|M$L[ c@7oY׊s-»q([s%;2MCmA[ w**"Z`&IiAd^8n8 &#·9iWv')%Puh٧=T0Б]iADʖR*bpfnK|QE|FE|wy%̰ * "ވl TnK1ˁ HE ǥ'ib6ׅ]MK,>k%-:$xhfFlyYBۺ]emRK>['`!Sa!.A1شqf_R [0 amu1je,oDvJ{Or^!;ѵn9Ī.{54 &bgI5SԢ==%y$0W"itZmAN.Wöf[@1qmE3,ZNsvnGJc &j\0ۡ^b:><\P9sՖ/VQ,ԦlZ=zTb>+n(UxߖN•a%n7-4x-A6A+yA  X31rPIK]>Nw1M)vp/aӼGYݭW'% G`x}XĀ\ Q m[dvX>[ZiTĘsK#D'YT!Wo%MpEN:{uMlt7K~~!xj48T8jur͖ܞm!Uʡ.1$U>:kHY{QM$#z#\i/ON4>SDy(].P]eܛ !' ׮{ "0f(vv6d h&W::8@ Mz  x 832E2N,qL(nສUQUG?U)M3F)Blf_94|[yʖpLN\ՔԜmiSbc ^dY{RF $sv;޹jw MFu }ʩ.E _.duohؚ 7)۫  {XP@#|6qJg>Nޫ *Zt ֆiJ9%`ă~s 5`،vpR Ý8tmZ@2DS0^`V@4IYvs3vGkb#3Xɡ 6_ #is*f5O̊'b7%$FolYY cE'i' n، n BJCmTK1vad&^䧼nznϟlqi&((Sik̠&UI>u_kem}&hDcpMmNH,ǰ j[+D,=rSӫKRLҳm[EAUA`P> qc &"O5vcF \!owB\^TҌb_Ri&5,CcRU̴َ=vngZ`UH*a"2~Q;IsD$$0uu2zS^^C_3$[͂f3bHF18UM~f/\_X>ڕ SwHIna27w8R|&TR~4SxZ۶z$V jiݧeAK`+bnl h6(*3Q WclPQ+-twTvB[+&hesˎdCw菟rNZO l+RV3Mgv0 QS2srhk푸 s<@Cöqqm,YEvh k&ehl(;j$666~_M܁PJ9'd܃7s.ʪ5褅= SY~b$cdlkC5(B'`͓*SM: mu 88'N J`Ķ9n`J{3m;nDn1Za E NXkL+4 Ezbf6c-Uוӝ82BZ\oJ`̢<UHLb9:85{ jF OuۜgTMUk'&J0><1T+[km:]u 3ֲq^e`45Py"eӀn,7~ 'x^'Oe^ŹZE-NǛW GDx?/ǵIz'ICdF&?h-}7x@)! צ||Nݬۜ q=3eQ$1DLS'y {7R(C{HR?*-(Yvz3~J|pɖ) &Hd>S@$4SQP"P"ln؁ci* "':O9Y M/<i;i{zb#vOsVR!Pt†z J FJ08HD4*8qK5&!.߃"dEU4QIQTKMI d5$W~3ӮP}6ɚ%Upi3uKb̿DOp:iWUlоϩk*!T9ݐ-0Us7dnyxDt3$X^;Yy/U  bWi4NV$+Z4'ؼ^R|dٳ@u#+TF4̼ 8f8F*0 ;]sdFo*B:'BʖǰIO=P%, ؄ t)IFޤ}㡮_/OЎX`s0ko\_ nzs3yl*Y&A+L)KJQE 1b%39U,@q5)Ϟu1S"tqa3i@w' ԗ{ICn^b@. 1X2 2JN!0 lu*2ݻqx{)u*}yOI?2zdxOXF7UP$vQI_4Lr< Mѭ\h&CJ;MCIAԎθl*xO R p(a+')^@zB l̦}0-$d'7oXȊTJс& 0TM$eML$l끗i'iVƙqM p97UF쟶$7a8߈%V|%ϯʹ7A51iAYd^9[!;6-`n.Np.|*TF2ɣJ!(Qd7ƌd|[%(hyZX׹Ӝ>l: "fkk[ ~~'H{s{[pB^ݼ ЏP}vHQ <*h$>v;m~{;8,=\S&`g bdD) ci-)! ec!  ՊF:q4Yp%1Ԡfs}* 5?rJeZ>6]/>rxg)@R6֥1%=yyݾ#2QCϾ]#yU93:; sL/FIwP}NBD8Xtlfk~H :؋6ZP1TGxL@v'/$0hX> EjW ƊeF"JQ=j̲x/FMLeDF&fC8v mWr4BP.o Y5m:qXQc|l/*9+}u+#Tb/\M~=&T)|3񙼐8KEB iC _9ؠaN/Cע\y8 Cv \-]vڴϭ̘6| 5k#|%ٵ82~xr ,QHs /n ch>j%VXɠ Ԑ8:aS5f; lLa$e05o֗Gh©`h;gJmzx4a ĈFRO]uBVr.rH޷OuV4i03J PtCvn猙17Fa7jj E$3eRMS cu6mDR||1Ӄh5⑛diכBP{x^ vadfY6[KQ tU`( ruF0\L?Qt3(tn`Lٯ~DA4{[ ,'x4,Җ[(Rc }\0kZ-Y#eȡK˩fpD D-S" cӘz[&)Zq Xj.5`q2N  Yg "6LIlp4oSݔ#0ęvW;R#K/ gő6M#nYyT.|*K$A,QgO n.W >fD{odH2"O')_> ) ql+-d$]uIP agu)qHU3yWr}Z΍\38Xcxwtb_r#*nkFlq'!!eݚ789´-@/-bOL,g|ͳǸ5WM_!c^a܎c1{_d90�ww$H Z1cf, n߃{g]̏z]~a(avLSp&lLld9[u V[$ Y6m Ѥ˰(]&Q|jfQ+n˔ &N]De'89adNdTEnrnO>2b vM8}2,& QQ6~9xVq2A[S_*a]}w2{ZTzQe}JCtBh]/YZu0x߿:#An'9A9uT-.KLʖv̋.cw-ˆ [7]rȊקo&NhMS]"BLfa H0$Aw]!!py=wFiO6řa z/ow0DoLM.fGxmz5Nd:_GrzICSkUp|/."u1$2FsWHJֵM,|!B,.Y FA퇚k}cw:|s lzv98=6ݜ ݎIR(z30!bœ2!PPޞ}}Z-MTUa B(uJ^l.T^Р~N~ryԽT>kY槅vҠznf϶&LEs ~͘|O". &=Hw:Yb$4LjM&87wʼ+"77tQea;'@$R{GȭyըhIDv'vIʢ$lWE057þ8wL <;R_x} cqϿ󂈉:O\7\_PlMLG͟v)^AtzG'O=w IC?׼B4.kPn !||] 2tj /!|>^k<3'}B $A qG;9$Uffg$DyCɽ]\/=\ >LzSTy&f(YҡC5`Lp1ff@DٟVP<."i .ܤ߁HB- p s[t̝{5  MAn KUYR˴hUC" WmbV'F%!4G֡!(ùu/,ԆBX:<;Hy,?K'qII Ac1˕ #J-a[-!W(,E cD}6F@b!&f֨,T @i0v`}D?^q; qCWfHbXQ̓83d[ɼ=>>5B >@C ȗag(Ԗ]wׇw꜃$$!;c!&S=6pra]Ikj?Vn0;I4Z1 .A\l22o%E8+rD"'X<9YᔡS4g98\nBicoa\٤7BR qO;>ZTtMwk Il_3e8{~~.:2bKȑmMr'1Ͻ$s, JJ̉ePMf!:+f8<`@t{@bm Sc!۽** >b`pz~xC (d|gG(Zc#ci]o ɿg7qkWɲjcYdQ#?6w̓mēr͑ N 6/2jvKmv*Q-Ʒʃ) i4i>G*q # 46h|xP{3-؍Xfb9+4/kps5Y´ky" & lY4~+㭯idGb5;DD"%ujoW=c|N 8C]L<\O=뱾f: #Llr0sЦwt[UUUT^UUUSm@@HfxSGE?UO0JS %b/ #挈qfUUcB^B%5ZR%* f EiXLf` EOW>%`.1 v߿BIK᫧s_2SrY?sWL'na073`h5+9KD?mC9> ;G5牢8S6j%K#leJ?.p1UN 774IO2U1ZVŧS)m,01 'À|6ECnڙO{vl1r2R9N ȟDco:dɒMӄrf#J̲_L ??Ӌ`>v_'zm???\&f/Z`B?<%A`Lb*Fڼ_;Žܞz !#)ib'fFY `bIU3A S1EDQB"4U }lD7Ҕ,$Txx9ck9JZiI&"$CQL3EdTD3LMRUU)4M Ra01hD1LII$C@QPT W$GDqEy~uXprH jPw&*|WQA`*^W08VV?6ac00f3Hc ?.B2T*(fئcjf5zM0coZz< sq5~޻\ :"/@>[ T I1NU;%[tֺ !ńfXz lm=Xa ,㷿j٦ cȾ"$}PРYyW&c\@iG4=HbGA3Mq#26&)j`)> %3&+e H_/t6_? yp"~jQ_mVMAb ݁j!3UݳD?J!ʪT(cCmC *,Qq4ՇՃ ϔBf2i6E.W3T ؃ޯfBT^fRL$J>0P5>'CEdѲ'ai7@'cSY:wg{$Hj7&R /ExX}sEUacdT݃Yjmw5RPJ~_q'U lDEQT;1S|r#-ɠTEF# 00yS2,/g׏hifZט^(A=?ƁAC+x;ϛ2+9rKTjމ cI&:M =?sh94&0CTp?$b"݁*8c8;rv9s/Yr//?WdO&hFX_);lGǍ,RR\>t=mT[U|ajh-oN晇̔%&pxfICJs{R`m#_>$=q%0wDwrqmpQ$M?Ny6 a ?J~e)*2%)il)P[% c=?V̏cY@x~:ɧS*-4E _7T- H>U*$MCSMN -0O74NO5.~pA:mI(0Y+RBȃ9}~'}W7I7hB* }gu;WrrDu@P`++@®8F{p`v4D@T5i6>9 'љc9 &!W>Q'P NQJXz`VHDĻ) -N>S/)gvU) g6l!IC&JJFDh|KGb7!0D1Dv>'=}dd*^IC0?M~ewt"<ُʃTF35V%͠>? @kcAX&1 ~<-) `l&&H!/,`\vr|F[COcthe+>~>JmpLc铐.YIsoufHGJeCKBҖ*ի)|ɉs Yq?i9zI=.@Gv5i.Ng1Dkq \\*V@Ȟ\wԅ%-Xs0k`13PZZR/m^K%j aMEDAt&ii ȵ}~_ZRD"CÇ uUUQ%}//g`E%ID 8%t4%Loc8刉+H9;ew8[-8 l3Xa6Qę(iLRdBQTRg=)dLbF2Y%5a".~BT1Ty:M R(ɏzh&#$ L J?b}raBM4`~r+OJ/O:ǏO5/.a!ӭ$z@&?+(dM:L/j;[~#?J9??(8s+(d1~] ^h<y'ۙCC! SPqœS(4J45e$Htq+tكp!Wps~1w7cDww#ӆHu3|BE4'%|jL;=?wgz+Q8c<|]jRڕp!RoA}*C /C{g[{M4EQUhY@H(PڌXrLq# VB$rppξG<"Bia9@0DLbeo٥dZErM0l2U2Leݜġa u$v5NjYT9Rp3*`B>b"ktNM' Ɏb< YtwSp>+EٽߺI{WuqfN34]0iAFL^{dc$eGxz4)1&nv:F' r_'Ҹm;) +~.֮0`Sצ%&*1# [iwci4r8򖹞Y(WWɼяB(hjH{qx^;M$ "OG*j֪ ' 0whȻRh:d'?TE(ab/倆 hvH|d9};')ցI"UQN 'm` (Eߏ=Wt0 @:Wwn&jid\bÙ:?rG=U@pGoQaXɞ1V7njϭ=~>jh1UH%vPJFNzdh"q8CDsEtaaab(CY_J&dD??*U\($H~P¤W6I>~Rx +{Vr@"ކ+v^boʣY^#!uaA|ꏚ~cJ !>Ǯo%bp@Hh:FF[J0$"R2)IF)x`;|r|l*r(` ` S^o| Nd"rv%N6|GwkjVk !a)*7e 0PgyW$>_L@. )Z(("y'|z6 |?55! \L\dqgDtp? dZ4F$l|MnC ZyI nyM0PB[514Z`H˸22/hnQxC]^A݆>Ne{:,oPx@4vZBַCzf]3(g ,]VRNwkS3' 3gIG9SB ;ѓ<(,TZd4fT -2;FŎ1#jy Da4K!-z1**VhA=7q* ɩu]<θiAͫ2zD7D61H2 ٩ BG,Aa)3B"iX&m͹lf@$sbZpdJQd&T}\̐CP(sH?M!1/Ba6Y/#?F:_YлP**]QTh~hV?ߧ$Q^Yϳ^j <ɗ3%,?(އD^e^g<t=! ')EXJXs|zS8V s=::{t}[=  :.<%J`efo_kTa4/bɔ2V Ja^L$`Wfo]f.HSnRC&\/8%%UFl2XCP.ՄՖ\ d/|Il1m`SX:Ye rȖY݊T H*hӱe5ljO8dm`E#ȼ7\QəkYNJւC2k.+~j,TE UAe%(ga.8ReMpS_t!RS?:Knfv< xq""'z5"}e@11B z=xӷ8X0nʫ:%n?\hxcJpVf(%(`|[jS!i`JSi{6_NO{mRJ%*:b{lf?KÐWl|tƱ~ v᥷AV@&< cN~t 4g1h:>f[Y[2& Daa$8P ˯چ|^'T (t iJiJM Ν{huO؊l#T 1Hnc%?:)w06,lq:H%J"E@D0cT9(8/.@5{CHio9^`iHZAPrtpzqR]ro}dAeAlnWK=c a@bEkHgl6e:123D\>Bg?AGo0{>~K0 \bd 689ɞ{kd~&㷸̆,?Szw*79gOOW~b*t7ϘySY&Aݭ\Aaջ2 Kë/9 eR19;&睠<UQDB@A,0U0vr{RB?MzUcicÃrM(P1Ct`(f L`&Kٺ1懜)(?AĞp9f8g}UCf!0XCЏkN: #qsz`HB2FߞCEjS䀖&I%)‰YJ'6.$d$@Rb`JN&XK27K&D2&CP@DPi8l{~C~OAOAsIh^};XbbaUTSq^#ܠ:E8y8 !eQb)T=RdcD.Re[lX~a"f@pņ:H,(cPEZξP1C>@8%F Mڿ1x?37owyvr0?^߲>pumv-6Nk(eGj]|Q鄥My!팁B8X]6; UX(DM(TG9\$tlg PtxM; $/BBRJPR&h1q8^a[ޞu مrn[D.Q- , v8];GJ,sT; |D`9KcN(f Lbv\ N!a=֎upw|"60 a]^qC3d]qT,+c4cVG9 Ui$: X;eUD~BĐl6{C&ރ}PwoBQR>q !#DA(NCnƎ%-C?/I[?e5m4x( D> X9('0uD ̐Љ!SO TsRyT#P:D;imX 9f@( HH"I`  'zO07 ,o.8o~lC)5 4 xU*Jɚ,p:zР>>%J=zy"#BZqI+p4GKӮ(thj+KJ*> t9pwhCtN{L-|Ie9`4cNauz;q4oFi4h(U9%R2* B ϗ m\Q:O14zz*fa"n4b0̐'n,RT% o9j*p==x7|cI;s h!0E{h;nQ0 %3Y~d_g3& {>DKOPX;Z0U*G`"8>^_J%U ̵m~˶L B|hI蹴ԴrYA&] d(\ ݃ JlO4z`W|俚|{98|v\f&x;H>GǷoTu(:)RG7 ((T jhmBm@ j>=a獶FG$6e_L'b~3dwʭ淣3Znvm-' >6\'Mw;9jҿ/Shd>1ٵcaCܺ-y>~TQI>2EDCu )sbDDzf!6oޗf|ϳbk #z`CTe bX5(^U*m˲?o{ 34BANToB !5-dA73#'0bz` bC ߷;H]sGy65=}Qh4Ʈ"a!~"{a2)tLVMjaC/F /F S=ܠQ.O.@{͌4¸蛠~=ɾGvG/_9;;9~.!s=滽Mp+|}PDUCCT[S X# 9y7\ULj"ڒyuΈڍZ?wQI(\靇;0Hzu{k+lv/ZST8?BߧǰRvq~N  e#~$ }@?jqyߖ_{L=|_q5HEe((R$ j)6hc^34|U)ПF(; /'[vFbxO"~ y>oV43a )߹w?y6*G= hSW=vq;c߿순Gq "&rZ#M opGڍl03A~ҕt\Aj8807D-o Y`$vnNRn{e VM}3{b}Ȉ_ Bfo b3oGkEպF]2FpwqtOթyRbjѬ{]X~o;OJqo'k콨bnlk{}^7ucBHaXcA7i9-0@<`C س6|mh= "ֆcFOY4 F)!@ myCiH2.t$".6P_&CiW>{?Mצ/+;ΐtsT&bkzoˋ5_:(L*.rnfD ۑX=0J [6nbb9 $Ң }ۋhK8!3Eajq266l35g1C1 0+pἉ\rC-PvL~ t\. :(eUUUUryCKͭIih5@5s fI~$pLxO!4%~?2kلRYF) w0,X"ak{6l,l{MáBjb c:|>':& A&&'ևB縖 HO?dMvfAc6ȞΩH+@*xHȧ {oLLՉPN(fpT1W O,8Qqt|~?cF. {TWq]g.tI*܊itZ$}a0XA$Z .6H@Ր`Wt ]ei l'/4$1FǙ 6"FzJMpt{Y%-;L7CԒT"`$~ѻ{Nh5$)`won蚌!uѓ*l9?.,3crKy / s6'UH?>XID CZL?夎h6 6_1GS!W&P7\96e{ʭ! bEҧv.]R{ Ox~ #f,gBjؙcGwXs/Ỵ4~fX2gq` !fCЖS(wl )@!@ opC@lC٨tqJX05d$9񈡷rNhfH}\zô{2î=6US'm"Z|ð~\1萨C: uǃ7XQbo;EHKfd?+T9Dڟ'>D{ͣ|`y~wߋ*O#'dNT0mL:V߀vϮC#ԛfJ5nWQR26p P2vC z;k-fރBmh]XCKK^7ӶKv}\]3Ia.PQ߄mr/)Ǜk{c'_V~Xp~r'}ޠ:/L>FKr3!פ~}9OQ=)tsRo)|/QZbD?!C<Pɘݧ9Hc!@_=|7I^ Wk~Mcb=63;`]355ƭ%HATi _?8L:;)eL*n'ߎ@m a$`3Z6ݦ' >H<2iĕ&gRL;yƚhV㱎6N$o{9P|Љ=֢FD.7C3OPf"vYE`K7,r`1fZL0. K …ۄO Sm)^ĺU8K&cŊ5=T0Ris +xZYtC:h<=݉I<]dgN>h0P} .q{rsƸ:20:C;}z4鵋X+&dmv=#잀L oŀGy %$; yruP/˸9KGg8*`S^Ao^pYM/Ѣy+$C Q`:HuҭQG'G\Fd DRp;M0A`@׸ak 6 4M`!,:9,92E+e BPzi!Sn&#Efd0I^$Ox𩰅qr"̫LCLRKbc6E !2/ ZBzGG(ML<|##=&'<$w0B)Xk77`-v[\/EKKJG'F NNP9&`K`p*by|c1|lGݘ; v~=Ēp>'Il"kA<}ϿC4Z^|A ><0uapFEMX`-d '?7k6e#(љK罎vyunt'hfPn@dl [yXP-9,JAөNy{J^ ͥ10XXH`^U݊Sq7B8!\[0ʰ/=iA'HK{OEIx)߽~x<TH% η*pU33;JB졺6t`K@\i1y1 M"P ~#JHAs'"wL3DF[,*L6+a4 QWM_廒\F :IpvIBSVD+ݑT2Hq,%ѓHe7XR1bO*f6l )G!Oخw†1+`;$XݏqyBi(>x4t ?:4w!rt;,@ wu:m(l%*'WZ9[p  @v !غ-goi-l?Q* QYa ;? 9܊/uT!ԄݲYmt; e7;4G/qr<,2@кcny|6:힦@<Hz4 R1 HHI$@0Z}Be$b BBF)eDc8żd&&$4+T DAHLHA#AA,PC0QE$53QB$R1(Ȉ q-8%RSUD A$@PR1MSTLLPQ$ C%51IP,DA$5U1EIRIDEM0Pұ D@RR0L@LBDTēEU45I2@f9AUETA QR4DDLMLT4 DQ!ҰHMQ C AԕTL5BSI ITITPCL5%PTAAIE4,PLP%DD!%LPJԲAVYKT MU E4M1PLUPPEC2DDTDD,2i`3IMNs%& & HU HhIO'pv 'lw<3{6p #@!dk ٣n.xN"E4 Y 1F=~Nrkc.!ٕ5?t5$hh|Of>}@_vM{TD*tA!ߜ MA4&@&%PO @TLM-1 M  1<;x &RFxTJPEQʶ&||C9|1r1rl2f2 Q]5x^T0M<%&f/bK`t >25 լ2F( :By(b)}PM!fy P U:2Pjhfa "d)&Z(,\Hq Rb,M,"} `M16'AWo ) @ *I ""%F"F&NUnÉDcP!@_i4,^N bb(@H}&>q0"T97˶zZ=CC*Eʆ܄0{odleS4+&¶$ l!zY$> >xd3?2EX( :a#p9]bٸx(O!!NR#.\N CS!!$aZ P+$qm8"erV<ۃ3ӢdH]Xf'8/!]HF(U10*C$$9D!$ C C!)r@3~|ljRDG$7dIO|p2G 5NՐ`=ȠӕBdQ;{^LJgHÂu#풝 {2"]hLFhDmj`8&-B44 0@FIHE {/*>!&DzML`I>4Tt rx#| _g/se@ $a2 y y J_2G~ykB R.ɱ ķ GA!2L* BSDEԤRI_SDEDF @kajh4( ]A%VKǫD-&ǫ2(?D0V|O{wJB&:8'1!B&2֜'830P"E#0Ttb$#'&8lq+Q19LlIvfÔ o\l; 2`j Zr"n(R "?Y"& 䏸oCc-H9\śچ0`9&,ҥ&׻! nk(R5%"mIՈQl0e«@ ?~ $9(SQ0ULdQC2\Wi^>:@N&-I4>s ;/io'1i?fø xH} C);Lz; cY5 2Ig@gj ;53S ~R( g "M m&y\aЭЊk.6[ӛUJ)B-bqxB /`5 \8y{{=xñlVfkA1;`@@N]} 713;$p)ˬ/.(`};@H/nyt4s>G,6WG[d8y܆ndC&+hO?z Z14g#iO?Yz.'͛"}IX[#=Rf<=ąu[%L^T7yJz(dF"1Q웏<=&&R j%ɲ p ݶ_n#NFIt!754h|Y*d Srp%9(N9Gó Ud̾q(JHa5)m=.ЙO:V{ hI!0#QG(`;XY>KJ"T7G3ͅv? UicAPBێ#In0?ob^! Yڜb2)o%M2$i%0U!RYd$)(1=PTZtab JJ\b4UVUUqUEUUUUUUUUUDUDUEQEQE$($(Jܰwt w,>p&eXKPzmyָE8[h| \5>1jʻK˿3s7Þ77cG=MSUA*ڠ[K%3^:ԲܤtȅJ)F-ša( = kX6PlfB%Q)i"!W$fYihh._p˻ew]R 2W>,gtTYZQ%al X$p0b* NĊ&( {S{D1 TP^qGɥěw Ndɀ׬ k{$|~ D>S`PAzM 9@S@ EN.{u4y#)ph&<# u5b8*j1A"rU1`ZDbM@D0jt $@4@P T7 ~һ%$GǓԊ=Wy8Af 8!Ӄh9=ŀ)x0y[3m (00j² c&xtYٿ6nz5kLcy˯@>f#LfA3 !QEEQ Oo4y5-cOP-!{Ҭ*07#e5dzi^(@d嚔XVA|'O;F)7*"%ypʷ|bhu^rc7T;嫹t̏@;! p?sKGAP0L>rQ{]с])#` ?~a|8LZ8o3yG0Os񊛕 eC`LH@eD' ;‰IRa!o#>lH!J ֥>$k=*h!ꭉfwO;k{[UP]'dfHoO+k>aB)'~oRl*^9di!ēe_a 좬BnZpA#BPD,~*#Y{"F5Sw F4n '8{U:.PSB4?4lKMj?5K`Du4uab"(%$N|?`/l EyyuߟҚ. ԲljsjbI$Dfp_ȃL' R) D=_`7| V``iT?l=t?& xTfla=C%עJh&M[_L3X>G O |N**DHxHCփ7[WFt'dSFM #p(oa#5k`Z `K e F K@ar*(&@,q3VPh̲"u2 MK R..b,JKZ'04!1 @ŀ(bAH7 LK0K@@ HD+U#S 5%1!5IJЎqH1 30(&f $2+ D +7TAŎCV$8Rf9):(l,YH^#@{kѓݎW1v r!3'L>; a}҅ c-c]8q9TGKac AFKDfӓemPBF{=Y2`R PdI7]Ϛ ׌ *d&rwZK7hWcL듨%OixXkP>6$2cNoDQhP͜Hh5^z P Lh)ZIKnMQŨ d7Q(Îi2)x@HFT:9G!!SUWCP ic% abRJ 0P,R(Nh{4(^"Xzjj iRdNƹ{,1+; Km*4\ т!% *$ ck+ +ap 2A6{ 7v9$@7ww7͂)9r:Sm1 1n2զ6s #Jd!lnd“sM[i_a=|'e![ "`"h4KI4TOܙCjT@DG?ɬH0,$lg==}R Ҹ!Dg0sG+ YM . ^:,!@aҥBmᔠV%*"M#{`o˨ JɒܶA6 kQi 'Qʚ7Ph K.5mtA3N`$m )er/E.xôoj"uW8Ү>yk8dՄc!kxT0Ƶ [q .m3lo{fu=%}=[]ۭUx%沧d (DL^˷oFd6PePf AҏfzPgh\fl*6Wk#7VMl'PsA8݈k7q%$s= .&c`S*"!{0k=fΡ?u;Aɶْa'3"vXqR'**ehg\ku ML{XQ%KaT܇ SrTP2Zb:,JYp~?u3,<̩x2@ZǼ%~" (p^VY7rk4Pp9Z{֟K{s.5ux2l-.1_)NՃ955D69Ȅ& H0Ott1f\.8أD')VFsmt]jHK]nMrk\ =^ޚvk25$4Wj莹FWOpl2 8%;*4c^]MۧRXJ=߻ `phE(ٱ J$ dv4 Pؐ!4&S$ yXWepJZdij iCA2m"exj8 y<l%NH8ia8`U88-`å4Pr jTgIi 0\45Ta]fF0nmU-ϓ=-^TuA$0s(F !S8@8e:sjH{4QM#@lZ~/N>Y"fNPDKJԵ*a& `W b#5=rodZŇ[92udڵE $ K;7˻D 4SsF?)#n{U %8UDHEb9{z@=ߒ;X)tLS63?ЛD'Q@-)II%!skw0ʌ\ioRpA(IZ5#^!,K sG^?"ĸl߈\b{sb&ߴgI ԤJ|b[SxHptm7vvt '~вNܥd}Ёi ʟ"[-ʼq|d$'N; $F[)\ݩ ȶ0HX2dd1 ϱ $li@Tp|1a8xB?86I}lb8LdNM'_+PJBU]o_!.%NaAÃwx{p&OwY0;ɕa=:g߻0_x͚` (/$Who+@R3!* /R{E3V-rk酥s7R1نN?#&x4]cadˀbp)Y?y{ȃrx;X'w~fIق !sax<ZkC I{Lpm3a<Q@=دUtBI"؟C[qޱ66N7\J iJJ -6!Ub)p#Xthg%-뮱O4/K9.6{h.tU;}@$+sf  !CNi HHLdVOx?Jm"Y+m:K>FXtz}_tINΖbLe8>n X;쓶mL : ;2[ڛ$6acHoG=1+!%,jTƨb!+ u+QohO]uӶp\嫸XFJ@Ytp`/dRs7z=;hA$J̿Ion QQF݇iCI6<(.4.tTmCGf&WtL4D%v1D<^jd^AySP%(,f~=618WH\rCT\#D :@YXZ\'4]C4qھ0v˿[dZ3/vu8fVk31JoL`] 9LIMW_H TdHҸׂrPL! ?ccGz>gް㎼Dw';ITYFAytX`J=yyrDX_;Uf$%Kֺ9 pvAE|j8Y:5n8PѾnWшlFW}`pߩ=qZɽک*6n^q5ͅ N'8zkvBwzX:4 Hb}AQs 1h]q6_BYw|-ڢA<8v. CB΃Q|FÂ4/9D 0zgWѺ K\(][~/8,N5=`"x`L sFؚ0=r0noK^lgG}06Paې .@#a Կ\;(`/GL9hY*/{kk{NZ>9ເvMnxR,ྵ2^߭ؼ޼ RAZa 8gO2\gw((Umk5vr2n88\pOk8qNx:251C{`սGB\뒣q;t apkIʼpxLwjwS؂|P\_hP\ba+p87k<ωU\nȅWC<&mB솈zdM7#RuVgs%.ho߇9+NOUc-L9zm4fq! Ö+$~dr{q$_h%.8-Fup<,sK܇by죃ƣQyoE`urnDn1%%k|TsFZ.nz5:8ʶU5d_m_Z+./YZn\ٓi6t| 1CL d9rKxa.@ 0uB6߰_v}gړcd8 ;b#qͳ54U$<,5AlQ1CRCfM56:cgUu;:S%UQ"MڗrBE0$nXZe(Mt$8Ԧdxk5L/MiS%:`h &茝TΪLfkmRf]. IqU͜N^i8ZdHHsdqÈ\̜<1Q%c K$- {54pNHS6j( 0  ,n Qm&đۛnPkmqž 3']Lao+:N9{ mROj$nE*aDt~rW,e" R]b۔1 ;xD|>.fX6'DFIP3Yt\dk,ܦt7]O#.efYo٫T7w$au>N&+)qGqqBq̂>rwx}[SB6GyPw[e7(n \"ZLSWM`5l4߽VvJ:*HZ3Yu^R0LaAM07IQۋf63H(wiNu(ժc<dʜF Q3fA-#[ݕw540"QYoYEaҢy&I@0cGL-:xzWM!S+PNfva!u>yZ,/CF%l! (5#PqTwzK@4嫪#a8qgyGm5h;r9˒D`(T(l0z gri42 ;5j 86WCA#T dMQ!Ǚ%0CqAWf{:[*kJqDp|YEۼ{̡9QGn+[Z:{ΛQMPq}W9e<:JFQCqQ mA#Ö5ff`! ɑILqdþTT[ 9!_%k[qO.csSVV\IivQjL(tBc,Tw8imǁRyj#{c\%yQj6J#vAHF$@9Sf#%Ӽeً`OT Ȣ$hNp ybx̸\cQQtELpAjesqFZImU Ɍ*r%KʌfH l%:' 6) x()V AS\񥦺!I!"Plm;b[ W) 5.2 =0@um|Q@&0`m0MDtcFd$` & )؀ F mj4b[؁b7PY³ p 6%DTĥf*=TꇈL~Ck$%C!1Zbo6acFޡ! vzTj]{d7n&ϴ;uIxk.c% : [VBEMiWdA[DM>h.! R3v7$/| ,$^ؠ,`0v@!̬ ۢ {;yy6 Hv HdHLhԝ F:HI:/w*)@F`@:(DÂ6<#E2¢"%_Mbq1HLN$A CƼ=C;◈b_6v⨯_0\rD!w'2+;-YxNۑ2!e1|R醑> vr? " 8?ԑ5yJ AQdj"#`p5e43Q1!Ĵig Q&cdO .GD"];mCphJ "J(IV%d$BVIfd$%YRID)e)R)=A螷E%joH'P:=°w:"`}tAiq6` pSSNm M%ZGr@`d$$yzz` 0/#8!Se7)jpc" BL "ahu+H aG-!jA($cYc``h+4DB"I9dA02,$0lLI1)b0+ĉ蜒 qDM̂CCmج@||벗ֳzYx9e(F&"%)4Cg{(VBXs0+$BKq+פXf@lFj ˏKՏRHր |y\N5N?(YJ9wmw|8&l|{AݔDll!c\>=q썃LS-z{Q݋[6cs/}L,kWQ*PRX ­nؗ׬ك# ,)^뗓N2.l00$|uL\8dj&m{E ANa,]C&A q}2CR622d!JNA3)ڝ"y iF<)>r8XBc!4z @{s0w ҀtTTEQt 0󠤁XHeޥƂ8[wf3#2( (n53#sM!52GM$jXV`j&eP6V+RYmq ̢aRLk2&u֨X0,Հ2LC(, Y&b a)k6Xo6ݍlNi.RAщ5babn\Qa0vhl#pR;SpdـB`U2 DI,$$@!B"-hCLb-1BMABL P2RJ% -BR004TI4!LM,MDA+x/&pɳ#D(BE#r Goe`px " 4Q! _{J# LlG1H(ca4EBRo .FSHR2vJiy?((Y$A$ 9H %wmLvQJ;v3Paok\Rc)a+ ^oéo vw^x[gi^0,pL(ъ- s.Z$SnY\&P)-8d^ 訢 i*n ]\nj'GTV))/6e4p/SMyES&5BA4@( F#hU0 nK~xRhB"bJ`J&bD$""R@%J!Š-"("% @ЌTC,|($7< ;pZQ6؉EC,R4B@0ʰ! (D%'X%GKZi٫Fτɛku"oe33Or֭h}h7d-}"l5%fm\ h7V\ F1fd Bh1 9?Sֳcfx:zWMMRn,2J{b k@MOu $=~+9J,)~\ 8A`AdzA%}t:W& 7T,ŝ8NP숍*.iDs͘T@ QK26aW[ +gO=Nz0Rpué2 TWuZk"*[mxx+f/H: IDVaO&H5\kwE⤫&f1MKI18ǣr눘&v/ aq^eU[av 7 NJk̮ m [ĩc ˖uaxfz-bhPLQ H;dP'PgV (I0 JPʥҬ$A4#FW:1NJ+E,D `(̓;  *si@.e$BI&eZj:|MoC!P "(j"B "$ (H`+ *!7o;^ɤ$>Q&9|Uh)K)d\&7X=˷HJM  @ty\?y\O -’r Ga!~=~dofghIdpT:ixf4%Av*05;!kܙmzI7 'TW~ IN 982+a.'L\ V)#$цj22$*"*b Jc$MPEqOHp҃i)b)B`(R P)5J!p 2&Js)S KLY&@*AC@)29&LA#C]&h N$'"@ BPRk݊r|Xi_u!CҸ̞߸+ Y VV$bhIBC9D H=2O'R"^j" gw7f,yټX!¨(&%JhVPU{KqCe;hHkhkUrZÍ PaMDHQJF t9M&¹ $qY B͌8aB%4=i3$SHc[b;h .X`4[6  M)ڌa7&4R my5Lj-,,( ZICF aFh51 u]6Q!UQ+3G;zwβtVF $ _4KJ6d- i-4fgX[*F|hPV@LfCxؑVC1O2I0 vGR /^)K4cD$gۂ͈ls'o=qnj5ys ]Pl&.C>m} 'd1)_Рo"P() 1aY !GhW&_v (!?~GXXUdAK䦒| qup"JB } OSQGJ$ {Ox̂?lxT!@юH rLk;tO eT^sX\i**a¥qR،jmX`cJTZIs]sF* (u}lT,R"{_`0xF}^jQr @G/YqPhU<``Y2$ FVLU3Xƿ;x0UaVbLxS^pSKOQhԖ#2Ih?rwiNEj U?i{2iJȚi6KSP+.w4匣pnzm:7a7'h7V aXAƉ/h>OS`!O.6xEa:̚i^By:t5Iꄈ ;6;g+UTb:EO.&eN{G^ғԣ 3)L X )$o=SCMiLfX!Vd fCRG9m6}Th;HvlM%c ?Rw ؀|%L9CVXg}Ɂ-:]]5 X5o5: gSjyhT,( ScnZnֵ5{dD: RH}x&)VSRay Gr|هž{tWDhCKAI9i:I|<ѫkj{WFLh?PvL1Q3Z厳$< oRj"f{+6Mi L4Q>P,_Sz8 UQ)z &>]ݘTC/xwfU1W4ڶ(!$&@b f[PXK)`_< C:f oS= ܃DE} L%TҰ)!Jx^’]šdP*G$"d P*N%3Co͉Τ@T̓(IKD)( vm#)wd.XJW3D]A0hqUsRXe8@-b3Fb>8Z#? cu n%rW+ IS%I b%l*@-դ !aO] ?>y:F I!T"?W@ʿ0UCЕA0IHFңQb p1F`GH"CHBBWH`202B,HïA_+`>={<.zыo6xWue[iż}hqc]I.U=>ɳAĩH6H(X%ޱΐ,k9tҟvÆ^D'4ٻ"fNO^hHj]SaCBYf4څ.bc2ΫنP-U ' C2:&|GMBgPЗu{di& RJB7&!DAH>_=~ YOL;;潺VYea經RzSɠ$d"'Ij  5OYd+fRFH/V)z,CP@5/ + XfJsy&_x[}ֲB",x!P$cz(BI> |! 8ׄuUWیGzM*S.{tN-*D&E7;@&Bx:_dgoW ЏJ*΄5o܅_!9fD ^~[Dx ~׃CU, H>8 ) OP`{ü6̄{,Bb 2L`RDrOz]ʹblHk4| aBA-MJSfYݦ!"&E:5.`D5,JlY ]dXȢa5Z~_P 9'JIdhRk0L0CHiB4`Xu\hfYРmj(HN((@dĩi cI߾:b` f+#zP2•@@B!͡'IUa$N°!iڐ6Q1^yUA?tOpٍsR0XB!iSM+@@+(TL"HJPDZ"BxRUPNнK" %%e{SuBJh!$JI`JPB)&P"BTJ$/b{ןYԧ +"C0:Q9TtҒ|1'Mtb!t1yHR RA|~#(_6xC|c-ڤzwlz `(&{&1b 8 !T"*  C@1[MQREAE ҫ0P$Ja1;"LדNA:jda$H!Ȫw;_l`1 D}1 2?&nݍ 9_T^oYD{QA p| aax0`uo^ϛb^/Rh2(eTϵ{6#p_o&&Te2X 6ȋjʱuE:6t{oi[r}zlj(1V,'jPDdxH",%_+OzIϙW ڳxChon2"H</6rk lw{Hp3fi T63 t L4yvͶc vT [+% /i4 AD 9'VȂn"c1H&@dL} bրomT k-XSHF9$>o{cUHj "LZ yaY- >?7qpbQ%j( aa)R}Mx70K |6(a" e.`RҁH !n3x1a(54!_dD}g_X'hUGX 6f+dJ5+EG^;ح]E)\\22C 0 W < j! `oD6W4ILdB) a"8H" $܊tspNt* /aj}r 6ZϹI憓TP~am$6ʢ%)iE5:FQo n4י:@`;Lsq$eUZEoc]J1zݨ  K=tQ{[~ό_'=}0 ig9/tګn>j R?u3}uD6?EJ T!s;ΑH|I4pbT؜g):`v^gRc0{ R K!(J{@a ! _̿I;ǹǓ؏4rAk 0wPP=MĔ~?nHZ!TURy,f|`QoIhh4wS%8x?&&~CCBȴ,ySYhP< b8HB:@→ %  h0Hw8Jo0`K6cA5F[*9)LQ, =L̛7IZ1"$-8XfbV Mf5-L0mEHÒÊ& )!M "RCT PPLb)A 0 ۣڋ26D! T|8!윩t֚PN?ܴo@89Z!ݙk@K@@h62Ӫ!Anymȡ1X~2 ұDt\),X!E!d%9rfTOflc)?cmf"M mנΕzb"@6aIl\kP)e#lY1K&gRjŅj'Zb_<8C(/B n ,#c=K.Q"9`#L2z5 -QNR佤j3XpD@h ]`wk07 64VR(B< 0VԴ Ioi!DbbCR@Hp$3 'I[0? nb9z<|Cq4_Vais zp0q{B\L(I~K5וs3BE'qiZ"RC '/+~L~3})ڈ3㌍>@3?tOy6ϚJ$A@AO%憐AvY+ *! AO`&C*IEPKSJHB]D\!߽(B/Xc !)|s2bL A!c0Р`@@2 "(ЭsX\F $;]΃j#B`CDD)KAD2IS{ PF {{ȤK $0PvApHȬShCAD4̤F$P#QQ#B$ T920vl؃hPބݸtΓĥRh "4 BJTIff0PN+o ʕ "^4B-Km rK.OE3ۆ wCۇy)=LMcɲ @7sznX=?D̡2,,DE, MI%HQ 441 ) 1)A ` (RI"P"30IYBdHi `PB$TFg'q<Ↄ7`q0O9B@j()84p ;x4e#04 (L - 'T--SJI 5 ?ԿG@#4u,U ^ kN)AҸ/#D10AT%  &QX%   oSPHDD,RMQ4T$2$PD$%G~@\< @z!  &l̬!0łMHD4PB z@>9iwt'C=J J > J"H1JP̄@ҒADi!HWbOo7?Xa_4оrbIdI!~B^A`x{x}8|OD{n><ჟws7soSUZW>f@k3)&~c#A…5Q>+nХP*-Դ04a "Tw`tŢ$ K3&JShi!żD(Ru6ț$Cqc-׸HL'0R!g4tFsc "%Q0X],!PD>[6BTy(H'wo:XŁǗ[8P94*8`*$hSmn9;kHH66#ji9ICcZG>>͛?Bj̾$za<[!I&sd>k/Ϡ?1Wf 0hu"0V*~SnD@S3@D>p7=%4O3fkNKK`B}a*[S+҉/y,A $%_&nn7CL0F QjM~LC\3X šޞ8waHA5OA3hbZ|p0 8UQClQ(^l$0RyO  u 3Z 2%Z7#ڻ%+!J@K2omwJU2[8 13XN hǤ*} p{jlt4|ah扙kݤ +Fc @~D*|Τh@M6ͨ`Y!Q:B0L>>?F k!ű)60틹# yc5)xmS97|F&e>ݓ4iOx LJW=}YEhB" BI %dP`(biV $hшwOߊiP|dh#iö ,0/čSN y ʏ㙐nlJŸ͵%<G@Av\BW$‘3Sr\$6PHd#e Z:c'w;Af6yo"1j0G93$Km Uhb#,!ӭ8a \ `"bb`Lp0%_#*@G[HU ;v64 rdmNYT*kVc3@5XŶ`Xٻ P$R6Ӭ#3 Nu Ah~tC.%S֛ 9AM1kDLK Leҡ2BEuɋA!)a-n ZW%T4P"mdT\]Y(PeU-qe\驁jck-*N@JXS18f6Hք )qlp͓ HSH82qYdQjV-`#U8mA06\ d=$ roV8aIJܘc[9 X% bMMjGPZĢR…݁Ɨ[IIn2 XPӹTPI *aJ1!hdaCF, aPdICya--%P t1PrB XGQ)Ș( 67feRCC '#sCA`% HnV2US$)f' H&(*b*Z:q18nYM3耺kH zw<(|$1;$I*$>Z3Zu&  YhӣXQb}hDGImcNG\4PD#S@4RA*T,c9mi[Cb;gqG%;SE%j%("D9'ey\p񉄚6>〟YD 'A<~% lq=R;IG1 Vh&>n0K$cí%wL T̏ 8GG=%|u|j`c#~x/K_ٔ[(}#x1뙈")v>-V/8w1Gb.{ݬNدcg+'HFt|q$xu%B yJڅ*<G Ba ,m(@S#BmKKцAAI!5L6MKŀ`[vM}GAshfFۡ $"A/9+>?klI;z l֗|ܦka͒)$,jl(~aw992(=}BM_oPvSNxD ~N[?TN$=A#Nv(zȣt=΀@:əb ɟC*FM_FIiܓFqD)DY L:x Hv#Y6t1$- +M S1mXmRDv=,)kED[g\/H`bJPC*1SD@%E)T ]wx9{x0AQA$M0BL1/OK9{㊜$:jcu=d%E~TfopDU~e"D}|g|'ŕIXaHHdQA^9*ɬU_DiP@ 8g>#erOŕ]' kYf.8l}k:06~jar$aLѥzsp\8 Z@4>쪇GTADwHHjvyN*䂆e@69h5F'sQް,kc9%ٽQ]3V  ?kPdIgBĦ0PR%- 3^Cx9էVM7UeĐӳFQBb%l =}_ [F!GbvwGM!~G'l(h uabDLS(uf;٤dֹ4AS3!˫2";Ԕs%0d,V `)V]PXRclo~՟O>LA9?gh8wA>4D;JT${T$osg.Gj+jCչHO'qnƍFm7h`TPm8#a njVhҖO?~ s̐3>j($MUZ.iM1=Nޛ޴6#D0H?ɡCIӦ0VۯYGD>? Q: 27~9pațmW=ͻ`t>K<9JXu&BY!yK J 0I4EQPEPQLR()Q S5$M Bo GB  0J0ɀyx2<6UəAB\8m 3۬J%d4QA%tuyaɃlhcJ!- CWRY [(̍H% 1 ʔ @dJ?GOx$Jw'':z5k7sG)L653eX7 g zTƻՁt׿T0jwF5kST)TG0-!  $@KDBaHR\Fi?FaP TI,Ό4Qѐiԥ4ZAB %aB1J\AԀ`(˃2⌴g:!E, UBL #+KZlk- 6bQH%{ԃ=PJ*>&#ϕ'2wA>3w!z:{{h ZmtC ; /6~WnNA.>'~l=z6$Zۤ~x`AQ-NaImJ`fU9@^`y:&RbH=UP= }|$&ZVup^șe eށ yLHh!@\]~$03u:υZrIŚPVYCn C8 v$h@IS"ݳLhw(p!@Ѭ#Ha8& #0ܮ`gM݀TcBv! cTY@Z$!u0UiH_!HƳĒ'`n Ra%:A̖)!ɚKw fl\1+ K %ikx؊cu.A7Zf@ fܷF-2[CtS!e u13PnEt&$Q(@xe@RY- lrQMe0JRF(٭hrĘXˆ2fQQQ̐UB[ 2@;l XӊGSi,5U*6JfbLP/lH葊1a" @JDJ(4~ BaB4 0u`P-tH%,m!rl▘2ȉk7_ݽ~Jnђke^в;Xp6d" #Йa-ָx^0`5ZmH:臋)3 j4(PK CZLD 6i3D,GSDAij /UW*-a!qY3am ZưlctG詋hmunL~@8,N!{z`9/_o,INJ!?wӀWFag)A6Vx rE k MYR@4}ɇi ohqحqMkW;PYr.ܣ&Qlምx'Ʒ9nnye @YUeLsF|1~>ibm0gMm1_^9=4M}F9tkIb> 1L&3O&"r *I Q',N ,7q)$&f8CYSB$\=5(Jbx(_T O;U!QI#2QCLE0%`,%IMQ)ČUl TSTB,,4)JL1,!kHA Ұ 0+CHH*ĄD ,mg=P5btI ,СREiF!ٳ˗E-a,3No)eL1% @Sil ;\2 47KuҒ0-˲(wVӼ x3A)$UP3@:Z#p!I@UEacLTa#(4 A}yU(+52UjMP4n jt˨:&mtmDeP)ǔ4PtIBDR'R+`9b[[.e]Xl%7gL/cf$H TLNAhS+pPaڎvH.jEҀ@P$!%L$!y.4̺t!ib(pv/ . !y LhȜAJFFMf z?i jh")F)"*"IdIdHvltF9fJh ""H"h(!)(F(XbQt`A4Y!ЄҗaXV 1B)2"$U6JFiFJHe @&WL(1+TC R4 " $P)!S֘(zk F''R:a=D+ OLg~N2I y! DI X eާx5Чa z/o gt?TLB5JS5Fy;-\0Ą:pR` 3y]ZȜz r|'1rn<^)Ft=!+("J?I?I0=B!I2I)0Ykr̢҂%0QB+A dEiAhP'$1AԍI5DD0SRd. 0 50H lLhe06bHHnM ĄѱيP:4l1c坎o6]ۓ-m`p<GQvlоS&fc"[|3y߽AIّUB. i"XBQTO(E CA{BE"Y 0q̒C?G~~IK=""=Mcv = b*c$(СP2>y|T=R6*" ].`Pg>/BYͤ`=22xZ~#?@"a=oH *$b8S1r2`(an9_q*g5lDSH2"̖A!A6[#IBI`VVUYD *`H4&!QA cb@#2Qa)I@tC?A p}DRLMTRSQL!HAE140),A"ĈitxHBckF[&iHG"vRQpCRYR600 B%hXV!B4$ILۨ7M9J)(x/p8e|ҸP@C+D @2C A*CO=D>Q߆~=xem"7>nTSn_ _}bx" sq={71,+çJ0udd8- J&l fM`vcH’[Az7!f:}L2'8~A0qG4Ktc$%uC(6ئ] {v eBΠClٔ$ 4#Z:4.,ϱhɾPj`:zx@,2*JK@JJ#" E )IA)$@BI H%DCLTBJ$*+匐I~BUT+D"P{N%_.Zܼ  P䁄< U(yIWQ<0]oAA|*Dr?w iNyBJ`H`8+$ ìt>a ry< M4l ބо\}) 'ɳC4a 3&%.0CK0`f|~H=}@U(`pr,y rB"p$S, PR0A% $"IH$H "vt 0H<;/^Q^xÐH"ዂa9h? |6 ~! BZOCؕF--OÃI:P2i3w%R#, K((Z9,D։XZ֌@ ZR+Jgu#6Ɔ\ 4H@k4M8!i< hRaP3 f6bIU;11 :9&ABKf: J)p%"SAVT& "B&HN@3@]B4:;`9AX"f_aH08S0AAEIL A#|HB#2G~p(F8e,"e̱ `PЇj$띇Я0kas~s4C'a;@*bŅ`^𝃔Z@ Gn,+0 C#D ɩ($d-6pbjfbC~=`ɯvёM# j\%߀`A1PP_1=Cv8T>Zxh(!&BI9Bة\'8XCI.&E<(u\ݚ=],c;siƘy!Že%u?b4VF @ V ix8c*Jy( Ta>'{'3!isA!YHo/q~|vDz}M5Ct  3n2=~e cC5M8& C3\#Bephxb g4_)v+/zt 8Ð 1ð2Ѓ(9 o2L`"@!$PH/tnw=2L)_i;<:t g%2 x“-I¸],&+)7xhS!gZSl=JtCGd'Մ""L9 DW

4~esN7 )SUUy-:#7(lq(qWUxw=t|e'pp2gWԂI̲Eoӈ \M:"o*Zl4&3WNL>U$(B ՟ys+Y!>Y_ ]3AOf;U#c~Mй{|8 XDDy:<.lɫI;aS7Bl`)6a!=eԛ0_E^ϻgu]9~wtD]] HD@3pg_Eva۹ᇙєq|^ƣ}s)!W{C{fd&P68p xDtL+an{QO׍.333-rT(&]wwpDSb+tvGtq(nh>iGq '}vH<}NiJ&9mSzS +2Fy F%NDLp1)x! 9NȊPQ@!J)C%H I i`j! Zb*&B S &!JHqцA`I4I@SBLBQER APP# % %!X(w̧|"BBJ2J 03$!HoN8(ƃ&L t@0+LM K*AZ]~ =y$2D(E0A:-ШgG )yp¼d4m^{ƒR<;η73JlF `,p> *0f3L7w0 ,5  0Ѷ%{  ܧ(.w'@6|r'kс=ẗԡ7H$t@Z4 n`a]^V=r8~;T8&$Pa1;յO+tk5sZVC1/ӦOf3J%T0km)=ܬ d*@0b*d501LDAT$L(%&`łkf`_q8Q|t"l0K-A_w;P6Xy] |NχR&BP",Ðp˪ vZNG3EPvn)0y# 0Svbt>THLSHS"i/D+e^ hH L2軣y*qNwJUِSRZkD!_79s*䂩Ql(E(Ps5YqDE3inΉI ace )0iMD0-S!e B.+xoQĚ(5=XbbħTˢ0FP8b"^h4u$[ oΐŎ`&.`Y`EaP̜ffab4a5Ru٥4CחZ[BхX,~fEz_7â9PNYƩf .BxfBaU D5AQ4R$M%E@a2L%`P4RK5gyp kEh5 @&4)iz"*yxKz:o2^%sAC -fJТTn" BhMC K.'ZǠ4h6\5hIcAåm8kZ~RM#mhB#@{[a8ApBj!Ba]15 e 9ꍦ6-DR[fƘѡqX1a ZBr(6KH2MH%c례¬rbM&`y Jpl3LDh5 HhTmr 2p:dچAdD`<,i2~@ @f!丐:v P S>h@j aGeX<'Kn8GY*p(,LJ0E "'IQx޾Cܐs䚈iT%9-tdX$ H tzQY#-8mD[p D0oޞ߄=yҢ`=ŁXhT:< P(O0Ș':DPjLxNdf\$֤߰0~ή&8G & 9Nv,N}ܷLxዤ"OhbgHݳ ϊɤ0$X:΁շLxD!muFI(nz74L&5W̦3EWOz>=Ql }=y},ֹzٴr> ƌ&?tmT|OyL5;#JZawp0$(b(7(A@àp@Iqb$ "ԐLLDD#$DD-- )+ OQ#HN.~<_bC'tr RzDYH]8?{Ɵf='Γ Qeh^W#1PNVC9t i '> 2r'Y~ đ'ad􁧚,Û0N)%^&.zzq5 *R3gKx\́5YLNOYrqjš; \` lQ? X=dN}aRI&Kuj5&Til6R)2kKkACa+!*R$ $JG l5&X0‡T̾NXtW@l0Kt*L ݣ JG0[ꅀY:̒A65]ԗBO; JJG#?h@a"bATHD`HAJ"`Ba㒂BSa !) #;8?t P14R4LQ$4P$ E)LJ )+C 5*0DA {G|ǽ=CE>H\jW6r86ت]:G zO!c { TD̔4)!BuocLcA3 ϭ'cJ5Ƴy;Q;WSA 9=$JTmbt(!p^/`I{9@ *aC0b)~nȅ<eN S~ ,D% y&T[)ا7&iSIiaR~}@"(mpJdPUb5 8j(D|i)5Xz {+DK HIa")C\TMBđ(d7- OR=hsX`d$M$G_x'V ! 슾&eD00<4$ 01H $!? :ߎ}%+tdɆj!npؠD(JI!BBBBiH$$yd?u1=cWc7w2ff0p@u$ N%`"*" 8z(t2ND!3PNq1Q2Ky0u@SFh$Ya<޲$} (Z7V!$ԡx13$B!0!2'Mu Xfcii\04 0clcY(M3f!N+5΀ƕLRLQj2\q FgWx$5MeK?Im*[)ND,DIT-,0DQ#a2R p> }}~$!l= 6*w]2z۽2:ׇ.Dk!"'q}hI7YNA?8e@/R51J?c pHSce3cXS2LBcD l11_e,X}Ent=y{o]yNsmBa1K%VmQ;r(Jm.8ȅ&,mv ؍** &0 Fd=+H )uTeRU[*IaX0`4¨W3wڻ5H&_W.u{_S~wQic+DdZMp?Xv0 ۖykޗ-M\leJI}kF_[ 972텗S)Σ57ŪPrGQٹj%ܹ.8:gtkzJWh 7}B5Qn=$Jk q20pC _`A-.E:L0!A=ǾȗE15Vj*@{Q3|MSGC=(M[޹fQn}- bqO|&vp|A#Yadۢ~4A@3.AC'~h֬ TGP֮{E 9әO)wٽ4l?Z#i v)ݳV> ;>8MX米 rqPFP˱8$avrɳs>cWe>ˏ$@!ּdX;NoT d=7.&eQ8O׃' 拣yǿ[yi|Q#UQBsw{g\hAzO'^GE(Vj'f葤NKDw>qZNw z\Ⱦ aPs$Ҡ?#l'<麕9sDxi>.>kKJEuH5CM`[@,)jQPQ.B֎T2Ϩ}=?s9Z"z>2G?=}_tuRWXsq4Sg*6n/׎VJIQc bY6DKm1.r DvLj?Ezz- 녣8Hv2 A&HHH?0FKɪm,^ 42foܰrkIoeҕ ;|JBYfits-!oYe &+,\6ղXP9ec5}]s#S=ӕ $iU\k}? MrHh 'Yt;G  8E;I$xO+Dz 2AQ`BD"PLHŰ< L 8R>%.C(z4ljXw8l,EUpT՗[r[iQaF(2ED:+_`&&\{^*i ) $"p#U#6A܃'S8 *`李NEO8~3 Ip''F}gܫط@D7%'/3H*0MHzC#u0?p}G檨Ri6)%T}?#W,B zAd]M)ʣʧ;G@B?<60\~Ër`<=7*vR4Ojي1:\R2( ]x0>ӆyi~JG++cmxMޥ.s\S5zN8XY~F9O_^qz:Q1bEJdv]1H"G2np<K߬UY [Jy,H 2 :`bd "X-&!궆e۸wT*ZyuJuf7:t\!z Tj&ow6ܱᚰ#APJB(2HLsndϜ}5HđRwcәeMI1"hLc ~U iÜ~v{qτgjL҉~Ne3Ú2pݔj! J%SpOw|*C%ȃ%2` p$B>(@^$@5| ~-Lfnߋj =_-Ʌd'hǁDl=$ X|ǽځFm`>K3<[ؗ)6Rh+J\MB5 a{ycKt]JHF4IJƵF&$:.s( ^Gj> bHHf%  BR}~nFYh>Sf.S/m7Gܐ1Ѕ'sQ'²h }L33Z;tP?vAt7Mnq`a @$ -b vO QOv<ϓT/4{;n# TBAYC dJ!\-&DeULS= I%+ݬNԤ] OO"WzLY*lu!  jߔbw2BeQ?[o]2&{HBTG&I% 5 `%!@* Y4 HRHD@HX4.AkdžcI0CÆТ P0aCAY,t(A FXSһH8!CId !&RB$90Ha c5C2ˉ6K!t3"!fZ 5-XH"86.PJL"QÑ URl*,[huh`еZ@:@ɡs@H5u3 hq< vCɘMSa4t^! &!L H_BJn$:MI Ų ef :AxG);u5mlɢiZΉlH!H JRAĂD0ڸAI:2%3(5Ⱥ 1LCpbrBy $COAdczH:wǦMrx}muzPLO|Dž<9fj1=ObETU=a`OVUUUUVSWBY3J_)u0pJ?3UUUUUtzYgżVۊM*,i>qV7E4a UTUSAz 䠚 31  C5 , z_CZbtf*Y{`JDMTGNjFMfI!MR:Ӎ A) ,wtL{>.z$t0ŁN.q^Ƶ'gPND4>^^_BK; A ]5ŃzPY hU˴\Ek=g$ jHx| 9 u(Pr~{sW`4#a? }R#B>M =o+(zM"&M44sf||,D>D=v W|Ȓ=qn~` Z!U6G߈3[ԸݯݘKygtpw Ap1;2M-sf(ipt͋&utb ~_S.$eܒ}L?T'3}A|}^˼.D.I &u?~*枦\5W:'f?z(6$q03 gU䜺-6q=o>=1̨s"]٪ɥ(kp*{hlE0DEI\QM*K9r!Rӄŕy+wcCx\ hbX&D,P4OeBT3NԪhO= )-5VfMb,. e-e#1o|\ tht2 d2%%Rb޳(gcf) #j+n.@BCt ABa:?Ik36MAF'z52mآ^n@tޘ*U4їUd؛jj(EbdXԙbNɴXS vwVZӢ$(JU*ןd!#3"|$]Jږ ljDFI/iT<`4KJfFBC[ja %\=g[@FLw(Y'F Yב*Nc}iT4.n A Ф#iAm!1L N7xFIFdNjFGAFӦ ꂉbvx4x_z(>] P5.iTkJӍo5B74s%ɈkٲN9!mq p1LL0bzlrx#'acs--XxRĩeP)9~bqf @ΠH&QZ2r@!K,:wD0J$ ~ k @䳷w]9k.C9ЌB x9{Vu+1quSG<(f \\W2 b7H<ƇdY[z< ݰ9pK5<=nCrqm;4[q^hʁw)! d)w"(PMD@8;/gdW`MZ)(݆̆jFlI:ա'#A7 0 P2dnRMk|;M\i6[dv ש){Nf3h KBȢ[i5Pe5 }2)~QuXy&nH&:q.cQ;3̠é<4 Q!)GSܞNWf܈[K5wء"tՓY]FD ;V#vpYɎufoێ\ d!W9gts:#C*Opq:q&}{LbʼH,X+DPv)Z/KvE@R:[OWU.ciL|kSZD \Qō6LyܾĆ_CXs=MjWN|0`^䅇}y-hܝv"ia͖l(Cs"FCon~:tV܍6qD0 A8 \Mj%:34SaJ,HD)3t[kuG \.F:&ֱCf7ΕcA ݌Y$hmo@ڛN郶Sg4m:YVp&C`2NJb›H n!Ʉ}Y<9x5pX>= R $Fl$zwP a !R FVFhiQ1%+ҭ>Fot Xi(h (Rklᄢa{UB Lۊ)LQu= uiFHcI]mntC4x|lr_nXܪqlX@/ Ú4%kdoEF^՛ Hy-(n?f2"$|d2s]Pw,$jLݕ-ւpbZ9,Wcu f,1~$z;`)4,=.΃I]#h#e[M+u,EKz߷0"tiJ zNWgywuR5 RƑ]ڍ"x*CƷG`Hdj4yF%<hBRg\YoO$^L۬dgrPCİM2iY ,Fƛ;ZDBI[ӤuO3IY⼒dKg&nR 77a(YhlPa׼HAiQ03\ ~"R>ܖgNZ1;8-›]T(gv"1B,|bB#4R4W%8 [v\ 4@prL@^ 3 GDݻdE%St54f,8˪hD*&3wT;-2pzǟd~爀4/$F`cFg$4HDgbIƒ]% ^ukd[ȄJ#*HXjrL`_қqsf lAb55[HY3`1FoRJ` " fEȃKHr&S.We=T:@*\b }yA"0Ġ9{l 0^;NhC 0(QMfDN ox q p:&KK 4qDń:&VǨpx cjhP, 7$@Z@ G(3ŵwGxx8{Zʧnt=8'A74'\ :YI&Fb!&'(N^& 9 VX ( @\c.9lapA5p-*H80.+d\Ei+ j03PڶpPFn Q)%\! $YRLNބU@,I  ZfmxCE-ȕ-kid+$0 #ƛ`݈J8 K+4 %E(q)ÐxOAa r`)P SX& uO' ilZ´Vvr9{Lmwa{hC`F8)ryV G)`$5@fȢ 7G7@}>_P'ku}H\s3f/# P#$<4+I<`dMnS__C;ռ5\=.ah(CD° )ap S9BCg#8fT҉I-MnQhn %1f aS\|ɻ!I9R$CXo45,Fd774uMtr{b8';@wffQ"cT:]F2$Qˆ V #jkAK+[ٰlt ,J̮`,`!9HK VVC @ $$68#K-##@u!"J죱۸Rc!E28bVƊ+n5:ܱ mq{R`0T7T .ԑ" d2m$,@">#ĞF&j`X"f  JhF! :~>۷>)Ezn좠|Ef?I;X"<d"@*>qY 'l $($`V+&r>_RX::\#1-%N,CjB:TIRtDprmA/fP39H\x0:x1FvGSca"@H$!D;|~ܣr}B' 8M2KE@@DBJ8KTE}w.d0SZƑ. Km2CFh1i`ace fGP!+[o|P #AM5orL$Yk:kd$ q73{ *decddBE~RsWpjԓ>Gf) i!';2D2 وNEٺPlrJ /}`B̀<~AwaN" Rmr 4D N.tuW0y@6S]t3׮8 LDKJd@exo{( ÃQ h@U14beK(kbQF6ť(2%R jHYD2KFF! Q'ЏZ!@y??O)?,2:薴:`CrkbǗ~ %?NZe/Rjg1_%FތԆo*J"I0U$;{%8vv0| PPE<>ö 4!^!(JVtmuݯHO5, Yp}eE4* #pmxcM(),ɪ]Ml0@s+ J0j2 Lh* 60H8VZbi;kW,-ʲ!.1R04Ɔ-1c"Л C*Ҁ0XgJFCMar I@Rȅ,Je[V @0 fl&P%-n -)J!e ZQcjژ$-×.0S&0DM% ɖK5iruͫ%XaV0 e™o e2X0#h2V %qTLK:PZ,FR&,QLG^gz(Y̟6h,q;yz 7fs=F6/Ws={13.IIC 4\{6<4<~˷y0xE;FH QKXw7NN>FU2Zb~0+ݷW\Uv!@,AJ T\"%TQ>P}zF(F ,W2pPKH- pŘ Z]oǻR#Md^=O_q+P#R@9/gd&;d2e/qƃǁj?tHPȂ2Q LF Dk1" (heE%0LGV(h( M^OH` ӚzNʠ?`֯40%3<kXiI5H``l#l(]edce%ETE. %'vd h4i}yX|! GΞ@uq`G.JG^?O} =J$ d:! `%Tb"i % TX&RbA)BFV@VI DTF):ԩɰ^r:LWKdY%`H!#x:dx dDhG@84LU%1Wv5rזA01೟QM͸tMdFH֊XǤa<~JE3TJFZKV6=_wl'Z)]v # %P$Fi:@ &OHʜ@2I"C)E)0sE|I}, h|Ppn$¡%`ɒ O 7<;xXWXAXB׉$A 0K'l`BT HJ% E@$B3%%)0(Dϻ'k ilIy@1ǦfcdDuIB޸wlzaVqU$H^194k !ypP$>ƨ4p:F$ gp{o/N=*uruZ㔇j=Db< ̈#HPɞ GX= "0Zp&$Va0>GhCQCXDC JC"!V]=BgpozǴ_wL40$@s}i3P:PXa!"" bH e"#j$=‘ =߹~ٖ`` (hX!!PIћù^ 6lʃZLO!UU?GIǕvFø/} }'yP( 1\;O'c^ *GOB>GA DRHDAR  #I (h{8 RaQhBZ"wU DJUTKEH  t|=A!wK_`Q$`eV V* iB$J D *V/eI_?m?C&q5!c(3'?o|zx$xZ*cZ4?Cg3o2ȿ81"n<%3F b&@(otFF]f|LP KƽO$6q$<rr} ZPTNǐ@A;DEId)sS&c jk㿫n >7%D-O߾G㵱)3i|iPOh}D m PQ R! QILjkNjꋐhxYw0~"b%*00_i{A }^ ?d_>T )A|?!$9 fybiP!9xl<AĂ2PHCYX`Ha#EG5zӡi܁% ;'dI~O&( xτ3+<^î-?* oo(Tk 0S8l9Jv*?  S(Ob(*-U#e+9Q|e2ZklgT醪=nrҽ?H'H¨A{A37>?AثLvdMȬJR7n8t>PH[{§/r1DN~tGqc2$<(rn:Z)WW̆D ņRw2*`OG8}52!|w){:n~g$hi mh"w2 USGm|fU(otMtT*УO#)Ex%;hU4e;ו'*:FoA_{q?=vH:HAJShmHJ @oz3ߣ,sL)FAQ\)j&p?L c dQ/pdl]!M0 ֦8?Y8ĺt;); !hxiՄ&鏙\[s+T X/4MR:#J;q)"A?J|$(Tv:0P--,LDU#pO 9a '\8׆ }ZLV! @8Y\LRb fBI) kG3A33n +#|.Q{Lq(HP PRef!F d!* b)@Hݾɬs&<xi)QfRREJZDA(UTTh*?P}K=s+`1J2ݯM53^lq/ZJeSaD 7zBRW3\罣Mc^e4\CCX4Dbzbmr#GNB 1u5U"6ZP*`c'&VsTCf?d{ނ1'[j M\ #EEn^8nmPO77GL^)RYV,,z$b' xWkMƏ$L^Nv/Ѿk0&V,z2No+1Lvs]Ym_ LZO)@mOa$ճi7(ι$ U`޲w3 x3$"Lpp m`f.F)XLjR%#(c`f.BPP|\G?!B?% p`C߾qްQ ti `$:/  CS!bLPmy%"FH[T/"FKK$""9lXHx 䈦a&!dGQW 32pAFV0Ka`6TeFJ+ PDnaʉlV (mZ :,22+2(Qh-̷1l KFCٖ8@SPPTY4`aDc@RFdCFAXY$0U3LA@DY_n5>lȀ6k<=߄X_D#N6b }IOSۻ"BB "QҝiPԛ ǥVMc?ND4JJ)z1?'HXe=;z[u#M_Yh?zsGZy|"p;N汦 j"(${6qL.Eug|xޚ}ybGx^9t'y±m"+[66{{Ƕ],*+B @)HB~t^sOSkȊƒB#ΝwL`(8R$ |OX$)@B9H=0zG|wVv>ޏe,nv>@!ECmz4^RDDJw竲O\BZR!(H9|ISy?+0,߿x^#{DJꤧVV-]W(13ۘfA7sƓoŸ1yD#caR'_k<CM +`Y8^ 4c%ۦvi6PJ95;X3[\&u4y9qf?\jq-C[hCSLe<:l^#Yn=PjcgwfW'y٢eBDD M3p 1u>a }CZ%ӫDeҁ*l?=?מ.]YabO}`Kalι3XʨTK t(<nUP \D *,2E#a鸪 ~kA 0V7"Nj1퍖ia '~\}HO?vB)W1 I#` tnl@fg<Xx ߊTuJu͡V5;'A+1`5O5]kC)HL(!NLrd"j b@>r'Y3yXqFn4?m?9_o=yi''lU ߾-5/'urHds>FI18.z" 3΀d Nô LH!H4c n^e۲BFL-"gВPsoXz-iMp6_] E^ )wAKW4Q؃l2 m>\@r+*Dٱ قPCI' P^@ BR PJPϖfxE%4%Us-A{pGN]OɶHc:]Qq:u fwֶPT2VY%a2SPYccQ`dPhUtFL̜ V⊗^0vi!LnVǻI!D<N H! !R7^<-t:I9EA D54AMO;9TɅ8ѶjK.$)6$Кȣ{;2tM4 q:e  32;nA:L)>NnJU-)/ <\YehZ( C +$ʲ@K,Lr`Bh~0r#f+TYaC4dd%9Q?D XɥrEkrMK9JV!QIPYD3RaVeazKṬf|_Jw\߅'rЋhcuv,;4tU ̮tg^D9hzZ)Ы٦ȩk[6f3F\eb-sB:t9 )(()~kX}Y8i=q^VκmͿӌ5L=wc)sŁTo?GI ?僞IP옣fmOsJ `׶iF͵?Fp1Fteߛ0=, Oz.r ߁nhd#i<LUT 3SDRLDL"j*j" 4f@DKBE#Qni2](# B ,;P!li !W)M3I$!F~B4CSVŜA~ck_O0g@'IMD2oVvb|*OOqg,V&kiܯuki4iϐcr1&|M/UTITGh~G2s(1AY&SYbaWg}݀gdt o}ۃ=}1{gPRہoҫwo,Omn} }ۼ5v( (n{p{t{9uUwVuh 7oz'kv|ϫtur#i㷴zF'q*[apS}ܪ^h=]n8y^=mwy{|=*$x㏺_!^@{w]̺e&v'z뢀w>۬CJWìMh*;{}}]Oo /o{6}: /Xϵ_Jx;p^^-ytq>do=ww]oQP|>>_`7˲wgLmhw=kCO"F ^ 77Ou_ouc۷>y޽zh oDu}|=׼NwsZں}m)HٙÙك>%o{kRf1ҋ婷=wuryN1kkrv׷^o&=lBclƮll 5ldБMn>{z]ݺK|^}})7o@ިϳOM}k =L}k*@@-n/7Eùw><\5Z2hڬ[X$:oZ^:%zh@QN=9|Z:}Z4+mZ׷sCU}]U}Ρ{wR=2n|ON kQ@gTs6P ;zmӻg۸emvzwF.Z{U<]A/ L`@7v]e6m5nC_S7ןy{]wܚ]n7;&u}o6 >zug7DL&@h D@ )c?5#PzCFz@hh 4 G62J{Pҍf#=M=O({Qh=@hhm@zHҒ 5'zOI ?T 4!HA #@AQLhSz驦2lA=L @di" @zhLMOSbTSz*zxSP4h4hh4 !LAjɦКM5=SS=꟦L%?Rj=OQ    4C_S-YORIC|/PqPM"ޏWz޴ ƐBTB&DH"J#]E8AX*(¤zU6,,+t@w 0T}hҁ>QEPEHV ,*&c,&#( [JaY] EVQXTDSETٯ쟺[O`[2梉TK׳kߓhgd31\cq34Yn658x]rKR*:'*2X8<ƤL hJ( BZ!n\( &SJh `˸hm`JRP(R\ ) dHRd7 Rf HT(#T0 $h߲MқiPBB)J @2IIBR8SeB```n',IR0><4K2\#̨yѸ"`d/ UxINJeza…CX Bj#(GK Xg@'22u?/ dK3CbgN3Y:8ܭR Be@1@Қbh)Hil%)ḨSJPW1ędγOm .mȐl=t>wN͡@ oBoaRMggJ^h n6zhRn !ShV @fN$BP7֟hhmJZn8yqK\TOjohmxG##!LG`DppC!|] H /sR` Ce4 ( AozRD; ) %2.c3Рb/JxPr F/hvޢ mB2yX3|_ecj0eB?0^[t%;#+-uP6Q mxd5R<S @!. P)Ye.q 2M NJk0 $ ii41 !5#E!N30Z@k#&qRdЎ2C2ԨdwM#+?~Ue3讧#9%M4ߜ OQ%`b5RDI->7zu평){$tұ[hZhRl$k<55@RIFPaDk4kO(OãDU_:>Ia OD^)gѦ9'{67U[s6-S4z=ȲfT7.*vv9~bos'k:@M!p,|r /*|[ 0T“Y`z^[vwgFמ iʦTjy u%FH1Q75vt$&v:]Mljrr{}w*v[]R"\X0"?3{zHFiFiFirFiFihZFiFiJR RuК}إ4 by؂\8eHb+chɦ{+}x>TQ !{U`RHߨ=!TzG'#'` S 5M%_±& Gh45%2!aTM:JVwӎ:  %2`212 "a4JK*JjTh=`iQ&$Awb^>yQiFICeRSzB7WWoWh&p+J~8QTY=d%w FQ$@S2ͨpUaAo%[)Ih">[llw%њH燧xZP}>7NjyAHF./ʌ~JE UTK1Ww." iTR|Z Q*{8uXmޖx"&i@(Ӥ?&uy<uQtD[NMB(%pf bBf`f"&&% eR"$"PLܥ@Cw_,8D߃ؠB (wEJx ww{+aTPg6@  ']+m@L p݁N@LtƚDDRʑ tu|E*Dj x|Exf}&nwI $$ײZ IR\ hU*&@t^[_پ#!ڶWl4J8I v*H_+ GH"%l⡧  =)ؚ‘,1  @m DCU!dJy"VL1IH1Gl\Wybasf X#%ЮE(>h@LDAAyS0DF`dYBRFE%% G5ZH;dFPjh@~l|;p ">FEz3 N9[a5ͿȧY l1?ǭv&ݦap0:f(E} [.<Zc[p_$+4ۣ։mB+^{+Նف?Gg-mO [, <~.ןX\Hxm;0wx]P0&8B34h9Ƕ,ŎYWUq36m]u^ h‰m:G1vDUIu6iC c{t(GQ"'Wj<Q)k2p cmwD"!3l:*"(,_|xC\1 c+uzɏ]3u7aw<2WV:vPTy^(nbsm@DmMSv[=MZᒪ'fKT. =x(`2zC)en;*Oٌ ڣ? pfIo^O]Yꮕƍ6!AB4Bn˛ZH_Q"xu?ϿN}¸Xߣ.fNSw3ġu>d @}y;$TfPP40 Z"(ɳ)r""*J5 af.XYSINNE!3}$`, !0>7L,ߗcF(o| R?V /R~r(Q 1I>a9c KEjdj Ao_`J2#;ʚIZ#媌r'?.IOZ8A?$;{kZS*]A * \+E#YAvk$<odgwA z]i: ^],(Gp~:)A'prA\ʺZZC8J"PrUT9px;Z,UFQ&}<_5Ƀt++C]~*NیAFBuM8a ׳ѕ ^ٛlyMXTHq\BB 0>>; %;^{Cq! TA kYo&a$v`vy:Ҳ/s~PyZqV*f7s>AwZ @ 0-(YfB*x~Oo_M+w뿵˷wߞٜZB*X"řqZ&Ȃ!_5f$34V闥JDJCM߭-If#pmsM]*x<  l'kS,@r"Fi2Io)!dة2#뱒 ;d @"Ov FX#TH!#U4[IKG={,dgn5;A=H! 8jA^#ˈ֐G `ѨwfffffUUUUW%>xOO(]qW?W_`ŘmQm'8C7/{ߍfUUTUUUUT(zq) pz# ΍xcpN~G!)PHIuPzX8(0 ,WeQI@HSHjf fG:&VƆN2 h-)"^ux|\~QTRQLwߟr1o[-H  0#I,xsc6*.2PC #Е l_BHZ#-*dT:EE0Ƙ32Rफ़xrcp4VPY$ 5l߲UO.ZF>*NG$2N;v8j)9%db!bH;n# 0OFu t, {t /g !x^gJ6 A4ʽI@DhZG)Uh\vg#z4dn!rG F0+3iEPQrE䪽{ EF,)rcM,\Q VU?W(%>t::wƯ+A‘1p!2J FAF 6.Ps|ikZnV. 1Â^5=|PJ}10qՁXi ,á$ Lo !>A^QR!C^h,V쎇GУh(~' $spjNĈ<ʫ@=z:t"^/zfC30Y^?5jfnt0*Zh%Ugsnb"Cy8qKDn #;a 3 'f=L&>` $a eA)"4mLؽԍ XD FN@voI%1vK8MXAYP\ZwzO/r&e[AհЭzk}XBPℕ,9İ|zқ)O*-N E4SJJJO)D>\81J}qX凌L*JB^h%%ҥS}(p*Md*!lCvAl׹mn󲮱:s=y>Vm>%9j2 3 z @MѠ#ΠNjӍ9id͐N;9l*T<3с8; Jsyyy4@+s;)a/! Ԟ> >%mzI܈we! eM߰D|QH"*hO'R=}nDz^ceCREǞ^y#= I4#oXJ=0EJpGPѧl>RkGrcDc4KDq%]OaԭO"XS$?6e"W5™'.Q1E{ ٷ/& t!iAO=c|utcJFf2X$lӿ 2KI+ 96UM%-_R>*XUeqp(D|Қ-U0oZ5'O|N K;jk0>ʈK c)LvecSֆJjF*Jɍ&x_$= BcgؤɥqYII'W0ׇ``pUcor 0/}$T _|H#k05%H~ƄO}ᩊ9,c[wԒH@9RRBBCkym]snqgv6Hv+8R1H"!\@ѭ~*GT1!Iov6Bݤ 2Yަ{; Cf Эfi|Hx |ϐ%}c6?;E4M./5(ap|$,k})1YU51 ߃Bko۱uٱLxc {&0^4#Bo>h#hrW$j`r!!Y6$G"wZ |ֽ~=:DwnjEH\=,E0+3T#Z#܏0u# v tyzХF*!>"55"AP83-JB3 ˈMjFIѷ@[R (V%w=nP8=7PiwfiL3lZ‚;<,,_<,B%(P$[(A4EWT90Bdud]ÕDTW큲I;J!2g;`jhD`FF `|Z 5VET5F#hѵ:$-OOkvû_|+V| WQվ@z# ɤy8z/,a$;W?k4N>oYܶkJC|g]9jg(; s,/Z q_۩h>? ) FedWnFjah]lvc&L7OG+1M[EAʕ|ᩯm 94"03yv{c ChhiJzŵ|[zSݐ5. +=g.ִg?* g39<.k5?XAu!n8#p֤nA2D@:,L h=#{07ޞσ~4h]@sB Ύb|b>`@ Gx`%<|*aN)H\ȾF#B1#/ttB;FFdtp6@*˂rfBjk+EWv2y jBH#^ A(9  *YZoLbjapWB Q!֜lNj]u&dfN3p^QӮ[<>yS#ws6dqyj5ڑsu1 ӧ Aҕ?j6NYcտxG1G_ [Pw=\(3:˷ZfP' s_&H`[Gnl? %pnL 6,h)I$` PMJaFy.v6 pllt 4a AfUY9W32﹛&̕ $(Gro( u񾸤+,@X  "hjM͸",mFqum{Z!^_sFRa,KkJOts3a!d =Ϲ0y<(KZXwx [t($44i$\#ʈTPB <:Kc$ KnTw#tr×;}x*P$p ۪ەYi=`GV4BMN2V;ەv@71w I@L̄ AD3`Z]6xl᪻n|Wg YKOfZ0Ë :ϩn $Z`ː ss|@N">~pO#A{G{Dt𴎛ȣX/]qVáa'B0^NXP Tz%Eh6=v,=!Q Y-Hd"A B!pb(jFl8BҕdVASZ8V&y psFv!y0ބ#F;n-<sdp9 t.CׂUT]b6vG>~б;+WD|$k^sK/X]UZ䍗諭ǒ" *j<H`.C0u4:c$#ݷR#89"Dd,G'-7b*!P#$)@'(HL#Z%U^awjL%РmECm.:7Yܤ:r_g):M G}[!EFG;_45Gc*l<4 64}AiXZh&EL#7$Gb)(lʚǛ>xW1w#|}HjAýo][{I4A H}P.D~}5ܘ hb euA"4_Lxԡp݄ 1h"vw xޞbm$"§ P.H+0 */.E @=2"`NPDP D N(D"c+}\ tbgA.4JJ:r#~ӢApD3bI!?щ:Q~~y#ضRDu|tWBEk?S]f:ضco] #Exfؖ! ܶ7 ܠAqe3$aqB򳌳^!R'F^9RˆPM 8!u3n0 |C;7ob 1PZFqa4FQ2t8,@#Cɐd Al.خtk vѫAmgZO/JfJȮ^r T\&Bls*xMq_J-` LqF߹UhsM3{ <^l#}:t ǧ䘮gz;|7ƺv-N:$h+mu[Xy0\L6^Y̆b;ӀvpT1G'ݛ`4d_Kl ΝF~}~朞l4+_&y5U 54N!mV.cp4 OX3B+&:FX`^*O㘴- #cVz},I\9^QX}e ml(D`HOHBxCcxZPp j UP|fPԏRܳ뿓#Jt$ȌH +8Ph:XY%ՔZ%,ekGuL1;V«;zHo8>u_ UEURT1 DAy7u ˰}oЭT X+YUڈDq=}o:(! j"H az=GD( "E{)Q CGˣ^^GTSߗ%>uEW Yϙ+9Uxo6=R<#ez-jq?#ND}뙟EA!BU]/`9~Jo8@g{Y '(y:zr4dckl!\72S?D6K5ۧ8U.4eiܮ*q@aR&өy6MǹeGKj!Dh|5_=%zLצj>4ю8['+-O*p3-\Q Im^+fD6 |oxzw 6q#l+$aneOڼ} 38l\`aN]~qQ|Ni]<=~Q_گW1o?Ys:Nxvv]Jzsʂ3L$ mjVޅj־5)i% /7 ʶܫS_L/Sf۲£|[{^dΛT7]ch mf%yΥg|ogqc>yz-Ƈ|3&"xKWgk+eR+c(sr|]Qޱmhn=vzÌ hمZSdA;Φ˳g1NZ/%j`8laE 2amz8v3+*+Am/i(2,0b=|iT ֽzzu/B>qV-hH+ tfuy*ɉM4[yCAhTVu;qO/ѿE>k~բç'NW OwJD 1-?tP7@Tyr)53*BBBD?D?eCO}.b>LιGe[_hpsSF2cR,u爤L\*yL?|L1=x0ȴpg *@/2P _ɢ8sll`va M|U>qZwؤ@ lCn@NX:Z@PJTs͟75+ 2 #m%@t{9}7f6oDb/jmI4hWd@m>\nPTģLV}΄x)F -j7Wߢ_OzlSJ)?'cDHM30"p$ uj&ր'/ !G!&NRJUYAD :.i0^DvxK1ιN- b@lߗoX-oݪ`s0{`pMn2 U/iA*aЬkf74Ct=p-OZqSi5Z%YV%LJcWs y|8j}K}x.WuOUiI}cGr'زe!m?>[)e eZ+/|)||\ء?$w3wBI#>s[;OVj>߱h]{"b u60:~%]DIί4HDOcQ]Q[~D B"f' SNNwpi*ǻ7&C >_?/z9z g/5r_w~RYza߇ž;NF/tߦ= zlIfW(" Z E|&lqƯ?GkÏ@S$#vcٵc(`"ަsog˞}!K~&8#ެswsZ#:M>q:)/31ùazy$Ylq$H13Twǵm~ Ub'~QX}z_nҾ91aGo#xz7I7:E NJOnTEO7Wq[ToQl~ S֗BEt+͵ae~\۵fTo~v#ėwykh˳"\ԕP`WW}>u4R^-)JR)4xhsާNt{94C ?t ӎ-)-~w_iVP ^ac^Wh9Wu}yc䪦N WuTɓ2+5W畕W-M)긶ݛ+d$p;@(<( ~wPsY&G]%;H9{ڣJpq#qܪ; 6 L߶09oXӖb= (.wvK{W'~_ykmQ[, IsB'#KoD9Z>$, ~78hwݘGftR.Ī9r5\VI_^s mX=CՕC/,c|9ЍpV&y;2?| {wV<,Lb/5SI@7bIEܐxlC'FR J%rɩhiӿ- ْ-0Q`r 8M' >n/'_UdB'|tLQ$}yND%2 Љ8jCLZWcg-3?9>iʐ}$NtTQb}r-TƳQ-ox4,y 8цHaQp6G|n)2ܹaseB]_<|4gpfm @mA" ؠɽ%+t*$k5|F5PWT:z/0O':Oտ"0ly}YҩϠWԢp`\}ïRn^8%Bi'?*5xh_OkvXa ooǾ볚\_|Wg߀V5sJX6$W])NnOcEkL|ө9ʔe~揝I{7˯E3Q^Ԟv)Ҕ;ܗc]D5Q2o,1.}lE&?Ʀet'$ɋX'IC\tL}tʾzQrQU}RH7#>1RR:9SNJ6@F%qfdۅOVm_ɉdyDrcDvĿL/wYJukm_bZ;$scx3D㲺p%NwؚڽztLl^k-sr*=&V+Y Y&5d=8zl)60ݕa; uYqnQgXtF-gOt.b-z߯[M ϴWo#S\c6>qv}ʥ]o=i˴;>xF\q>fnO jf~n47>^ϗGr^_fjh|o=MM껤=j4|͞/q΍7ET*d*U!U)2HUTS ?o|3q:=70;,~PaCUw \ڸ}z9z^v{:Ts~g: 0{eZ\k/@@91 4LCfH5}w|O1.A: i Fw<LfB~O?F/{~Osg? |2?5#dkX ;|#:6rcPlf)ؒ5(f5;njW ꆥ+r5I@ [+R]Yll6`q=P2hE1.0r |ljvJbjDD`"*Dx$b$5SP]%abNXc BPbDf%+U@5CF@R#р Cx[i`k5 dSe~\$iCrMN\oӉDt:B?$ TAlLFPOpC2P9eZmFrN6  P JRR6MAZ`Jw]EVKH1*2QL2MYUUUUY@p$ٸ3UUm-XX3gB1 !ӧN;-:^uI/$MDD 5j\oѰN!^&VyPHp좴 HQ1 ц؈`hvpt:@6< o6WLD >fq´3 Apۀ۽0|y4/Sazx-km<Ў)F>K *(iAMz bF&1Ov-B-'j6ص8;r)FXjVv C f2VƊ7/3N3Y#+xR 0lQ]ql\[$9rcI'yRN@Rf E+ot 8(8Pd&nP %fg5MZ d/Lsv#~z I;9C Zm(Np`R' eo2 XEKu4+F[9, ms/˚Fc6]e*)x!sSaSo#D'y$a- d d):dC&@2 3 |+ *}7*~Hy -b|N0T~{ BT6C^C \d&an_ſSs#%eWPfW %-̨(cXnDj'=My\wTΌ"j&⊎wͷмcj`2j% Yu9 dIf&N4J9: 2Ns;f$6y6y7\pNɆj)>z$U>_EQTUUUQQEUUUUU%S^Q~ e}4NB~LHY @& d)31K"T %95Gx2fҭlgndYe8ԍde' /)d!:մI-zCv1T'lV,Kn+_tP`n0dymr۔}y!-8hWKtaZ 35Dʸ-[Vd! j =D "σX⇃& SCA0^tʡ{w H<&]󂰫;ऊm2wڣ-IFG* F^* 9('Ю1mII#CK C {Ϡ`齦"VH󏆁Z6`+6SU(>1QM%vҏ<#<4/#M;#,"s<2;ۋǺf: nоKA+p<e%<:Gk[ K2wKK`O\v؛'e/\GJBZ_bDA=Jq7(DHbhZp)D}ob5I)RJ\C  PɆB W ZPHpZ"Z d 9کDE~KNHjRz)iJ%U (TJEn`xsh a2"cGD,OHn;ܥ&rC ߭קKg@K)BCLw1$IFdJ1dp;&|"!(kXH<(1?uT߃D%bV>!i%|}:[U*]+fcb<XAj 64lw _mone —oɷ2 3r[@niθcǍ4j% q0Kvjؾ_N/,f'OU*jp?+>;ra #D@G@P$k($y;?`#c3IK}<4TmPE_ fz0Ft A"7P.0Su4&֔hq1ao/ #uXu9iܮI & 5f#9N'! m#吨t*$E.,*YjT41gl<C݇, I!&(0 # QTQw`~7Bya SGfz4֌GL|N|?.h1{|_۪eih/6,q.&6't㘅*,! ZbVi')˰q45EKآGu9D iTzhjxUKHFTl0xNhz*TdBJw l[FQTHt+ 96] סɡ5L7sϚMS5P-Z46NdfSxAV+[QTX- EwXZ0Ǜd&CVx-j <9>نa- Ej{ۆa(668,wG63 ~s7PBojҧGJbLįv\^-u4ڪ^Lc*E.#3-RC{ `l뚏ܰ5TQҖBN>O ~PD>63t1>q ,BPThU B%%A r@"BՉ2*!B *P BR 3)J#@`VCIHhCHAK@ Ch`E'nݩUθCxBFuIC6B\*(o-H(H#݊t6zԉ &-Q3:&$%:SP8LEUMIRH! R#)) I2!@0,#1C*)*Bȁ 1(200$@0B "@H0J,@D4JR @JCI)Ɉ¢ $f (!A1H"* & S0ULC5RLTE2REzj/B~v\j_\!0GKa,q1225n>*H5޵eNUej+feV_f8Yr[rAZ)T/)0 '7p{ԔFDR!7jrKH$EAJ$ | Zo_/s۳ ӐD"2xhqZT}A Mb})3WR+P<pF\@"#";GGp!0BdIPR1XrD̜B 99=;`<ե`>zȰP8l429; G9$d?"}P||Y--* f*?KәWVQTaVnQ|(TeA1%B {ňdP?n*#o%~O"_fS蔾S[ -͎&شKak !} bE$܅Ȭ&,fE S5 _7ϽPx:@?,FI)zVOkڅ ϐfF f J>ϖ'ruKU[*VG9I38nnsB! %ٌ FnAMhNO _ yct46Ndގˎjܢ{crN,lGbX׆mB|qE" mr<~W DaqA8r?.(Tj< T 73;u۟ϳ56fB)¤INhpJB6Ԡb@*E*mR ^C^l#egKhz4ucW SL˦b]}9߳(T$x*0]z4v}th\8& B.@qS'm'oPB=L0BӏLC0{K [|H/{q!: Eb"_n) >]( NbzDz0JR-TQ|?S&doYkS]: F8οsIq XìB oI[yoFu ^0o݆DW ]X3qhie?z.?ֽwE4(Nߞ_GO$e֔ {W?сY:fH vЀgS*r!ZwDxĵ nVHP~ WƠ8!"$!JMX_ݖ?wΑO~.?SSQo}7~9o [Vh>IZ{_Y]'=0tzU/I~|V< 46z7o'rACb9DkΜV W|@(^3 n-)ʲZT% 2UF[2'U mStT+ּ6ga柔Ch5:3~]@M4վFH͜lYǃ)uR,8u3@*ȹk_ (+ P(i (H) afzȇ&Z@Iw).ip"1ڥ HPP LDTQf?D %~7 uf @CD_rst5??NFwq"P 9P9:5rGj(a6/bW\`ujg_a<(vVw(#9ûeSf J.ܠ;F$8՞FBТ,+GQzލpoqRh^-0!8--"Sw! )@QEAUtWAƃJK,Ok ٙ -Vm7F7w-c1cjPFgQ9sYS;hmdN= $g䏪u?4~s@_e #a+?Q~}fLhi@,"4ft`t9Ġu!}~~}E$u t>lOCo$ 2*L~"d`rs k({G؅0/$^"̬Ǣ;cGvj ڱ*]ԌD@?0 8_???3"W%Jlt}G0@ P}٭;I*OM<[=Yna8W$ DJO5)ȖɁL&}:i*,v1.oLA4Z(y?SB!;0<$b̷#GM`o_>!>r"T@<鰐{?&X8UNd 3xk,' $(`5U"J4|)t$7XTSmx2l.5#_>vN1_}"wHN?IR_/ |$K8~K|9!sjV+ -혋-ٍW$PC<4fL q7Hz<6Bw~8 a:QUC#'MpbyCoHVWGkRGa#EZH܅q8)nHʱbYDъ ]R5DH( Z[aXPҐC M]6.vtWYLH'SqԽ_z&&wǤNHOϷH .%UBxfD2z5ߜ]QH@U!y S&a"#HuvT$a"&6! KÅ9m0NXJR#R۳JԙL -& pB z(J.RfsԡL AM=&`J @8n L]p9$׃cHKP)dEډ=yT0QKƁU^!?k2-0O賎Gv\!>>҂9~#LDL! EM|  )H((`@j""uJHd4bĤ9!&CPV7nt?%H̰uxOYBļ7iىU^Ex.pm//FͿw'|{|蹹juTW5ݙt]d;,pflxo| n0n1ڕU|deBTiz`7OZs,$xij#kv+<8@h+rv**G'em|vcjbjls s%]:iӺفUUg[}jV0v~R2lݵ\ݨ١Z"6NRi]etlnFm9MM2J?dӋ\/ߗÚ92_t7|96o\NLDbGHX2h4n"uf3[#'+݌Ȣ=Et>BV̴Ux_8&BfYn)MuS0aG) {@[KA4T$k8et3Nۢfb'j-{`Twdc2i'A4L-0@ 7vH,C 4\d#!nh=u9s, 5>J,4a !J6l4cѴH#lE;GeRr0s^BG}<ƹacz96 FO=j@_:[kCx}wp/~:ɱpX. 偆ٻA8G%,0 `S2 >n0M*1bbl#NY-PHkFY5:3 I bDPTM&E%- A^YBn( 6$LE3R&]SAR<6}o TO8#j:$Xb$(B~v6:x# _?:*NGh*h():J'ҁG/Fe?(?]z1=NۍW| 0JҐ@R(V|b ErHJD"&h ($d%wbD ;" !! >"2@E4TA1-HĪ@{I}ag< (%Wƙ"q(;0s5(30V`XxX>ߏIVId' g)<hD4o"d CDi^ w{t hsjny, OY~ >_44*`H7OsTO^YVNk+F+,VJ)CR hl{M?f؂NJ:㢫: =YR-I ;uT~a#6 t>9~s_^oȻ:B1Z I bb N[,Jb$SAlؾA@(r~lPF1M!yol{p:adDpPJ<=T"<ː]e Q?N ?<M'(PL*!@Z }$ }+ +b+̄ڟK+PnJ *|2) }QM$ *qxA %!cP֊նR*U!ե Kl)C- @nLO@'E 8o"r  AeBRd9 *렚`å_'"kRxQ(ki>Kb,ce:{ BK# QT |t(ZAr'`QD~cC6!aZuMBQQ$x  5="v'X*uZ@$G+`R {~ F? hDR1MȼQ28 Bք@9 A STDUɵNbz'*bqAbn*xkD4 lbJpDɒ(m@^īt?o"B9A0ϗ yO 28#v*^ pVla#Bib H}4<]rl>c&?Hz2Nb1Pa9ʇʒZvϞْ0BEδlڳ`朼8򜠥*#jV҉[QmEԭ6TVVY_/v`1XMؙ",ćh;P ;rpXH>?* 9?{ 6?=tPoSDA榕(hwUN8W^=8Ӗ n^[a۷7dɫ֭)S 5[l:dhF,mz!vrtiye':zmԹC`)qoe^C0/%]THI$ ȢJ ) A?mzoG?/su|fcٲJŠ˂~M%MB}YS,,%(d&Sp6?€ tDş ! @ZSObb+=IR?TT8?*7`Mbz!6?]g! !渞D?i(Kg&En'Л*DQ:F$~H ]jjO\Z(}tT@kׄ'$DNGDn&ƝyAu|N$<D"&J**bailDz}˅zx 9 .`ST~_*,iPMUmpƒc6v7Ƴ0+϶{L':YcVo2O̦RBN̸W4PiED;/M_BBPQL"f4 "MAK`l ꪨe|ܝ& '0?&& }_5J i!!U @Eex}na# h$j 1$B;ϐ a B(H zNigP.XKSzx `xqWs4ĺHQP'Ǜ[ym%yP-j`m-7Y{ۨq }IhJt4Z]nrO\YOe"jj0W;ye`MRTTE(v `ѽCob@!6wQF P.G@CC\_5 ]'!TCY\>?8jcqPASQq) KrTEMEQSBT @a ܲ¨tU5VS5ׂ8165YKJRUU*r$4IP)xG=DṶRHW$.̑ b3@(c;uつJ̟@8ЃH(A>Cgf<=S_ں4a"ܚ==h X"i+& oxnn!EUQEhPe9nƁ TfQh( Dic+Yk7lX)t$oFKƠ=sE}4 ^2K>PBrP}X[ |ߛe@Rn<;MC Z@hD0 =]˚?7qp"1G7}d}HΡ^{レK-<| h +~_0By<)twx}$PQUI UEJ腶7u+PQh *.}vQVj1S}IMN"S$ y`x89֣2[t(I~4QU8fCdʥj_v4!c*s*Z|qT2UUQlFp$\Ge"2eot@Ƞ6Ʒ3eKBPД:ɤP҆"R dISdna@0 q2(2"( $+TiI9 `4Ijeu̸WDΨJz5{_OR?ױQ "k3_ϖ<'|C|=UbJFa{/ՉBPR_խg bI u,KO<15y@tB58QpqZۺ-#g ! )Xҳf /}?)D?s>}DHmUI ոB 4hv+)S_Dhp8B Pxcqbfn@i3{Wr(DDU-m]9 ;O <ſqN) "ij{*"_P%V'^\**Hc"}DS1=EhQ3qІ4W^ؿC^njLӘVRզt jj@ܳ6@Q+_K p~*^X @G谁XH](&H'2D8JF&~ $тoV}D|%<'Ci I&q 1sus4t[D ֪ %ݪUm1Ͽ,kbPgH>v\bDuB \O6C59gCt Ir&%,ַ!T#۔#+K゚7Ȱ&cy*.]ZHjӪUf1k+1,EU**[UYac-]R\1F"ex]Pyp$kϿN4\46S ]bs1gl~K0HlrB>5aIWo4N(!AaP<%_QCǟl>_.M@B@)_”PQH%B!K&`zj`|/ pU Z^ Srm*zig8y5$c@F:u|# s"jOBRbAqǨ@ +⋊&]E\Y'2bUBF!Wy L>B}>3Uۘne"Й2j#&mO`h{@6{Z'OC#&'ZxB5UUVgByBEَ3lr us/m[W8QįiVN<Q.+3Y!ua4XʱT V4!o]9n*$ b`&yDm $ i[D;+M.KYNpvk7GĐ$[G _Љ H3~@2 ~b@{$ (I)h7 (()h(! j2J4C)!K1@V4_ Hڍo?O78|r>]G?k|ZZhr%ǫO-7/^hTiB)ԩOIە5Cg.W~!< LCsX"'A0'8{BXM1=}BoC/Ҕ% eW_~:kYηt<*v|XpD믕AC¸p$JJ~lV'#(;2Aʒ2uk%ZRk_1%@~aH;"Vky{>-~r֞X!!~{yQtL$$J݉a,]85XB~5Z~:?ݾlwrss\pʴ ~Nf轖RE[񅭍OF%[ UٌdY 5xsV7\\beD8:h@!^l!gSTi4&u^ Bօjo 9iф $IgV78w-<294JhQ$7P"`f|Cg{:pUđף#V8rx46w"#1#X-X #H@3s>lh۶# ծ7J[h> +$yl<~ |YMAZ21ڿOmZ5j)E;:}$R+D $`Bj'F F" rBn[cH53Pعb"EߔJ`-O52n#L`%N&].P ¸9!0|'4l:(zGx}>3Q2!LS DICF0ae,ӈ@L F̨k 2 B/T +sp7ئ#C SlJQl3Xsh |c FBdAX]f;鑸=Q΃?m~E~.yk|}ûflGʾ⦛|G%7^ ވddi[-҇Ŷ ;O&%ƕkI[ x7 o 、U*j {lnj{Mt g]Db8ru*Av:-Eks?\arIbLI6' )p>ȂC\)G3(D2~H١Qb;jbAfVhBXh]#HsL]pq,+$ؒKF L#+b,FVpBQz}=0d77 VW:ؒ=I[tʫ/_cUCdۢ@d =!JXB`['3bpeDҤ/ݫ.cT-H 8cr9it9j潪b?Ȯ,gqNK+ƂMtgl{9z'^ǂ{dI0#K:nN:,&nl5M4@rFPQhh*(33QLIjf`Y˔ ëJEb.ڸBO:\ȮHLբ+QGHdP:`ͩyDnn_a8eXI!y'sFix{B @{ niѪ H}!ּ!i,Oˌԏ&7kq'X2CԂ{/BJ} !( @|DV(P{#(ZB-KfH<|[BmeOww(Qb@QBA]"7j{|3^6Pl%ӱ) hȩq ^$޼n&ӻspk?ӎR,Lh3HJiTź5(_&g%v%sk!b+⑤ I$@JCDBHĢ  ]o"D #O9P')Ll@چbA!'H1y\{H_`y:KU^|d@  3  fq_WZ{ 7Yf F=ZzTh" B2j'u߶!LMvzb1oj4yGi6 R51 [ZCiė)q/.r#g4FhBf=: V\ %@ڇ[!8$q *"C"DRŀ8K`h8`,+`zkq#D#q2t 3E#PΕjPTʱ_ht:`H Sr^0š(=m{";硑]S m.ɀ0,Ba kp /8yI^!1DB-ˣeU qE4xRū@RLw2Qԭ(!!D ҮNB)V 87h!6 $ ߻D.M:O`; D2Rd␹Jb d5!U /=7c3_/R|d25TEUrp^a` +ʍSSB.v~T.WB~=JY(G<]IfMVk74fz=لAQN&BJ%ƕF$AU҄؉HX @)C@Cف:! o(#AB>_$@'aPR:tPu.A\D,#q )D^b>vʒAA )ڏnJTJ G#brT6+a'В4X%Fb.$A 5;5ӅC(hSfJjZDR3;$Gm\Q1\d`,"A12 #nHE0)F! µݴ cDH neղ[b"VnvMY `()/y=hl!d-M 5.NlPVV"q& ꎵW) vUA^MX(~tzd N46qG9#R@SEBa^w;"d#+Zf&a?& i&(`\}60D"d$0fqrQ>"$"2r=KX}!D#<6`~h|iyHyU+ͮ L29:9$ DqDpRZtFGC6IICXJ'ci&΃laBBЃA,/,HýGߏ鿹@]᭙P '">Эb.>-4P- hbTaT}@dHzJ ͉E`T~S,@fDLEfyMd:-6h%#@@TC&? #K#_dSvD4/ QTb:ȂY(">V"V zou_#[; JU5b+bz|,U*y @Q9">b#3۠#$)!Q[V 7^ b?e&mQT@!h<DyiѺ G0,I^p`Dv@MiЊR6tpXb PRDe i\!`hP)"E%_A²)#@R &#rHiMx/\j4Ft5s?U95nAd3Ȩ(BL…_͌DjB[X ru4) SMDlsFH PWb&mc &”C!#,Sf4LpgcJ P0(HiSA"$ ##wиTRVD\D+j8XhvPS@"DBR\jAڣg`1\EPx4H֕+pS72N`pIP jz."db^mwv 3uo7qS sx}@4qT0 AC#: SOXnF^h-w]ѢFWyy .++ Jez1 T) HH<¸Ix%qڰ"At/F:ӏ" w k8mŗ  M˽@wU'vMs87Xt,fS ËIbf{xB0}H)!!@G3`2 #IDL~g<2$?h(_Jz)H](Bw iXWMԵE"=^!Bx(KIJ* 문o^X7y76ÃgB6օHKV6FFa <4hC #p{7KF@zpH|bhuZP%Sm,0c\aƓai@`ő@m>\;(s|,xF);/ P@B@:aTGIor﫫66`qlDѪDHR(jP"S?NP;7NfΣȒJz\M{avdi{6.yTyT(%"$ErB5Хmp-RP"t \`(Yx3yaaSv7@IH0C8 `Qi"AZByؿ 8Z̢4:`ÙCԢ䃑r">1Ԇt. 'B'~r^ i|!(Ol 2Q)<F6)HO6*LtK:?Gs=Db2x>w Za5 65΁ 3)J6p~xۨ`6oixIג0RRaj;3a;s k|$o0@skx7,ҏ @.E!"hEHTM%RB2+;[¢Kz7KXQyX` Rϖ l3R۩Xq IiN)m$nUERCCvTǽGʼ{ Ux;tG"}KbP'b2 {1BFقnd@ĕ$tb ia* G9=5f(%LrB0JI$v┖,pSTwd2pЗT9աZNmo= !'HA?!;'ίʼn]DqFAM6w(L ]#QUP(a=|/*XlddL$bN)i<%# }P=ZxlJGh6hb(BK #,Hq#˄ a,y( U0΅ u:.cgxbE(ZF)[DDz!^K{s18"xt? xDcT. .3#!uj '` TZ-:x"UI.3,(măBvwoD壬ch숵lJZi1uP"`4L8H[k:A7h !\_jd[$G#7[Tb$$ a/N"b:]P,G4Ahq+lXhvJ!f`3VaVu`'.CE :ypɨ` aD5QN cڪiFy#uQ+(),4XU_KECJwN FFwp.U&f)ΐ$˘ͺtoФKlBxɬy0XEXUE]| )J,!-/ M%r4R <`@zp4@祮QxnCn:ݣHLhT61qF|;hu=× 0u z0xܤm#sH`@ Rg⅞stG"4(oY1<Iҡ`# `#wp^\!A\u6UZY1ۓG;[bS'5\-F%p츤D6vP!G bb5tÍHY4hCCrCa n.|cNMkנ `G? !$_]Π|L!K8a1@?yks K@b\x9X@Ӭ02'GxH`A@nC7J|@#Uԣ;%k@ejbFTCRPbU\<1I4l>;PC3hٰӮ=Sc]w:uhNjwF: e,GDa!@3ߢ7=!Y 'w/(\5TVQ9s.hxcTY` HV$#e2}%yXd+"}Lf)QL嘝RL]%E;IG,kpA h,jP)M3Xр1N^Eyvڑ& .pk N7Uv ܱҕb[t,ln rܵWwE;q(JR]Uڎդ- #D*$t- .$,!#4Úra=QI5faf[Ȩ*bЅ UʡkPr)L [lUʀ`:p%IM@HTdaf%J AQ4AEw7;EQURZVE<ڽʨf*+h 2 L,)UjA41UTT"E"$UHtƽ[^bzr!8` ": Pm `7%=b?`` N #ϻyDC0D_-Hi]iT5 c ~7d oQE*;l{19l">$2i$Hr nVE]|(L^cfTx;'-+@NǤ:@r|}nf`nGk t5`…H Q%oXE ed14T}(E4ř8}X=7kʋ6H#s,Xa=`(3BE% k|t~bW ̊"*el46đb3Ze6\TE D G]@ v$o]=)B 緄R'=Pʿ&L0 j? ?0 I$-  C@z(I/cg|v8 m3NԝL_OqƥjƷzgbc$s}SywcU; *R(Q5IhGMnSۺj%v?! FI VbHmRO)EՄ">>~q%^֘q`k:=.bcT̠ f8P>Lt0y 0!yPÇ2t0"0NhMɐAʻNpB҄%HGCR)(6/@ v@NQW@9eB i.6C__22ѕˆa,#V 㲏ֻ])8_Ma~&&"%C!\ }Mד6\IDգM\68ݛWn jДDNTz"Xc`s ~^i"&jB0!zvM9]ܐt\u`& /*na|Zf碢."5* ,)$<[1]!V7԰\9%1jvH"'㤇as2}dK$!H 8ڎˡB qO'R֓T%:Nl9 fA ;zzfr8~ -GKƋTWACj : ^c̅|.H9`^Q~^~c̓k3X㻚5LJquR^Z]wy7 ]4Ʉx鮀j#2 9Bj nJ „@1 %Ad8JhzC$4.`pd^\5|_X6Gr])G^i_-<ۚA]jENNbJLEV9,hQ  85w\*V%ٱ*0s00NٓbDK3Ĵo00w,"Tj]G^sO 0){srzvԐDD#(Oo"|9 I 'xm˥`yF\^M(:F[JKd(*; h!`I|:䵰;h>`CNf&"|e\!hw@_YuZ'%.ۼ PH0(oăw b4#ϗ pE(Nb8!U`䍬2 !ĔHB g;8%o}Jg~L,c N A`X3,<}hRW䡅K8;3';y7w}Z鑙|!mk- Ɣ (0 S`OFj@2Q 8܈#2 2bX*TB8E &@9!LR!)% HH ,xP03LEG{nkG/38@SwI \pW Y@$b,rLoODaqK}GM"f3Ѱ02Ed&D7=7O N_; ?`*0Z8ʳ {1" wRۈ/ڐH.yFp x4j§"^(b(HЌ{ 5P^؂(+D68K{QEb3R@w8u?hNZmd`@N M"+? ~(?|a4Wު}: Q* b@9^[ ‚D v$=Pp [^ f!$ Qv<R4pCⷊ̢31Q,})T_QFqBnGmL b=@g(cDff4,`"C!(܃h^ң c-DA `2 p.J <.JY׳asa6 # P() L`_J6`+%BNVA9EtW@Pk|]Ϋ B'8 JMJqH$p$W AA2&) TCH49шw8瀲> pQ$P3yEl1P yJN#ʨnJ8;s߆t{$OUS>甅iJ!g(~o"z=ܤIpo֐)B}w hD"mFD4AJ ‚Nǁ@?Wr$B e! 3ET}™V.߆(Y##@в,! 4$DB2(~HM#HIjx+l w MO^S<<;RFXx(Y" cBW3nmMMټa^ fA:qEVl׫G C֤Xf"+@4kea! d$o:Nb퓁d)B7@A#\APa BFXU .4EP3AfdFAV(*5qp%V*rJU^>HDϋ;bIrƇhT@8Z| QG ~ҋ \´x`2f?CÆӴ!ut-G4>)̝G^^2U$_wʳ!?X'._e!g[H(i&B1 +q'\u2o)sҹ!pMV8Q}zIvki<޿W鎺:4,vIF )cƒPq갈ꆆzc+2 hW,y3m%BYwgB}&y0|j4j1hb1e@Ttp%u2qqmDT*G~O LB]nh#QSlw4J R!h̋ɇ#~3h(\/sBf[ Cǝ`:_IQx0`D hBDPs_쐡N0 ;_g2VN/Y(!`_J,u0Oh|@\A1rNH/9(aOCl/v$O7nv32={ V^icqW!FDb&΄$8DDG0׊A}s~*iPdI76sD%8}VIP59MX j{ 17&Y*伀$|6S0vCk }CLph2Fy z9e?c> 690JowQI##GY疼5?$lM|so^*5oϨ`RY Qd*#QhvC)ۘLtEsf. @d$Q9){EIЅ7&RPLk*)CR#U?p!X7 Rjh.6c)9.*N- *B6"K,Rb2#Vշ18 +ސ Hg|vȻQZ0OcYэN]5|QC> @o81 0O>c瀠n*;{S^ɓ!oߧ1! ',>/"J~ADA0 UҕL۲Ľ3x1߭ҡ:aTMx8N]Ԝuبob\-IU(KN-:hXKjANP(VJR"HJ1P $C ZeYBI`D1= "2@0IT !&FkF$!ڏ@^0 SZX_o $Ol\۾:EzQbhFnJ5|MXl[A2HjܜbϾ>I$!zj'K}A+( Y@{K PAy-H:QpFBP增 2=|{-,xW4Z8z` 0"`qA՟(~C'=kXrÏu>/" js|Az!իؖT! -_|wn <"(A;X $-&(wc4ߠ)+$PWSаfTN~Cgp h(C*FDeyJD!` EP=Э º(^nakG4DwŒRiT *bv[@y- J\Zvk*0qj`p82VJ\21#rDخ; R(v5 GMd3q `iac$}'L#LK!~H+R|1=z!uz/~XW1ȏ?HG<\#2}9_](%i:*J}[.!\C0(v[,zA>" Q/Be Rz@yiAh8f xIR+CXw%J92bȘ1HLTRH rU(!AwYJVaXL ERB@B(@ZE1 0!R( $P $hH([HPij4!BԒQJ!TQ)PRiԽu.톴'psH<.^viQ3ID,$ʈD?$ C H ՏɄ$aa|N20*Gwrur1xPG+Q?7Yǖ h 2lP @+t` D!\iC >3!C Qb *1OGP[+{L=uG d+}}U45rdVF`ړ>*K.䣯KF*tdP/#SɈ קO <7ߴ,Y٩;(À~!x d*qJR8@ -yBCCҸ:*h)((CRukِwp{q 4>Q# ٟmVu{lV-̛SK;*C.H"yc6 nA^&YAC}(>?I v-O Gm S,2?Rm#& ? ;dF3fPlA$>˼d+5^}xDM rc%;6tN4n6`Mg&"Ś w~ 3tSSFQ× ?/<\@98MDWxE4`;D5HOHKD!|/"&0 PL8> a;6"CI3ܒI@9 I$Ds8hVЦZ&Q2% ›%rCln!?*%?֌_: j0 3R5*tŕfZ<5QkB"b& 't¤AL*$zJCϓ+4%p(34PŰhfѹǐ#MEjqlFFvaB|zhsz( ?x1ZH >[9aZZ 1zN'{@2O< : R}{xPoqҷ|؂v A=sM.LWH %u"Q"0J$(T̤,) $YaN2ۣP(QR!l% QԡB Q0gooTTyƢ) #(0hOAٺ(%a%!&PC55ODZQ [ Z `۹/h % B3, ,$.mtQtKڭ '/gIB29ˆĤAӰ([#\4 D-[[ ;kUѳB!BTF%D)(İI(=H j(N떑;&89瞜:< "F,3Zedi $d4)H #.'ǜ,igMǪW[aM Vmݶuim-XB*Һtz"Cn)TLءB;ѥthRQD)<0X ES0[t'|:ИՐKǗSiz`4-깩\.v 4%# "SZDEZ"",̕:6mUScj8#z(5?"qً-eɶX?0lzUA_@tO"ɏE>3ZN!&‡x/wC&_y.rp:.ch#HT)g8~1pzh!$bbA)6DD:ehJ8B0$5]9fWmSH?P~n  7* }0ʦ>RQERԍ( l ;啶EKP8HE][ǫ8*p(3)@ʫ"(!p!1v; 2,]6Zp7]4j3# L~83; mAU#hC8 _߈XV;B_y)0pRY񆮘2P|k#}9l9@9rYA)t B)IB("! %"Czdx'͹[Ϟ![ .3"q< {k̟uPRVTDyDjb ! 28LE9)ӪGTd[WT3 SL0L_=*J %dNb(xBP;T9̪5{2m~S*  X@-VfvGq~ T3nI HP0Wlʩ] w 3TڥҕϋK*E<[Go=+h L4$&,pE+MRbƙ_N垁{Oć8"gd}PC@;qEJ(0Sy!bK\ƹQBaK4P!TJ!J C͂p RAP0Pp/!(NEGcq\@F! "62)ZG~>J-%D\rY ufܬX:u2ڦP&ӗ0TJ$Puͭ!Rv:w#wQTjZu.焬r8}Ss>qT7ӷ3Yn2RIvj鹖 f4Qȼy` P3Yj'_;*'s*L/BonHHa ,5 4rl^k_# ksCZ{?W (ŌX_IڠnP_?R /#$$-P#+@ sV f-hPJc(zğݖJіZIFB3B H)gGN1G}AȨj"TGSHuU@l۩D(ꑼ@Dk`S0}84fH'&HA(PD!D,D" $ G@H4ʁHd1Hڀ`M1(@$ЊZX9 6.4  !_N!;?kBܖ~|QV|jsZjD>Լo&v,#/C CvG8P<5?-8Ԯa֭ @k@4 KN˴9uB)(PI4Ony'G}3BB'{^` VG ViQ]CԤU@QRUUHKMUM {G*D RUJ)@h`QBd-y-abwZjbU~ZDQDѐPdS$KCØDq9|]Ep4v S-ĕTG QBJ4(S@PQQ4P1B1E%HcQ#$ @ԌQ.C !Z9AQ)+bCE-#MR44cO".(J8TzF*Ve BKvY3TB}TSr ս!q;Db]A2bCkÄ)7nO`DIdpTrS,ʘjG$gao%FdcBE89<8ԗ`8h:m#[#a> %ZA`G^pR#(ḏ$8߇2X/w4!i! BQ#xi$AJ4 Hb@ %ѓ4ڡp, >[]*}_ PF#BR} J}X` {TRR{N^-2.W7%* VD,2Dʌ&`$3]s3&"~ jٙz+sPGC!aDw" EJ! j"1( *p2r-6ά(F! /DijB2* ,hj!,&k$MB21RnKRL&$1V-dm#,hWX*a AicxBr&hOPvRIpbA @ f" #f+1R*0$t1%'<20Y͜hxh5B;2w.#@3Ȓj8غbht Qb Bڔ4$C({"tԈ`/hP~-dSr1}Ef[$mb"fBJz.j0Ze4+ et=ı7M?>CҌB%8u4..,& !=Z(6 XtP35ET)1h{z'cY~k)A ZViZ(XbZVhZVabF bh(=#5w#?& DI" `7H JQ I*8@iQwa?l=k );"- DB-"o,0rP"qf6J5|z{l|) W45 DT %44DBC)IjA}#4/6@#בmA3tڊ/["D" # 4iT ' g`1Sdc Vp aV$+ HB6„!@ oLaI8m2JBQ[lTs hY*M88aXHf)$&Z$( d$6.+☦Z:6* JH 2 "}d!e9-+ A%*iˣ r Rp98iI HQ @%)"x@Pv(AaJFbm)ܕ8FPݦٸ!Sb9(8##!H  $"*w R P$;`@DIPUFR,AGh/:ox$$`@ * C?>>WW{Rp(3!@z.PH /ƤH]K?Gc{$$!!k>U'eeJ|Gu ׽QkE2ȁY)~'.R 6Zshkx`IC=269B4ҟ$Ev Oʨ`Ub-}|g2 F.u"cBxf~H&e~ XĤUQ@ {=^v]Psרav3QЮwGI([pVΜCHy 9x Ǎ7i2$qgH&>xq@DzcD*J$ItR3+9˛F7㙜U;S]sЩvn9R3> 8as̀q\BE*6N8+1k똄O<<GؑmU,hJfټz8Idƕ. IYz / ^Z>f仟T0; C6/ gqvs/6Ȟ\h  cgfl9wlcye.Φ[q=d46wO y-_i&ۂP4j\!`@YX,mI;NwU\.s?`d0O'vbȿ !b s5 %Qi^ Gd2A;v$&!ieE!P) JA2 ZނP[pw\xM%6 "G\zCA8TLAE$ELRѾs&i˳|b<x4(e_D.}(ߚ *H  aR VR$jП ܎\Q6) X1y^8`ԐC 2g~U}B"h98ȪQ 9v5(\ltb:kOzԄR(P8Tن,#EI">NhƎ 7H$%xN %]U*K_ބ'CN Й=N%pҜ@5 FPJ (2?EEs=7aCîSk*:PS P9ޑ7(q-m4u nBgn sAήMc8Ma ~RКPG [fX%* @$)^#2_ i@NF@Qyb? E}B|`)eNUB:⦅DMAӳxʜy a{D= JQtBъR>Nl^}^oQMl\^ʵ $҉^$HS\ێNF.,0E1E 0!R0I6 !x x6pE?A#So ҅JrD8zu}/Y$U /A LpƱ|_I(D"'KBwԠi4z6|Ͻ470@mihidQ7"hW)4`!悆nMh@Zat)[J.3a {k SmگL<t` e0xJbG' E6@YO'ö$9HP!Fe@ r2" ؜5|ieQNpP= ~=^5}bx~bf$I9e STwṝ|{H |,.9"$ @;([p"'!$m{Eܦ$HDΜ\eM1Wז=1&d6ܵ<]&Z*HK8hPJ $)+2=sSpS (4] P7 bh㍒G<suHTM㙋 FK$s ck 8M^2H$>X8} . wg1Hy̺rmЍf{3 aVm_{6$1zXP}we*. Q20@9+%Lj XF#󜗶Di#iCt )쌐y?ߖ@\a GFĂB 0 ~InX=e  l6т34.hP6REhz4~r'ߣ$\Ӣ}/Pb.tSR  [P_h?xHDDc ̢b&?v҂"(1Tq4S`F6UCEJE=T6Sts}AaN5wA$[ E?6:Ё1\ӏ !F';BB*xl})d A~7J_$}B L /=k D!?m*?^DF2HHN.rMeNs1^d^Y<٣ ȫEiwoQNPx hVqA_}$yGi>fj%h0(x`/J)€ BW+AJPM/2 h?˜UtlۇA4; y y}C=B{AE:s2Hۻ_Ku# s,cD8^QaP} F'GġDP./? K'iòyPzO}7"/h)T~ib#=PÊSrlP*$pG4!$&>u(y9 by$`Xj4  @YPV]_Yp0E9d|(zKy;Tr D%H8 ~'  N0;YhhB~,'ׅl謂=m`@K$*4Vh)n`NOْ4 QWfU WIK@Z̜k2h@ 8 )ά"0EE H# qCGnEO$:2\Ԙ1i2^,Q()6&)C![{!@Q0BQ\IX -AP /@oXF!,|)%ArRYU)F%`XiV4 FB(bݑo0X sZԁ ,sCjDSBPR Im@a8<4X b 3@ at ͋RGv흆?CuwjRM@ZʼPD>XRWXFЖ  4ǰ?PJ*{3 A,F0؍S|CjY !"iP ,)@e-*)ɤ{=?lP_VkK`dq9*aث|?RD„$‡% ͈&$TCX ݡ8OǾY1>4';Cu wޜPCs̃i؜֑M^<_1 XsRQIp sN=4/!d%PvP+5M!'&>F"I+HZ"?/O;yi!w3RnbPrϓGm1V,ųx>yL9HqI#1(;7pC,|Q!Z+K^+;,I@6cFDk3 2X2L,)j[ ֥ &3 D8Aj&(J!a,]fIAfdE,f4W %#)C`dYM%8sBf  1+ 0!(2C&"k (&c -V.0`s]h5`cl,Q(RƔeCb- ƌYJ4 ZcL$(bR,K,Ic58f.T aII AEQ4A 3نk2i*`0s#i $"q"(, L"$(*HL&`D1 WD]a1Dj4QdZffVQ8L;V aTS5PIi"$A$9UFTQ1EQY%N)QsD(d"&0, 0JpMQ4QT*jk 2r k&& jآ[EiţAKljEf4VLRUkxsFh5Gmf(j)&IfbIp1JԚэ4@DQBTV5v5Л(s.?I=#.=! "(*"!]? ~K"U({Ay@ T %+C# AZ-##by=uŔd.hP>BD!PiAC!FT\:3YeG {TU+I|gۄEST"y !DI T*@ 97;iy6L9*GG](!Z҆&[ V! XBҐ6FI?F JJ "jP(hF֒X]8y@H @Gq'Ë4mBxdyAP02v#VpdrbDF @噲\VN3E f{C%{HAam;vZq#KX%#Gi0`ryҒBU'9WLΡIJTd{C ,O`tB$Ha97qR"o54zvA{<}:(:a9~@}&8Cو1`LIrDxrU R&@b@4A"pPu~䈡dKxda} ҹ=1$ dXSBD }k BB Zi*@9 .:x 'x` Abk^]둁 ̦u ?lhQ|w6XpFPWBp]h0tKn$nUNh ƅ OEy@ ="p>͏ Pe|@h]9!٦b0!ߥ;B%&ȿ.0_B]) b()&3`k?rDWRcz0gёkԷ/j٣5n+ᣎ?xs!1ܘk?gu8RҐ41LG3:Bqy@sTB,Mv#3YƬ7C.IbBPJB%!r8]wk30-f:O%oyB jh4[b}Qׯ6#@RvݧLyŲYxj3)\m9 hBH6iUP@J͊QY(r'8FkZC[F!$ -z]2MT8 ,!uZk H\ C᭳tj%X8EۚېpMRCU:H#t2\x` CAOP1MMD5di&qU.#SD1J# R&fuFq2"Wi-6%}P%JkEtUF‹LWJ~jMNQR KſCb:wBnaCBe}Ed% Av] dtB8NKRw"ѢH(! 81/S M@YbY,# BW@rZp VKZayEh ?@mPM # $Q!셥L Q4x4 bG(@Nց7oX#j#H^ɤ"/]C !s 󣍀 d2w5 jHAZR#KzbX~+ JM-APֈm#42$-\QD{U3'1&H F.5og,~(4SʏȰCgoMJ}03ÆH඗+a2>W*=)CJPSPѬa`M~Ӊ1HRh=Y$D[b:knٜz&y8(ԑC $e1D;çk:sm;kRӵx>jښ%wtL+ 791d@9}n\k|LH9Y H ;8lxhMRt>A:ꞔywiKڪ.W&v-{z:$/n חq{hSk;'W{ K(R6ӝ1QmƲ"j 6i%4i$fr(zѲFkIaMS˺V&"473U3~cVse1`Aa튪dV$(Z[)-,ZTD"]E5W!7x:AZוo.ku DD\viŅjXdCIfcn2N m1ÝO˧Z*$-㣇OzpK53ê!WZZ]!`b- ɩYi9zX`2VYH ogYtp 'Zcx~8loQ.,'>7f&pZ[Q/=р 1-k 'P!@mˉG)ZUu~/UUjD8ogͷjuJR 'RKLCRXMNE5)1@$O@08`0<YOvDEf .C$Ho+tz7LS`TP0ĤCQ9i0J=p +{ tJJy9^t&{q֎܉v3d{Q9(#ՊЭҴ R^J ܑ xwʌƓwU.sk +fDžpXn $1&?@`:kV0AW&5hsĊrȰQB;_7#{#O6#Q` [9bXcFgqz^t4F] UtH6F RfA[ <*X'!':SB0匄A%BnI"f!ȹ1àXh7UI KCMdJ腻T^¤((q퉈0 `##* $> .# # B0#*Gc;&хyGε(De44kr1ڂZLgǭ6aIAv.ء!2Z))A^8rF7Tݬrp.I,zbW)H sP #ij4c!Kڔ v1`~xȲb!PxE!>W^`ATƏVޡBv-qDz^eΒIbRIzʒ6_a&3:$-?1Q'#/|$P((ZV<}x )FT!2!￴rpb;shhNS Ik(P%0$Qm{qϔP8BH&4,eŏV!ޙ _ \0HDKJ}4WW ܎zcqG-Y+u2yB$J@9l}D~A!|vz} Ps)[R"D=9 藺S(>]~=? )"(JQă ~  5(:yn|pdpjQ UBppD@/H*p`/ݍs ,'Â-@9CsMa$D_ݻ%$eݷók A-i,lyx$ h>$]\\(1hт`а!:PP ^ ʲ$,ZivBX$1 ڿ/AjOު6/FHj$}ƒ&# QJz=|enxNP+ uX oS>maS* *O-vojCuD"`%7+Ǐ]+1rH@N}"G_Av j`,?P֊Vf|YVJ * hc|}0<2ib \LƘ9y? ˠaҀ u"'Zb}>/sH0`W "ou'}+32PT@1Īaw<]n_YD[9>tV'=r' [(L7\s.{ oۧ=^쉀#]rc2өӢoSỳbCRrA NZQZԕ & pܵ-@pʋjץoٞ~|MA22SmTIF]<秊/=.i#ޒIpa݌XU9 @L {>Ɏ6X8i q 7ɕ,"#„W4M;b6PMpdͦm5b:i:%=GH q'5V٠O4tFނBm+^-նΠLB:ɖ&B(o ΉxPHg2n‚ХrҢH?. "lF@#G=V{c|Q^85Ӓu ٴۢ]/# #%ļBn!"% 7 \Zg8u P} " B#wzwdWtcP HǝGyA8Ѓ ޱJ腄"lr Q%ۚ72Da Q[D0pgwk0mjwЏp<$!p ;P;kKsK_`=uEUΪ5 7PP-v,]4庵0FC2:CvLF[IB0c|.tJ:r:gz&4R2e/.<B m b Wkyl%oy<+)lgWׅeݭU1T\umD~^BBtl8 8QYZbp`5 Km77jIaۡr0[~{tTǫ@Z憄AP3}=}erU߇&w xí7kc*?A<^FaHm}~YȖ}5 'B;kqCdܵoLO/<\5;4+|,@0H7]B]hvc%LTίB8hQ&J0w.GIa;z@aSvWyjNڼ҉)]T D{C#ű[p!6B`i7;m+&iABtã,vS8Xx}uypY5$Ԁb^\r q{X4$'*`9#@/5~0Q̀ LL(2L*(LȪH@ DR"4HPCUf1%䈉Z k17*u~x(QO-nd{(?(ȌVWϘRBf6:bI"OV ]2= v( `'r Tvt J;s$Hp ItN%CƄg$ heh!bd^P48{=PMBN>#i +Yj @{xw֝^̱|-.jeap EGUP@ " @* )((@n+p(:eclN&BhBT D`aW=*)g`|N AQ Qc>(TD* $pk=𓍐!.S]K)QD{0^Bj6@4ALHl+ &5&fNE{7<`8 T|{Av,ӏ8md}guFk\mPf CFPȟ\5]T+BnPP2ZF|uen0ZgL1U*9!Q{SjF8 xMK[ #1a R.t;XadT>"h aJjgpPKg"I؉ӧ~#f- q 9gQtw \.yό#"oӒb{%PiOfvHb!e킮؁qi\yę%U.ٖaXA쁑1 Pn9oy}&٣[ , )EkG\}6!C Dsu=Ҽ(L-M*m W'e{f0m38t59kI> W32.8\PYtF=1|S[(Cɇo{ã$@!90BL= =ˁ?Litb,Z)(?7`/ (afT *)!QOHR`&D"R áx n_ @_zB pb%ztB i!#1W@b\Bd`c6|58K0 Yŝ6jT3!_z E5= t>(L@A W oc3ux;0WLP͚Lj;ϰ o< b;BFh÷Q?*-p] ;Lv>jk@N|>I@_]芉Ƞy `X$gF@#1 ft TYD}>8&hf;@hj@iKI=DDOU$UEDQK|~=W (b:z{ 7>z=J)()ivδa_}>lOM@=)*.Ȝ^&8P뾽fS)z4s)ω&ZS*#IJ$~#qADuOɒSHGԾ}\\0 i! RSe`VTuQCF|!|{y]J$F Z[ 0(Z?GqZ\P1&j|t\DP~C6 D '' W?״A C9CZ*|<|SD NP`dc߷+Xɦ U+Px@c3/]klNXj^'aՒ3nd&ē;D?6P8Op>tb,QA7u`!Vb2GbH]Gނm/o8x=( chߥx'IFy(.TT&OvLMM*0 !AƳ#n(eڅ57j}vtiip>tGF~!iGí&ߎ덛~<`%HMCl9an >!ፇ)+g*<%Ͻh;Zf~?HMB? J(`"P"С) p H- @(RZJw&:.Bд- J;G3 dBдʉo30@\5QhZi@hDGyb(`7!J* Bд- -Z@D@Bд-#s0$H9_I& @t!8mᝮRJPyb~'0* H]7sD85%d-%Յz Hڶ`{hOy]ʑM}sEoLsaxG(`~o. EHA4 H4}>cQi<=URIQ(}u*vNHA A7 .[<+3h  3\l8쮃"\ x"xOP (Cwe̼52fi* MŅ!Q1% bLAH:{.@~ 0`szDZVDFn.)g@-%&PYo9%gO`&C`R#\(TkvP7 lCf:78Q|Ӥ,NN[mrP2z4jg[yg0QKM:, (l*.]cWn$֓$| Pז6PWlԢ I.|D3Q4iҒ#Z $p$ɡ0 ^ .e! +>c$M󏓉#N,`p<9B7t3K' WLξAP( em|:; 211c,ptI1lSRj瘩,V'X/A7t,jy }z,G7g&vrK;Q(LJqR<{ Ra~sϲ20?Z I@X@ hU0!)Hg aIiSq54E$HH$``"D!aࢳHRehһ$q.kW|2ZF)ZBYZTJ)HG r`'$(jJPEiJFJF) P!3\{WdSJt!6J@ R9MUE LM34 d9 QIA# ЉE$Cݩ)ϗ:S|^0 2[$FDzob8!B-!??9y}zH|A_X ;S ʉD @@B- GkCNO(s졝hSH`Au6?u `P"%"~CNG hKIO'3? dYgK`Xf "e#G"h"|A2IEJgk-+'ަF࣬D&e%Uj> lw>pbuvꔅ׉b!^'PyFTc)rT;c˹asP{ȓ]>o<1+!(ȹHqEARD>W녹㝾O PR& fd`_1Ta*|:{ *d'`*|)hMfv=)AX4%}4b]P~m|s^+!0:z$( )s10<1;QQN" D$A5zIe5P>76Sh |J>p9x v"WH02 񷹑r0bt$@2Aң`-0bj,:I8Os >`B! PpPP DI;~|v?O`P맦 :DkC{(e鷵1"@m@6K {h&!C4 )65y\ wCTcxH]%UY"S%@yErQ0P_w?xؿtGT0P륗@=P$LB17@\CTtbNt,w n6 %~a 3Oc`ݛd DaINpx I~?>)h/֠~[~ͥ7gFW ӵ]1M??|1H6RL]2@_p6Lw@]vqa?5/Nd#;Ռbok_Yȁf- fqZ(nU$pV#Mxgtt+_Ɠtte Z=EH$ ( S^ y`a?[ h%J4 1ϡHrlɃe%?[Fo4}ABj03f3NXEVU]S>;zƳ ( ^Å9Zq;U2&C9_ۮ=k#Ǥo}_lCmmQ}̨Od`"Iw-3!@Y!OS*B,TˌPCX&}ʱrU4 Rx 螌#|G9#!t 㙦b D^dϑB0 ,Tld=[=qWRIdNvXciXEMΘ:Cȃ +H16~R. XJVPa 8!aH}uksOnvED8<i8Q5~}BB3gr۫U8BQ8g)fϿS{I849̧jq+r'΅羋$Jeŀ1()BFDA$!??kBDĭTBE?OZ(5sfNrb(bN}:✢H{?Ө;-pp.8:NӐ2 ;dtc]QF?^͞CLJ+á;dUTO?1}Y֍jrYL!WSՍ_=qY9qviNbnm6ktIV8vL+rrE)sHVaw2Sߑ(<ӽDDψIPGHYϼO>:w9Ov-^.?4SxNP{3TT.qiY K_.-?F|== \ ?XZ(E1@ <!"h b 8 xQ>Go;U(("WnI$PllnSPcsA?C\x9X3cwUc'|#$WՓ07jmIY'7n:MUs$xI!dRc} .biȸ1M[5g<g"O``YRl._ȿFbn*>KF8mw%^j&y͆I=npѠ;PBNIGNj?Y%!_yܶu9rV- ^ggE, w*fiu}?3%H"ISMp'umE) ~ִ61zG.==ŇsOk{^'-w/FSD#H*ƼnPiNd+JylpGkBd]h 8dxRQ bDFh$@o9$=ǝiRR>: I A@غsL]'ʘċ%U) oWOs( 1KVŤ0RQRcr=AQDE4Dڞg,Dx]T$$\_0@]^t>Y}i[b)w,vRH% 4 r8-ˡ;arh @Tpde}a[Ϧ`qR}GGH8ZX&~Z-aAMBPq-87J:|!w< 7T DKc'q[(uQ0|߀Ӷ P¡Db;J$FtCdI!gy @Y6;89hOvк南>F BƔ6~:񐅺[f(I$C2@6w2IqnXEsWwduMsJf |bjY)h_B)XՄ[\\gn6ƃAsP ٔcT6uWV*Ta@LpGť wHx5ĘX='+P5\6߿=5&jǚ.dAHXw|M5>蓥/Fȉ3n>%pt^4\VGYa փHPD5XF6f%^߾|&͒4Iy*F&cT0dXB+v߿HxCERЃr]&- &4ɮc([{-h8mJ3$BeږPZ㰲kP._ը{<8AdPr ᳄gl^*kY8.7iї 򼉈~oʨ'Ā4$@$K%BK~hp@S÷2 9M"Aفv%1|#mu( _?)6%Ehd?JSJ ol,(e ?&3<>g_CrMhJeQxb2g6:. qi!h  >ݻߗqߎ|Z.YA᳜azF)')2`fMqN<:_Ь֌dR%%4PQEPEE)CA̓VI۸4Xl!` LP[p*jW1&J1$iwV-IJfRFBr6u ᷊xrz*}y'f B%\KLl=v2{HAP Nto.F%:n,ĤuDjd׭1{ҫ#܏Qaь 7S4ӗZrx"cˈֱ T'Hh#'QhʡDm`Mp3HtHĿ[`(yMH1aߏ_#}c5ᘡ4P03VθH:r :)f U2@\+ Ia:-}!"/kuP*ٚ0c=|%62e6IAf ZF駨A\vO0R 9rϚg0S."/3k!f[9`2Qc{SZN χ[9{Eb5ۣ ڨß pc=s!Fqs4'TpzOt3 @qʞFkgKD]+IE0Q]amP d8*.|Q_Ge$^P@+m%E&U,R-%qrWfm)B)qEUCkEYY%F_:VC:5 5 #rU$5gp̎^{2 P0Up4PRahNY9@iwm%oH,+n Bܟ s#3Z6* 0^z#{о%Ч @PU+iy}_xڐ 9cm VISWNUfv0D|2\Vs@ZyYketqo# C!turI }6"֟OO YTuO98ˢqh 1Iщ Tm}_Hƛܸsே7Iz/m3So##&\ 43&˭PS6\ʨ:".O0(O#|wQҌ`ݥh<#jf0ƫ.]]*̣`=y9 TQӡZ`o)"TՌ 4ᣪqLCءmC q1Z[6{VF Xz $@PZї)PsxXpՒ64HZ@`+n'7h*kqT+ uoNrL}L;zZ ,uO.}{Py9C&0ukq(k7Wg@X&r!LĔ3AE|w dŴ-}eo5:Q4 m94oQ6?TsdH|nR6%=h:6q3ٯ;QY)BAn.uK%Tq d"!u8iͪX~Wal'û-d8qz*晳[v'Lӯ;wUf]<'}8n7FOz6=a4t6G@ ZB'+Ϝwgf-猈Cjy4d}}Աe6j(6-4J~F<}=%\GjDZd}w_#֏s[E4W*٧לbv.ݑr%ϨWV(0wYRq[A"gl]#RL'ֻ,Owf%ASsЪ!^VrB-'xwܒ;2ffNXFzדD/#_oۊa>糬 Q~P+̿fGo]7֗Al:-n]q^%@e]2Iv|Wx{K1uzj_uyi37r ~lo)zuc旧FoTNm9Qd^|@-=Sx^h~4Z?hA=zY|wpW0ˌ>H'V$.yhwe7|#CUy=&xK>ש5+i:!Ty%l7ЛS~^#.]07ݝ9kvsR;}3'$'ҴcugW[MoB"rsw 7%>Hܣo,{,_/|Gz y zi7w{ժ/(+$k,70@<oo| 7S}_XhIو (◁Ҵ|L/B%_*x<馲a]g{vܥss;cQn@zݝ:E][vrvNbNRg-֮nnВ) rYsw[F4qUQnH (%Tn]C2 %M 5*S}kpʪPj\yDLqog_oPQy]ÜD69ZZ{Zk}m[;S"Xo[[>;9熎vwhvفU@W{;gq!@oA@5\.3sW˗HkTq9sj mmVsbv3l71.f`-HX-,2}z{ۻuzoaö{["D'k}uowCO}q3wflPv郧ʰۭ{9q- Ѿv9Ly|5_}}7nky|s3NǛ^vA{7'^-h^66Xm}잛빣KBO=w;q^slݲVSA]۔{[mSZVd_yr,{ճ.OT *A*H{ylo}wYζ'* CP>·k0T]{7;ERuܱN:흝eݑz3]S֛N3z_wv{v)nVe6n͵r^wG ھ½}U1 4;:=7lI #d!S}w6Wv{ z;Kz[ hl sz]s`$M i@&ž52DɂSmI=<ѤyOP2*~PaH@CB̀Oڔލ&jjx51IiF4zF 4AMHi4MD=F=OSf@yCA 4IꔒBjz=Ghh@4 h44hb5=›QSzzMhMhڙPd4cP4 A@CM!S<<~$%/ _x_+ "ILT5BIĉqJzA'1D: CW{eq~4y++ ҏGdpB!vqpdBBڅ (!tcdL>tGᄇ{R`ڞcɄ,(a'RXt$(S BN'(]OW 9)(UNh-HdIVb7I4|k6tf3L4:[ӨVaK`G$a"'ڑD%*tVH(eS@f?HfQ XH*)Ebj2AB+)@lVлkiShXDym뵭tjMX=vK6YaDHKId[cBus)S`v)J@KPj@Dr}Dey:h02\Z 9j4,.aB9 R;†^;bD`!ES,4X "Q(0A&؄KH&Q@Hɥ,IX ! Y lI*UJVNC7PjR\bPYbIe m E*[I$n^ 1F&ʧ`pui@Y:uQl oTC1 w*;m[ I$ pH_>~ghí]2SSҐs#0274>(TWc3  $!z8"V6vN\-F|Za-c+Ņh_#bC.0Q&P zhsf緻 D7U;ڮ6IrUtťu1+)4!3[+uixtNI`p+z+Ud9JV wP$,\,II jBxQ @*Ҕ)CH%"4R R* ;mlG>n"} m0¿ko6"4 J#b :UyDL=* V@QA{䨠CJI 25Y$%͒K6MSLi+f2JYMR")JQA( FT!q_DLg2DF*FVh7e\&'DLADSҧp"÷9&?yVq"xR&bJo @S큊#ٚCa Ja,FHRT 0B!AwTCuYVzo:RJb,R%)JSeL -uAJ"%L("DJKE38bD(C8Y7 (%*\0V1)E0d@2"??ǭ{ oyβNl9I{7,|%xGfrj4K1K*/2}LѡCOB73kq?LСCVv-ދyo "ɤ .rre_k9l?ܦq[${hJ3HiS9N3ɭOpt?jdՍgc2M|GA̍z'#ExGSLh}6竻u9gYh4U)w*ats~/ef][rʼi9~v\,3aw/۲U=xyp!Dl87eUB%1?jzf@B) Qx@%x<ŨEJY/:eKUa]u|K+KN{pmy,e}K+ok&~o f1372I9R fب@ox ڱϺ95n59h۶a) iJzaMw)SٜIx -,cABSKu" ߗ3=B汈x?͜ursźmk5k*Wqʓ  S!"U ZP]AJ*֍[wE"HjƯ46 6ljSU $@̌JR%&吂iX% 6MlEZjƵ\l&@ҁH%u%9 ˚m SMbZ-  B 1 e=,[財RY6I@sYHT <lz@T`b>V'ͅ~ɠe0&[Ӛ֊-PW/Wv[؍!hLdrBkt.Jh"IleG$ sOId6̐5~C -BG`[C|sn?/|`#WƁ^MC QGҏf00!d_"ֱW0!= Bl2IL$O^1>Hl Ղhoۏ8wX(+`jr);4HzQKP4׮uޏQ##hwGt?GOO?*+J#H(BٜPߓo.cwac9Ӄ ̆|!`F;!3'C 8Ft 4@=Rdy4E6SBSe1M"'0~tt& At@☧iLR  @™l ’Sdea6HINH☎*Pt< SB ExqN7R>2 dH)#Ùb}mF-K6&^:lT}VBqh6K}jQ T:'LQN4XoѠ$OMi/|̬ q\Ac S=D/>CZ;YȔ~s!v?m~&'0c&%0db?Kt`G{lbov=IUPݲIzY'S2Ok$*Jيf+uWX}B̂ i6K(O2D:X?_N=r}뭪w!+$ j"I=>~w_ԏ'?׏@o:Kh&lJK>Olr$~FRq4CJꪯI]T%BX4̖vo Tk)ӪSP8.7~^r'TgNZ$VCo$%Y;GB!mByDt;640 v7bun SSm/nb\8R !h|5qAp T4)ZG}%OȒB P4A BJ5$V~5ų,Z>C8Q=[3N!zq8? ~ kpBay16t"}ߠapQŧ{\Sxh7h-zTwsf IP /I6<3zW4ɱ?>'B1+ϣ$ fF5# ޫ&0m2]RE6R3 H$f7Ke,aIWV&gI =6k+aAUmgf9#5z.qd?]rVOž+07{@ fBtNM >?3xhvC>ρRX*_HφB |-rYCqeM+:/RpxA5]nBB . [zh]fM%34Da!8<{q$7 E5+ɥH6 F)kFIbdPv}MܭD;Մ9rwl$T`6[; .m7F NA:Nڃ`GCC^hSFFXX| MJ _Z˒4|H仴@.~}'s$3̓a%y "lF[(q;u$hf_oHHd]nlzdjͳdo @TwDt*H/z**@1*B?TGΑ+$BDc#U\f*M-ˌQKfOmDCdeG:&wZ)E7+MZt-5M:Z7%q{,E4IY.FPt&3mV%̒ȘQf][RL[qҼ\:Sԭ=삉7 i:JU.bmJzj>^l>`{ߎ{A7GͽDZ`0L&??Zk#cy]aqMFffH;R7Q [lICtsiJ%  $9O5Ś2 gGs7 /MBIdg(B20'Ln_"MMF ?Dt&~~$ }w@ Қ FIv2!=jd{\3ȓMOytqy \C0s4pmbgۤ',w+!J6psr=cXO^|]r`0^I0L_ؽκ}wdW^3;Ax1Gj^>._y+$Ȓ0&/íc;l5s-)o=S&{7׵[BO?mmZFglp%~4J".JVG*pN1lf\dw)Ļ;8-NXVH^KW˔HDc"={yɀ,U'hTIN!as!˫RfM!әJԀt Kl]f?QII÷U&Ő{WDl$ّ3/{ mx#Ӳ7vׅH׮,k}'lz:Q*^єt$&8#;q yb sV!Va$#JԈϣ:>8I3#w2ӴU`qצݩn ԛ#NphM(lL:$ @ D&6%DtjMi,K'#O ԓPԜp&djMNI!I*[zy߿X=VO<5,xq8Nўz䁶o²IIp&ĈrLFW$2FeW'by;7Fk gՙPnM@j@'jH)j?֭qM_wF`ϞBjv~DO3kӂ1>=|K7| Iډt˶LxDhDC$Z! f"eJ3" :NٷzKГ[OO"|ے3Z]`ZR !M麜'eua ш(M(o( ly'VoL"9ԑ&T5 ;;]RRa$scl2ys9vυ`f`Rj9$Iu$@bwǝ4$N &IAE"1{ν(q񎕆>G;7k_@6wkte F\jpBg)奃x)|cn3x7xd8}2&؊-DuiPx(4u˞N|´0|kjv'/IasG`p)l*. !FKլEX,m919e d1l"_E1`PlH/t'4 p^)ޫrBARga4ܹTd&Bfr8De}^ތs#nXilb,S*Nđ '$ bW"}ZĂX=9pL13GVnEea8av(f BbHEI`&RHbT%Rj;I≠nzVE 6 a%rBB؍i# '7r6&/w(Go'pxIJ; 9$&Ri&byAWkTR@Ӌ#0 p WewJ S 0Y#B sS{rYm+QZdwFļIP4:sBrHY[ϯmHJ౳)vǎ>BbC9q#b8u|Oeu؍_;$xҁ/D1aubӷT bN@r)&5iC(yH0mF DmiԖ@VЅ|q_yÇՊ;]Lk1&SWޭB sݽy(5HV; !KH eo]7&Ѿ $6$̂&0WcCA˴ %q}lr@RBP  mΪÃ<3!]Q-DXlԔknDÍD<;{z :AJ?2[@|M7I0P̟ ^<# EF@Iwe%0D!"8^eS0Q+ /G45RNKkBshI&L6D&)I7@ꂆ줸 V_tM iMB#䑢b ԑy׷o.ݵMeko!*&}F"ɥۤvȟ=XHw@ 5DP0s=> Gýx߰5}$Xu``f x(*22ݙ|[K1qO<d'$1wlz4 >$d=La'(4hIXOZ/=NiRv d#BBd[rGH(~ksobs7)5.4} ZR7L SIh )GEY\rvWb~L~,Yp3Ou0;B+znb9^r$@Tݍ⑍y(SiDBAn KFhvUЋ`/3 V=&QZ)7PqJ.b4$JQ] r"$GԓL;O}ƘK ltUYߞv V(Y6~ 92ew?'R2"fH/(Ȁ`IFKa$$ٝ2)<("RyBࡈ,2BB=IԓIPK%@% 4 ܱb.`J4ÚKׄ5C2RCIP$%I%$s2DbDk&vRpk$&GbɈn̓T$rRh$9bMC`Țq$ Bd\:$nIjM6M$q#x=R'pĎQ)9Ay:rB3$4IYDb$LTlCD' '{v0N$$iTj 8  II9m8 sI!}\J''@s ]P1&5 bI*Lcy t7 D!;cOC;In昒'r,(u@EH`ז1"hQ 뭼7ߐ7az6d$!"UB$~USЏ;+A?kRi61&; #;><ݬLz`s&h:I2:bn, `CN^HTMFdM3"p޲$(TxWPb R3AjIH)$C@*j|CpgB3H2rDir PY"ڔX4@H=LM Fa)!pr^aoJ=u4q_BWImCjFJjb9*xb=|=GV'ט|Q)[>> ;Ê[vM!P ;ec889N y!ڽ#oύe/ld& rܡT܁2VIh9P)&0hv(@:ؕ00e "* lH]K"W`y`zO- ‘Wmǎm33%lsi*P%f" lfK|LJ}\l6`O\i "lWfe>=&TG(pqkF]h/z56\Rv,e˙.vNԼ}8f֖`7P%v":!dgg$|jI>4o$Qaicv'%j4S uM$jF_ ,mHgk A48,ߧڑr&K%ohbe- r1ZͶꑠXHp0gW{u@b0H}v KUf6N$ .8I"2 83kMHjLfUoWS7?WO/Ch07 _\c0wL530DRwռۛ;GAi)ɷ>1fi;'|,)Nf(AبZ*T(z\rc^.c+v ( rrb֟1wsS-ή"(ک(/2I5ڴ퀆b;o8\b坋1j50ˎ9Vc]?Nbم .:uCEWX+;:QȂcfGmZ]~Zޝe#hF!>)ndxXm ]ylT5RMvs2O9tcltW("JL,ckg "zoj1&,o @1[ׅlF[>{Ufc'gzɍ؞}mG<0ܭRX-Qr̫A͕.5]c^]m.uhSɖ> qfp4Agb*ag?d_1Ňyy4Nԩ5% m x¥_l%Wkn/^ӗy Yy?ok=^H3bf膗Ũ˙PDtiG.` .:oAѩ//9RY)<̙VVzgFU ڌ҆ݚ?⌦gGc2O-gK~o?t~}=ǒ/hFݚjeK5jD0տ9+cd`ho wĵ2+$Ö M:b]ڞ L'&T&fD#godLyZGNSzpdp&F݀O@sRny'~-G!l=QG?Kk_`<K˳|t\ߥj{-w=z1„`a6B-WFl ;&0Z<|<~4ycvU*W]gNbf])c}'\VݴY忯+IURRMKA^n*{+Pjk%E宺qdh *|AD'RB?dDt5|':}E&t?S*&TL X O&IJO\?:(j:X6mUB @/2- Bc$AAY#Pk?zy~ϱ |n3kUQD݌DM0}#;j4ƌ [uS *4?\eOD_g"ܣ?=5D/>kpfL2t_wBGi1FAamKl*׃(ﵓ ;(kC5# !4m?KiSd?G{ے_L{ lC'MryOT L%2Az$kAb,$KHw$i?}=PFBAzhڽ9'ەj%N/J"ި^Z*Lzۊ xDq%߶>o =1y|G{z5ٷ{w۽1ip;׳ӿtok=441.5u&j_~H6ZU8nfes H^,I?bPviJ(xDvG{PzvCd=ԍj[}h(y17V!([f<}G6bf" }ȶgۥsఉY7{$*hJ9 {'odכy߻}::WS$ Q@ !@H|?W"Adn>6>~ *EMT/ʏUrϲ:=-=4_Uڏd{!_`)Z.6x=9X3kO't݇Y&ݧ,!2?_D_k桿A&>,srZzS u㨣~ϥ̅DT`ZoÝUTvrge4LS}JI[aE_59uY>+nE6 <;5,GQO,`=.w:nxb-za%92,͖٩y54~/Z5;ҍT~o=7Q49(!8FY\#֭L7dIf^z+HEJ ݨc{8jz?>\隸wu $Q>b_4Ǚzzl7$:ضt6@©2A zazzLs_fIDb iه|s7#r' 'b'?S~QgTd9dKdI ~<TW:#sGؿTr?0>Tݎ3nNY%9h1\F |ٶtUV6l[i,ӻ+ɒڋ?FF!nĮVD^:T3x..[$/~74o~a(4(YfJxl@sW/f54ɸt ZM=kC5Gԙ݃d`YfU_Ɗjh#F',6I{W6O,{W~yy>ǥtWU# {=\3Z)@Y[pe溬̈́[ƙUWG{5,_˴ΒHc{j3STklgUXC]*J'-#,nv>zh{XYMP+>y[v-NXbZrjɓK[>əaL /@{`SEPrU1d2l }s?ni*cflSS]M6{v2R=O jKS.|8aI8kɒjl,8N:cL1%^JJ릒smG,_5.hYaVzW~VZϵW' 5y8 ٻ@^דnx˖4iFsY5mɾr_g,t6^>|,l^HAI T)VjÇUval*kخK"nc' 1VV5wag]\u`_yYf\:)P㟊'S܁ۖr-F{}ԑ6 {{,Yݯ>6˒oOo~'RCٔ#^~2W?VUciڵ ,ewMq^)g.Q6&|3TUMU[Deo~ !=MՕzzs秡ƲRf1t|M(ן߶o}oWǽ압zcG%sXֵ_5o5ǿyf݅6Mv[QCoQ3!VwLUkK&/oam.c{x^!Ȉ"tEr*LЇXFٸ4J5ߪtUWj6k:ukZֵkoZֵW7k/zZ7hV=keU__ф3g4c` /:`?ru.$K)QٝwoSX:X2T!mm4!1[ʼnڰ!|y z* $Kb4s!Rmn^^ҼmlB]qZ5xI- za&^[mm&%r SrhMadȤ6 UTGP&P((X| :xY"n)q8I5o;T (qoR/$@gfyAXL4CKFRO[{hC8Ì.D"h l yr aG1i$7C!UiaV "!J($ 0(LDZ 5"lBO73(>lzzzrSsZɠ?"qJ`4+DF_8 8),iZ:.&\èE8":8@13(?Pdd9!* (4Rp@ȁ̟0Oi:DeyI4y"JMr^^%Jۆ <,:( F/K ur2E-ܚw:[݁p{لE"tu{Mɂaf+!Ax?̶rD0|=٤M$$iC3gAJёsn+SYAa@E"D)ŤzYTAN/){b hmTX#9JB9QM#&C0fA!ģ9l'` !cQDKl'QW Ds"V}j [e56]| @Ogȡğf{d(D'D s38Er;:`n+-*j|p,8J!Ƙ}X&=XGhr.!?E($+"|~&H8)R }Owd?|I??&oڄpi|#$~h{3/ɟeݷZ R8;@%Ȁ݂I1!s|c_b""" Jmv(YY1m[h]ݡ!U'{$)aTEoX>^VO ЬKZX;=p3#/)Xe 8ӭ.I$3hфOvTi58ffS.)UTgqP4޸Tt=zP~~)F{a~huEኈ|r=_Iw)K9o7tfL,ՍMLNcK#1?bP70 zX}"R?a!)I"R%aX )UPm՟ǷWfxE*J!';k><ܓh0O*oŴbJ1,jqlBLJA  F@c5) `H23j=>coY^߹ae<J2Z=###Gd|Q;eWu4{ G Xֽ=oɮ+Ti?ۍjfnIg2΃ͮua %K(nB?a{X?'o?Yͷ+ /Шy =)1hs `}qLQ1)a -׎D}|( P]H2䌆P5ÿA}>|@p-,l0I:&ĺ%u - O 8HH!+`B 0 !CiZPhԀ4H .#;84,jhC4`B1Fb1##JahV L!aa3(Z"@hDS(i7efe&B)lZfj5,A, @)HR !q& d H2"B,# B,@QV%BRQYiYZjZW%VT VFVVa`REe*%%hB!CBb?܅tC4KY)Ð6-:V[$LCFQEOzCҞG#J' b@@2<?Gն31e !!iRkܥ!p]J0 !JIHF ((E)NbA8v3rsd@D{}ܚ%0l˨#9ok]?w f9!엶*cgwBqv9U`؈"0fk~?R֭w:Ŗ*=w}*ܹ^Жi)LJs:!NVSU:avqy u\@4 b ]k`aNJiYM)(/ PX0[)Qb5.GyQ5QNf%TvDDH>ЃWhzg}X^H$Lqv~zMKQ {0kU:ۂʠ" *d鐝;t2W[+›)##)И# Se8S@Ālbl 1# "X:|sգ>oV & 䉈LdJjpPH R)S]r^_{*~fcQ0vZ?fA$쵣+%$3mno 7-9ׇUq5*L'MTQNp+r,em^Jsx-Ȼ3sfN2enG> Jlo]uŶWҞb<Ԅc _ wߔ籺\oQ a? lμCN7hR-E9e&慥PVCӶs<)DMrHHa#ͭG1_Ǹ)o/Ԯvofl0Sh7eHS椣#RH9QT]} ēCo߀i[HِvJrλ-qWu3P'/m۴=P] 984M}c}yݳ)?0&M e*J Qw0$_M̝Loƒb\2Nh`Db`'lϺΖC#D6]^%7Nw3rmV`W6!H"GJJ>??2js?h;#  l!C,BH+*,Bm+JҨl.J8ʫ2 J@ridCM.(A:9  tF¦ iZiZV ViZViZVw3iZWP4` /mkH& P(d+JҴ+CJ (SQU]5nm[TԒ j0G?[~?cKYMUḩ~;V-wc +7՞[#>09~]_oĄ\9ՠp1K{tiUz\7ݴb"*va?m j`~t~mؗ#m0'G[@6G3sIա& .?C ۡ cY3:n!p%cnp'7'f%-(Ip5\`5fN|bb``4m$Tgfo{rDr)ZmV$˼90ˮ AzOdj!P'-+ⲿ#܎ν@tߧ#}wb "QH"L ( ؀{ҋ[Ȳ|4P/ceL*;ݩ5¾ӣ2#Hѧ~O(_B -hH 9ĺqdh] GvClj_HR=q4{;x!쿕_2zfD7y Rk^N  Uh5Y=lOGI&xW? z9W Bȃlpdƕ)Fߕ#0J?CPBMͥ1vf8)KNnr:@$ ~۠m#O'\t !Hk)Eq>"҅i'7L!~t.n!榾ק@(fi*Q= m1amsovO !nBUB JD;Y -`‰"`\!J{BKLt1%y`!):]gFf\!Em(] xIpi>hw!N ߟ,`:Y𒄕 Y } 3u`P0նC\)ߺ!!CfU cB js D aCm7;tGqʺynm0" YQ*S@sI3euB<@i ҔBI 2D6 f$Li4JK,Će)'yux)"H&L;I&YeA {<Se "$}䈯Qo55mR% 0v_F7?ru;x3?ܱkCm*'d׷ަW6 `¨44Âd4JI5QtUX$H9y10~Ḋ%l@0?FFI^'n&=@~վ)ef~ZK m\g6%'VJK Kpre# jd%*ȪR$|q=2C21˜z1vUffvS9IHl[*+Uƍm?|9"JtU|y5j? ,ÿ̎ !xdܯsX-iBj2þ${B3Vľۂ4J(1bq ȗZT H'/'6~ț9jA77O(ڄ U{V]6T6VÁVeRmB5&+\90Jo!< d ;8b󨹚\a 0@)(aR}TO#\pߩs@IP|E5I>"vebsBm"MwvQd@ T hTHUw~ϟ(b>~Ӯ;E@Ci,U L-bXz6}}xs3o9ǜܼgE;-FZҕʍ< '11Q]EEj۶٦\-)]<^D|$2DյunT }PCڏ1&bLӼ/}J́MQDZ`N` A[S+޴R V̔S9R6Y[m%s8o i1s7[͍97c/3w)j"*TU@P@,n8:(IQFX.82MsgRyfyIb}=OHXR|'t>U;c1@w oreK#@USBC+ B-(Ğ4-& %Cc+D j3%ޯ~zypJRi6R1I1*֑F(?)J&h\+I[iz^S<<#|s@6pd,Ӏx1aT?p9ST~U_q-$:L_uh]h^+PB!~BPBB(^$+e&pHDZƱ|Y]ZSt*Ѫ*8H%O$IDK#?iI(6?ϷNEVb]FoO9?Vm?*ESI?6 sW'^'kvd`ndnFkALIݷqbr,LjI"@3-׳IF~P[?ku&@P)%)jԐx $CSvOz@?zBKdw&|˵O2 ⢰=8'旌}W3}wfGFeåǹeK.jg2%ޞg0myD虸B+dXM:ӖMI%r2:9ڷ[6W }Uy)9od$%zk^3׳\=q˕6tO'EkO]sq4R|kjsxɯmŋoH:uʉH"/* hP%D:A0k6TMʍK.ӾVIg=ێ7Q9q/+s9FyDN>&mdfy !7,Zzfʷ>3iyoV2a]ؑ$n5dsvR W3!|ϗ J+m ix٨6Y]˵t%{m9 ] >#~ D*sGcᄗ>]X/yq=wo0 TQԗ'МQNJРi Яُ8 /W>yϣDR,,( .J;!h >ʙ a*MQ,K#[ݬF񬍐T(abEX"(X!4*fۜc++iJq>` -S M 'h>\Bˣ d^~}<˿-ct+u}EvlmbSƨZŊ4:%Jj/"M# !rs "-YՓ4 =Rl5 %`B N;},,)@SA+hm6G27LBԕO%^k.IQap'7hĝe}%(@H`^|. << KnfK|{Fu -5I㟏BG=tx/P.Y@x"7EWח &bv'M{<:ԅUQUUE-ۉ% 9u1csY,|*LYe3,2G_J0%n3˖DI@?yE*i>׵#QHG"  sbu(GLD5ȟJȅAR{ypCoG~G.a ,$VMْ4!Tid HYt_gvC]k]6ifm )T(օeQZ)V"bE!a%% PTB/|>F55v&yUFX"Pa@f[ejj%0S==Ӹ=rP@|d@X:t{$0/շ铄3_7lk^ ”Pz%jrTi(@*Q x4(ڂ{4[Qw;3b9P)Z@1@H!ןb~}S/Gp5;R>:T*޾Y%V؆bD0@aP,L&2r˞$=i*q2\B; eْdЛ`r ojʗ/wxFU B79yG1Џe ,yWȉPGi@-Y)OCHI? H;s! Ef.=GӿnhU^03L qa Ch8Rd͂),])[eCog(럇>f$)f9PI]5<i }w>FZGYr="=={Cw8S %I#Hdp2鏺<\_7萉A\J.>nфRΪW>fsMЩze`Z :+ v'V2UCҢ0@hNX%&E(@`UZ똇}뤚EBEcUKbĺDD^9ڦR+ iiRD 񃀉3ps4nʂl&+'Bx$ @K!@)~7 >L? EA˻$;tjplN|z_\oM"ߝkSGW,H[2H-d$Qz37KSnb|.zv&g+XߘDˈ[f#P9$`ءKk<́I*&0M&C\ P-nI <]hiR(XxcI3P,I!x'*dyK^Yer^1w%!mcGd0K2+:}MeO|{^Od=҅ٔô*g| tB"Rt2f љfr"U?HIMagaeFrvI-cD0;j߮ڱݫzmy7e]Dm·$tGϬԑ{sUx..q2*&'gt7 #K%i ژN%o5 y4b`[r< 1& \=ipgo;| anJxQ9پI6Q ۬YLg@ 䄘'sńV xy*ʊ |wY %&m I#]&% c6LvSǜ?y "ᥐe RԮQ"k9{ 9IX {N0v"G`3sfRРi_?wZU }|z<=p4jX@I6ISdffAIrޤʽ¹Uhbr X8/ttB'I#"d KB߰ EqsAۆuDXP !J0 =:Nv $Zb_|gVr3{p0  yk?TTÇVb^?(((>$\?%\ !0 0rAȡ\XQ1AlECrZPkΊh#DШ  I,:u> , %TF9:r52^m51VfaXjM[ՐNܣ7 -[$pʬi5 m7zU6d,&"f3TK$F#߅MhE&b6'!d~zF Q,rbKH ;,ᥙ8+%\T)kց  hN}:['S! W]v+a4WQQ0Ƅ X0$o$X F'Ĉ>JM u8ŕ㵹td6yF\oKn77"&j1M=եK,^2nhjצM-_В`s}oȐMȥ6-8G96*+o^DW*ħԒL(TH@ob-ߥ:Y P1HĄl=0$GEPijI~4tZ_kW¤W~nPQe Y_2YEK4w\xhLek'[P'?a˨D#@9eţm3%"rc#rҴNؑx-T^O#KC8;*c*3dȫ̡ l$–pN09XNIHLq4%a #K[ d"@ܗӱ LW/'kB@aDDN`{vsUr90VS M+ 152<±{*N uIB{pM $zt ~ *'Y +%h210@Ft&@ єE!B>& `L|巩RFY"bɴ_蜚>eH\`o]q" !exWt@L7t.$&!.?LV~ +m\h̯vov/;9{VfƩ^ݵ }zk̰O^ދ{c=MiN8m@d: (\V9 2Dp*S`vG]2I$#Le7MvX6&hۋ Ȍt dkMk;$ T B|wЯR04#d֛B6Rj׋鄋]Bf$D71ceCm!¸v&o6`P{'cNRrBX>_ Bѣ`H$sz;*K]$i^ɖĝ4[g#Tiا`oϏT׃ٱ ʧk$;ڙYG<2dIAR ݴ1Hte$FH9IhY/6)z89@^# f1YtN!d6˲-XBw/Tu(x+R:!î4sZD1RP:Dwv6Wo$ VD ޜwtM4T1 AlϿY.וV6H^ǟ@F@-ӍqDrv}Fv|2b.eӑtluJ60dB!Lht$lh M:qÀdn ׯ;Uv"l%F24a XS=!:- _F1(%.Qr!la {*6=ۜ+XD@R y'JC6ᢌt ~v9K#㭹}Cu' )5I 8zRwI6p2E:˚E58w狁v x)ҽ~ R5qHi KvS a׉F*νekvxEwu]V[LۑWFx=o(洊m0a!(BegkhOU6Ef#L;2ۋ@1IZ``JJ6IC^${]I SP Jf .`HRrĐj&Bw]ayu;:bՠF νn.Nyjw<ɑEe$I.6sBM ;ֶUu䐄z mhs4dDll ˮPAI@T̑Lm6P{֯ a`0DQ\? n#c=Auڂ )"Њ/y دJx䪿0&Tf[{ ? /3rj>f!ytf=HO~vќ dqmVlI)7Ĉ)<DDʎ >*8Dp p$(:!;NJkﮰVѷ !]Wu(Pm`5I0eXHhGB!qaXACiMP=mLW0P!JqPV%CeHHޡSQ,n6Ro8L\8,i mo2N $bE2-6 Yܳv v0[Ui?Cg -2JdYЩ!$vl$MBd{:kO, %XlxhTKclL0.`U.%A CvԘ)mb'poҋ59aPس&fdT`|΁!B$IAĒYRY PBĔ%i.֯5ZkeQd,(iIRoZ+õ}tݍTT3C`,ҥ,(7;tq=fѾ|<׉89֋(x`i_ 7u,@  K$XHwec4HS U [*畔K0R+r%Y @&/ҲmD^*ة%`6Ԡg"d̄AOpV5#k#XÔ ,ݟ}b/Ҝ02QHoi5iqm@2m"2z7$k 3i]0* 4rpe ɩkduC2 r.n M۩5okP}yhչ-m>AU:p '-w|O;~Fs ҖW/L;XAXoGex57˛,*J @!&D6r`|s9L ,nJJ@9bPk:ZI%Ofx'aIĎ;{Q B9؛}H/ Vມ`B'Uvۃ|s"x(&C /Kق-89|KctC9>X} %1 L(P-&hw-5y\t]z!R;2AeH'G$I5ϴUB:9גoq3Ϧ:R&P Z궛L+=tb,Ca4$HoW.(S6< !/`NR fCs;oNӕ00"&ܔ0eBc#1hgQnu9ўjO?G^i 뷕ё,7j遅>7w t`Jo^9t=Rm B&aV9TDC B`뉋ݯA]a[Ð]ĮeEVə erLSVlk}ye$J)ᶡF6FPՀ5ש96[ i )H[IJr\6dYU;\gHIr2B(jP ]]Dp0It t__iՅXE -A됽k&3#]d ] в2 "F+kNbvg}^y@1A !Obm曒,-9zc$ZF Sd#K/>.L$ zAQ$YŐ>_Wo)ȀA#(+T* m3jdžoU`ٶq$1ԭVAt_vi4SL [.9 R@ >Fg8kKm{L d-Cdr,QHnЅjHUQG}[Ae?]2a(F>6ovB-nϪz<슎gt>8һ2Tϸn">z"^y^̞xuw=EQ`/;!jX Y5XӉaɒ!ʭ8|Ʒ;>q T_@Kd%ۿ"퉽ď闁T(" MЙH&q D BA6vdU}wܩ'Y)@B_Xq?tw <&B|($(D\xT  +@մY[ K&"B]`bGlgbdΚ>89UVMh}1隰Ta,BęK "\Zl4 ǐ)eD%cF@fKQhz@*C׈E>E6Il2O)1!{f$_{YWYѾmo4wZ T^ h)ChL%7 Hkă6 $^HV CTa"A"jQmmV4% Fo B~/|]QU6cz `=}>I79vN@M!$V!'$s:;rHHILkd`,:.yxx9ߡ$S(䢿*]`  V RS8I ,qI-[{KlDJO&U.E<VEHzSSW04#NS;S}`= ll=p7I~NHOd'23G7dd]gk:ir0%Ll@:{GH9Cq(GdꪨunR(,K UR,2JEPψoF'AFbځc\#;%EchpΈ OXRB;c ^A" "d=WsP)ˉTpWё x1Jc`A|h۔!l(r1e!&n!Y(CP,5"4ԘmZH&H"`:CyR P(,Q`X0H":d ngh-NѪn"%(AY_/}$AW2! '5x;R5n*#-kG.TL9}=S6D7=$;8pD#]fۻDfbYfಟ)lGţW"RP8i'h|cR0K]LL ,\Iyh (Kg"f aV{YM`}Dio!DEnyݯkLE;w&;$޺;fj,RԼX#u? 0E_0N@C*'T umk , +f^ |T{:G d<NЀ??@tf%HRaTÔ٧g_mZV5SҳذsT2kZǐA8y}%U`e]L۶ m~/Òxڳ]ϖ㍊E~wP&W 6ݕ,UK Oaoq1zU0~ aVо+TÑZ? =qAƐN%nofUnbe0n(OQD2~BI42 Tԗb!|Gay <` )X P9ID"dlMUJGX(,ț@ j6O $n5 z=:t|=(~x'Xx}#ZѶ`SJnTO yShThC6W:`Bt's p y ⨦&gC]߲"z@;" KƁI D΃]_a|ߟscf~l3eXO<`wRD %][C `i0N! $_T Tl -N[2a ;C#bح]oϽwv#Ym f%nkГkLi#\CB0@1@%]πJ3N8?iνėJ{]{'[;zCkvg.)_?' z{A@\%՘Z-h@r %A`h%:ȱ aB=N: 1yק 3ʦdZ+HĆZ0b^e/B3UAr[w"ĉUy`-ӳC9+WrG);87sIx3o !H$_mӺ6$YDe7w*NN3 a3:ՙ׺odؒ=%z:=Zƾ) I!\I5ޞ-}|~Wwg**V,@t"P|Q Nvd bJЄ(! 7]7G!ZBI$LU:&AQUr 鉊i;7}ǹ>InppBB5t'`onҼ[5Ąb"8!RжM$o"vj̈́?:6U1%dMbd?Q= ?|f6uMxIORSJ_Ex 6@YHH`_=.8?5v1Q&8uquV4^y$KǷ.H dA\iW 2P PDC4+4V[(dj( QQ JDgKclaN*dd,:C 4HS0;Xbd$&!%dԲ#L_٣Jc؅c1AT悢$C>;f^6ؔu[=RYI(C0FU2I&$D93+8!P]1!jI!5DI't O]W=IJqP%[/hMV\1QخgFMdaal/~!sx w{sڋvQR 6$TcZj-z[12Р{fCoN$|k##޵aG9ʽ kI@9CDFQzj1JLAHL _rj, O^}q'0"(;{v^ޢ>L(8h'^D$6]摟# If{NrA!l5+E/YW xՌ\'ߤI d]C$/p6GJ-qq#,˘R:WpagRP @,Ǘ }#ܸwZ`CM<}I{4WB;}u5_콳a6DOFdl %#br̉0Do o^\m(*/FQHg\Ǟ͞=vX:J{+w`$ml;Nڏ 9$S0Pq},U(KԀ( "cue6.H>r0fI\h Z#o6Pz!( rͽOy wh"֞D%Q岔42k{?$ ZE HY#x-- #Go;JQHjXͪW^MGe"%NazsKz݀F]wpU1J[&{@8n X,jpDYڰKBM?К5k o~ao/):#VNРWqHt/zΒsD=` .$VPq"zc\GW[,tef=Is3JRGAT=u|^WA> kR]9) T^̒Lz)19&k^\#|Ͱ{7B B/d(cp"H̫!u J p!aZKZ:.ڸ-*/?뙿6)xdt$BR0IC[B- i$!FHz&a]@I]K,`B)J) tQ@ɅKG:-DC X8΢^-h %DGkASJsj'NYCS.(k*[_Xb$A1%&[J<.{2$-c.;`vQ#DbbI2M⬔cX)Ӂ]2b)H4Ĵ৉xt;Oξ\iUf^GWoC˰ͅ" Ȑ+ݠsȎJQ`PO5{7n4^۽9t2Z@fGf6Ң g\Zr` RQIDP ٌ0k-(-Yr9`僣O/<:ds)JK*`C˔&jz$*7EIJOf?z*JJXIRj2FM*kAZ⮛zqpE G; A5cvdCT;ޜHqKǼT%[B/5BPIJ1th"b(iN-4@ݍ"`ܞH؆ NxMD!.ԗg,2k: r!ntBsi#g$J( |Ȣ;8ML ~F6 "ta!ĄTNfHC"BrB*G֗[u]v)3unL"EQ:ɺ..b0&TP}{vOu;LvјbI99E gNzysX7 ;3$e=\ F8/4y8JjF:;`Ѡ .434fѶ4uHSdle0¶TEUl%vCK~}G0]vs|: 4 \`4uJ@6TEDEa<[z G7؊rU3C1}OIN:1Yn0Lise/n#Ѯ)vY@8jN!gB<ֱ^/7lq;(UEә$ RXEPnV=C쾖sd*auT¤||9Yy6װ6S)N pGuMԟF2 .5 ÷fĘx 3.8bk&Fc(~-e!OX5{p 3i jx =if2~w^UnBG)͍3bmR2ŚfKƺ/Ρ]T}mD!S0iթAH)Y1~JXO 1%F؁E<4: ,"K Ҙ3y !j HY@սVq}-{y~$ c Ր/[L$9R5a~TcM&Pd}['@ aZ }y "¬RSG?)N+a]F%DjLnȤRRE%H$vH2,Nq7csE9CЇLE?J-PL?WdnwsVrłBkrQI0.4(MBH02fr|hHޠAIq49 ']}%ifJn9@(0"G-j%Ԧ ];U( 2Oޡ!@u" м1Vj3e&$a#1L P8TjM"w@iS{Tl 78sIt2ʊ%S;nIRi$2:#0ZaӖqq@2TAv hH-[)}AtomR:ȅq G&DY&!$,(@rB 0 aAM}tkUqߕh%yFABa%(ͥ@Ypi\!Bp.dJT#S=Aӧ`$0ikDhߙeKRS P`cldW)4Њ")VJ\N٭-]HBZ(Rd~#aÀ:lLMX[A;(P+I*p :yEoId@D%EHX2BP$KNp$D!ay`f3CЕ4AﲵF;gz2yqeRb,v~!%B7 5J ڭx>0BFJ1-5FحѪ5DZ4LeIY6+&W̴붑6ZF)\eXF&Qh$)JBFHCDyM E933Hhc"e||r$!*.00ͱU*H&,C-RV*&+@;g#-ͬ_<14۹G Kd9-<,IJb08qɢ}q9q:_sXjI{qG}.jt$e\~$WcɬJOB$1J{@w#IB:D5b5HqD!Đ#PHex,vRѡrZ&|o˕2T:@., X`8,U"Ci*Rj]v i- -R8E tL!@ 19"MkvP]a J02!:rHR Q`,h CHlEE5 Cc 6#P䑢XQ\˅Hd2&d)B,FH(,Z5V 0K6c I7զ癸jn) )QIC4nN}S B'tj%\:]`ڇQJA/3ł*mV6ְLc{PٹfN5*PfdEm&7R&׶m$"UƊƮkx* [m d&g , '}[3 bOxCr~:#%>"xDhE20  BAUhD#--XQY9qCJ?$?Ih5&8ˋL- *tH>1F 3"$a`p%Y"TD*hvZ@QR{G>{61<*=}c(&?Vsmd#9:p#VTrLgvI 0R^>εS0rqp$Y7AC}fzXKeb"5M5H ]/l Y݋_ߎ7:d~a(Cs4meo("뛣66$THH͜+,SGy rt +So$6?=/X:1/fǒuྈld"}Hf\i+ ڐ!!s3hw9q!b`,CyRk(Dę_m*0IDE M(Ͼ!Bp42iM4Yr$# :BWE%PY ܣ E-@Ġ%`tdÉ!X$`̪"kʹ9QAMcnJaPjU %D0M+BaA,4H@N`!; j4`4]?iL GleP.8;JibJ(PP & SyT1n:)#XPP7"$ Zw"iGCzQT Q%@nae= [~Jp0;nqBQ!X,מ)2GX6m—iTDѓ}k}unҹM™Xd5 WwXXyqWtB:bR+TϟYfft;3ም3_ML>TP|wr5 o;c'!YWp 9W!;Dڄ+y6u<Ýh5V2..z ]fUhA:]?W;˖2 F{#Ӿ}o]"oͲWlNB5=݋_p'SUV58v\g"b6VXn'F/4K|nwNTLJnA̹ςW``HѾ ߑ>}ZOz9ɦ6LL#܈ i*, `D@6 ̢1e&"*(!E@ew9PH3$ lV0@:(pm@^ꉆoUm恆ڃٮS/S4]Բe%-m%"5Tj(fB$ j=E|S% $^_!|ٙǢv,VۨA5W7!r.0ʲqRm^ װ8Eo }5[ urep};4Otw|pJb- lKYdhUhȴz^HDy(XB|6Pn.y|zN|zKOx9|+[pDʬ- I"$W)=Q|=b]̈fX殯ߨ~ Yq>*H@1-6ˁ 1j2PBBAҤE 㱠@Eĝ *ڜxPm"$P|@S|DTsE MP1P5"nI lBBBG" Р.qԌ8V""f)ڞW6P9 :Wqnc+3dDy*tHR ЌRCOTYI/GTD|  rS \I$qyI%z$y0HbDlDt_!t{eC" X"eUX$3ۿw~ޱߣV sD zһH02'#6G6ipPl0\k)5!vorq LF9c2!D>BhCmtu=Z Ij̒HoDGɘi0pB^Ŝ?\` Y& r* 1 } a}f7P?=vP>Lׯw>׆IwWWh2 i1xM27NGBP=ff@%ܕ;Ͽ7|,r(bU ,G `/JL ʂM!.vQS\֫[˫A,/Bb&O9DܻhyǸ \~4.LͪsGI^ -{9Mip[c#5=<GskF0i,Im .e'dxDy0MC^h},XFX(#bC$?H*4:\4ҜSu`'xx#G b5x_z=gECPGHz>^,D$pm6B,@$* DO8Z;h7 NJ=pI#Ӥ[^C5L&;Z(9_s@Q}xr8ɁXx F ^sd%b, 0 m:TS5fAf1Lf.IXYI_ň뺩XKGN2+(3f{I ! ?$UaVĮ .0@X@ y_?ZE @ IlS), !u1q 4 sI 0P1@alCF`3ff1LHSBbз h E=Xf %l@R($$ xs@@ēR8"up_KK-z^&/7Px.t>dAay|ylȩiMU]:2,,P4($%*JjY;{7R| L~D̘11-Ja` PQY32.d8 RQ8M͏}S7@ҶHE@=sVT2spp$@8XdV}zEii d3 ]M,mAcD2B7Tanl 8CCޞНgd)Q㓂i27~HQϾWץ3y3ZIٛ3.ksOtJ!SM; d7 3JZ6>b$ZnW ?<7P״i"+'Rn@ >'q)8ի"BF! Z!U48@P*)\rRD߫s/+JF Db]4ѕPvMA dDR0aqDm*N0ƀ~s8 NR3 )^/IvYlJT- AJW,In26;)4Вm]ݺחbꋗۑn1 yþsK;i`:tD:7BWVG0Bn#emj--0de/-b l6DN54||nm󜛙Y 0>djarKDyxlRJUƺQqRIHʉgA؎9ttd(FʳyF< S Lu"b/zm-Q"hᾛ8Nl،iBUd#J$Q$4U8`R q-4'-wkwr0bVdm %IR[AX xɠ $\00Y uwH.J<4Ѵp, .$ 4ҷqzvo#vE4MqtwN:nܑzy75椊 RVI Mz/"KX"("whH HF&YN%ٰd 2^x3$F[br%-lPcml&FMzs4tPo]I5)P[Ľk۫VBQAnҫU'HB%Ko;&M&pnr;noN6YfTt'u( )j*!VbUҕ(־cWn˨n!ݹ !âMww[1F.2ܛ週W:,IJ]4u݌Q7YE;* C,-"[-$6Q.cI΍C&crL bS5']v\FSQ78:ΙKj?R C*;J ]2RY;N(=E6D7j !jyA82&d.},2NYUC;Z9hba&?FV:9RQC!S6=<$yts8sd?WI$9/ˑ' 9o{xtwtHwVbn#GDg4~{]] 9m9b_0bM]t']3U sׯxfߏ|p_؃dwӇ÷#|} Ri*VWqc*@箲ak#0Qnv;>YfO38]f0㎴} 0fRv]BBkHB@)`X? 8r@ ͝0)1gid61y 4Tʻ@Q,sf6~ܰt2pdtv|Iv;5 vU%W2XW\.h%в(p_"-MQ4\i4 n!;) S`aL!AȸwWV6o[P9lu^hՁzw+_ t:Ԍ (iG;mbCcpl&l BMa*&ḹI>-Ux ſvp`4øͦ4%6ԉ&ae3 7y'FHO; IvIhkjwBHVHM JIbUB^X ZjIRlQ\u:d(8:.N͍4P >劍\TdMbkoJ ?meVA1?-v ޸_gUa;>uF<-r,vEń6^j۶5Vv&tzոr=tsLa#:O/w>'zv#coaߐ]6n2܀ ?ˬ=BL$!L& L);&I$PK<=\6$yM C^^>  b!Ϙ7nOW=1C!%ejS7;0,t@XP^b4O NYqVj6w1"9׺bmk\蛱܈gs9}97icgiv~hmdi&~waN3}>|/KRj Xu߲ eٛ *dA>|5Ӎ;m/[{[ϊ?[/x-wxKJz7 D@n,cIgfs^΁Ÿ\W^Ҙp `.wy0G˜U`6IXȲ,00N;ur7Ɔ::g)*HK[x.YÉ!o,WyTdp x,̞qOA{|*@wx/v@v%'EN/篖6F)hIXفuBmm#+I0g8 E'IMznC#t>9d2$%4 (I3۔T8C: 7bhh5 zw!\'CIb8B%Զ ^sI : ayo$xʼn?ے#k$4LQX!IF! EHM06FUY ɎB^(JП EH>}Ź;X\@wsHK .q=ꁅq{Nh*r d = Y.u@)ysAk9 eF15TS}2L<^M;~Ph[IsdդrBx&#m9۶R)2 UAC˨ ۈ$0h*ye$IH$$) U 21FZPát䐛@j L+_IgT .dPR={b3EO҇LCoGS\f$[>!!Z|=^Z']Gsٓh`g$; Y$rX{6E1$ޏ'cǂ=IAˀ=[!@+08JϽgo ~8 BUZqU7u2(;@(4*dPf#eU0]n,H(yGLZ?{ai|! 2&'L2#}?$|8&n.Bqv$8֌u$K@H(wkJ  RH3{/N-R[u Y100^m21~6%. o.iX}E;>#^g2.aA?:X먡4[@*`IĚ5| ExC +śAD0̋~lH ,\L֣a`nR!Ҥ@0Uzh03䄡6N["\FG=Asck*]}RJG̲CqՏH^G,0CI"A5ŇS&/4( 11Y3ǐ `0}MB(=Jˡ~H`-vv{R\Q:}[UB'IU ­f HEJr,LItʢ"BWdTPZp-})c1Gd;JLd9җ|!]SRB%߭ "B  LEW_JB*,Yd BI@I;|,A$",d)砜w^;XiL \L74H1VhhAIsnЎ`ICW+;zrMD1?rv '' IFyC `-f;(3,Ia(XRd)d.DG-h-hIPȎ&^ F@]A΄09*x)vtknh o IB[yテܝZoƀRa V"j:[3[hIfls&g[M:OAzNaPVd "]ցr07Xv|ռP*6˷|9d9XLPێXtј vi41{+`Hr  TL!(} JE(3}z$'/v-; $"p$j}Hނ`,I#=ŕR5_-jCbB}IJ7J0lQBIX| r$,A:sD Gb0* 㪛_qSB*aCG~+iuoR2 CSw9!znϯ֗P·{=:V\9Ew_*u6颰wi#EAo6uR^A KȤ.|I$6GN$)멹[a "X"()RO.XbKg9&[ L4>!X! myqgpkQ_Úpю9cM.H  Y;1庌I𴝗%+BH0Б.* $@E PYtyX'NIV)r6f Y\hEjhoin;z^) >L@QU|V-!$^$̠l啼oѝh*둟Ƕ+ Հ)ΐ$a@Ȧftz!VW)7l 5+A"Ȕ,Ď5i 3 v&[ R[0MQ$A&+((T`ʣL@(a UVKIj[-b (FG!9QRĬL~-|UApv8',A+KG$GmoC!!k ݯAZ_܂ ұ4|*NA6I"mlhe=Yh]X ~Z5"s:AQ> RR)j* ʚ ~րɅU<!V!觟CI$Ud~\H1AĤ4K6OBtfV"%FGS&#@JI1D%&t >a@뿑"MNxE._,+Ss .mMRN\ 5K>}6$Yuó9$4ƍ ڱjNڄGLp }~# qbR~h֢QhҚh@նGC4Ih0Րt 'v*Qp}ztM%H@ @ Mh7qk#(AC´Qch%DȗEJr)Z*+I<vēmLlO^~9@ "d@7 V0QuԘDXDU `oC`=DċoEԌ֋~" $Í @愥AD@ @IsLxYĄ qQɯ3s,9Dpё-҃/@Li9lUAw""IK3t)ݫwaϰKI2~ u8ğߛ *~]b2vCFDto4cGxEMn%s4 !U a5yr PDp8W1-6ҙT\#͐>l·AMˆQ6⬩?[|_'y+u!1nR1mhl jo ڥ[4*w&<]4ˏF]_<-[f~`Mʦ1MFmmRRNJ/X%vۢ%edF+NSbyTώqJ8#|G]X^5HS=w=ɔq2O{ {^mk}\s:BK\n}z:ojcvp|-/hWic<$H5X0K* VˣbOA"nH^@J_ &&ԚUl&Vj&$^o[$tL,ꪾ(72 vžPl-;Q {Ev!ua F<LִP+C ?L"*9~}ԪT1mWFG)$eI[Hgy8$] q|DbĺF% .Kg.)9xI50tf/Ny/{;_$)l$|'ߴDf_g/w$DĒE-2 `BMɧf64UPA'aQgAa p\ELR0\D d`\T xixяQ}d8ꍛ^:Wk\?'N\Uu`1NeHF~bbTdV@HJHć:"7Kl>gƎ;Mkԟ?Ycf4{6/E@Tk22ţ%TQm;^Og%a:Ta3E[;ȏ054 c &gS7يjY {I}#J %%}=O۵w;!٢b,[+n3+jѲ:vnz-& XfU!W5dS/nA%;!> 4>)ljBZDHK]ɎnĄ()34T<[')$WC=IMp B?DIXG6 )V!Ll`&5z"|.(UTCT2XIIu7m;>k] ržh䬍qT a),+0@/Nf|pro~P!)>A)hz J6&r(siѿ)*HKAqg=fMɍxD؀D$P.DL5 L?Z6(JA?]Y̕ m`gM$[7W wmg=7zaINF+ۼI`:_(\=2 Cr6k3/3CK8I}v9?*x_%Jk!r))JRJJV Es0\3s0AiZP QJJJR)JViZF)JAiF VEhbV6ű*aZViJZRJl[EbZchclj54 j3riVEchmUhE&=R.dϫ/ !{>:kltHaBBWIeGTsGp3W Ycv$E2WFFi A;N[Sc؟"!}I9!8Ѝ7]!I FԐV l7G?†PPWCPwcT>"W'{4ɴ$Was d2 Y$-$ BR!]u)? T)% b*D"3 b`"B "mG=`0#{o .xH]._T /vݥZC\|ċmrιa7ß61#!Nbi=. X6M)- %3#($xnܖ8#جu*E6v>DksSwF;6(6VZ |<;6w!O49d"* <7pxҟřpi"|?0%MtCCA5zDRSy5#yeՕDArn~d()p"B15oLc`cdڂeZ2fjɑ$c-l5S[ RٚLR(sPJo>]Ne W@zM"!5#Q4*RQ+~\mAgQ$9C(*ZGlMZ1blCZ=#0qy`p?!ETw{E"NlCg 8gy" &OI-gdO,I*kU^E!A140oy]pP<ż1ʔ+ Qsnx]  FGyN6=[j"BVrI~7vBB/'t.X9OPa'0!N&%bc1D زQU}ޘ}K@_QeVt`L[&if ʓ|-Re+$C@PR"@)2U=U [I0O RuND ZI=؟S6 x CRIKBȣ#*BܡhHI+m`[?J!Jg#ھ_OS!|^P bu_BvOb\&rɘ^FgXi =IMo4.}a`X[m+cW8&S`음s` klTЫ!>QChglRrG_)ޟA $iM'rJm\gBS.Hί#GAK̀wnHf ɠޅ@%i'yhtd:`j ȠyY$>-3m[[-2k;߿|B m촊~p4y}Y3_䦿>ӬƒSM^ :"ZB`5-HPa,1%t(w*0#_:?cAɈ2,! ~Eb__'ĕI:1MTXAo2xVmdgLƷ׶(qDH* &@/veFqRY~1ڒy!ݹ @m]3;s Tg 9{!ؒ@x}ġ0:N霴Nxd*4&bd-7"!vKr;!V? ,?0qp^/!' D{s$L2@;D 9ϵnde˕qfPЋw><)8>Q0KBqARDQLo't[I~A&Su;{>H}5k@ʐ%WeX#@GK֒$<иC*(0PuzH4lh_f.HA06^ZzsSJ8,kB'ޑvtBYˆ50CF1I!`gsHa0X LJΑ iK CsiHl'~TQIq=|1d8HsO;A\/0KL%@q&2H|6d:0,<:C!c,eHm04MfB^nSsq2_훔4G)[ , ӟc- X#[&i\3gY2t`IvN! "y4knS_͇tDZt>jJ@) '/>J>]Os#ݣ#^ Ք>I I"9AӃ # t6Uvts|K={?m_DPJdg/84z=OTgZ7 (*hzkIq]Cɏ*@0AT DI$0 $= 8JqBx4<_W4 .$|dw!fq+ΐynɐJ;4%J/x#DWt{$=`t_bJ~qPj H֤r>T,5GCyy(?,0|H~Fzp1NaL8H}ʕ30ޡPgpj@Tr6ݰ6+!d #aA{9E28 sb ʐČF|}鮐6!c|՞wAr(CҘ i9@_ə`͏m"aCm{0LO|"] -P!QFvx+WrH(v-(FΘcn!ȶ%T=Q9gƒR">ER}wA=I[ /^xZ:f^.UqW^O{sۄDt}4JJ~=?(BNb]3a0`UDUBIGx"MҟJVmr;|*Gg>漣YD+݆k}ik00\Hbn[3ř~b'a->4|s`l  >Sws)nO҃ II/sK;6V/2HA3Ds>LEp#^ j1O X"'cC ~XfKsT(1%Bbh"("*.tCwVBX൯aP$N +H0zAEPP_~_o FLRC;14*#s^QL9M?뿎BEaN/z-=mGT%M@FƶA5*MI +XگhJ`$ry"mnO > }]s%CO_^N}}o fu8P@d.G;6^G+1Oi&v+ӳkTobFq !?ഥdݍ@%iǙ3ɤoԷe1i9lFT_ܑjv?>:B<.U7yKd&oט i|4AFapXn>n꜂ñ=_EYL*1+!tWdm_2HٹnoVK׭[ 02ڼB ,1 R'=Fmϣ4]FKR"Np.׸iYYakI>4߿-.@6nx 4LF݊_6tsQ c3^f0K]V2tΗxdH~P@J3@ \ٝ  Q!0c7Zꏛ3"0e4bR6);vTϰW(g~随p F2En+bm;\5B୆johE7,dzXcC;!cGZ@eͮZާj#wؾ?ҷ;F) EB'[8v}\C.UmN39dH^i:ykA3)sD@<{1ch ?̒!nPiB[E8*ϳ,8K"1!X of"n2NG)x=ґNheUP|lAcGc,Gh6@,_G+W!hʒrҺ6m <62SRV"\Ł0.WYASL$[hd9!GP^<|z5x3{gKƬ|-YP0m-6jBc_R7,i8!ruw5\;r[L![s7AjKJ<2FdiK4YKf#(/kD;h3@03yDp ybnrp'G><MWwEJ;н0m aQ ߷6 ت]Y@=<=zZjx60C[Q9zFM;Խljs}U,DMڲ=UndWjSD~:dɕQ|1KQ _4j\4gH9|aEm Z =|yVKQm= IUO:jA}<ǰZ=!aǐLG+03gv'7i 8:ϗ#?Wok=oXc5^v4D4_-mY+PC++뱋7#'^_o4.h[|4}@{fyi  KYY&w7K.F~{s~K@xQ' 8-6Dr"M,Y\I:ӭ68cwnsSB/Aˇː㤾 ,[["kBt0ħ,`w< ,lX}>s /ѱ3mpx5y퀷_5DJ55tc2Eco:2dI2Ϡ\ةf&v\(2O.^;#%fLD={+J.8?& B ` ) Z&tF[+Ir m hȱ6x rػLT5t&y ~zQ#i(G@Ag}yAQw>jk(!$釸(Lj^ nzEi4H.tB\l8VqvAP-]|<b/7ⰳ v1 [ct:V1"FY l{%b!IR5ZN]xý'_ ٴ 5iEpNAh/S݄iOD'A+RU%G1–eQM6 uhJ9%%ݶ98i 7 f :7Hp7 \kj',XآXIȡ4/0]+4ԤfPmp5U"\o!(:b5׹؎< 6z4usExg%[s =X6ĪkJ |o=}SN٢ve6c4cťՙ\fPKsr  ŕˌ7~/VY>oT}-Z#xEۺ |a}\ᄒG4CL2b >LO+ -h Dc BG[_!2n*;u~XȜ7XrP*e[^"|Nnx+}PlKU_TLƷ9jM`J?-= zruGkZ0÷<茐;W"ZZ_E}"+5wc 9oO(exm뇇nna/VZc>@!?zo9 :؝ 5 Rf!X^ Nf e]~u{ǂͷY'EcH*2E.IipZi80$ww\Y,b-{i2ԃg%{/?)dnRhJC*K?cуco?:VTO=.arI^r[ȵqghғ5ϑ[|ߝz(Q,PQ$,R7~?S ҽ|RhDI4I1M4)>ɩJk1XTfihLF%,M}*j2i2v'o}ΌYjYL`0, e% =eӁ\dI{t@ړEJ5If9SGv|bMY9&hLk6D cSZ/ 9o_Hi9&qrݚmH`u'&VN"8a5Պ7ӳqZF0ޘ2'`?vDJHȶCvBi%'2HOa}QG>sٙ{p }}O>hDITCgz$|'O,qo6[O^34^09F0 CB7&)tD JJ 4 H(X0^>:a=YԸnpm›2Qcvyӯ{05/ی34l>G\L `uaC0)9y6ߟ3x, vNLlj&n!~+w$ .6m_,f]P1%WʻC~SL)d:f:v9;˪&OT2ew e>J|گV Nfݣ(jn9sMێ>;|PMY͏?|FN'&c# ɛϏlpeٙq*bBhO=oV kpұweJ[B0f7tEtݧݐư}9 MXPٓM m':_O9;qܐahtQxvt.qSݛ~⓽;ނ=fr;76|>ڽo??.^b&}iٟltd1a{[=̲^7ꗳTgtUDfF0ƏOwd/m&9~ U.ٶ^m7ǻq&B ݅7PWOOxQ`{ r긏{;k2! aO n&'y]yqC-L/yC&7a41hҀkL)2\PzHPG91m:]h>6J~_ ZdK: k|,;* i1E]^o*[|6= :BGQэ.] ]]KQ Z^Alc>mumaE 1L8{~INo}n&Wp#ja7/:{-2G<IX"z$qvz9U\ZB:f͘Yr+Pf}kT2x E׫6x)Q!._N1y)rŠsr c6U%tґ.G&<[<)AylN0Ii iد"s|S~2Dߠa[7Gzc޺9G=D㇁^|<ןדrjC3xV7h=@zMx{5!_wE3{SI7E.;WU\9q%-ݯ׾k} StRYp{tܽV.ʯrb K+<|;W5yǗwE!ZO:ޯ(/ +2]U}k2=]zyYq.Gwc٫'udw P0ȍz >}vQ!i~ N9/>T" dgpMwNK Y uNrH Z^}x˺n`3 >,d3 _4$C NA"J61KA |4A<|&Mʽ\5`tEU!W?Wy@9{xﰘgz7DN `(#1;$qE\f)Q|Ϻ%q{G$sL)R($D3v}* Җy$9L!oh JbXM >ؙ83_P̃=ɧ҆^CL}=Op']&UM LSQۂ+iѯwny2D#iOS#?@.a6_;42PUw7xf9~;%HĪZ3y !|xUͦ&D* s%= 6x4.uc dX9tD 9lnl#npЂTH!/(+$k2"jL! So{|:{fH^>@(zZ}Z 7Ŗ۾u}b}Mޖ`(vv@wM}|p}GǾնs>|{6a6s}[.Zw{ϕM};5@kO]]^t֍(uGvϾm}}s6ע.}>ZZϑ^}t#۠P2@<5.4iݫf7;W U}==hTO|=;ħ/}UPUP*/rWrwkJ}k;W>vlJh[x<}½;{}c^sm!N">8sS_Jxwl/_z{ݚzziBkgޮ}ܾ}}>9`Ϻe;vµCM7wp=s_u}ۏ݀4:/}>]w7C`S@[zۺ>=}}n{ϼ}Wi"nWӹZwz nw<1ܾJ'}wzS[Uj]l71_{*:>lyv+t{g}}c}ᄏ^m|Q0E7'{JTQ׻zӮa羵݀c6dz^ކ繶wrJtuһѻx]_}o}v7o/Oo|T3(c{7{{OD#]^q{\>=mvkKu}}F{W!ڱyVkB]۩ N8jo{Ke͵Lt!\v%oV/kg{Gf]{:{.}}ݭۺ};^üy]$-'ϊ^޲9wwݽkeC[W7of{}|}mnqֳ'nW{k6}wϪv]oMx7a#޾{5nJN޾suM>o#vm·gw4P+=ק=Bm'oyy5 =cst7Z=nom=w;][+5P@w{|uNO%SSvu +fҊz:g/8UJZ2!z'-;.wQcP&meW|cF9{ڼ.xzy>E*ii|r>=ƄN1eݫŘ}kdPwt|zctp}7x 7٫jyzw{ekqwn0{[Ӯkހ {=m^NE赅N¶qV7Mw=}wEX5mw}\W{ϗڍ"my>D M` L144 h4=0Ѧ a'ShizL Mhɡ54yMSSm`mL#z5144Ѵji24h  @i 2LPɊijze7J~L驼i<HhzC@4)##Ah&ASzO =Ti&@gTmR6$,z{xsW.Rh5@e?Go=MG_k,dF b{߄IBR) ZܙR",HP* 98)22% P))#.T r&Rf*B&QX(ePW 0\I0,>uauCK#(? Wy`xʽ@V嵐}?FIz{r9(6ANufH12,<ЇVijҶ#PUF_O[#Nktx5Zta1075}U(V%n\337l+Y{s!`H1Z{fchLkpsx梚.(̱o{/TB7cUyXm 7` d$ eQ&v ./I&%Jj}8޷M\954Jθj(,T0iC H)!X~{(5wx"{3o lC!Z @gDk2{9!i{u۶l201`1!E&Oj]:cۍ̔gXI?I}.18+>\ ׾-&2HV@a@AQAUQLDQQoYa" H222 dXG2TO' |{ ^E*kE"MAf5ơ"tQB!PDBYE T bF+d|t3"D ۢgEilo[MSd=X[[ޛGwOM@ GkU{*fs49 ،j B (f..+=>f$zIM_bPR'b1"<*>+u8 ሕ x1L+9=^X1}VeHQ3zxD& i[ 3/GX41Yr'ZƽXfbUd㑢B$GXFl 3%G:g " us f[|\`go.dÐ { )JFjpM5UPEUQ}aQO~wv!I`1P L 'vF~oi[m&@{{fg: :?zC)]mvtYq Q=:A 'dA|8M!=HnBA*bvI 2n°&ωA4DL6zyaJӏ*siPU#3r[gϹ2 `2kРJ9xh[?Rh3t>$x(47gg雡Z t*M@`^ Ӆppaf*H=Ed ;=L3$%E9u(Mcn%#ALއmBY][fXarᙂ *l&E$cЧIF(0gw3UރjK6 76NG$xI&&'Gns雙k % ׷c)k}&hHhufIǤjk!-G&֨([=hw6HYݥ6Nv{qw Xh)ޭ((l:و:iTN*1_gm63U{k8|1N_c 5?_+a% c+ҳ$=%ۯj$MDz>v(A^$RJ> ED.2B~V5RT0;Drf0$+?͔`x fxFIľ0|?M'mT$2wSi`pNj5K|ɾmlrzf{$׆t3qDqqț[ ̍$rkp!8ٷ#B0c u=p\ ט4Ny?nJS zHj JIFZݚSj3'"uj9k&yc>7 2HfY< t.*]cBcЀE'K gDSu_% -Y~@]#DybSkXn]$bǁEMU|ٕߕ:ǶciZB5sךZ4mG8A%=$ri9eJjD&^w=Нb/0`p"6 $^y7޲IaN"ᕢH_1׶KͰ_uFxB=,OteMK pu8UMw+2{pdil+3G;|aa3xw-f%RCY1:)5> NEAALفezO|L5H'dt/ƴlEd|{> SwZ#U g2Cb7`FzKl+43c(Аaw(FiNB|G_A䲋#}57:xK=DOl̗ 'S" Uj‹Xrv^6QDQ50CA279]MPy˕EDAG"!dv*(YU9{! Er|հ|c>-XA;ő̉I|>L5)mqP)|);rDSD"̈́lF@4$:8@?%0k W0Q4d~Υ%ocO|E$~B!1Ípq|.WNˣnߴݧP?L>s3w(\IKdBlIu *u$>U~=NN*xx8ˍ>Hg򂇾&bLI3W_y6DZ;>C6Ֆq҆yrg0yb,p  (()sq_;SufB }$pdKECSRH~SʖjEH56asSE6,U6Rjѝ+I ʕî* J J-( *{BtGaEc2U3?z/DK>ϫfdo. I9wMhMYZlkkVXHVOqM?.e b/'M۷أlI a~3n4eÞ,Z~U<"ж7$m3ďG-M}SZ68gcLcv<"o^׽my[?=_kŏؽch;0v9 ,}wGww;CvZTbm`B PA8AҙHis]C[rxN0 +8 8.Nˌ\5;4S<~Ykr} -Of4" !GmLKB9Snft&Ӎi}ݣ݈́gXG=G&3&#R|tetn}0q뿇j;F)P>]B $f"E@#9FǶPd@^@z=W|wi"{琔"ah2(H&RdăfVNF s A hbhQ)#2.0r\Zip))J)h)(`@tB {l |1U%|iP ឴Wӿm.naYz^kH@{'(1z.E50m(wh'?{KIJw4a'yn9$O3A|+kBLH8AgCB@F:ƒ"*Q2bUE"*Ze F!j ($%)"HjUZZJZiS :DBq@]!nU & :t1j}acI Hv(e7P;zÐEO)J%J8og_7*;H"AzeP};PSdiYuCR%c^CK;qs &lTzb)5@FsA2f p_9A= .z;`"+*o hs:O}/%~Jp€yڅ# V܇f "yeOD@ A@r!YE$E>E%Wd}|Ǖ7me){1#뱯}zY7K,+H1;PYO/%d L #YK6U);-`ٸ]ͧADuh!4$D)3/x1wM:Q{L( /3IǺN 9 dHFzPQ[BfDnG4~]/^AğiMw 1 nbf<`ʒuq`mըG= nH GsuJPJ@KbaDŐrnGk@0C11p>gj 4Dm D  h &4+&Ld6dq&2 p[㍏.*jC  @j6A0W@HBAP1^b(B\BPf!ҙ,ܹrgƣ"6uh#!$,ʐ|34e#`U9!.1dU``;7SoH%'|V sk! "-W|dB@R 9?ɏ==H^cd7%ZZ8HSD=?U<2rV6ڦtº,@1y[p0?i|=y˼?N}/zdU5AQTT02 ~;79AT}{N)'vƭ96t_ wcњ~%Wqѝ;gR#&mvOg74\WP\b Pbn3B%P&b(!JҐO4d{63uQsdJťqC=ʓ)}k1%&HRePl2=h4pJ7qҋs 50|e)8 hdik"Mhb@o܅X*&UHAw{A> alZg; ÇKhuⲪd811:> OmzA_`w d)TRRRjEsXB85@Y$u,Ib'.Ip#S1ftAwKBD oD"$ _Q,:xS ,]?Z!F6(r9}E ƲEMަ̕sUiy#|j;c0pV`_o7?GNps]Էv$QkABS]la? Y??5Z_"ٿEl>ձ.ǵSuN. c|iQV0/_PϮogzM1V)&n9tQ48v\&H`mdIbwWY'||8H{UEM\e(]}5=@3đÑcˮ; #<ޥ=50Vh>Cj>\PL)EdbJ@""0iII> ̯{35]ęPDg(v1nk`=u#l9G|N4#@ H"o `L۴ZIJF&J _mF;= M ''%*؆@.Tg 憬tt$s*+ubo/Yfh!xp}>A#t]" JkK8qSRdC/tu X~ukA<#vFpf9>[M|q rbDs56J;5C,4$yj+&)&#FdU׃ĚEZ+H5rїV:h"AG:wss,XY'̺WqXqQJ*330 0en7':g?t2T4% T,H⊛z=sSa<+"` MNFRfB~\9؋qv?^ g $p$#ij$v{$iDc {p9y_ 6I2L0 D!+uo u(F@~y~c6vnE2FG0C٬qa;<]2Ltk~6Z.QQM.*Zn֠ % `"6 vDNxPz;%O.Mov:z_d;/D{-fo9Vuԩ *o[5b ۻow593=Sٶ:ۤdc,[Zzl^hIH<2w[eKz6Sy|W]π"E/AmQ7.PvϸuM:@ҁ)58K,JrFgTk̠̑<2"K0E]r?4nK*is(`2⿷w}Q+ÁġgV70U|(+h{ B,bwӞ в{[ 'q<1/豖nZ+ RЈia/9sPf~!ij6v`^N_Rs(Nu #wBG? J *r4JqY@wlh z΂sp'D>\;jMY\<r;4D9?YC7 ݰHx)JG?Aþߧ2W,bhK=ټ_5bU |{,T-I!|V~ԕFl0rػ]o̮NhJŦl|ҢsW'/aq~C=iŠ($$$$"ͫoOdSzx?<;# _Y2Ѵ`nT78dZ(bzڵGgd>ɯB)94twn:,]4.=4DiTWzE -EDHHφ,UkvZ48h>;@S܄fpPwi 6HHhRPD6"CHrTXdCocQ a1Z-5qdzTڀ,5%k eڪEۧmwd6mD @tgKF&n Š-k€hGmO듏^YD$UUUU}֬ zz}_ׇǟA5UfeUUV۫,ǝ+(l᪛ڝ}(ϖZrsMT8-(iIL a3Ǎ$Sd d-"ԹkO,^CXM_qyS𸌌赇8aź<&zsVAcxQX 0WCeh+ ?܀If`\Ԡm# %'IwG77ƨuhBXiF%ZZcȊdX-l=ve540&&(=fc|%,Ý{?>4RXzuGܴ9) j˗>jM5"9 5|}Z4pK,ͥ0$9'5,xͰ׶)\ :vŘ 8ܗ}ҀuV8Xp,o65-HCr@P ͹t2)PBzK?DWr@̅Ɉ,fCͦ#e85b+OkyJ(8<`۲ܱ"B([w=~ӏv2&}ه-t8m#3cM1ayʧ]^&Knx┹33H]PhEr߼3Lʿ V+QSXo10 $3w.WKhJ 9bChۍfm^M3l(٧V7ci:ieY%:WSҒHy3>pLf8THAD5nLNX(c''^7 9UQ$ďcȸ@ᝠHQBi@ +``ACzc3.|O>6wV@6rvեZ=2"i{H~JPE]/g94IJ!2|앟~p=E xx'u=C8oe1OP[/e*ibP!0Y%3O:t@$>+A9K5HhHc 3Q5NA/: ӖKjexH=dI(;>z[{WF/ (W߬ݲx@hvU{E)2ZRE4g wΛDalE kӴɽmq<؍n/{[6CTd0Ɠ%<6!iuWMz&_iznO߈l|!im{0H c GC/R} 0m("\_rL f@//fɇ>gTz+o4?W ZC{2dE(a§cXDoVp|U ,߿BH\#[}`u,f9p`N;9ws^dvB[1"3hNNP"È ›X n p P {&i%(ex!>ee6hx0Rdb&aa},cf1oע$"EG@KQG'?~Egeo^X 1 H'peS(G!_GDa/)ks+K/! _^J_ˡc[ ^:/)!vQɻn6.d 8SobP 819TaVل!N<l9;C Kx]#ڪ-)D$RٴbPO\ۥ6uw$8)CqyS=5,Ïܺ#* eAu׀U2սh [\q>{0+!?a#P/M* '{LE hzZvֶ՝*`^uZ^tǂ#X6`sNGQy~cskQi9 G$ N l緓f4egO~MvTӴ~OD,Q]4]UMQߺsTJv2aN^l\u^JhE# gxs0$@=4Rw[0p6m9P ,E hjEQe@2H e04cn)1D&LGKf5N Ef l8;U/w ݤe@4flϞ=U a1ORU!*-4e,Z1^!>2znУQ:@5R}'_#Hz % L^QL7ܔE; REbDV 0ڳ fTn)B%qʝ, 8T*5"54kquUN8stKST5O-ΣiϚo2ņ d7 .ĺܼ;hQ !KiN;>p9/oyVL"!8"ġ !ϵ[&lC>;,j̄k.&DQIeK7УmaB]6@4+18KsFj,$cy_W2#tS#a#05\)2@W,|TڭEuץ9'Wgc^w%I囮s@LDC(OekbA+9i֩$  qG:ɟkS6Q}" &M p c292rM&Àz-٧<$fn p A",P97q|$Ass&u\զMkozyZJ;P Kd[0sfw1q-/5U4xƭw٤Y0x#c# f8h t["@vt"T~I}5=ׅx6./r.1^)`p}6ƸǮ7Dl:nn>3^R0(0'H T>VAD-5=0!yBG"C$8 { 7Kņ!X Ԑ8}7 %c6-*1>؜'u?.w xSo)pݔ $Pih h7n{2p^)tk{HcA0A0ҞdD-P|A 2T4 PTICKLQ%!@5+RP0Z]Ќ! 1ݾTfrY珌Qg蒅m&l&vtuo;XZ9ô\x=j=u%D.mOpi.Y{ԁcآ$Rm'-쵞أj.H~Y$@B)0r+o@x_濪LirS)y J/i/LžgD6yNEMqx)x8HU|+ !\[(Q$RP&0 /RVh˹NGE8ަkS"j'ZZU idIz]1w~q28cǀ `VO+t?.#6(3uU$c,TY7B='MpDPBF d B$J4MŽ p6f;[t؆[J+ANUp٘Co>#E9f{m-aKH)m,YFE3?Y~UP$T#1!0CdkY %J<|vS~]@0AGv`)K\X(E:TQxn/ 5''bQK`CDU=7;UE"@ 4R)HNnH[9i8qpG\Qǥ؄ GZM_dkJ6Yd,uru5m8BՙQ/_AjT x3^Zf6 {R1eOtbLlO gG_ieaS W I!2Y#t=$OIݜGZfExɮ#$[ } ;+,l͹LdK@>8y\f6k$D,wtxdn/Ξx츳#Ϸ|=j ^ʖʼ3P$}WjrhV q{"z r1o8+uLꒌ4*yPIll팉cuьŷđr@liiږW_p5, !J6 6= }NkW1ICݖbCTnLu O%:ʞjJxZq:(@H*$&% ` I) %$EL-q(o?gp1{TҎ|#%DGf ߈E/.2|EG!m8^#qfFpWwCvB 8Nߖ d`ټ>^߆uYvesAJG n-U /) " zn4l}ХsC7m"#;'6עR7t~`z5M5rs3E쬕zoRH"@fR0}ϵmEqnݎ'(G2R=bX!|4 ~d?}mƖؔq B0"3 0Bw୅|px>16L.J}S׹ 1V!750̘Eюۿ9 텗Z# = bm0䁕 qJ: nP}ofc؊ tT;3㎡vB`҉ p S.ٙV|߯`St9Y!par@8"Ӳ;70'6[>zqKX3n7v ;J iTCFKk&!_ r\z 8SL Zj7,5ApKNy%v ;Odȣ%WB]&uo9gS /R/ P/ @Yu=pJٚ (XJ SyņxIerd\~˙b? Gyw./MH5vYW1hfl1:q[mSͷ}Z2~G;/Tw}iJ UL Orϣ?d{m#qnIPF5miè4˹g"Z{0 NߺX@5^ʅ&d[A5mIDIM@^\窆@RD  p$g'qPo;ReBfn&Jl NJv\4)[BiC:HѤD Dټ*F:)NB#z12P3XlcLrSMζ`&MT,2b8;@  l *l޿HWL}V 6+(BDv4^Vm\0/ HFMi—[#U%@bJw(GfYRV_ 0gƺ^|hֲ5Ć#OGTKt\"'tZinc(#ij+E 19Dx:SlRj~~Ÿ|S`P$_p™SܪWH e"TBR@% 9XOL쒋qJ[|fzVċ%ڊ+iIoqd` V":{@X%#;A&t'ނUh5̡ut˧I=MR͝"uSF}H-Vg;HϣGw*ao/xۢM 1}x;@k֒WE=m!w)%CSdL7BBn/9 IsZ09Z߷}jZm6q;ɰVw{AH=p_r;[.on[̿|uF[yn(aH%axDi4WK MFTHY-k{$p$TIߎKvoTi0qg&mQw!͏z$X>{;:MES^\l;t/ ":GMiǔ;-ݫEtT:cdú\'hT ߨ;PV_b*F[{ y{vthfc=5+!? Q׉yb{kקpV۳ۓ076EެE6Kt& uEhdB* {8 O9: b>V6ka#b{$6,3l")ﯲB*W7σܻgBG ͥ1ޮo=8a L0& @jH'Zr FDXDQ6& Ҭ` cE`%#6e@nƍf IYC I(fk1uUQNa0ĴqOt&kFH E#C4K*y}Q#+}H):%*\V!{ PM`ƃF$gѰ%~iMJjhZVǽ==yǟ=P7QLomJє*x_GVffHk,Vk=O̺1geh1 a-qm#}jlȉ0⾡.tەZ_K3S,0VLFjq:٭T_^2(OA"`', 8Dhaibmx-"̐SG=rD:xۻL1L"00{9h oұH`h ҅Awؙ8 y% ]~{ne^]"<_vZ($!<4M E 23{ʂ(eI;{SɅ)̫dt[=Ә?w y\y!_ks<8運1mD@[>G ̭N*Sr=͘fc&U.4m\yv1SY{3}Ñ]޺sbBoIF|,tKWZJ.Xc5 iz$2hPwFv0c3•r;c ʜy:U ~af|qDS[O&I1QXך\f%3,rںrltS+ Fspz>6e]oxW J3FQ3ڦ}Y+#vvUm9YR{/f#]<3{6K ޖDY-IO*yqƚ;D|Z_|c}wQp$:G QFi"R+x!u'y~UHl,fi!ߢ_p;*oL쥃)qLgҧ @mɝr/f#%zFsiM{Ay1yz֗\3̺Lf$,S-MJqSрs8H "šҳ}tA Lm&ir پQUqB $#J Кu?q,x&4Nإoٻ'ƓeS52@eLCM`8^z۽MjI?$K17L۞6X!lH0(<"_! L\6 f/UEXf5s U(p&iCk X SBڦFHp ”֩gb1 BkHՔ6 XfFcFL[y&gUil܅+vqF 6A`6ޞsEY0]柭D.;fP5nadr`$k %3PwgQа @8eJUHY7IPƈ +̯f$f 6k%bvUcA<5q+*-Jz-0/t h5<w@@˶1fb0Xf\W%sy|wv~51Nnwk6-~ ?K'8r({C׏‡@H74:Iq$0 ~bY*^q_}.vabf53h0ԭqjG}gSLF@Sn&2rH+]٩}0fͻ߼N\7Tʓ |h0 07#&1m%  )pAօMJp"_BJ| =^ٛXJ\K OlL$m׺qQ6Ki8B,0tFt05||%M8́^e&U dgnFqD*tV$CQh X?.[6ןV})2EN>J%w㻫/5ڪ[櫷E6϶5}Q!{]zo_V{a~!k2;9BaBuZ/'=q ᭦b0x| g >`ߩqR wAH.b>,tM; hg&=X!2byHwBԈ'pt9ǿ]nBWR95xT()O4 d҆?`iBkXI 7\xOJ DͿvSs@*X(8]VY(''bSsˊV'Q{^Kßwܙ" t :)窫3k-IGՔ::(>{Tdf0P379'51rˤÁ8/M9& n%TPH`>G+/Qs=\U %O1E$<-ijL<϶%zmSy>UPVy1Mr!fk,^bt~J?'DUQۈqV'j8ӌO5A1Aq?GxtSvߟjPҙCyYؓakCKHm3\`W ;1^jIABi)R(bGR"r̉_޳vC71h]Lp{MУyN?&y8sCԂ~C3;;?gXRPv.Ϣ#AMlXj[[}(U H?etO XMA]I؛W:Z@8PoxK_ g-nx86P茯dy=SZ+?\=H;zqZdz!?ϛXA .Sy0 o#9_u_8~z=gQ˖qvsd+\zq]u-ұ(S7 +ךD$~z{Jωޅʆ>qzh͵ an?쾋'72m7nr~6Oo[(WXsO~ZضMljS'r ,.[GE%?X7F?o^f6+k9R (@K!ˏBŸ d;.L_1‡I4X8b%񽼛]\lΪi=aOT\xLޢu6Q^myil5wHض3; uZ<|!D6JiۜX/+>Ʊ~[ZwOu ~sgkap[^ד192u#'lғKuu}j/kr|!{$^GNOt(䰅hbm[[E6it2ON(f1n7nW/jn;w3NȆpt8Ӟ4cELgLvl㾕jsbok{Nb+7>>6M{eK:sn{Kkw]M 56׭+LN`:d% Jn W%|,{=[A*=^Gzt ͵oofY>`X >)9Ŷ%=uq('G!5rCD=*q MI4y\c(~Ǭ+"<,MGg~XSʆgٳ IRȈPW3WSH'$7"?1a0{9_'-gZ?$j{v6ѡBxX!D*p{j#gZ{߄ŊoPi{aR&Wvo~yWw˝/ξ_kTQAJQ  G Ԅ'KL7aQR$D)DDDUOIN}Of.Bg?'JUOߚOI91Q! RH([~ܚsxrrʜ|quX=u_kyֿ-nW8_7/4sHa9vpq ?CclB8pfaJ pi<$9`U,.z'=He+}}fkMys}(IvN{~NܯUw7=xWϬʙ+}UaKU%]["_KvOm{D$5 X?hB!RnߟLa{a*(LËN- ]/~%!#/_) `ay懳:Xym{HUo7^ `YXd'[/H*P#n0#g=φ^wr& AT>Z,AD`mIa0_t-*0@().k5^2c|dO_܉?/.rdeNvQv"k}gE^|^; І>EQ#@Ґ8BJ%p)wm3UGqjۢنfgׇ/74v$I:/n|IB~zQu_Sq;]:JO;蚏gWXwg#~9i:_?%]q0iv;nk(~ۆv44]}|E+{,+~?=f2wһ6h/w /sRȔ=oΘܛx(6hoN+@١JC#gQZ_gݏ̾SV׏~>/L7z`'5 _=8|?5=?KQ7D6UUa*^)C(H_6l]1X`2v`f~ t>kqWj޷Һ;ddɒ.Z銛mDlZo1*o[NF%'HSh;(wv| .@{goq|~Nq۷?>?\?/L!W-/?zy_??Ko폺U.\\5m?7]}OK~?(zhȌՏ;|z==$9=f=B~G!N'?5 kǡyqiX@O/4scR>E+ ?o፟s('/xkpoaw@dD ѭ_c`UA-PE44[8Ҭ(aמ45P^۹BoXjlD*Z8l̶?S>~/mڻywyct/E^ +zLXO5B+d77V7C|xQ Nmk0dy' IsvgWU~//O.Wi*?lex>=ubJ.Už]>ޞnv軴o9E>J)OHZc_EwPw WQ@՞kl7r}^7 Lhû:+5MUn_tG"[~~Ph3~ ̺_eoŽ,9AaTԮ s5_)M3e9rU?~z)תs7j|:p=nvR#jW8//noOEmoa{.~z?ߟU4LzT]|8lglyU ƺhiw+ +~]M=WC6z:F<|gIdlVujK[|Eb)0keY[% \L Hggr27eI2:"ڢ^=KG;$+9'eϭ"_N~?&u6֠G'"UWjab1i(h鏵,ݍ_Ϟb4>\cO#aic7.V^CښSk5}x`uf&Lt0] <7w^б_gzֿZokr [1=*.cO\{㿎чȭC}jڌV VM/N0z!tУ4[k1]-vr%nͳ<,Q>;ĝ].-{rv M#`ñ{z]lS83˭M8KFUZ|>>fuUuaRdf ?~vTLG#wsLN}'G_^, Iygf_RQ&yǍ,IbdwP-5TUDϣ俭mE}F9QZr9߿`»ϰZ24(vJh}w/i6+[.Pa _hMěO.~I' pvz [W`i4Il~e> +orvx$6|Ѧ?:ݑ'0|?:fm]|}ꢚٛjy]UUSEe 6VjCL,go{nv5m$z1Am١+F*Է趻k)J]64f5皻:q~Y)v3\|_JWhŝ͑:Kc\lYRF&],ϟ^F-٪2R8l7杜V]x5T E}Y-go u.?{q,:pX ['eRQm9)NM}:,kd6U8_TuMa-WW5_w㺭][ۣ{5Tn 4.]NT;妨he?yO4QM |Gg4[U~?uoZ-x>Ϗ%ys>ޓ:rD-f+ "߮;ƨk=.3=|Kvħ|fjv'5.vS=&Uh=TG#3iz tw_/{{W{^k^qůz*TʕTTRTTR)Y,G3|ћ!?O-b-9g?BLLN"%H?5ԉ59[)$4ʛ{gZZ#-\凈d ty7 MR0Qw(D/2Aa5$QFhHlQJj XDTE"UD •P{G1 yAHdyO` (qh5)v9kW0'5 !2nXC95fbƀ*!l͵6@V<]gX:RdG)f24:G9N):QPM`;`5&BrD:IӦ)w04sO3)T$2X5 ǥp0GZsԆx4TBVv@BivQ!+(4jz $\ݻjv!t_W292bŭhٺmqK=Dc؆ݱ̆@l`d3Z[t8L|9Z-QLJ@ێ7ˉW Hӕ] SBN>w6S/ʉAp_9Z#7$Nexm6  +1*=zd2ZɲvaM]*(I $ ѨY1`I")`hvA\S0(Fikzqȍ vjCTi:H]5tDGTog?fWN0C66ENmq ~C3}{}ob: XjЏJI݃ 3vwfw %"@j Ø FpdDJf!b54x]q%7 [8 H4h{9ݣSq)JMfH\$ bM4@wkWw4qbvQ O̠FB63R*1DhE~cIv6DusE@a"urw26"4nMe.Cw'fgM;0k-ڜ)?, I2e]jl94ua89 ѡH?Du?@qvgDPP 튩Jy>LNElOP(# t89h~RqϫyB XIEQ5I04\{f,/X*:YT) bd4XAօ}& 4cfffUYTTLUA$|3qQlr&o(`:?vcSݬQEDEPn2"Zjֵ ޵BO0^9O^76mj~hP%)W)(BYR$~_N0\?*BD((lFݨz%y۬7zlh3XTÄBa)h$aQ1Gvo@?1!럐XOsW?>͖GT?醓Ǧwbc+buEX3$P3fm&^ v 2FdiHG%oku8eѺl<̬Zy/u3,{91pa#X&HF0Ս-?2f"O _H(eQLoUzfuv!3񶧕!׫~ tښ> h/9M8U -˱v%E |UӍIc (ζV]fxuN,t^ϣLo%n~66YT̚\Z>º R3J 0H`w -\so~Sߚ/˯Vlqa͛?Mwfݯo<-Hm,<αc?GUT1EΪNQ]ݸmI IJlrХ#Ղ3([B,<+ 7YcR̒6m>ћf5w΂f3Hkruu idshYgXhɺ) [th-H]HȄgQr T.{P]0O,! < !̭Kxd]Jh-HiI9j9&H"blܝM2WM-o-f&=384틈T>!V8հtmA /\ 3 V)Hl81A e61FmD%fk+uZzzհad@YdBI],qy4-#ĆK*Ӧف Bt0mnutZQhƇzX{-D`2HL.CyzRy(.O<ደjcټ| ӁN'*4,G81]83Ki9ˑoȣ94GGOaM;8٤99kdֻN,<.yЙuQ/ܮʞĐ_wr$N8,H>fE16? --bnB6`D7=."2GH&Cz1J4k'\/ 17ntH@NVe$V +B㈕ .)qMXXClUH&!,/u:]zmW*Q0X2i;x.o@{\aI Rd aN\Ĩf8; [17KTgT,)#(3x$vw+5;6'S!" I Sbrt-ױR2_U'׹rt{nd& Rcw4⽟ۣ m)8ހf"fT!k8qy z*I! )7]"Fh 푭b3g!ˆ<֬c3zԪ f-o@@jhi)HNC1dz?ca9Bi$NIJ_?Sp?齊`?)2v0/$5"ߏtAq[_JP<%2u]V{f[qdF8|I $ m1YE8d<#At۠HDfd6qWla$ >BW)VUCMAf9 _l[L|";׏_l轩AW2]X>)<,ލwsmv>:Եl7PtGG:Lܐ գ̨cso'h$ R yGy5,.5q932RhR%ܒI<|CGOK]6;3"p4V9*0H$-|z$ FWzUU͘a9%4|dpf%6}ͤd$\suUQNVKBꐅyvs`ު4lpV1;E#2r>a͜Krъtś OuF(s|%>C'PI54  c`k1 g_p,f_AR6J%uMaO*؋{ӭկ,Hnqް8q< a!Њ.ƽEDw'aT9HEvs\5K9,8Hs+?:gA-^&Zqd $I+(K)vz(m5֒I)A4Xu1.FƉbcF9\s^+}stCՕ \#q2$}˙ Mѥx9p&ғǕ"T^ &9mM?,GnJ- DTdzq@r!D9Ձ_ce?Uĭ7kPLBF0^y}/C}RvGs^.\m>laT`@d˕ PÝ駆|*9 q ]0[ZAdk\P"7h)e}34IG%_/|/f6 eycvw;~[`:#͚(rQ%v9ReDX9E:0]Oa~XP;_1{_M/66U\!=_x蓳-r}[%Pߛ{_mglăLJ\u:;Z.8PɅՅP~N/Ki`)uHփj^Y/Pk YkVD;QAzTG$zǤڟbnS֦N2VΘ6st(+Zcn#(Gk4) n;ni~˵u]5B,(2=-04mm&-Lb\tNX6nB!x.ZhumGF,{V,_0ؿ:0'/DPʎ#L3&Kfn&tf ( \9ĂEE s;f)\Ԓ-bػzg4lesvU b|SEg`;M6U.+}9ZuoCsky\l;R/f_`q1wM9|ImCze.7ᡌ)*S_oB%gUKϒ$?畟\;3& t-F]E6{!Sq<6,']0(C4<:@,p FcR*0|AUvyçtɖeڄƋ>8a0|wwP <=,^ށP>UuՂQíqYV}s"{TN15u_ZY_}|c5ڗK{MxV[k'IkV:>"<̽r֓m~sT}6` kUlL*qXmb ZÔfߗ+w.esNxJ=obSG\ُu)76nEVտǯ-qiĈy pz鶓ѥُט|v8/P)"|7OA6t>:FܨYU݅ƩV0 W3ZyQiBC?V%mYSdL:rb6<}.n7TPqA|oG<]:s{D}ΤB1PFR%-T}oo*nE2 o bmC߲'g_F羣M/E- gUsm9Ju=GrF}w>=;D/dgS#_ow|E\gZ=zb)9IPBbu[ЈEeRK }zڽs&eYR=tDYr\5)J6wT}W21j~;|ȧ-E|Gm7`<^m}{gK{#=Im n-oldg陀t13Z\{j)uF30D/ G{ g<}Ы=$.[B RzS]|\v  눔r~DꞙaP; pq[0Ipʱ/x.{Q|&qDw;zqs{-J{54YWʫ߷H1:c}zdS~u{ioeo#.^Lhx:9Fo%-L?ܝܿR#=__3tHλbO6b3#O-M鮣=qYŒc8$*+C󎇫 ^9(~l zx]òZ2ѓEh:i\dC2Iw#DŽKfӚƬ:jY׾qE$5fm,\v :_g=# s-GWs'8kU~@Ix#m$MK\'AM`p?KNpy mp"X^EyL Xb2)LF$&$ H 3 L *~4B)0ҥ% JLG!ɡ@cKgc4B`K:3B-EilH-IBA?`2?j Z'H\38T@2 aa'8(kydo" ˕ C ߒ zI !  BjRpd"J%VRBU%aeFRHR!RPaBT$$+$$0@BI H2$ ʰ! QHHe%%!HRR!J(&QJ" JBB$%/i@hS"cFYA;AJ+! _.u6D;8Ev@"@3TR atJd (}"|0舁:IB",JĜ]hOF۶PY3,*i!xSaAH"F9l3fah*.d 1wJIRȏ`rWa =p1߫HF`-~NEC0T6<4r>h&'BG?Ϧh^v>Gb/`(ᆷI6I(sՉ;hFa$`b6n)ZU4ju2QNn(8L_6p=%&Ø C~MzӂP`E=;H`*E$(a *{ ӘMA]P t\!f16Ft4SChЈE8Qh~Y5.$$c0dA5cJ>`fj2 fbZbJ^rwen<(<$]֘51 ܙfKgо7{QD7 z(=(6׉ۭm~c<{wSF+R| TVVl'\;~|cW Y8^JK!~9x9ω7̀1HX>l a$f8\4zB)z>z?54e\'M5:mvsU m-V=b\{RvZ 'w3{? ? O/xn c$"KaIIe2p#Ω=nwe}.=ƃ@6S`mBd1=WϮ k1;t&cY6شȉ~H.~=`5}p_e ||@wS4m븸юk hESD 60+nFDQ\#|4Ť{[r{1"+Զ &>qyeDA L mmR~7|zxE"JK<(PK98:Q:aM2i'`grm]b9 D@*쓀RrHtwF@{iƯ Ӷ*y1,bݏ3μ]mۥgS{D}G˛yU)>UsY"xRϗW{3yolɰ#ƂNMꝶv͡>$ @U#;ذycgH*eHjSq~O܌ȳ&LV9C)osǤ:fȰh"##1Þm&hH%y^$w0bXG3[5ZQh P6ȯ'"tJb{j6mn: L2a pyoDLa:+co';n"(DdXc1SÌGBw9]yS✂8[aTxTf0Pq1I~ؚ8`8lm8c._Msק!vr[V;R^:8?83Ќ7~Cz-:8{5$Ue0w/`mFJtfݱե I-9{bzt\vvXI`}nA5*'CmA9f z $aʯou}ޕc-v@唤scA`]O캻{;^H?ٮ&E3 Gby dh%lec-~]?0~(4/i?"a?s.0[aî诳A{.R:dLNj$8߫%%he$}.]%ALn k"k@nF8C% \ ApwlRcms eBiTAq(qUQsLj*@äF4dΩ2D1*."Hbku-HShof͛BS›213:8\dor67r vl5Kno9Ê0Oyَ.wj )`7^=>0CO!6Hʛ)6)@X" 8M A j'"jA, O4 p2E0,MFڈ*~7k/wçZ4Fo1<M ]"l>zEb>5Ƶyd>&Ve'߇)ߏSOwRjY1vM6vhHWlBymz,_lb aL $P -1C@J4$@0H ܍&u_0%qYG M"q cq5)tgE3$ \fH&E/>jx!fuw}~H}sӵ:2aM߳!rC#00_ pU6In`7"fpZ'/OETm\{vfNS~c~i&c<}6͌!M W->:Ӷ;5wn?%޽5QGᦂ[lnl7 }6/=r`{eѣ ~(բ!X^q0/@pAHR$48ŸS+3Ah?W[Rb5R5X `r2HK1A58Sje$\ކŊEJ@nO/veO(y{WKed~ɧG_2=H4mSW~aA?z.B)zȳj`(}ngD$)FC:*25Yĝ>ޟ{kMlv)n7>@D[3{s#fS܇XUѵ(+qck|xa2A 2 Z O~1aH:wYvݛf'5 u2];J ?k,XR:SL)ݶ7ӷܸp>CS^a 'nh4)PmSď$^YUI w/n8Y:}UF*5ָފﺗ?p dN;W(׮]Hwܶ(zy~NdDkOyR-|<[3ͥ+-XyVlgϜ{?zUD̔U0գ.{=[v:?%;5RS]*)52J4=Ѻ8;.%!#Yf.~ )k5 {+[cL\"cx\fj-3{)2Xh t2C>`;&T (Fp̳+y9(wuy.8-LPSս 塹]ǎ%79ݴpӬnuԘ\VzBC86`~K̆`ۼ$v_#<|7Ʒ>SO6*o#j 2ǡd2(ƛP4vC2c&2fH(dE#<WW?Dv PD_dK0(JS% D,,BY ,%LUA;[ o7\δf?k ˖ 2G4hܕAfs!%BAfD`8⒐`&9*hT)6(@X(@RH4 p>jGb|@k;qc;|md'nM :]\85H Ƞ!c%{e,5CrwBZunfͮb[,'$ 6h$` -T}/tKoi@g΅1g,>= }It6 Ah͜aW Lrܐ3ٝ4+bI426zl0dh8y00.5H1$AY\VKʨd8kQ4!0ٕ446Crs>2okHKI` kM2t Gt."ʶVTEC dsQ#dM!|j(UzdxA/i?^/w`X=yRCM6 w]_=O|obL?`;}lЄш\1E>:|8|. Æ Tə^`?sozVl<*( D}%B7r.alsG/d謃i] cRITRv?Uu˩w;y2 h[Oq3J!ĴJL4L%LHM%#U*i*zƯxj!Q}6즙Q* u54p_|2L)tWf^Dtr>?9Ve "" ?ۧݸ8sX /W] z/@B>OM5SE?oF4N-5>F@B! t!&N~ީg}.}8=,y3 Rΐz8+CH?SIIRS!C?yiO 5L_vT߾jΈ])c:lTANnGՇ'0dDSnegȿViFE Q,RW'MHx3Iֳ}5^a [@n+xLOk>iiԐ1'YY4> V Q-~/,"O|BzG^vGۢ;A'. kwL}.īUufrf13hQXsߗ=kZp8ϑ{K9v|>^^Z2ଇ(mE/\4G;` !}y'I"f6T\@3Ń@چamQ3Ɩeh(VQ iv|gyD&h&(K^r׼yh 92pxn9C[no㡣w+_!ۗshvHh8N>&/A0 >\8JF*Zڀ0H A1W>p۴ZPy+g@dc=$n%[iEE CTRյ)!ݴA Jx6~.`k$OΖ5qkJeu3+Lg9ɭ73$1c]E$;&#B%-8>fjyDatM3+C=,ꠛ':hAWXnf)c%&0̑l*H馞- c"q:TK;=M ;-4 GQ5u!BmQEH5 ^,CK9_yMz@N!#$\dc^̕o]{+l[f-K]kV;)<iB 3p;G/'vukSWpz[ & jʛQ^ǔqmz3X:N>TOJ%gL}5-)`1d\` ZDD9ˮH"ԇK1;DB(K Y!jJ%V$w}}@P9ʡRpPطӗ^ /N9l!{4cpcի,Z]! EͿSèB;GrC{GS_'O1篷sa6.BshwJִ0E#~o5%O ϛ,34DHQQ7ׯӝﯘ" Ȃ 3*fHd21MUH12^p!qwdUl` 8+pfi9.讑 P=4 Um]vw=uSc  @哏.jbb!D:b^1˰&DD7Sf\RU7aLU uV1s$'\< #Bd贫;u~6Zϖoˆ\5_taW,-vWfDŽa9vGk]&G%fw5çuws .aG=MAVYMxNr졿‹1{走41IM7Su ڜ.m5Tu5Su>Sٳ-0=;)5A]be,;75Qڷ^KN7V3wV}@MoS>1_+kBߒ3rXt%Y#pXxDYO#aS8h`ޑNgQQq Cv`q; p@ZSN:eX">ˀ K$lR+4okڤF43QG]h`3I 3 Gm'ip?9ٳ''K7Ѿ)ir8<9g&=L<@l*_Fæ\þ2}K&C5&R֢I6[6qZJ&UKT$I%-Ua (dRUJR.M-!VјG.C@C: t_Ҕ ta3' .;TAX/x;;wvhxWGE>dk AJ fnRtEZ5槎:ijADRSaD~۹=3wrYy2r|DEҕ 6c1ɠx2C(6 6t.Mð@a3tܧ[ۣ.j$FgEq=N9ڼA`ΆAjYՔ><_g#2N 4Ȅ,a&0eDrpFbt8LM g̬PkٮfNA6䩡JwvH5gxZh9C7]08/9T @FYxά* Pk[zL8yX"|/[CzcX0<ٝ᳿=Y.~ J^k?N]/6b샕qYI'ΦT!iC0ҁy{Ʒ+{&=y>۽~]h㫟k?Ig^/-HKg9]7jJo&]T%.{sRNP#J6M$uCLLp˳5in*c +_ 7NV=:[Jk]w_Y{djDH@+H&ە}(9؍^([bWU9AR킒L+:x}hapƯcǧ U$ts.ȬjxOZposץ)tMsQe: `x{91Jcy@ywH^02x 5~/8uFRW;wI;wg;.N#K J=~t[f.W1:|)D&X'GkU;?K)…>8I/8$V}S7:~\9z wϿ⻖$D%]B/| :*r6 b8qNl)U nz`Uz-zOIzc ]6ƗTukv@ޟܷfI:6 dAeP$1SŨU@,6k"Hkc'6Ikd N0]G|^1p9{ ^ᗟmmF r; /vp`qÎ|pjL7&U >08 B|`HB"5jpf3!g`gVGp KC4I?>iƦHSO\:pLϮHxy ~5+gQv @$'ُBvHgWbfHZVQI$:O~~ L}paq7:>AD_z=pG&z`tY% k.HlW2E5u `0V9AQI9c zfk@=5 I?K5?/QKHcH0v. &MH@l$Bߪ[YW9@-[? Od T8C~n}=2#n% $Ox`J*3'YWR3 $GbG@M2I~/$=7y~ka>xC2'94&<@Rl2܍AF rCR94CH dde .??oQb&Rh`d,¿7 Čޔ`ZҕbM$^yD9FTmo0+2/K2sE-*A9c:Pѥ)oVFe4>ceȶ|c,1]l񓹱Ԝ.%icCBw7ψ !to=yw|3}P07{LDKQs\ {NMۿtza@7& * R!j #0#>.?XF*7nv5fQ.J>4e1RHN B=m{Yp%8>{5I-3L{qFjc@A8k\pmGlx>a!4WXI:v^wYPŀ 06mRY`uQ#HD((PaDDGdžTAE%H)F F m w9^X܃=;;i/k{֍^TZĔD#aX~K$|'g;FWlgJY`!BKQcw3^׭;7y-mu}sst8ḅ[iIn;}N\Ud#+lnXr0,Nc$+1[woN4a.nÉ(9Ǽ#,+?}oQ:,9T͍LOE -PAMFD Lhvd|/Zb"MMZRhퟘB9c\re#v1~Z=K>v8`ጂ,Dpo\*,k;*Q_U?6{8DN}3g;1UOm(rz yυ,/6| ii^XƕnD!ď%;G.!A^2wjH80zƩT3sm8-I-؄">m[V_<|ӽʼn@{Zze^-f*Hu Ew r!ݳguedStY'ݝ-3 ފBf ʎ>z.H#UCu%-׳dN]qฺi|7?]~RA.%C&jf =z@vJ@H"QWN "nC Ж fqʗUU:_.:|C@tkR| Zes2Y?|C8H/ԈLqžRxu R;((F4SUDUTQA U1LUTDULQDQU UUTEW3BB `C/Q;i\x4<*@tOkZ('~WpI'M2h<䌟Yb?BX$2t><Oٺ"*e"7@LHT+1_%TсL1 4ˊ@(L4Qu")0z)q Wb]@Ƃf\`}.c`#BCILGɠ䆶`;0B0CIBo/U'2c(׳Y 3t驱]R'5I6쑓iew!Ya S>%}&2R $$!CLqAɬ)FG]u.yH}@:Xu|ZQ!PRUO+$Qى}Ȕ ΟC>i_R.K0O3b^g j'wl~UDDH)(-{E|u,>اmNޝa!Ms1OI_".}Y="HAo2Aoƿׁ! |±H%h;)?U}>1HSJ,9/,G+taiEjY4X{Q:"dV#\VI3ռ#iJ|~V=p$X88:-27cd@9&')&6A\qz,#v{2 ~ v#'d *mp1@B00]L(p5x5oqE| $$ &bj`RO*vЮd$:J~PTHyC0" lN`Pxѵ}.Kxl@XaIN^~SsFNs$'4TߺlzBI*44z8_/^ruݙs3j#>jD\>RG0KmBpѣ# AKadQDH#R *`A0)22Mn̬rIʢAY,"uY( eNf;jC(3pϑ>DzI]ؐ/d1K~Y2?`}GmPKDb)(>1g+pl>]hFQ@A)1֩LԚ)B_`[u-P VcPjFD8ܑq,g ̌'ʰlM"J|1MM~Hɤb{|0G`T"Q3vU`ݮ Bj:DӒ822]1C#yGC7P709Z[3I$!!$m/0#d2|Y09f*Z8fR,Fi mmᬠFd$tɌEFQmw:{$C)X RA~Z$g1v|3?s?dGuW0~TQ2g6ggBQAKDQ$` " U5QKTM4UECII%KETTUDI-%RMoճfk(6~H~cL׊X"iM&ffffؑ38jBGdpbG+(1o0c$hG΋}3|(SZ_ԄQX_9 -2 #?"纩S? kC3A2B*B _?|$IKUʽ͢5'1oLYQvR҄uR Ga{D1!%.3F͝`4)pDm8ё5:3ATC,vE_g?=.E-v)51O@r\ U~m~bO:hbRt]XX! n H(8nʸ"3 + "T0A͊^(T r0NN, Ǒ='}Q$2~ʁX/׭'z.G? ><:dYh@wd;f9~n (^N ̇)HZ2c%{}RX^(,{M޴{y3_oQ26H*+ d9PT~tz!8Жkt-_yt]f PU6&L6YéB赢 Z)S=&{2L0p'qUU$L d9 ,ONy<+(u6D嵖΁mII{yܦ\a-jCyyd})e#Ty2£9NA̜bfdҔ3S-e+_+E"͟E3M䒁 g NO~8A0B 5R~}Yoo-LpPH#y =R^dl!2E PUN8?z1HE(F7{g>) "E^Yᶆ՝ X&k;#RmA#KVk:NANQBw$}i>GplfNH%i|aYHcR(A->oi! :yۦ&.b]0'e@>K~-u"Hݢo*hyhH Ƕk %'eDŽ3?$:*QE )nc˙s+.Ku1uW! %hֈSÌ`32[Jv6嵹d!N%y8m^"wghlm N@!ޥ**O?zrr<ߣՊcx7s1L]psRU=N[dӤ#$AX34yѝ\"GTBL$?lNnΧ>$f6!B)>j^Vi`ct#xT2u8M t!DI:XÌ;bvHvp:T@lGGO>:dٽ15a>"X;nn7+h;$MaGoc|U!2q:)h>(P*2_#RoÞ#o( U C&#ee+! W2q M4Zc Bס޼G 'wYnϢlQG$; mbDĒJ"(&G,8ܒ!2SA"dljVEaн))T$LEqOK sBPaAfCd)B/S۫.hc 0B :DS,>?c}Si6>>YIoe@wߣg9ڇՐțvo 9J~ {Dm5k ~_Sd Xk8;x }%1&Ӱ`kM;C='9%TT"wxԪmB-{`I3 ,UCDx nDTIqkNm愡'h'oP@'򍇄>0|3dUY\e &˯UrnB~dZ-IX0|dlfW3Z!MBAip۶,NG"z T`{A*,ZsCZ̒9ar $proS@;{5Lr!D~鮇y"w'12YkЛd0ÔGBvqx#*ԅ!THa!e2W%_h?7-B;|)Dd&dfL*1V0guh j3e,wwM9b}`MEj Q?$qL 9RX)T%u9$1AN7[:]ꜛXο7Kԋ[kV 4 P4J"R (4HJP )@ %P !H@Rд-4% @R44 "ABІTdP%B%@4P4B҅ BPҴ!Jd@ @R҅4 BR!HRR4(R4KHP%)CJP BR%!BRP+@ 6mI RwbɆ!`AE)LQ6}!(KMxiR7LtCa m+x6 c%3_D~皑>0U)Tpҡ=w,踌 xPM"0r GUZ`}2~TQ4[;D0H+ӑ|} PmEp'Nx~RAUtNQ-45I#OE)`V钬uk"Ԭ̻w1TR!†LӪKP#i]?Ǔ?K<%sG0LOWkҰ*t&ux]tZ?$i%Tƛ)-mq5H:d fNА/9%޲gpLb6˨We(BŦ%F9zck>N5i75N 0ԝ,Xڠ1=YB5 )PpkԗL#`YHJH$* be:OyhmLfv!f$s2h~2!1C0_r8`LfJb r l\ ~m~hqFHBJkc?&{P8l{dDI &afT;Bόi,#!vfCn7>P/`xő#{G$cJ9##>? 5C؁WJۢ[3±I"$j{YJgaa 3P9BfHE FT>pbfn4 ݞ9HC0Ɂ8RdSgZ"!ݢN,FԲ5n6B܌O51Ȅ|AM2 +_-"AܑA+$dDVvڋaLq+HH~/=䈗G= ㎥65͋A6?f?aƇB&<QKu,: Fbg>ϓyt`#AR "GX $$lD\&M"RmC~_$yIAkZ b!@ Y Mh%1XZj̒ 7vFuO]샅|zWQ'TD1 hS‰XLbgH@5Bjau 蚊C f0hQTƩOO_;K""*zʅhDX{1ubdmPE1rX,z"rv#Ȓ'2O\; :L'q0 8ԄDI>1pIU5=Sl@1{Kr䏾U OAؿ۵< =!r yEǠEte2"]> C@>؊U\=#|CMDPO{!=DLlt};P=Z݅xm J/̞]W`@p@G3sĭTZ`%U'yk}4>YY0xE/SW'OIvS!QXD=Q+ͯg&T-xAyhLvIUE@ fTD  I ;A4=#mdL(j( A+S6|ja/|Itd* {@r $7~ۜPs3tS~#}~Uc> ;?'2$蜢(7xzN~?Z}N9?Wz1aоu٘?19M:5A"'BOI*("* |jױޤBTwO]Jg%aU/( ] K~+]Y-?b?j 2B@ʳ? lg N<E bp%.?'AJ$&#HK(ROlkCtW O)SZHDdTJE=EQ@QKUE!EUP88KڟDԧ׊iKB:1 ,_&^;N-48(Kǫ?>uX(w 'h#09K=YP%eflK/SŪrḶ[?EffkZ&iۄsRL}?w9ՕO[Cc 8,ci>^QR^)fQkl|:|m4:S;oH&JТP)ނpݽjmJ_ʒSA<۾Kp)/I5z (@C3?UEP̲,7t3Ub_~]vL)Ř?Ҁ; < t:>}|0^vN)x>k}f 4g͹>Qh_^ia$G,B/eR迾yM'D#aceʟ賓8bCH]wx|/8f[1M|rcDFnۘ2SSVLfAM*Jf,N-m -(-I^؟9' Qy䔍ޯט yG\!)pFdM?/ɥϴDYJ;d8#`]U!!p:ǞBC.r)mB:(t6yY_}kP5#LCJ3] M6S!fԃ /gv΁E0LPo֓*\-~S{:(!l {rfM<3݆=i-#OsssiV\[iۙ;:mO!.(K{]b-)_h L͖5j/if.dA $E%%NO??iI]BgCp8N5B`pLm,=.Ng(&=@|:P=.;9O|1¹Cǿ 6[+z0|\ $#Abci}}X;O HQ8SAdwp80Lý} KC" ~z(9-!%=z#BRA,P,pCՃMh R8G$`XdX5ht7Hjfq2,BaЦ \ZѰ &b ̠X$P~3G!B#)"4>)ިv}="P PE¥6 lI_?Zz[شV:ňw v],llpxه>%yy;XE 0(q_nA9J_3:}b4$XHv;D٨rs=a$t6Tvۣ +pTE.brWS5Ԣ_A3ƳZH@(> 1{͍VL"e\Y!مG h (c Ĝ u@!u VˮkcRȕ9t2kjj)*`c-/ lvbD;^Z.sܺiO4K~v_YX޲|^fa\KCO0G^jvQ!B^J44"Y^m "mq [kѩ Fz"Ok9e׵~Ar2rhF;SY!(%$`Z?g2\|jB('†` I@ $})[+7hLJ+/}9Rrvj  &`w1 ,TX*Z!& ) rW# TLf%j JbDH%bIHfj$&"e!&*Z&h&""*D")YR"b $e$)*H*&*hi"( ""`)(b!&(*`XJ)!"V)*JJj&J&H! () H"@ʪ7xtb$:IIUdАJI$6O+(əR6,7q^ĸϺn ċA1}B`y`- )Y@K~OA Q@;<+ǃ s%=F'_M1\}SBd <]Cm<d)G^(s҂oۇJ֒Y_E9I_+5:?1= ѓJyupiA?ߞO>Q`U[vQlS HL'*of'IATE__]p3|Ǟia)Db<)@JҸH@ja8&p} a bcIx CZHDTT'h8(R 4b8QLBچm}`!N}ق7n$HKF(! Q(ZCn~{mWH̡I᯦YD(R0RICT~CJ 5d6bP #I&H`&)`qw4l"Z5= g?;%3s4DRSҀ%nv+ aGhI3w&ڒVeaO>Dj >S1I{%\ Ae iL@L`bT(.:=\fR?oHBe7q+۳L(O"3̋⨕>{SPLHUA)ER"P;_nPa}]vi-`CyD`Q#|48!Y`"3+ZQc8@cε$SX4\J4#AlwÒhv` ѥ7#`JbE:$PX@οp7;ԉBoI0ȵ40羅4 D_2tN 9mXfTwdX\C1r@KE3RR_, jZ!#2$Rd (2ˈAJbCb"CmM $qf0yq֫CnuCvlf%g~hbB@0!  OɫdD1 ܾрyD#A8):o=C!P9@D C>Ps^}L;!c*PI$+W亼k!,/co0? 8C\PќI8;]F TVTm=gV"@]aDsxt$0Qҵ->25ܟ|lhV.d`0dgafJN헞Wo=*JpQo _g@|\dvc5a(3mt/[D@_7] 'tD8}` ?.w fQ ^l'DžR+HMfN!Gy`zV&Br"`u9@t "s- ?yq(}K>G7+(bK$Be.MY-D}>EB!z{r`hLNR_(ޑ4{E ~Mnxk M 1*vZa%Y!!JVbz=""9᧔7 +xx΄,:¢"Č>K.+WM @]#)qA;~>6(^ދS{PV+*˖r8J41m ۃQ5(Jxua})HN#Ը"\j愅^ EhH$21s;{.ɱWS><Rʐ ]m4fqEq--(P!@4 27)QAI {_{[t[ Z b{d!.,~[BL~(0~OT5݊d{8ɯpS"}QP4ߍ (3Ep{%WcP/?xV]:~ En0鵾JT Xb*QL;?KA(vw-9ŃI'SzHy( Gf@di֋0;M#0\W=]%b$^/D!}ǧ9K?բ}ώ(cqxaO4bOL>΍pv|m~I "$- }]It/g }pC#A <ДbƝmY˦W0UJŚU䝆AIxWgƳ\,*kƢ(,5KCUTrf&kF<%18ɓ>!ƚ\LLE >P#`hȂ("F-$G@tW`9KGm1 $`3 L0bB"i(F=ֱ 'CՆ!o ap)(!AhpLhJl"B])pKH[ P LRâ}aZḩRo&y;Ӥ 5Re;SJbb;#0S@iL4i  A :J&y鷖 '5U+`F9@sڤFZ46ǰ agN@FS-8/x 1D)n 2B`'"Pjd@(}d b7Xe?~w1ؓr~ q(`U#)G SBnwoĦ G42FJ8ҦyCTA-.xT1x41_|%:5.2Fak:uKtΡݖPLʨJHQ9VfEDa9!)evY'8()ʓ a! ) `idPb(@ R?3L Oz6q4on//@_6Q7O~0mMPl^!#RF1BjKt„.J~i2%=r!W#:Qy L6~Z\I.&86\oQ>Hֿ@H>%ϏקpØETy &䙻Ϝ߇DO|'?>61IP>AgGx-CmMsL 4`N+DD;?G> Wg8s<('5@l "o{L/O /W4w]^]hHXo kDD2C\.ad-q15s5W$*oYv}s?kȋ0ɟv؃ZhYC,Hڔ#"0o~ѼvN &%}i@Yb"\RJ +S "NH>yt!DAM4QDDRD)R,T$@H(H HA1Q1DMTLRR@LA5E0A4TT4@ID1,M2)5@PRQLD@,L,"@s[ ޣ$A"H?M3.[Tȝ"⯼iph"KN%aFFC"6-gkOv~L,L}51v,V6iLm"c^6q41(' dSxIE@`R1Q 3 $ *CW0$ab,&(I$40钒T``TB+Tr?=@_I|$keOQ!UΌ|ߏ}b~i#6_7NR@"&Hh?rW\dTr҉$Mυ)$~[Of 1)_]QpS-L` ^GB/G`1?nJRi@X"~~rxI'>C(DwA^e.?Qջ39#"'H㺆%p~8C@~L=^w[E_^S%(fHåF fQP#[S){Ns$f=56J]Ѩ$=aVsEȤ`46Ș}5~zt5֦st6Ɂ&`*mNJ[F~V9/BV:.T84L#)yx`2)DTK- @E6jS`9ahw_+N (Cp#f ~:lpr |\$0gp"Q-+2nwD=Ȇ T!MȮJu7Hxl&a4l(s@|^'Hm;Z\ Ră0M $,_1l֐l%c'Iz8_1ndES02c0q,¬ <)ks#IoϘ 7U0`)s$!U'rxʠ)d ̵FV͠Eo 6~10]0e18>WTwl)C9H 9oflZfR 2ewq64@_{Y7sԥ]|腊@$`2|/;_;iΉ+ 02ces||:nba@ <AuW:"E;nAC}Z(<{4j*Owa[񤮉>=(FXbZs*dB>',˯!330TCxZ}Kag ດВK&J$0mHDBO M\#8jk|Dݎg؍|_$6"2Z͋D -t9fYޝ9Ru&rkJT:Q`.rZ,1RGwnL.(7E/Fwoٮ})Z{Dv Z=&E3°GYLg q|!eI |tN|PNuOѷ}}mditY/\5uX-,B Pb(4)Sk{"9M B:gCDÖÅEFʉ%QVĿ[<0$B 7Ɯjѧn}x:^k# h5e(!,zJn>Jbbő Դ lcS7hFzr./KרmMx%kマ̔< S;0;sА)}@LpR62"9hH& Нo[CIs;)R;s}٢SM0A^Ǘm)2ӔVqD(S'+u}Ή![2ɀoc2Itt4 5L ƈ+Tn38ɻyY=YƉn~gRv30I1++8$,JY4D&6B߲/DNK!:VD|p^p;pߓ0&a#k%H!,EXk-wD9$:ND]@S{Ɗ]y:1x!Z%*HgBW ^iIw@r313ƑU)0=9˘؉$BPKkJS3"gIJL5m, iW3N͔3u+B11;T`J4۶"HݵϗkG-:rR  Ẹ5ȼXRE,8F%R/A8 ;0},c< ۖ9Ҝ<4+1{mmSײM }aP:kJv c]m9,g-"ϴX:bZ^#j1/ԩ)Uz4vwg;3/wd4`5-t!JT8Xם"9v!U@;lt8qPxV+=3uְcӱ^fymrܺ3nW1kna3Q25!vX @ERĈ -I/bɇC.fw'Alv-8e 1I cxqC /'wmN(A$&~nBtfȍ-g>l2!TeMb E}t|4 )@gF PSJNmHt%Pg)}:1zgd%h))@'Q&<-zv*_{q?՝Y vpH`tb*| ~WdY}MM`,,\dX$Df2`z<< v̫qcMpS/]vBRͻ>*+?÷Me]tElʜ` 8OW:5r+(csdb:V];R+X|R6Z ԄERbo)ubW*3jar _0- _w9љ/:Whr VZHd2: A~4v2rG\;rߘbCW6b61OC V#;>oBݚFYNw rod<|sR36aZxjͶ;W;u<49Wv1i4At7'$u<<jyycZ kv#Ӄ&:mÔѯ{'7ÍC}I2?8ҏe.TM)Pڶu˝9ڏWkNIMn.=\%qb{;0P×W !FQ3dc=&!Һq+ ~Pkh)DmwVJìot}ø\|lLI28:0n.X4h=#nbt-ɣ4qN\;Y{;m*,P;EȆxƞy ڝ!78;˳N9\M)ocz4!0ɘ0aLHj)t$ڟbceӡ&$.;a(bj( `C4ZF6Lccn&p5Xҳ!+0l!Y []<)9\p%Md Kַ:͸&3bi ]=xݰO ˜xO7Y -F'(P`axFÜėwHy9oGYK $q sH9A"EoxY ;1QU'L0(1*([!LN  d32{uo [SN|ui ։GLâ;y<tֻf7<Ĉc@<b *b)A%/kA)zpm!53%Q(r,;'9Fޡ 9r$V*@j,ɠ HXd1-U:wL2.V3]F*L JiiպjkVOfu!Eu5.UMZ.)V-ĥݫa! :Ў9L;)k* "-^= DDAv;|+YbdE7fH5Mخ 7 صHp)p`8nh!\l #)P5Pe1F=Ak1(72Ԋ 5Z  tuȢ*L"a@Mt ]DP134k7fHK6M& gXKI UDqPMDDq:E0JCD@ Ho r["_@SZ:+]@pH#{A8Q4.Q@?A,Sy`c=?$u¤F"  TN)ЉC0Rre r{XD yN5usyمS P>޻J0 b5=a9<MDT6B)0Qi#P M$zi"t`iGe[4Q7%ȁ\ p)u ڦ"J0JX*9R\pD7R] }4, Et%q&6hf!BXZi 0` 7! 9p1\ot›[<襃8CPQWC`پ\[rZe2HBL%‹]50i5  Kt3^.By0é "(3 L϶vDt;uݖ23W]B )BQ$RB%&k@E(@Kv HsӬIv|?H8)ދQQ]Zf3x#ʰm S۞IoPYm`_Tgx`="qAP=iWv:!` yӗP}Uя̲CZpFr2@r%*A$h`$5#(( J G3f0q(Ăn 2ej9lWIPptI&29WsDl0 y<2${'#{Q>/g#j f1lq@#$$jц :&N`4 ,EAt3N*WVy3 ,/&\IA;XҪd0N RPmd ƌw~~þAϩH 0#/~Ws?gK?c>hbc66I;8)kX=Sv' vA/FLxյK#!rZh㵱oy |W=O~}}2|m5= ^)\O_ȸ|6+ 6O(}h Xkp'oNJIi X%"TH$""X %PPP&HTDo&ksX<~s%UU%")˕^*#ڤ#UTTPD$DC2#* )vHv"ɑecfim)%`꣉H$[OXSԑE+m4{UR7OY>.{Ib yH`B[ tj̿KDj1aRļFvwv|z-9t9.n[@㡠;&8yM5wqxއkTǻy:dH$ $ $L0-UAw4I"d-[ 1qkGL&"A,ӱDݤA󈍃  ^4d46={Np˜1=a3+mh 2F,`J !tU9W>H|䤥@ʬ Cxx$s<'~ߧr%>K/+!YOa۵$``W9S ]".8JT(ތMNɦ)uPp̫F4& h8P*1fJk07[Z`@JBzy[12eN3@9CHEN#%@hLU"( Հ@@xR@-Jr!甞]>{>)/Ab&$7)F]A1EQ@`cЃ§/HE~ژd B:VQU2x"*9gѩkwgqt$08y+ Љ~4o9)>Nt{=Z"/sT_:@󄣄=B$g zvAkאkLqt6w $evdA@yQcq(k)+}sֵWrf#|K$tDX&;*kMr%U=zvf5'_4-tJ+  P]ʹK$nT:ȊFVzw]jX8 )(e4 ae5̵Geie"K]8=9g*bE2fܵᩌS-57K,Ӗ醶ixMNXX 0nr#z G&70$0o6,Lƈ{ z@%u(ĢҩBF =9]HJ`)Lsw)@)R `^hpyMʩNfWm[qL!,R*tU U4h P+$2cc;- sU\tP!eϢjZ*>d]NA> EZHj&FSi/`{{ փڣoq}S +t@6MXLI"lVDT VP*%%R^=I: bXv6/-L.c5RBUWJCxl.q:ߟEL< ")J DHhx:gIjJޡaoVIoI DP/.؆4 9],ѭ#4DS&b-V)#+)@4 PD8D0Q`SLP.oh bP"#Ti 2="w̄QH@ &FCPmPo4m>S$7SU(ю*9:8.=M03*ݹ}pt-XFF(kn1<DTv @ " C*<0Ͱ9 Ju翺G cKF2U%mV$"0H %r "Ar\@0fFfȴl"q$%a[KM&Q0 n+&3A(I CJ ")Î &"C(6a)7hTݖW!g܈DPU@ o#ZM/js4)b?_\1% *-b<`" 4* ٧[1!7޾(ÍD$8Tg{ Pb.P&N]yڅdyʞ G{ hAv=M#!9Vd53J G4zc_ד&l)%D3-Ab~g@ "sãHla$6˖C6يPpT\D~".)D [8yB`@GU"54*m(b_b]P:xy:u8Bn!܆OK粫b=;(<z}wUU;!/9էD|`IB:VV"zdg?}xǁ  #m[ak.2F.+bK O {ETD(/,J,ϋݾgW gKS=G9 aC ~EMg H3FIvj)P?)Ծb9#9 Ҝ]|\Rd Z!2A{ fp* 9 3,ZgLRh TDSBIf=3 DX*'a&>>=,'S0C% "wo'oId)aAHNao1՘gDJiH &^TXRR.LBB‚܈x;j(x>[,s!ԗ.}v ;<{s]zFCL!{B>FyD#&$C3fcv~W=r~ \`{)}!+7jk*odO/wledŗ̐vS<7Gh&EC{1[&Nوi\,Hn{狀)Dl"sBy;b:f-  + %E )BE( @ H "MM_ޛL!A,OIbv[` 敠8ԋX!'`לՈ&܃8US4CO0p;$e((Zolv[8ØҊ@'ly]+&tdL^@z1fEQ %(0mbA}irmx-j\bḊ9nXq#Qu(d4X\aHInUorü:_r xrͦtv='rud,tJE 6Ni.W5tj..')" 9a L;>:E=k9zbӝ(=3tMGü5%߆DW@M瞘d 'X6(``vǷuIb㿨FdgL d3lۤfcӉ܌cz^;-4?J8#%}OW\mOF*t"2'H!8 bi|ȊhYˣ'm bmr (ww%I ^%5 ksbSF8r)Ay0aEY1͝"4Fa9v`^4>9P?!Ð 6cGC"AHrDR4Er{;ـ+{=vU!L GG{B@ D@c4 H-EWTs,' JPa6,TjI/0z'2ЎY[9֕L]܆'TVtRiI".$?r<֒!ʨYZ[~ <G 9#Bc'x`~âmnKp+Iܥ2(dݶzi'~QBO ckhuc>ӔhۉYyz51뽣L g|4l H5-!mVG:v|Zjζ`86!u2AD}pَLzjΧs_]d՘øKjF 3 )7hy18Ԇ%kƎ]wD CT& @n@9+L)$B{^B4?RY/NVrEdFY7nOcxot՚{qȾkprM\4~9"-&1W?=䁟{!6D* '>0}3@i{jE4?ͭ?dg߆RfSG-&Vti.i?#5tD8Cc'=ê TK".)DFOi5)qWRWRdM"E,DhݔB3f, 0ARHj`IaVQR%Izw{tja4 !hϽopg#X9@Yp`Ixe5u;\k y_Yz0„1F"B UJ" j_md+fi/Qqp3W`#H[]P*⌒̗OMh^6)!H@79M+'nܰC䡐  $Gd)2nEPJ?\k].J[̳NadT~HҞz(pFZx%!JROFlk4,S$)"7{𙀧!`t! ER rt=W> NK5׋<2/țk$U8@3ǕL0l`jC4`v'%Z-ҡ3 8j)|W s`[2mL fV TLˆ9w)1="OH{DRVh;:4q 6{uNJaJ * ċ$r]ڒyGU4f)E3#eiTܫdsK#zFW)LښYfXQ;b&ؚ7 H"Q"&JyNcYD -B-R%elLBRX9vlE_!P(rkmZd\g")?}hL|&A10 Ƨz|>U}A )  T@,\XCi96ג*ϒJicLژ']eQ :y<$ET =>'t߸4l1营 ${ƒsh{{<|YC-?-.rAq"!4(,%5䉞a˘$i5`abiX<ݳdClTkߚTUhM45AdHj=ٿ6 Rl ʪ$$a?3'?1@P{8@3a`2l E,*qWiD "\ag: T@.qtd4밴ʼ!iP?ӧ'>LRLBQp3 xeq] $I)L d3@BRT&0Y @0  TU#84=e,J;z},@BlBLifϷOYM:MZ~kf}RL$n.5#G"rK{ |˟ɨSL5SY#_/=+D.eQM[qxBhePriET!SX"BBJ5֠DR )1M'I͟`SO)̑QƇCiiDQ]>|)xȯ4e*|ǔ4ԋ1eH;V`~PP-CsT'1PH Hd}tA.O`;EBW-M S|JPC D<2NS❨cD?nW岃f?Ɩߍ?ܜ8eɯ?cc@CXzD IIkADm/[7Iu6в 7Sx&EI{)[PqaeUw=039H&8L5,3j#(sHc+ @Bb)Hnّ͋D :Lߕ;ZXZ:ԏ[4ј:Dr)B20­(g~2lo`d+y/;fm|4X$+E"> |12c[$~t{z !"Zwݘb%Md!$$?iXde5 %⇊rH| @=)AlrCEIzJN p6`!('QCb(|; C0q˜FE"Ĺ5)%[қd+{ d% ?3mаlPz&17xxI U ) !sIE>{SwTL!k_ɌiX0fR5=4íG>kmڝMDRh^W`,{33&P;/:RV)$#0M>*Lzfg+/nG"J*RH {BQz46,O7NFL J3K;3)!Ud7f p&񰹙66lLo@`WS3H)fVw8aeP?lam4ͳIg)[3y]H}Nb- Bih aCGJTuIa'$Dc 0Z1d _4@i@sNsHE z`L$vu&͘2• EP8A ,z`{MG b`*ŕEbA66hN٘pƯa jUTܖK:O3bxs+ 0$lOAf 5S+D!'Z 1RT2ji `<-7 GX[W( uP9r(PwO}4aE.6-l*(v5m(M$2hguFLVܹMԁ|l "Fq,(igg.nKMqˮ5Ŧ)ʋaK'n.vČKߙC2t\=$0ATg3*};v8?Ta|f&>z3~CB\k̩c"ll\cG+:T[[Uy#}6\s($;M/|\N{^lG$ML8dmrϊ@j-Na@>2 hCf'AN 7Z" ((qp+1L+,=!rK X*h);!̛9'g&y12rsr.wCz\MvtԢI8I yhҀ13af }Tf^f0qb$.!.xgH2oYgaqkȭdݏK!rt'ȓ =(e΁]"vf_ wp\7[#' dC U{i۬K003rR%rl@.B3VV*%PI" Cb"ZI%IAAfP&Z$(u4J I) f5W shxǯbwN rZET|πoPBW*dJ; ~ \ ?(hA{$ 9(qQOf!+BeDN3`0y˝C["Wn9Ro-cTAԂ86d5 $!@ JP}0FCSP:;v$QhS\u[G᠇GY !ޛ y2$!@LE>Ƀ% ,ai/8+S#I"D&ٱ!?\/AK^L4Jy˥>h::|O<΅$d O$T"*=i{6JL9gi~G8`=xJIWFT (7mtj}w7@6QԊv9~ )쐨p Uރ'X6J;U)A D}v\Y>Jnqzeyh!TC%AI:Ɠѕ5S$>Q0IY #,D0ckHY9ǺC,qgAcΥp Ĥ[4T13\:ָ!~ PGj0LHGi4 \ÿ! {Md2u;xK7Li $pc Ja J* xLGC~{O]nJeP*JI eg,~Kĸ$:Rgv bN?v+Ӯ"YMX&5ǟN*û8ȋ ~{pe^ %3I5@لLpn+e#b&tI t']7ŕV[#7 5dImA2^vesa˰e~9U0df?eƲ҅xGEܦ3aQ&FHthhspreHxq ;;HM&b(4@olH{|48o6ESϯ'<8)ޤSXys=ID@Tu{=UI1;k#Aʞj(tucrEK+CRByGjOp!)DQ R4 BM#TC$*@S  " P()OH̗)-h3DŽD{Qf>7a!a]@yʕ@4`@˝Svǻ+aʍnВZ~|5;]ДC-d<̦ed'={}/U,sInJ^K)7  x7Ս^,ۓ-3xq˅: ⤧`Ӕ5.48B4_yoANmF%rrrY2spd"J)D2DҢ*I@+@7LSIp@C+_Y ;ݷ)C̼_߂ =]*T25a0 |v9%KqDU; 5"ЂHTKH |&@p=QϺ+6rE=R,0 2Vi,LY ވhe4-$,!5**BJ(+&SKF'1&%j.`Li @!.0StiFB쉓^?F@ #x@ELw /y|zϴ fo&17#Ӯqax;'dm0`BsvMsXVvm9 (`A PTGЗlGY1ςv޺!F ܖywz:Ck.9|N^T'5٨R*Tl*F6d?xed |=RzҴy@%Z`J"a8}#P+7>\RGׇ7#QBБ'AHd8K˘3-%N [RaD8SH ""e* .9%(BpISh߀3^,Y R~s0 MiX. VԤ`R K3,7qVZ675vc`'g٬DA,Yx^IˡF@w~`5p'Fu$G]#y3?fǭ0ţZh ~!X`-`\$BJ# `bR5͡qjB5 A ")Zjhfب4Yd>u-X@GL00&6cg(jgA'1x5wצcD)8f8*ZbǒPiTq*M\3D7HIOSCbV+tv:u@鲊iəUX&TPHh!֏Qv&b IcI!"g]\<{rj,Hk5\HɝC TgD] ѣZ6)$a1^R7=oH!:CRl`o7 4 C@8hTr"Kdi ` ?1DϿN? beŁ 'vJPSD*J(i ʫٷgĬ]/u0B(ELcZEސP"@MA :yz8Ah|㋩Ў|qxIkC]ymwd:srMM8Q_OĐQH 1 CDE42D!@TK}Š,i*@j0 D 2i (=9lHI*h'{ #%>Hc 3ry7zc"Gɣ.`N:-vR<@̹&(_W֌oϱf[ )OcTb7gvc?V ŚGO(>{ӖxLn4B]rh2,ŭS\Dc=[j@u`oJw,p  A! GƛGFc:H<<DDZ>MWG:l0Ϫ͌ U v"OGe} Xq 3Q<m)J$>3߯,M&ˬg@$XcnC3hČ!wf&#;rS G?lD6y,r@nuvDJs 'OZ嫮-ŋtz0 K Fb8d[dpm9A yrBdSv@!g9*CM16Hb➍>NW  quz8hq6(B'ôMۖ:~+(9ϳ'RNQDG+ϸ LT:t3/D80T01bfeS eN)"bI0 E+ALJ$4g" X& c r԰B0}Kzn1D"Ò`f~Ipl0kN-p;$\4(hl`m"P)$ ,a dӨF a58Ŭ0hp$I"X{hwƐ.sv:&B֍Ph3 X(఍!92P4r:|6o;RBAN ?3Zm`wv ؀w~j֞fZ} _*S~2AHD0SL&́G#Db~_&/ Hפ"Aw2qUX1v"?gᡘHA"PB%EbT%p 74J&"Hc4/8PgixW)HJPHd f? "y"'{ac9Ͼac9 =@SMDћ7H$# -`U|ȢRqb*木hT\3|QTxw#'gg6Κ=$j BDVnluRj$͇0i}Уծ}|gul(l+?-\:J1Q8_uٷEܠpK檌9¨G ߕ0VH{`o{:8P?.N~`I@k`?>N{)\4 S.TD@ƚ,URu(6o5̈́4PP9KU9G?[o\($:T(H K3Ө@DJ&^?+0)zJ!e1 14`+NԺ $( $0aVd5- JcPY$٘@р@)RYrB 0IZRhҕITR0n1bT 030VBucA Ϋ.jpjIj&ҋD cS,bւʈ7RßM0)ĺ)[Js J)UZtkJBh3PWKP40(`)M D!AGxFab&@ H;Y !``&" Ij h!b!(8!M(~C0K!> \MtU2U1P*tE/蜿G?/}8>QOA))OAҬ*A_@B/hzoܲ uHH!(iM~3AN)!15zGUTrrnG`A.zJg[XQSʘ4<&G_JFhHG7vpRxw+>Vw< #oe!ݞvsEl$!L3d!E>b<7x|ϯ^Ǫ@ES`WHzN㼈t']튐ee #pm*p\yum}6$P "QXcD?Us=,!f @xY؎ŷm^8vг  nAlu!K\kf OO\VL )CBbƤG}/<_;CԆ+ =Mm rDBK]rnlaAF2>gm#aRe=G`" OFXa]ogV:Hp#4M2*I@1J$p4k^ @L|,%daFRU PR]C]|26& Zhu 5 ġ4Vh%/ۇ"SOgj  ADBD,$+)BֵRM'L:ޯu_b +, R PP%!JR̀B3/R'=ZYt2s3^VYNTR^mdN"zAO A6P .MJHe_g*NJ;/ H1+T̐ B-oŒrdeR,!>AKxQWrh&Cw46c jQ7TSe.OK7Ra&J hwfn"(94I,1Ф D9 {v MMMEEvmfS?ԏol!ţOT`a>M=)K56; {/D;р$C&1Bd*C% @q $BԀER8**Mʉ+3ɁԨ#@_OLF @_Ω^1wd=~CR@;E$S }@)`R=J?|rdApT AFX &*,v#,I!1yuBI\ | @u"JE%[( *RDSLDUP/}ᑆCguQCt4;#dy;DD,0 @IܧX# C 3{Oq t1XP; C{Ut\LI  lھɟqUBdq8pXj &|CjiA qRM$e@3{yvbF8f`aU c`4R(ad*1=#;3YŊ^^@z"9 Mu3K_".\#BF"!1a0*wx'6$d|$Saz̊ C 'Ի84'ÙA]ΑD<džF;É#( OwDR4дT1ɘQ+0̞2K$ACv]?0G 訙+A¦/ݍMUp=<\Tx q cM9~Bu @-D̢=Ύ{ţX A9wb!"(m SNN@Kx_0} ~8= $HC|ύJ!OIBPj *, bV"EYCB8>~($$2z }@x?HqC>VY"Sx<ns+@@4>Oͤ5 1˾B=rL̓dfTyacnCq ϦS SFUÖN I<1f\1q8NN:sTh^PM9 |Bp"w8k{$!6 {7嚪.հTT.TGμd$@ Dmu hI(d *BXAІRb6j6s)_PDD}G-Ɲl# #^@||q- ?/iO $#MyzkL7GΥ;y J xW?8]3"/\FA>W"celvB;=w `(J&F]s|M4X]ÿ6gJm2zGCLxLj&dBffCqbF[}Dž)/ו{<%o|%:!c.\[B`Yw{;1ЫŷxlkY 3Ac70%0Hئ6A/cSM6J{Ҕl2 `Bm7uxG'vl#i 9r]#g^Y |܃;xCI)0LL 1P 4p)@^ }:b-Zc:9vl_?z`A, Հyhd c>|6שBfBUl qDʹ; <1{nšvERwbG٢J$[ӥѺ|`:GIULSU5@L}#%3%&O)u& S2"$"R` `)" ZQITS@PIPȓLIARP Q%03R@R@@!S %hJZ) H h%j$!(dI*"9UIE005 D`b$.2K,I--@B($"?6P VJ ieRNr^A㶾rV#|FdB&P=)ӓq(0)yfQeRAF^P7kv p{ݡ3yC|c}Gi9@>uPQ@=@T'N 2#HEuOGhvőBݳkpג0RZ?#L cd )c©> //.ч3312MD3)6n1Ǥ fk; \^TIp Sۻo2'/)88Qqr7pJE/45j}E>3@P " V'P=j>QOhSvsĬT\=HWA _#)S}Pߺ׻m1G" "RE(QBd0oF+AdOJGю5$">0?O20ލ[9пj|`bW"E%z)NƉ= Hq 5D0$W ۰ְx Nu >8QmfN*p &L% HEEJhwt*͔7܀  uPw4dᅱU PH\*``(g>Vm{2uݝ+K;!$x @^O+o2i}9|ta~ #KlOC8hQMe$ȑ|^"r@R+@=mKKnj'1e QNf$ ֶi8淀QUk4h2"ggs6)5 @dD& CY")EZA4CtP#cĈ&- lH6ci`ZW2JLxb,E(n޴=1WڴXD Jeb Ėe({9Q׶r'{|@on`8ADOVVb2 ߅!>sXs/ hTbh@q o!!!!v\Gt~ -ڋbPN£7rRS^8у}91xt  OtDN^a(1Yބ̹*n ϴ<{d<#44N i$zhaaab1&@vKcY'i1EDJHAfIQa2 0ENNlh@lH7i&Fa23 `;!Ʈ9L3DaI%k 1cDLp7q 7f*5h'8M4T̆P a 62Ыk5! 14tI[!GH3#uhmXs42L h b5VntEY.E #4[FvJ"l*2C#%gKMBCHP`5"``pɧ%EAN.Ȩ(PO`il@ޞZHn8@q~Hk4& J4"{r"H#M2f9VaE$ULDDSDIkZJMYdUdDDXF`8ffɉ ̦ L)pdha6dQi4FVHG[[2 䐲3ȪB" 'L˓D&ݕjEcMT5dVfeEde4cPLTUDPF8a81QUMUE3ee&Be哃Nce a4An5k I0ƨ-A1QqUTRVrZI"f%L#th"g,"r"& 0r',ȡ3 a*jJ '313' ³,ɵ&qj 0"q#%̊&", " *MhA,6 Hd$ȱ1""%,%15#SUQY޵[a2`ߟbei dXYD 6tDIZx-+D':#,F kNNA48ۄ€?0l1^9)@r @SO'W%~OF=ASwH "mPHD݌`A QIIA)AH PP "SI E #,m%O5owI{qY=ϟxT:")!~~5 W< ) !݂wJ?VI1OL{.vA-32 @֨G>Kp*P!{DT*!3T!b+"|"چvis^wy@@"t*]:|"Iɹ{SE)@,`eQwktp~D0ϴGѴ@Ԁ :a -S zZOpf |:U6)ޡ"e%Eg*"0 @ MB_"t!pV9GF!R7wsс7p iY|$FKBR  z31^K"$T|;@{JTPj; B1Ћ4V"ݞ25#W{eyd%"(j"$% E ZOq~=,@I +$򋳻Y9a?5oJwS(|9MhYJ0Ȯ_Bp"MdqJ$EnԂ1ɁrB@ BgHQq'1J h)Y !P RN ( 3 L*@" 3* 300̰#L}C! ld6$b6 Q%Ia 7fJ(F9-܂ Foܨ5^܅DUj2B{HBoּbsfS3>dׁҖX^PkX5IHR1m`ʳ'*&EqHJ kZ_绽€ q8x둒?6ԃ)aMQHzyhsuO(z{;|4iePN;`["rMֳY9'lD-専Sm =qQEj_L.]b=ÿˏg/uRS$TfvPgj'1;K ؔ% o`Vi9x$ u` *Dǝ[+g<*SX^DEV6?o636wC}qYSw,ba ujDB/]ynp 6>QN%F$2H 1z~M"EV*1H18;!.1OQi:@$(z!`enqJlra:h%-/gs6`JUtܹ\%)`݋I;lvPCHsd8e&1^"@(=Ͷ~ift(8~q$I蕻"T6,v@ÝaZ`c)FH2W`j6x6`/ݺPϜi-ȭ0@7.=\H݌X֟s7H2Xqwl50nCR(#B"s ϙgoN|_/-35K[]e;)WDK SًOdљي@(`)*`Uz&eYqy/q9eR=s=fnv?a:0 @=vC: 2ӻ%Q)x,} pEdWhKw7I[F|}Ȥ{?iڙ%Z8=ʵ@qnX %$E8Ϥ1!2,K%D#vqfa\ooL4o!<ӵȾE~R D<%sl(:L|ٽږ^uy4"`d>B0tqLĽ9(=Og)*%|< N<Zo$eg<9W-~A9!Z*P ,!GԔ8(@+ba"aN^GdNIĐ3%M `C2&W"t)JL `(\J C٭.#Mј3YF b" </KL #-d. !ǣY!bȠrNwf@;jSj%H|#4>gwȢl^g PŮ6-b6ȉ-R IpLLR9lݖkA~0Fr,0;ȜE;r>$H|dw D ̆B,0 L)$eJa CC d#~d~=ûNt~+ TpDDw-.Ƶ+ @3{3~#>q(D D~Ċ9U%) "/tt$w(J fEd9C%q܊:`@@ԫ"˷HL>Rq:(1%g1 .TJTAbbU}]S&di$NPY(qi7J"PGb``MJ'@5E d8r΍Va4W|fRBq":;1yw9 !L]#1ĕtCEv ] Hl:.ػ!S!U%ktAg~<”RĂL P j7;<>?\*? caucf<@ 4%'Klø?A֠$` S/ϵ+'F%G2hԤ!; #'|'x]~ ⻃9*Q@ى},|0}͗=B"tHX!:G|(>:;˰A]BNXy,)c]$ )m@v8e|6ȸ 8?R>>*JsxsQgpP jEqqF\cw<x#HFbQB%Jyd|G"E b>0GA/յDD-MaY'n0 =XIHN6% ~=2q.DSPi?~mSAP s--+̴4g/F >*M,L.|$Ĵ{ '3$3!jߴ̫/7Gt9HBiC (0L\L $=^Zmsp?L$CP|G2Aw跿Trű>Yw4h 8|I893g1ᖔBKk4zZ]XG";IyB(*SSJXf pK;9抬qW(8wƑ FъH4 Flfgq q X^𸂴.f *+3@wDg ($x`3fGi&%1Ç$VB%qRjW{ uMJG$S`P!JDK);bZ PuP1k5[s4rɾCc|%r;#J2V50 MU`8=/W LL99"6oCb@b$M \?rF*Y YFHSd2[QxIUF^ cU=uvOzNh gnӞ#NCmnhh"U go7/qhKd,V!oQFv`rxv_˽s7'؈NA2xIQ+I^( ӡdHx!:Fyl`&y6W `M< \xو2+_(FX¹3okh8*BT ]8裃 qUMK&%" "+œ*1] i IeJtCS$0+6z׋9Ӌ($/YISCAEX~vvݢDL<5+N1,'[5rØw\Ĺ mafI7&ZNoNZ^!Kl͛f]$:E[%ᷦ#n{Xm39nf]fg@Ln v>n:9LCAMgDcPvos;Iz5},A8۾ &N7/'H}u»^-vi%Xv=3Mb]JC'y\2)D$U8Aՠ)AZL:d`6Wtk'[Ļ[f3ZedDB>ݨud;]q24EUœ exʑ7 7-Omr5W|4j n8Pruf16^֍ r`m.A16K#k]!yPdck$HY#.edi>.&RxIiwS D*[+q[I'd&瞺4ۏ{tAL[xQ-2j9iTt J.S6G8<212 [`C/S]H#G ̏  ЋJG:T [@,Ȅ:9 w$`%S# 3iKh@ڥd)B"xCs!;hj  HG*di!ULc4rPWlQp$Pl!O{O} c88FuSAm 1 5 B5)\ƮBYLdS 0 y6{3~AM$q% N8,QW1 ׷|"VYf' j3 "9w"E@p!9(Djo "Ă10bz`3:n%M5(l#wK蟒Ln ̈́ "@H$4J!}p/!≀ȪB+@PR@KAi2%"H %*=Czv$"su5'D Kpӝ)=X, i|1/CkgiDF-06D4BjHKQwZz:m1 xX 8cP25)VLV q D!R q% ` H]u:CL | T3&jCk4doH3(a"jC'XT5 3G%$ X&Àт`$) t`& D$HjS0ˊ`$@<`S.s~x`22`8x-~~2FFHíW|#Q!M@#٣q}\eD8p/ppoE۞G% "S-8-#g'AM &˅]t$"(6p+R/d"tn״B(.@C Vd}Cj'!F$LT8ipFlh6=fϵC"o ؐ=А] 5 D$POAeAji L! ч&} iN;4QD seXH ImG &c 4=ƔjV.|uG<})0OXoJDsxaN@H q (Aq`![C"qp6 |eH 2J* R"/Tj3zyB@a( 󦂦D7.P`¬9v;g7 rS"E#P?E!W|{kH;D'*ꦀk2sñp N ,Ν89sK*<C !)Nkm3QDXJuƽZ^!<1 |E+,Ijhg z_] Ē{hn/)` ̞G@E3$ґCx>=}pAĴ4_ei7 o1z=R,F2%F6ʃ( 0!_PCMU}zx4 nQ٥Z#=3GÍp}PÍfлi]'Z<@࣮aH ]ؐ^k֞ R}*< trph%O`sآ !̪ ]ӨH+ʼ&V첡h,4*4i LqA&N6 +_$mTCRsӧ$JcU~ZUgAW_yN;?6|%,-^|N*zXfb B娻\920{G|䴫׻{9M|g{-D{DogE*1) )1j]2Ǻ?`瓘H@DhJHQH*og$ ȐDN[+*=9d(\z iV0!]E`=뾌 [ƀ8>>'TSTM2 H K8!ȣ}["eJNjH`L΍GMHFLf?lcsQ|wG,;l<" ya"!$>2(?a,>,gU?ۨ^Q${ɼ"=gI8ha)n}{@r 3)\!ER%L%H2e%ae!jAS*M9:{sSSpĩLB *S܏ISNbR'(~)g 9GqJxzx@q Gޝ3B0ix_Yc0G5 P)Ytdq&T#~6M· J&< |0 &Ac 3Ռ~מ@`9U >dT|!{n)Z7Q.`{ŕK&Ԅ߿xgR*!Tb(,lGryH夡E{E|jOgC`r ~#&&hDZy%@QbHBP9̦5jJ3ʌ3"L |-CR 1` ~O$SeP8`_ y8Wv/}"qfObXP]`k:(zIH (EOҴ̆قJ]Êhu+^x ,lX@R"Y:*qWBNhrF 5$_aŮLwTNY f%P ?XAbPCQ>R4M\~-:F#M±1!f(# /5fʀފA*:MdB$ӗy42P}Mza2JxB:jƍ|qЍF ,Æ [8c`% {8߰tDh=Yz"FFS@UKgZgØd'Ŕ!R)m~RƉ50L PM ☺Y' 71؜C4'/4444ET;I52o܊d4_zʘ&G[J;ꘉqX^[$;waPO򪰒$@ Ċ1"R % B eLJGC6avz#bf4Zb&L̺G`FhRlϑΑ)ϿDu Q2Id(S\=rB@r`=p5^Al/lX F$$$"Z=0(@* M@H "qCnHw\ f!Ъ%'vy'[DR`zY_S$50@C%@UEM1P@@LDLDD$ U$LA Ѝ KH!1S$D@M204A1UQP03"IUKTM3TD5US@Ҥ@D LLTPD P0D@022T*”P ĐQKlK9ɯ?$E.`y-_p2n9Vd#H+"J7W;z y( *}45h:hHF$))տlLȂEj\lRuEVIfU ƧӿrmHy !Ew')sGυq-m\VRI$!%! &HHBDaH YD`  HB!$Z$ )X$ BAH%*ii*BeD@Q p򺌅 FJ9)))! o_±iRl?D>h. gycဂ(M!^PPTDES-U XUPNA(!BT$!$!%5f[ J n)@8&}d"v)Je= |'GSq1ÿ2gyloL J qCP?~T0d#^Lo~L ?R_Ӡ?zNBI.n鮈:bw{W8|O fh%=WjuF`@@zTSYN|;8w8?OA?P)` MA ,r'=@p*%O?僰v{Q]\{:QȀP  U W@?z]D<@h(̉ ;bJĎC ;R9POO?B+u;G v8'J.tThى?|oy({By9!h(fH{7 y@@ˑ&/q[%wLl=γ17+$=aC0Ѥ;NwSv X \d<ǮłNa*|9.)/$#,Z{l~)ٙ x}t=p;`D4?HxuxBL2B`B[ؗ Sln 'ԑg;:!|+mjzzS ޣbELy&f]qщhz"d|G'M=Jo2pW94mIx;/Qpz!T'8)hDEF$'`VVDZ뽒!Zl9SӃ &W)dþ*)" gW{0Qh|4nP XT X%a Hgx;д ^ d:MN$ /r&I3bwbHQ }?V>Ub 쬄wV" /C.ʏǯwB2B!RF$^!}v7/㣋!‡B&3B>.+,6]!:C PBHE{;ӸJ*U5ƈWLs{TDbrj L^R $V@CodC@@9U;:=>;?RUx`aZ2XSA@zBGK"CQ?cyC&V5O>PGIoGL;Di`D9v'"\G],!qg%HTK9TOFq:$tWMl"'(sxܩ2M:*WwZ^$0@8D]?!H`+l"?hׇHq(oV߀㻍UDf/qNwO*FWT3C%E?I*3u Ň + GB,֟u{PCrwԋ nKjF$-VPHI,kyJzPA!{4#K/IEb'('NK;?wsq48˃L,[tB*:)&{o8g<hMoɞ!gӘ( EQ&yWrwU.b^6If^!̚ +eFGjjL E  prnbyMhi^O!J˘ fp*XdazR)'dG8yᓥ4q&F7AFdFrGQ&?n(xoH:ƲtJx:<b(,IцSvU5 ?`H ЮE];'- Le{lrrrvn*&? Zg5kYP2`CCpfF qDC:jr-/j*bW3>M%~J2l̲4qe6gYHIaWˀPҘdKf%$4#$:sŏ%vЙ,fx$ @M߁3AerףV ,1t.>G{~P4 5L}! FA CCrBbOK,ĆiJ@rQb(hCMDH䩅jFG@ʏ֩5Đ5gcQߍ&LO8;K_:}{aϏsmoM[>$6:lՌ=$Fgc,"}9~3NR%N8)tݪ aF[YQRf}9%imkQ\n&7RZ^{e$jW%a93Ej4յ݁Ƃ8*q_"~)O /1>Pȹg >A\ 6a~dG}:R ;mџPص|] džG>p9N@ y`k i!Hs'\ ]c0@=e vIZSx]%ǣ$<_tjyɒ=<:3_ &e{D8i$" )7mGUvC=#3* ; |s,#0A}.R&bLmh9 с!"?r}sw6E|y ͙v@֯-1Xi4NMƌkCU`|y<FTţW`0*Ǝd>F/7N C:RZWcw|d,6xt8 }mCY3n85-:Fz 9r(Ё &|>7rcKt<ֱ}Xuj:7LX{i KЙ!{bds;[^Ҹ5!$0^Amt7c0a4D;"`E$k+r:T# F9])c&7X]jd% wqAIP;G(pS֓:H%%NM8R40++1ӨԽLk3qq73$ϴNQiz%.W-GGTgdt[==xnnF1,CӮT nQ"vI`zș9񍗢.wI;lmeT@NU1^c sXmtH3jPK\c1g2^A:wԱ;#R$B{τZf.T'` 1H89Pr+3{6 y;׵Cr*ff]lNjq1dzq4<#7_$c9zƲsDC[*RglO^ -obxxHlkf6I &BœPR:%nPت2F`X9y*R 嫍V,n߭Ij|.G瓏I2qHä^MjE 8 jf1\ 0BTG{6ޣ9T|{$:K]]~)Y3kgš&1\ :}lAc[$hb2#܌͑cڭd,z &R$o}}ؾY8`duuZFQ6 1i9̙~=ԛ,-ލDtлT:0?ך>l~;K}UېpaK k'Π4=CI0UrlsDkobu],ܒKGs6'ku K36D";]9PrHJ"zaUI46ša&3z2z(fӣO'־=z/1#2 fENĐ;aAІY \Ŭ9yA4TP@;φ)/mNYV{PĐ_4(ZM슢3ڦѥoH-@5% 0\nM跈X'0^8U HsYd"fۥR7k6Z"fK |S>jT#8М61W]?TK`4ű 6-B%$l # 1ds "2|[5lLKJשʙ'ucƎ(L9KI%|D%):XIV gG `ON*|+<Ȅp@DH7FjTg:>XXB\N~{gR ?[;'uQ6bCMvswq50N9gFTb}^N9po;썧ƊVl`'"â`Xnd  QTmxl3gLG)c,85h *($~-h+UggavOjJϿ"Qw Ҿ"=.d*d'w.9+>-7>:lN{R{|ȡѭ<uOr'{T:c2xl|#IX_'Eo,3eYtǜU$pq!$"a/!5V ɣ?;L-}(Ѻ#0hHj$QzA?3 fGٱb)Xg/i &2 yFx[\osls%W"1-1j %ͽ-y ͤ$=sꙛ&)ʏgKk;;y!|̲H;"'cDTp4"I@_xjTǬ^zG t wOQlL $ Vi`=D0w}VJNab6 yX1>+fXt5Pm1 Rޒ 20/vI.EyUYi&@!QK,乹fov4YD(`"G5)z. ؇ Y=E- A-tJh>Lճ]p"`{zӭ?FQTQT_zgЛ|tw?7qHfR2$'f |bz'ẻ)tR\eRUDI|g x q$PCC.hw5hdև0`G1 ?j䦐* xy͐D!a34mhlc 8 0o3LrzZ3lV li1hUJpҒؒdn0#$J9j㻌$\㼰vL&F;1`a\NQٶE&"0H|$˞c@=OON4?ѥf@tCDŴ .{G=4t}3px0|^jb$6HĜ$SI<`-vV|dаQ@m f0 hsUgm.;<X0˚M)&! n"5%F[Ȼ>W)rx8ϊo"'9΂ "Fv#$!o:@aUQ"$2rC ) ZvϠ;'@>[8H4TPJa=0gOQAvJМ0eDc b|N4,(/9*˄nC $"6W^.,n!2LbI̒tؿٌ_kM߇v99%hO'ȒLn[~ϭEݳQTR9 i`߃gc;tx8̅BpKYJB/Fznؗ*]v̞ܒ6=s_4XRf5Ph{ _Jfl28G7  r.%a4mя#iB.- ?~$n|xD|>ǏsGP§= w }=VaM4,yd֔p__DoѰ/#|](oO aI2>Wc/.O={PԉC^y=vD~LHsC4xA$!b 4iD+Yݸ\-iJҷN ${R!^ Vtaa"㘡3Oqm0xQ{J8d{ , fӜ^Xp A`]t!ŶRt&c &-z#j0"a\lLl;DA5T KR ZI"'یy~o}۫Ƨ}|OV͇[[=zd; ?qɷc;6ϖ%=ׂox{TO=HAL93띿-;@cچ=s C||ɵ?+K*6Wb{JfJiQwxG>>uq_:t}=}"T;|cyG%V(U~q1n ~Vv@Ѷߤ_@Po'K섏Orxc?%*C+ dO^dw>>9Ȁ7[t3G]?2Zd+3ޛVBD{A^^OM->j\(MgKOݜ;ވX{0yں84R̫\Jb @CYv}sE7OKt"pjkvNiK.g]VYIOBN]]ͭ0] es õj5< mژ{9@8 Fb<>A]EaCt2v [͖^H=顙g@{&(Z{Di 1@\m> YSݰuaǭtXw<^K^WC½a{hŤe E۝Kd}byc܇w oS&L4# N&t&adQTjP6KWF͊BԽBN_w>qPЧa͇${Git0̏ ]uCGm_b==+<3;$&o 9ilOO_ Xf{hx7y^7ʇ=eղs{xw<+0y,X+aSЯ}{}CSK6<ƵZ3uzS]y֜UU%Z)ZisB79sV҈p}1VD+m67EQntFX}$`]ws#WmU/k.  >>&`Kgѻ%w{{g{'y9緽{cvkmywvzy˚)=;gqv ;+l9=N4:m-JW@Sv:[amuQvitvUڑϺ9wݍ:kv[˽M3ǻ#&۞魅z)F>>j˱xk;H;r}{xRAE!wpx9=4DE{jyuz^z{o}oyrgz>.u֏ԭ:Ķ\mp 禛@ӷpُl}铞re^e׮Ͻ];kvsnCӯMiݜ:IٚрyRBwvfe}gNzޥt>ﻊֻC4̇ʇ]8D۪y.;'nuv:yekiT֣֨yپIIP=]WTt眪ψtϯ6m^!PvAU*7{pg6noe>327;{8>qwuyt" &)62 wh.{ki3}ro8{-pt{Ξ^U[`6uzݏN!Eݴݖ;׽qsu9;_g7X3ptj *A{n֏OXo>@P/{-}΅eV:70=>*ۭZf^{LOV>vvI}wz.{!׳tw7ZYХ{̥HM m:VǼ5CZY]c/u񎛷 df@ g&;jݱ87:72@\ZcON]նD2-pmwP>g>{ܯs\λzh{׷{ՕǴwv\xa j==*GHhMV; r(ԭ m3>w3Vjk|ٮMzUSػ{frͭoNl+w[ai[Ŧ^ݳkn{}6nǶ: s7{خ fh=:vLEZþo_c\CZ9_=ΛYUw[0 |}Яӓ;NkX ztr都mSzuǰilB2Z]`/}3Pu8ڧSz{\vwrv7Z [ ;SfF5 ܙwb= Yf{#Wv>^HJmc okԋwO;w^{vmoWh}:@@54LM4h@d 4Ʉ@0H@#@`hL2dɓFBbm 2`#&@%?Sy i< M @ @ #D!4z4FȧI=O 54iO(&z=F0M4f&@hSM4hI2!6F ɤ zLԞ4=4ѴP4d hh$@&ѐhOdL&Ȫަ*➕3'?*{TS?$TO'zzixh 觍m5=0LLLJizS$B&O L!*~iSbO"d`SI5Oh*mS6ɪz~3iyO4zhP=Gf8.37g2}hAA A[ !I$To7/j*CMš\]FjR5%fejK~7?h}GzTzǺq] |p?O,c@"UH*F QETUEP ,bE,AA`XA` A(OЪ(ATPAH~>s.˰#Foe뵀\Wv*Z1p`o6 @T/ϟ/ ]^ʲL_md t#Ox~=^>1u3ilDҤFꠇO5t|>l¡9kzîn&]o<[k)_CLeIA`{`H HWzj{cko7C!uzuN[y+jkGwzM/yz7ELyaw# Jo\@B,MDf C?|ka|_O/򾧱<2HIHA#@$Ix=?`Dm9, eu 7]ot]D 9]Z"@,? xgh]O3ĒJ9#Y+;Q30\pWb؋L$?|?DtD[K P{{`ݸZܣN *-k+_ iMBvQc$.a֒f,O"'\겹~ŗeV"*)h˒ۿwyOy%e2}spK?c&gT*j-ʿ "(4)T@F+jV*e)F+! ക-U aRXڴ--KF4YRҔbP "y |Gň)Hch(v@it?,XW',({4hj?_UG}^+)y_|(a85DL]?gA(L٬5< wH.pԲ`WW) fHNsXIO6E|C)wOŞ<|OJ9<vE 7T2?g?U+)C QKs335_ =~s[yM"w?I}޻ @f] "0r1H[W"d=Z ᰐ}Q7W (1Lsw#;Mjb7<čC"q~<>J@q?HFbelJHxu_ɠ:HRة!̼ZE٣~Nu}0001I?!"F߮h=OUP>{6GFHGNj@ /IDvAѥ_(P+E^/y/2i(~P?}  HR)R*TMT]&|/j~\ z0,~\fP3߸KśX@-ڛ0T#h~{5y|쉛\B!1 i  \Lic˞a7Z6v[DXX1%fhg:k(c c6q-Y k"V2[S٧ɳ"la}>7it' s4O)t"=RS1AOH|h>Y ̥>&S,B&pVg=j"yc-_R^ISaC]sGB F!I? OTꗲ!"TO҃"uOVޭ*`|82!ܝn;YJ7cG!Q''P_SZ h~9͙W!d'O ;sܝ=asv8ov1?ƴACٿ!#c$7*suGU_x'M[go5Y iLoZ׻x~ z*=>1P?\OgweϬœ<4?Ua,1=72?<#F{/vY{C:'tS杖o5O9Z/%gi+j94Z%C[OX5PmDEuDZjVȁ }3?" V>"ȃݟ`A^ժmjKOKҟ" h :l"{H) gre<"|oN1-p7l -:dzq7kW `! _^'ۧ Yv_\dF#;˰!/?wawrGUrKrr{b?$>G kK97H"FDԲIv?dxLG)z(d`74k( A8>i|Sp dퟻ{4i#`pA[Ξ/n81!'J`!jtU!_|dQ#t_~3 CL# z|#G<<|O ﳊwM%`/dQGQ73%"׵S02UGUnfXP@9 " {}O8λ,pI!/q>;C[#xmCq9Pwv~O'|X wczd eW{_ PT*3.I5,ډ}e|5Fomy0'~ԁ{6Q>zpmP ȸ@#R8φOwz~#jYFnL c>&{LIE=M)Ve7E^){ؽZoWv$ܢΩkz)&C={M𤛻ZzQ12Skڮmy&²u2=^¨J/ {TA&Hz]eʺ*UtT.{] zM3?# 65L„ " @QEGH*/EpO>?\>GV!^lU9ۢxGw$G+^,YOTUkTf.$uf0&Q{㋉SL,ReG}vN$"Mg1Qs4M+T;(/yQ{U#t(EwL+Kt&K't%P:eDM$ju)ҺkgUV')C)JGDzLôOCOx|kjNbHB>=9K{/{^{ܽ{{VզwixRMXNl,f&,1{T3K eZiw8!i~QQ1PVD]X "6;vȝaj-E'B<_+w)XDt[fG"0SF{Bp ÀtzVo7;綾~z[iS8QF/[^8 yӀXO Mo}>{3򃍶đ;p>G6~n|ﵟ숪WW'&hDJ$7ptOB&b"XG[)`f3mlOt5Qg/ [$Ϯs!5CE*Zqs\@G-cϏA7򕙹 ܪ @#@mWVAR!$VH8ټ.Yʶp}le7X4?~.@/Co 3ଊ=HX\P5ǮU0Es; 2)PE`d~o_bZ/wQQ"._k^Wҵ^߉ŊV؟wI'7$*E>u>T*>xZܭoGG"!)0F$7+A*PoA qC7iF’GNz?ڕ'2߱@7˶s3 q ;/ScA36ce1/xz9 \x@(a 7RT))W@c%'ߴv,6|af`12OJr.L N@P@`A| r${9-;D`kʃ1jf#h3/3~/eDm O CX%RYE!P0N; `DsHo.e B j7y {~m֭?HC*~dqã{!8WAKʨD!ad톖>valra=b{҃~<!~m1kEhLKM]N{Â*-5io;s"6B\῍Al,"aR}[[\*kAܠ'a1VG-Nj`ix?>Wze>z06hP~HfǛœط 2 #{u|W)_4H߫8 lcay1$:b|?ls_Rr'1'go4|<oqpk<>ˈI7Z#4 y#JqrX{D~ơ]9[S"&˘T^y+,Kqlz3UwӢc Ӱv]ߍ%r-]#vu(ZVt•esvnpD<2xLYÇh+uHl>fZ:nLeon%qu\]_`fG?Ԍ<Ȃid+!QIۿd9Wu `w4L6N,,'bX;G}+[rYŔ1R fմoƾߙ5@6~-!vD8Շ 4tily;bAܣ0XN_% r$8kXzbR&i]IXˀDWӝKHwY~SQ/#é[#r:+LjLg[#%wU&,&ց5P4rMsD*Wǎ3SxMP4G%\f&E,(ǂ𒱹iڞ*'/-\$``j5vG].gr;ý+iE7oLjoEp^mo CcA^wLy1hAO[>;[%a1uXXOD\w f/]"HC/;!7.| ( 0:l`9r{H c8IZiSU԰T&8$5$p z!wN {T{NK`a 0A/kIe3K֮9wW&7^jSa;3S~~ՙCz1ݯ;շRL+\yZF)ktY=ٹ&l1 G0 Kg5$Ķ) L-6{{Z邲vi!HW㤻(_җ{йe5,mqx^l7w }q{"Ax:H咽% t-.g'Ռ~~r,j/;GM4 =XKYrP$"tQ~` aͯ$Ƥ%.b"ʌ1J2:ͪB"PFu18zo _cĶ.[(jcU\׼:z1+#:Իm+~ %LW1c rY4 [ tC"hU[=gYXuǜX])|67l?d0c4 J.VYwز$ѱhm ?HuLED@7=N}#r$;ʫ,#t]Ҽ9oU#S2N(r#AXtTn LU9jPrg/RP ܜ C-%^x U=̮#=æD'ꂷ׆v e5MqvBg<`NڛPǪI#j:UMM%5u0 I_{(?;ܐܐq2ǀl ߃;ϖZ0{JXV$SF2u@e)̩o74FH$ks0 ovbw%-aAH6 TC2 `pvW˭/$7ouq~_N-^zu~Ub ED+HĭXv]~,%_Z/YT2HkN25qRtʷ!VQVz[<Tߢ-AD T/K55 ca;Xu9K'S\[Ta`p $Z$bי)\[e2&^W,̄2ҲY> |G-YiiL7vDcg |̧`Yhe2d,ws`GȎjAwJa5l҆I*vFzg1اM1U5 toz刋]#S 0-iKy_Fu33ښJɫzdO~}fV% Jj` ;2d]75*W2RJ@LfM(/EڬqL%S0]HVxH PHaU &ƘO*=6*c LPh>O1zeP^AAh;`F?0SE"<mQ:'XE!l4>G I~ x]]IPRC}=?C"!@Gc@@-4Cr"z EL2@{xAxmT_0D*(l@NWi{\f<?w[\n1֞d?;G?ck_XAOHE `-4}d*U!tIoz *8bn' jQ,AfJ"g 89'bC\fp챩\%0Ȋ0c? a2@ ubqxhQLkB$0zOŽŲ]W0H:B聁l*}_ڷüiuKaU!t F.] )Zߟd~'to`z?96*_ʡ 輬n1m騘۽`y=EцX?Tô}ϖ]ϴ@ יa{clOѯm=ݻ8< <_v5v+yAzpu{gw}xwo;r8~/--#JNT}z.Z}>BҿhlUп??iaM{I{@ kkixTpnoðPm͎n9t\u` ZxwL)q|KJ~as/' ܎VMK|䢪t?soq(O?,;"@80(4'x`8 q@` 8 m@ &tnd ʠ`bS B7A%#7ⷒ~_Ë^_.|f.KI>G00ښ☌n$!58S}KF:4]֕D2W{[:jjw_nvI*Y.}>X6g3lrhȥFD-[<#KG .p]Cj$3A!=pum8̘ 1FQSz"3.U m x=~Up&HFRS}\ґEܜ` 9$ow􇚗ADG k՜ A D }P+8XHFݜYOhQ7&&XD"n琄! $CAkͤFv[9^MX75p )B&9"Rn^C'!#ȞĽS,g/,ȻpOcvmk)I ! !,tAj7H`'(`!c"kǡ0a;L]w"$g)pCD#ţsG#$ %-dbL9/`z!U?ِv+M}睾pPoE茯JdL&#NLb0HEbEN26zHʫiD*cjsN,yr~#vI߸OZt&O"|rAKɉJ@W42f:v% 盛Gp#bfL,SLnYMFVy`[Gkj@򤀤s) s}?0o6֚` wuzכ>a|Me0`Y*hRȢ2ql)Ҡ c<>>9=KT_IXv59>9E &Uڪ 4eĀ9fh.}tvo%M)6U ; myV遨[2dC}wEq|;bUv|XEC tXEO!C!!c]0w[HB((,X-Q%H,^<ϕ臣\Nud]4BA_ tB*rPvn$3u #gE1 b(JXr0x f2X XkƶEbT1X5V܎&ByLjXvfßSVΎe"uզum 6lDbX1X0MZXMvq[ %Q223d3`2(s8ʙy39fͿO;DXBTr j.IGy?A'0aYޕDf0aJIWA^Y}݌n0]ͣn)s؉v}Mj[,d!R5{9 Ӯb*x:v4M *V H*,F, g<0 r fAsD!c2E 20`$$ l%XaBE"T"?!ER PCN|Ձn`_ضL3AmCp:ThRݑ.u ºjbw(\Ct*, 3նlEB^dtO*YCy۬Vi;Ef* DG l˔0EħϕQP\v@WqG{ Aaq6AbHZ!C3Yg>4g.(=+5ofR/mtd=`H][XAifWeD]`TڇPlF d2QAF%dһn,bvykJi@b1luu~X(:``'ٷ Wֶ|1o$xdI䖽I(JDC3FebhvQ.y(ta9R Agv(JsxػWpqra݇4*VN .I+ g mV e50!؋d.p䑞"(5 dSq␞ؾ2ou]>:#~ըLJ nѕg5$D!@yۣe[yv 2ߥ #D.\\0,wn A,X B  D`{>zJG5[3lw1v mڝCY71s g"ܶ䳺jv3hɍ/޻tI2so̎W_"D"pj?_ "7dql %pZʐ,t[*f4L)icNi!o)*Lj,1ZdN%d DVĸ8Н1 㻽R,*A`]SSw# "4,D'kRڵB&ܦ,3&Mt,>l5-֯mӴI9VQ=[x;ag#{wܡR(X,zٖ BNB2%%4=)kBW NͩfmNN8ݳiHS& + ZG)ul{\S8_vQ"Ԩz͂ (pgS!ԁC6=X&4HGm*ACҔER a&|MXYFGDzV `("#2ذEbȄU** _Jz~GC/kT.H۷>GWQ;vL=𒀕LYv ,{;7QOnPAmdPF۬/Wt" h <$%H5$|-J¬Cxք8nrrq56f%*nfKs"-zB.|l*siB1:AπTI2Eܴ}ٶf1BAJ`02.e "%Gx'z؟3<-`؅wzZ꧴Y^Lu@ m(&*!$pqc`~sN)ЯmzS;4XجEm‰?Hzxޞ>yvIFлQ;uϪ=:PޮCtT d?QȤ~Nb.M3S>̿ 7:.4[V^̰QRch2:5[qϟ(sB-;ZU(qlX0̱`,%,/h(TYZMzW?n(;|+0yg$!)E|f%Mз 3񅽖iw -{Mdm#@Ͼ&OQ-?_1v;2fr\ #L`8d+uN&)ZMB?%5xqa0WCs@2=à 4wsfpP&n@/ ٸQ8>wCPb;۲pZ&03+0ˁ' 0-oQ4D=H vܽ T;=Ly<2ekT7܆OoTRD& v@FHcnʁyD8Dtcy/ԪrfwTO8@ZPKhؙ ~}N )AO031mhdbd,kN%~}tzY{D:~)貍ױELh^6%MBTTZ3p g`2 $4"ф҂i!MOQ90<p` d$9lHiDcҭ(TQYmYs>U"SbD8c?+]n{ 0{İj#vJG (4,By~h{Ny|k_%N/[O_嶞Ccc39‰:۔yiuFDU2j,O~} fv1m{Vi[_JtR2ͱ}rwg_½~~m@QD,* x.C&<:u~g(OAo>%܄}_ 7ftLzBcÞ|)' ؐ7*Hr Ab,O,E4 0uZQ_a!>BBV,^T ³,* (**PXX"+ jbb jTK6Lvlofw1& /dNbė]y8,G>Wʿ&˜uuuj0_cj0~u`/qf \^z@^5DdA*|NKYhP<+D_"s^c+˩یw ߃n29ϺԸ!U IH_4;H]4 񯜍^o;5圎ֿ\tP՗Ǽlng5zI#j!)yOb驡.T[F^=@eՐw1s~'f=y%â2_R^zlYbfu4ݕe^i |{wk׷~[bկK.\ݕ |ᑗ.\QE4__(Y&pMvwѽc/C&SOS?klckilijՍ X&eɝ_CbZfW~&׽5[2˷o8qQc7+7 ecŊmwne[~*ݹ. FjٴIqQ i@sgXenQGvҴ^,)K'02?CN(G%Gn~X_ sKI ^͝9S޼ߵlmrqZjmMjjjjihgg_Z˝1ŋ筵.a;뇽-|ht|n'@~N_ 'R\XK¸8c؎o~~uc= ~7?Z3 +yls٩ªc P.mp{;e1PW,9wJki|]29ſ4ݵ{SHr󕿿dY  oHH/|N[d>*˯iM};-5fj>a6p. &V ~Dk1{}_f0/`*A. P()A ,O2$IWA2s0 o[frnUsYZ/u7_|V*/v=EJ\g ZD1V+=Dm;kOk?w\'XyH~SNr3Da7։/Cct\Qd1mmel+(58e#c_p8]cCp"' ܇ }xAR.Fr aP p  /v!F1.]14_ cwbLo/S ZAԁ}.ߌk# n5Q!ST Iś83dS-"hbuΚ=? >K江QUv5Uݗ#qUks*AX&8$aTÁ5㎍[Y2}4\wPs›Vx>¡n#)PI2~KkA,7[Cj?G~ǗD^C=KpM6 xsa!Cx|x np2|[-jC*Sde,e;C}kץ_Q ) Ӧ4) oE)eng ۖE!aD. 6 s~o^Ce/x#ܣVRD8n4iZ>2 q@+S09A  DߚU3%?i_3ɭSob*51./Ry("4a?ȮۤV {o4[mށևq'sv-j#5dfgq^Hϖ1S-f62|_~T{J2}nG퇒xZdNx9~ˎDpߝwv8׎U y+,(T#lmҫɀ$ %[l~~jU<[5>_ȷyL_ uxw}&ķ޲\Άk!t] *7u1}o`m*n7Y6V0~9̭8LqqvnݪwjZWȩw_P*MRİܞ6u 2k~YG6y:Cu<?\0/\W)=I " ?D Vg?`ybvfa O[=v|0.`l/f=,|G塣@[_NplNc^3AxsPAbz>&2}?gMjyDtd}{#lþ%g|P8qy0z0nϔNeb>+߸>_30ndzπyY=Yn; SD69} L?A 1v~)r}Rm3ئV'Isb\m7̍l#<˒??YGBXqؿȀ'ҍCP>fw 0v:Wp U/ %817Α&^c-=^mTU,k5Q-:}Yp<*eX M?'iԫ5wYw` +[]aCc;$6;4Hh&֑QF*pad`TZvȮ8pvXꮭ8F"E0}ft" P01ca|_ bQ|rqy'Wn4o^+B4]ŹK-NWj:5 7c4ǛV&/D=ײ[_GkU!fp{e0 dž@߷L.>" (þO &eoyw6!P ?P,s xgMKzr t61j3v4(dE[p9/&D K09^v[E|j]_$DaneU}$IDoG۬NQNYy큫pprEADK7X2=Ľ-0h{<&EtѩI$Χ2o:ÜMU&_s-44m~l f$3T.Q%0J 9 %'h7m6 SRi"aaaiesI6$e-B!T`5.XMEOdUa4CC=psmou,}3¯PN TmEV)0Xl ;>qW81MϺ>zUl3gT-}aQ @wL?>޷,_5l%C ef$IDf'L#pRo]IE}օ _rHb9|܆=Aͭd56p>򔱍LfSi`qpbCl- GFqYS'bL*:z+m+_ ]D_cAlYvǃG~8KKoU;~to?A'{dz]]|-}G[|=/_I!NHjc*la6jlyͬpN~,5D᧖Dz;3ct dP:@UBH6w]}otFo p8.^;۸:>+J^P?_܀0?TIP ?tfCO^: ?~Y ,*;%/PjzZq"_12תK&TT+e07oj3E-}'.}N'Gըj7M_eW"?*&}'‰T~|=~|J6+$$$,YPXX(ȤPTTEX,V U"2,XX,E *+"( Gv_4l!@D?SFl? @7v/^J%؊ <~ 1OEAAȲ0,XQ b(@dDPQEAI""*ȩTE~(B l X,>D'&0j1T !#BE$HX b 0#PFX=ﲯe`{ ("'j$DZE BExs\A\1T3 @TCPADnD " HĢJ6I#0bb"AI D$0%Se0"5-2ۡFH*2)&$R \M !XO_pU( y:ӂ+H X D"AIzbgJbeR j)jQ9 9ӗ%mB`7l}F@bEVcju C( qhũb+"nY/Z8""-E0Q!@9!rgVkUQQ^ E ˣ !3>F/_sr9tznGDDUX(H,E$$ER*"c$P,'[]8!Ҁ)$ 1u$C @hD!4mo\E_ŵh""m* Ddt }oCtT=6Z6& JM肯Tߩ?xKk)3潆 Bog$AfbˌlAk:ǛgW3Y#~ε؀Je3LzlM%٣|)P]!@\2PHI0#4(`, $2g=́(؁t 46S,es"NdRB^8#[^ 9|}=P:$TDbHTߍGf%Ȅx:"ގ %Xd4fY ˈ@8Sh !x(.2a9PVa3&ʐ@1$̤"JBTY=v`FkC^ТC."2;giYܫNJF;to&f+K$bB/ߌ"b2m֨]cB܌J80ӃJsy-A1qsѕ&R6Ų杺d$uӕɶ/FDgb},wKq6ȝlo'㳓xAJ#rͷ 8:䃆EX ̍,cN2ٞ؃$T l6@dTd-, w1t& ZXaO|ȿ3Qຍ&+0Mlw5ޒ=w( SR/eI#A",)C)X,۵ĊY[_emwNvruX-U+\C.cф`AZmJqr]$@q҈o1ZWH=9z#WT)F90ZpJVNq _$'%"N)*6)M"HsZX'| >9Ba  DHe5V| Sw`-rqP~QS (&gbMh~:h" ~hK}"؁P'Fi bX֜יX*rmp"SpL@@92e#laZbEIķb l,% rh5~⨾U}wF1aV 6& A"Z.> }jj׸TqC3 rB/-XcuY9L,Y%1%ɤbM8S"qʷۙE(j ȦsE/N&^X lmٯV KzwwzjYQ~kM,Xw'JG) HJ@sNP8d@-JǽDIGA|KPNQd|TS,dUSkU9i5[_;O5bIW/ NjFYExk&ػj3=!sX,gYZmJ`~<EzM3M3I>7e)E| .25U3eIhz}2AaB,\`fwsXZc-5 q`! BlAb9! +խ KW ]YPlz$fpBSk2?JԞhL 8<g Ӄ. Nu>\LսÂ1AaJϠi=hID1gT05lQz3E,W@%&![5u, 1k@ fuQe~$\۵m}$fXr(C{`V <333I$nw<@GBhkuA=n 8C6'@_|)Gx9;*9ĊF{WiٸN@@AF+|]˭2GzgPF̴cBHXf\޿m=0A|!cJDnZqh Ғ<{$SDC9  79Qxͷn[wt_x ӐH{VBWFܭKv^/n2 wJZvO =XRWM7r DAe@83S⽈2= 6(-7xi5K>ԧ@x(Gg5hfkr˜TVd[[jolcRk*[䥵mį  Z 61) I }pDTrAg, QTҗIȸF0Td&26S84ns na wI\:yI8Z`AO =]&jtuiRp.&B8qzl:[N.#p=wrVg29&sn[s1尷p_B1`;ۃ?sCH^|1.5Y~:lոYCrpw\ qMLEy^%dbOG9 ]/0Ri_k-bX$l{xr\Ɏ; gw9"=âzPzT }E% Hɔ a BȜwP1SMH$`(ݨ( LaG-H0aE&}mA5@4\Q[E$E"*9 ,RHA@AV ,S=a=+/e[zs1=bWϋ0qg#M&{zkuߏg)φ[ax.zߏST+gWP櫫>UfQ tVKu椓k2"o(N~"RnDŬhC5GkN9Î Ut,0*8h%u4o67r V%|22+upsݟz[h܊zr+e1yQgi9F-Á2g2Cp4z :mrdfA$icB&f6yGKvkMLeByR\RLֺyTQ.efY6C)b RұIuqM,VɎ[eDO^x}p{GsJg333ZǵTCBb4c YBnHI$$1e:IrsU̺F(̈S4)i,dV0YNeu!̡Q),),j[Y駻&vtfn V)fVb]>?n}lW5iF+ۑjdbzƽ#Y&ںn9'&.neRVXI@(.(y6V2.f^J=]⃘.F0\C_NrI2X$fi+2JcC].p%vr@I'UXMU908dkmH & #SŠ==CDp!B:Uɨ%I6]9B]2!N%7q$lǙf6Pe@Gll/0Z`56r1lZ3q2SVh8TY AaQHŀ.Yӊ_]Ii\ ]EA9ҬAnVv6DB($ӽ4{oVx`N81$#  HCXDQ̷&h 3XKd4];9Y̭8A+ C3 `>:mlUnŵ<!z[u1WAp4ow{a!tsP C6PmTt nlp`=@4ly .@71!j~0" \ FTzɁ-qbOn|n fI E%ـnsJU*8vs8kݞd"kwj05P#[K/Rt6ap/?]fZGvW'ȷN io'[AM#5oY3y @(@x_g:fBK$*kĤ I@>f+~gaPŊ.ђhHh߾ U.|nCp!;q9{k+¸BtTD K;5gOZ4 \89Ub1\:' 3` DȬ܈㎠5ueam螳dߌ &6HUfLc NbAc d GɊ #=̥G|rNjQCn(Q (%I"Xe .LI!d( NE@!h)̭9Bnv9{-AbA,) +al$ HN5MNk9#P;gNyR,bg +EIw~#HJ'vCf8>p_iY,1¿ǵlx(1xnKFZ.0מ倿lY4M]>3Vj^)*T<13wVSIkG ]"iKdbqtUKo:ZIa@(}ժ䥐$#( *{\+zz KݟqβI"9VRŌ= T3\v)$XBԣQp`ghŠ"2Ճ W+i82R^ʌotёB7hXtby)k򌤁,@amSp<5 Dfgyq,iIAdfK{,1e%V yQ簪+.XDvG, ;"k 0 ȖP%u( ivy:lGcl!!Vy<+lSv|H Q 8e#,\ Gk,`j\=:V8kPݫ ==fh+{X"D8tR\׿C7 go Fmm刀I"`f7>Wn,Smƴ.Yt})tp&–Z[|6kԕF>~K3&wT)#3@yIldYY3$V\e!/|sCE4!S+;/RUYlyi7759ҭV"2Lxyk^~<>^E G}5;r9Ļf^ū/ǿS,6e'iֳN-$}w/xB] 2ZX㤲BAIVZ #'FOTC&EԐ_H1-[;ȓEaӰ$-e~~,Ni'039q|DykuZHfF7t>Jxasܮ*w.4t`YN>s cp}NwDENg!yr%ub;8剼i<lWn5̯T f)]:c _ٵƌ4 `9w@!6DM;g=H% ;Wjrʻ],^Ȥhom>S>>ӿ5/3f-` ivg6(Ǐqtt N=tCIs,lW-$Ub-܋iҤrf6ftdBwks|pQfFT%Y335 8yV2nvqs>X܅^HF2]e7+njۗ;Q[96LШ%}fëC5IӀȕYT4oi.5\{F>WMuk3<, d$PrJ@iջ'O7LJ aJJ -Ú/H`ͯԎ# \֐>&79VDhTC*+ȃ_e;_ϚU#kX:Ǿ-"UM\l2C,Us2$.e23̖7!5mxKcNFL4_\@f /ς -fJ&H+,>1OXI ȗRk&7Lļ+W/>o'#1,#M8KVu3;꾥k*M$/f=7N\9o$xлxGuTh!LXoljA?Ad#*uCd}ؑƈɆXE,_tnSLPccMYQ2X[)V`33XJOwtl^ e 81\*iF>3LoaY6֞|ddj]Vӎ`|87fa*!=@et;gp"Qk3Z,ʊ";T$> ط((ή{LeV_LFtvk^cZJjU8]S Yc2 ! TrRYS5E_#KؑG:)uu-ieL+%D]XGT$-΢//z'Uiׄff@;v|971f[v=O k鈭\mc湠ȚJn|m)<{PjsyFy&WS7%7l `wpFjZ,Ŝx9&%`='^_E/$M^œ2=;V]z]={ʷ]ʗX -He]r׾'|Nf/-4QóSf-rW+iq>e1ՠqr+Xϭh߱#܃&+搃2bU mH-Emچ]2W2 V~IاñKIv<;'HjbOz2sGh!"&hdAH"*ȡAI$b#AQX,dAUY>Gz.iߧ,_9+"xAkQ){qH 4ɣyl؞|#ҙK,R,SSka0ϗWc,,eSmo=jàk!lUHD$ɐȽ|Im!6+@qK kl$JY nٗ"\泃UF0 $uZƝЃ܉NO*Vy>o 606kT[E/h!uen:<l*12~km]x4Q$v3L~I=FrHuhMBIdK1&ʌ#j,sM{N6~t#{lokiĕVؠ0vk*o_#ڇHtI* "Q?ߥw7]>Rwܴ6S(߽ˋx@tc|I [5nɽ r|_:dm^zc2mT;toJ` l%fTdG<_^'˱d9I,.'w'jYbITcZbH% q'o.vcۜow=&F ^-#GD`um+4(l6vc?1ݏx+D0f>(a3G.]Gҫ3~ y QJ](%g5Z1}yjp٩$>𯵉uVb+)W*b0xfmh!pxn0v9Y,&a&eL4w9#"('ol誯qǃ|: GR_J&Mز6"& wZ~}фkꉭͷڧ+Y9Qٯ`4e# 8<۽VDyN` ^kCHZ +5wL]6"V&3$qJ([ !&O ޳g~Wۗ#<%s'^@3DϜ rQSP$'>6Wxb"&G<2Y-@N$,Ks,E( ӦH!֢d: 蝝MYWٯT@)n_ 6ӶMafϖ ~p2&~zfÌ-@M! p(90gl&xL!*' {?⽌^'GO3t SIg՘)9p}K@,6lK242{ ᳎2gPMbvy030܃=-}%O^9y6u;^pѐ_Pa6cFd=^E[Im'I^Bj%|;+VDv"1i[zdgIitKsvdenj*2-ģ"י)t\8d3NJxxصov$3fh0>WЃTxpf@rk ?bA*(0|$^awOczBlI: O(561y$}&X0 ҃~<݋uu7PMqouhjόO2:.Yz2Eu{y~)x\$+XE||%Y%(ZoE`Xg9d3ey*B+`g9>}]*ܟ$V4ziX3k^\̛FɏfGEO QQ%Bl` *j"2vG]u`&~=b g+f3p9`]1GH 1H ̨"+a$͋[нʴpfS~ǴזRǮw 0?5l"Q#jgOEրQ#Bk/7;Ct";g>gL=Z]zhbr<7^hŗ#]HgOx'+Hni/U,' ] !Rg[h"kJ$VNs,9σqg"g9Z,-]^[lbƷ~.f8|;} B-X9(5Y$W1ھE/+f᰺u">P%*0dҤf+Xt >*-uMkHBŠ1.>.mԳA}wcqXA+d5XԄFc1eU]Eyg3^a6wAHN{Ar @2L)A?!3rkJ>RPG;=,rLx6W @iGޖKMNrRBI07b;z}"1+DR8O(尛yZcն!ͻ`"M}[7$Yv LT*Ewg~  o(J;J;jX[GBZ퟉T|ߋA;0ix)xFH3}.YtVf&Anq UZCU1lNF3,Dg(XhVB+l[+k9NKe9LYK5 bڨ}k嵘>_&Z92)!!ǥ FA,6rt0gzq7UkcYe6I>ފѴ =0rĜHnܴYHCj Pl, m 56f޴!(jҽm ͓ ,X6jVԺ'C1bóWC7[XaSD29]\Y.<I,Vc0tѧvus'PCN^1vS½>K[\dz8U@]8"투2Mp,b-GC! ҂NeN&Xo pIDiK<6ٝMS&%lEϿGk>/Q'Y' .\e]8pqhēNM, M}1@ҷXy]2E[_ e{2s|hCn0f\x$HidͳHkY*Kz2F%ŘWfM|]l&XHvJh_9&NgM',!12^wEMk(xړřA !m=` D`g䆶 ^Crd aQjŜbbH4OģTus+*Qm`F)pg:*f<~_2nvp钭wrʖoLޕ ̘Ic`!G;p,^[,N6*WcHrOkEXԕ`\yZQY.O ]LEOaTӦ40 TR 7:9CF bgP ΊͫЎj04bI L}f. G]3k"8{"Ժ{Ȉy'MB\%ooˆD(((@U0Q`VsB 0  EQd$##R1bA$Ɍ2X @`AXEQB'1W+SeeE J[Uo\6u3prF{YB2fJr4tV9cx2V#.嶰´p?ڎ~93CB/qXAhKdbuRy퐑EPyBgh( G` (I!qG#+Z es#OI!Z6HnzV @Qxid6I`N[40MNC`\ j>43(QP#ԶV֑ՠgZ fJGIjV3:Zsu~W{dx?>QNjc0Zp  HOsB(ذ1*}Aa( ٷZf߷c+5 P,2@e{<pPc3=>&Dq?%_j8}lAC­nx?nnJ%گ>@r=~=:7/% C$#EIs )Y.Вѿ["wU{adX96acܺq/?"ɐnUNo7m>WAjV[O'TD[6i)Tϻ01fuʆЃpsO??uۙ\ܟ:7OÝ_:51tPtR˯aҌKϰ.EU:IS#صC)=z1z &.ˌ/'lm8N͐֘CEޚ{;%6nkk挳!&C:gwVJ*]RxcIx¯k҂bW*}|آo*Z>y|)Oā"Y FEe4xv,UPUguC>t̎rw>mQApȬ3 n]CwWbY-A̓\=@ JVbpT.JI[!] 8vf $q(JHQdR &݄5T6d7͵u;F`FbD*I!!qr 3  6f7 Ca74ra퇏WP;bBM3@OkN҇p  < 煞:|O!U_v8`4Г5Y 5B(Em>b7|~YZ(xd]}U}NZA^ dBA5Fs{сe'S?(?ϦV{Þ_d ^vd_:qTOĎLDٓEف 6 ٜ砇BA;œkVK[FX`a<'0=B{9zL$D$,Y5c!T~H̳(P#5O}#nDVUٖF%bQu+Q+Le 5̂ۧNuڮ/kU²|)ӠzAM0ӂ!EI`f:TXsEMdX=gjӭ>ֺ Ւa6p48ggVI;ΓƱb,MZ: ZV@_p廃- ׫Zl.sv.=]-wKڭUi| +Ns:N}4}b"<^/ͧ-'BOm=Dv^V.e9D*MaB[ر0U j$P H`$R83jRdS#%4t {ŀMh= 3^ ҉HB*JSG b 0dXYI "x)}^>)E,OBRRa#0^lORS2(ixeb"7"" h=e^N>'澜 A{33@xHy֘Tu11ԕwJwˮ҈# 2LY`0D֠ Q LiOc.9`n:{B3ݔCY61%UQsEuw* NדFn ,іck 3JC(G* "9`0#< ʃ@b8B$l Bb:+a= 2kk%Iϒ4JY$,M3x+=/>9NJBng,%{9N;YąPi!`ϧ.\N'wü;ùtb !xfJU]@M-xLU2a,Ĭǯ#QQ 9Jɩ%h PVsk cG4QB ֦Քz]?_O3{tzT.dCNOfm5yF+$B?]aְn[:b c,&> :p 1LorqAĄ8j&`GH}mb]!,jlxű# }$\,%@S"I˯P.;+hT(F]gZdc"M;LԷXUO;ф$/źêig;3+g2eQ呰ŽS[oXrnL{{ka ( ry"${ _z7;ٕ[Ѭ־PF.憐4e>.Z p1A"jׅLyu^@ pgH V8T'}.[B&'#E?h*b X3e2 o9!r:8f;mXưCQrAӻan5:XqJ>sd;rĝvS@dhM=T(RZ<)Fg+a]e9e%;]2 $ sŜn5sIY_t7}IYi |+lL^y*kS)`>N:ĸMMxnDVtj&; rq1aQ:vx]yRfQCFL镹qpdNGV(~A珿 8Fxd]൷z[#'5L{L Bu>X8`g$dCPE1/ʈH =XϚħ-$`!7(x= 'yzתžFYbc]_u.!" d:nusn0tUdUCt><^Y sI"-br5$ZjG}`z[n˳w^3F9OcCuUW2GDe^lfΉΖ{I;.m:SvN%sY&ÎQM%6^s0/cQXkP+F "-?1%Y*_ֈAض*XC$a X4Ұ^JJ@u/t  AD,4%R4ؖlXu秛l"hq"mpsȀ6$*3N98Yl`c;Hb~}~%D*RNkp"KDX1!#~}(#BAgP !BB)PDHDHC+l gVQHOP"""KRE7- DRӏb{WXwygYVqE3SabMD.Kg=$0D I~y;1 (횱Yh >ӆ 0]hޮ]LmYή#XGWN K gFNvOe! Qʉ@$}E7 /z$>]KBh*YCeBK ϱ>4iN"߽!3C˔Ѩ]ABBs ~e'%7 85Ƞ[\p"|mv4UJe;: 3YLb)ŒfЙoFd4@?NOv*Gof7TԴ`]Xa!sGò DAAJQ*GÆ + knˣL4A@F"dѦg 6(mDօ& .Y @lF@0%R !) Of{1qI`,aLtlm,goym=i(jāT@#P=F@CT|Un\~-2IY 8 @#E{ &)+>,&:[M9g"lRc0J,PE'a-qyD6=j)3EOfљ+[vS.\h[L(NqaLPaDfDb_}rٲ7jq'N(  Bo-7eph&7j6wSQ74 m^c1GۦT>,KFfnN#.02)7&|\Öc1W4\mⅭN?r*Ϫ+PHI0+ ZPkEC01 Thi:f,5RkZe.Y,-%-l=Y@\@F 9!B Z+V%FJ d hd@ D P$!2AxmX&(AX򢳣*\/>a 1Vo_M{wlDٛ(T>}Kʮ;qZ-gƷ[z->4­tb:FNk tFnwx].؉`+5YÆ[[g6/[O{{= aeԸfR@B"13z_\ ĂgQ;rCbzURF#b2"Il< ntaIl "R" (a;i>e%8 $b 5XR1  Qx aѺ϶5ȇ?> if+l ="|nbyǣ&> 1=J̠~ _/F{gc_~z 7oX[zTj000rÂgdTn;ua29;cDΠFû~'??÷S k>(9SzJ$Qrb $JT_fav}r7=q*%Y ?~By>o4?ӏ\h+2f)hARjQ #58xvxz gچo?ov(VJS|Ĕ Bj:?U+b8~h1Fa,`>x""Rx7P3> 4 uC|D*"J:ID =_>/צ:CTڏӇƸC=8s;v#ֿWk1d2Z?N(qH}jГzǧ90@۞_w" ,|MB,W/y.C[(a&C(ҙYC: :LP{r,+.P^i4,)%`T@SH:gzrfeP<);aR?sR@Y q斵๙B`^ZԘfq3:=J,&q{ K*g"Ͳ ,DJ ěֽE ev @k_Wqdg<%Ŗ$@=ic$&Z7u6826fCmM9O2%Dq9-77ڊgt;#=V!R_uV[e108cB5닆_o]!gDЎĮiO=Z5+Cq\cB)tvjvT 5{\5l~*po}5a68Id{ҸObOW .*d?ߊo˧_(=l2$i3#z 4QY/]gc$1ZRicR|8=3r}o-k{8 N$Zʁ8?/>M?  ;`iF3R 4* Q>ؘ20C/dёc8'ځ.}1]|AE11u9WQGv6[s!,EjEJQ:ko-FU+p8 x}K6'@FuNF6FZF߬O#B>EgiZ#Z0$_A9 /1o\ERL#K|-{924<%K7E0Cp=o:3֬,Ѷ,7"w|WfRUce[@$y5WP?< 0H.9B,8 MM  MG 2#cmc~u#zeNSv*k,od*:TwLg%Rnt%;dKW$hPwzYȣqK~S@%H8NP#I؁ Iے7#:>U2pر q䖲l|al Ct,n.*RSx^=GwS80"'e\U·Y_<\2.lgS&D:Y,]_v^@q,1fg(YXAHGppClb 0ŵCqAqͅ7JHAH D`(( ` `QB:\ekެ+^a#왳V#RMOo}Ū/}LCMDpo!ӫq ޮr26gc?4M0%HK/<p/ـ Tv%> $do}WzP N`!pV4!(`u()bug)'VOڧ]O2ㆆnޖCPQS,A+OI\chAID5-%;[g5@$Yt9L8Alb3;-AFPItB{ՙ* L+)|!5^Hn._Ntãڡc:frXxQ.dUK+@ MBT("LZQ>qyu F"%G(5=&fȊֻv@c A`M,TNLwd*%TbF 9f;55UDg-jO[+Ʉis8buv34<Ҽl3,nj3V~Kp\B2@߇ݯ<[X 4Ώ0|qge+zt*ӂ,ZQ{Q:FEڿP;JumQhc VU֨Wke0^Crrene6LCnSm^KIO0+N4ۣ 5-/ 9iu6{hfLLa\[WvKZ̥/ntus65ߠ!~ŧrd|"JH8"fIJ_+6#Y;'L)Pq>R-tYEelPH7p u!Fݿ2L4Ps93x~2$Bֆw3OH| 8< f {HΙ sC5\[LN2<{Ǹs͗] 8{Q 9!#lrljHv[>nUEQUV****"*"+JJq 2<>]IP<۲p8[Avn5<"{SS4z65XW=#"6; D: !xs8z̮^f"cPT+)3^H4>x%"U`A$54.P2Dk2oAE,bO"DU6lo쭿E640 |s!b^όU83d;"Of=,Mh:|'G&9X;EL#]KZ{ɦx.ٗ`Ek[Ҹ`ʯ#X'jlr3ZaT QL`)M3[8[~}J  [pKE@;pU "oÜ:_gp4cvD貧 `łQ2= u 0[IoJfuJͮN,DLY)ڵuXSb#f4b:,* Oh2X-WC'[2LugW,kDky[ Kw^`(iج#Wmw\N:6! ‡? jV#j {Z n+Rl FwY&-LޤB7Evn,)h'݆YpI`Sx/-V>1fcD67// ;›Tg ݻ!d!><0CVоv}#[ma~NXJ1 N5J4omimikw9s›d{N\071u>IÜB㔹Sݓ74` u>;v?^a~S>7bD_ 5Wu|lwQ{fy.0"Ylt~.=%"w+sf6S;7@}ufNorvp3,3AmH|{E*5SS۝:Udke]mMns+7dӖ F)~Z]y7_+V|5")$L,’yb{_2xSq|b.X Ú'p+"u[|Fl\d> !n<1yV% mwý.| kYإcg5!$$.^Sm˞oSr&e[*K#00ی6v`F 8MYb dV9kXԭ+g1m:kgHؤ3vR{6.qy2 8pr<|'kp\fP+QfGm(8bhsg0 4(U#ݲ5`4,g+܍f`pu%` ږTʔi +qÈڦ|kfɽɖCG|ThQ^'opj--Eb7Rrq}gI!hz-%II!Y&v" ͧӖOsN MTq6 ip07hU[Jxti"}Y#ϟ-D(%@^6,ՀtBm3wxڇ'jy_5ByR4ۛPۃ;ai! G[zhwW;p:j +boΎnC'=%̷Y֣N)ѕI+xb%kj-|.Nh!A.bm|^9 L'%#@p94yǵ8mhqzX6vfGg??jI6eզ !B,ۃu0/Ar =~#ήit^>&4(`ĕi8%o :|gLY{uH'MA~dA8ubG[m쒆[׳u. vq׫O>NTk뀎ejJ'N0]}}=/14D@ 2햫j֠+r|q] ;j2tgG;|8X:^ z!Ipǻ(w.@0MwH8owVk'/k\-”~#-jғ(j\\#H;$Rxh̾^,s_QD_>kuC{[}/MFKG;uv|!hL☉ f0eAyb\~ӧׅgL{VЉicIkL}̧&)GWh$"\dQC扷VX8.+cgN 0|rþ[(tidLF-c٫ˍG:Y.o7GUzmJԒq_( Y2fB!h7oTоohihHtС*Hڵ?'5ݙH׹mଳV|g(X41HnJR#$V )2PRf B,,BVj_"W:r֧_ÿ/o]~aEDoZV@q9.z^me!~T~:nrUo2&:H*HKqje 1hgk2{,9+ԦTG k+vU)ڊf09Y۱v;K!ByE3z;{k\y7w}>i`p5<˚T [ 鱯}G*ۣ 67gpgB tP Уs7*a\6gC=6 )_ixX ģ!3 ~OB0W5Cr-<0:ן'Oke3QVp\#@] AAjM#<*,*_APWe}ځIDY+a\AOw@!?}nPIP a")!5~1 ez%or4Q d|\]\F@1Wk9^Gn*;ZsXQC;ɒ(BFk룓UVEBuQN0VmjFkbnq;ֻy{ؓ|Jhdz< K:VvǼCOiR9{Wϝ_=P?V `kCє;Q*Rf x)"sќzTGeWpδ&V984mw/ǽn ;4<`9@;pyx60֧=L.cD"vDC n G05Sy`3K?]Mq! 2pNt IfP;nBD#yfd?mI/&do6w^A!tÒ /8l:S?>*M"FX̜yx17:ZIiP]dl(ꥪ5޼ʵ%UʄD 5f+M~}lmZ8߽טS@{?͏B >m 2W$XLs|N7`M6~-='{i<㜰M,îHkσ`my3:|8NOs6@u# _>OT(ptSPQmHϯ"$D\`"nq4xu~oV%KŠEP# ~T,6+2@7&C3,v}/ӝQ);%`s4~5Z%B3WpC h|D GgkOnyy!Us-U?\]v<zHDwE]ga$I#]E0@|c,g=F G ".i3^ǖ .)SCjiaH!\H&Y-uڮVsh#O%.EY$x^EZQaFj[TM`-r;ҋ?Aί>ΜKDs4dW),hdOĿx]3Ԛ*c3glZp$bRt.&aCm]k)fc3M7vՌY;b30v$4-~й8VV$E,K%.prDt "$$EV,;D$dއ%hԎB@DҋcM`'(1Y sEQk͜iӲ}lyMrdƲbɻ õWSWᅛy iC[W&6 [fmY߽lvZ(jlʂabA^䳼I'g,h8BB͚髬hGU- -*mLwᕅX;s#>}xqۛH=H!jKu XyC335; :,f*# virzy]zzn['2YAť@cyy|^H9naաnPctOpW>IcRJ( _~&!}muqP-mpCgW -y+*34 $JfaӑqV~rH0ȐQyt7hM:`9pMP!0s7R,x'צ.̢W_<̺87y癅aq!oy]PHgv̤7{˧r ֑,N%i1s* %M/zEzPQ9WT@ዔU['(R.`C&^1!#ז" Xx8u4Mwf(F8Z~M`.``UXOns} \sym-`nN3i6c0sxvb!5s"9W`)zč6?OX`dW{ƳYo"tcJ2*ji '&H8@qPdsPVCi\51TSZrW~8~,Zt} ~w}9ah_:gg| jr|>NeecNn?3bPA1)rM5my& e4NdFq|ps*=b.*_<*Citk.~:0]\5fsؒ<} >#i<J -{Jn:o>g߇7On :ף+[wƌΟa qp&δ]$f%b{-P2E[!@=з{*[R>,Q}$hCLhE{kƦIntuOw#L_8ɚp6QX2'IdORc+RfB|GmyXl$r#lCHc})y^rr[ӛMcO-Nf/qgoahd28=d0Rs ;nïosUng{K8tuuG}Xf?5!7ivR(!սԸB.w/mYi.ՓO="fjWWG4<xGLن|sTtצ_.Z[_#jMlm·  4)$g>)(" _fX׵&![Wis3ud 20O͍1V޲Cb.qSN'Huw3 n̦d_ثbLg#B7m᙮C$E+jb'U٠dQT Rgc6: `0$ÒL {MhXs+&E@{!; >p)'-k[T{/!ںN#Wɇk +J*ao:PY,j8Z+71nYW ~"diM>Y7qӋPH[ϻ,fwB ݗes;yrRVzϩ-nfБ <1lOOxOC8νg0ǟΙQWϣP#GQ_þZVK9J)%q2L A\jUhJQUl*31QTEοN1nd!*o4\mǥ|>'}6J#0d=ԕUR1Dc"H"*+"EPTUD(=CC>d HfUPЄ6:@4Dag?J.8EQ-#MWs]N1w'-k{{V%!%h~b>1igL8L!`*ܗ 1LkuGib^'#nDDz\'.{"buw~?7W=ߜGnwɉp n@}̻HjֵZֵַckZ֪ <>MEG 1K%H~=^j%2np؛hUG#'+'.S^݌ ۰h2^AA#/vA @(̀j)܈t VJdee|d"A?==E!2Ćy:^jH$c~ ddPQ>#! bAdYcQV),lKm{L~ݰ qCTc[;|MdSv4۽aw͍sU:rT*ܔdX :q~*}oʳ]W#s LPώMD"R ܁ӕ9uЇn2}naqȊ!v -[DjQ#z1mnOQ@NҚ}6an,aNxAy+6tw▍޾޹ S<& u!,|oa0 !e 0"R3d9&3Ђ7 /G;mpXz}ldF '$W:zñq5@$H2B@xDqzx v}6ꞟZ'#588~~3 PH:jHGo%$>w$~iYr4ksl:aPLS D@O vQv ;$C,$/pv|(?k1`3 RcAģ3<'AIɁ{0 ѽPtt^ɂ6*FIΠyf(eH)ny@uE57htHs sE@E"7ұHԨξ}"(%Fqnll)Sa5,c-;%~Y@ E0_ŧ ;\D ?a&@ne;yH @B `Ok>}>5G~#ຶ2{f 21'ǫؒ.,  +U.6j< u\rܚcr!2ܸZ"s (Sф)8G;Jn 1zŲdd(*d([]J^[fЗ؁xbdrnMt4 BsTRP) kDvu&r{tRꃄT8Hr£742$!ɔ́>ه[ JS̢":D5{PQߦ}4٠EdD7Cl(j;@ ! !s9^:DAPȅ/R˯& DRV@(F\ Rˇ1pW=>>'M-k ccfow~s|$|Q "PET؇OqlZ8, Z^N9_em?&E}@~n 5[tE)C$H1Ԝ/J"$ֵH rVG/./݌am 23cc [C]ei=^ᆕG Ga 1x2E+F҈2+{xG\7o8bsicWH-O3Zs C^H,A<\ݭƃ͒¯{@`TIDM}x$67@{Ec56$)$=қM $%0D# -((ep+_ny3"^9y㧱nXV䃃uEBUZo (q xRJZ>~q);(1uu?WB~j=^a}܅Gg]Ʀ~rϛ=9p}HF vIb\cf$d!ٕQ>|_/35>.]rl^{c7硣Kx|*%̖vu9[Q㖟?}?܀fR2pq@R5v wB(U{ࢀiE!Z $#? HHزnVj@Oq`'O78H$r"ddzdk^śV?>11p] P_e;NWΕr ӵ5;@/er}4Sh-q.-TX&|((@i z͵k `Y{+T!p\]Ƃ΍K=t^!!@`xu{^šUe5')Zm;ɚ-сOjMsYPd}}ZT_kss]U/TZjɝwC{A2g'o3F=mLoh~w ) G&RQ9°VFz5JF+3%9ªRҖdQ%!'91.TE'zA Frg!N[d9킮1LP's:GG^mo٨[GJ$̘ TI$[l.?9RDVC-˪ ’?GIpdwsr#4I-~I7?j^w$.N~@`Wn"60 ]N57sBla]4A׀CnlǙ86+uG`'Mlf4uKqZ}obgrFgLF2WSAP9%t\R#muR|ьxVe n= rƉ1{f1_sqj<~= { !'Cҡ iuƁBp.jc!o!31 qidxCàIJ8c%_.0b9S3cke:_XS5>˵Jж|>ώ^;O#||6ޏ7o~=޿??_ }qwI/Kjgiє?bjE{{$JWí30Z Xc$A4}7z o*ﰐ}dRA&\YA[tDbmk])P"̔<O?7:bBADi=75:4(ņb'ȇu"imZ{dKqF` Ihit&T""q^91< c-24I IJ d|2'j>u@"'d+\0)P:xtM%w`z~(v3#2", {W6 ƙI,К'B}+BQaqG?Xq-5̷?2`lak6Ǔ. gsJ.My}`@g }"=a`abA~ŽWN駋$uI_ыw?iFqhia2X 9Ћ"bvf'$0"gDv֞'Uek_Rn낢gϝhj_[75N\äBdV99FVdTZ3qr }3ǀm3=N8 eC{`|V<a]aA 1"a/Q􈂢53^.^r8D]vbZY2r\EEjMŽVp&5`H "έMB[Ldp.!$Xi"d;4R#QMJEl*vn⽒?ByE I)(0}PЙaS?̙}\mf{d8jg\ K)ْC"\}k릚}Zfj*_}wo: ±/o1W}[7Z{#:N9ݶK 8`˗q՘4@`N.gVV7NwBMT4(ꂖCh}R {͉R{ڳ\/Z\'⋷>{dg6ct}'ԦMe{Nh5$gyT8M Ϩ2NO"ขs]򋫶*3͂g01gB@܆qO</om#ߔdzM١T|( ߞHt\dIR 酈V//z U{J<ҨzֳoHNy,]kWO]Ǜ?(0 u)ksݟwԬ[a`p* ȸ\y_.3!҄G]`@H4(kh?߱S!;z_=?AܻGROYF2@W?Q$ǫDH[b2TAL{{4\|t7Ounlsٶcm1f5"0 ' :]8B@zv%k !ZiZt nK^!NHꬩ8HOcW壺cEG.E6.02./t}jK}7Z4TZb-y"]5ٰF WBavHCL EP^h;; għ\h蚍VrIg6ư$3˲~-ZBnrOdљE; aB,w1vx0&2c~!3J5j7& uVcN`X9L^q^pژxo>7xt.t՚Qf}mMY@k& {9LNDgƨƉ B<}rY!O A  {zbCb%X||5? -w{}h7)\G"f6x܆pX 1apO_/Yk;//AѽHdhmy=B::g}NMy5JfQr^6mN7UO&;ebUf#fՄoKP^"Z\SS rXJ[:mn)ӍQ/Tơ`":V4?Sn\TUQ7R>A\ ` I M:MTJTr#xƵXزrA 몆a* A,S DQ$Ft5!c\0g@x,y2 x(Pp#+=篰EUTTEEEG :oCNV_?*b%&@=3ԏVq:^*$>K+u+j\sNY/dQq<Kz~DWKD 3 EHE|e?sףXiӭv7֢u9s2K޺PuemGWPPτ'/osg754P2&Յ>Fԑ(Ҏ2XvWwlp1u+->˩;MǦur:d A7-IJmkŔC)˽`cR_'S޵FFFou:|d>븳_$eɨF0U_@$E!>j]E .RR/Q3t 7 Fҥ!'šsm7y埁Qj o^CaP#f33w'v<.>$qgmoAw==#?gi6aGj틳|9h22k+yr کkfnDUQΪ{PĞs*(-vc(VlgwmAj:Q%jGV$?m!!NaWAGPnȂn(^"U>̯Weȧ{  {uB A-w.W=un듛ECEqu6NFbR223K60#0E>b|"$7ʯ~UQGeޱ>4>reRo|ojы;ðvy!MQvGbJ#6yEϟm ]̏\Pj2n<|P[Kc<8>BX-7x*$%I]JJ8+VL;"㓱XEf Q΃UU;jeP? ^P'J2B[{bJO缏:W/my}]K[ļIZo{+'W575#'ycgnw^a#nyoh#ۼN """__%|YX1h}F.pd/KuZ:1uVcz<$79NCރf$y1r],I ;gђ5o(qaܽYx b v UCe<\+m5bE*v0Ω̞afjMmmtѽݮ*Eԑ[r[[n/S4^X̝ . idqM86I -6Hmc]wd#0 7A. z'EEE5^^xz :T}v^ù :m4K?>]uMw'QB$j^J()Hǚ/㱽zChnNvwD,T~e%x:(X R"MrۂvZn\U KK-%\,.Ο^5w$7ҼTyÿcU?y e:b\p/h%ԎN?;# s6>DJR3#!cJH ɲis>1Ԑ`u1M`k\?gO]\o_G"8Z`xL}v|id/Y{#"oC)n:;e$u woi/y^_xjF_=vX2aL2c'aNWϖRS?FF`|WLgLuds2~&|! Q|{:o|S$M=FWUYُgfI%u/(]4 }UMu 0m6A(L!DD" (%6Uc{HKh.G v/׌v׳OEw 60SnpUm/9R!oH=6X@7t3Kfޅت騥{ǩ&dԹA,-m4`%َ@ Xa, wb^ yަ'^r"gs#:n{<[8>iSY[yv>>Q4 !/h(%"7sս kޟkR)j>k4l!zUBUR_U^~ߺuSsL-4ĩI{Siy79{/j w{su`C;:g u^a 2@k1);bZ-5bʡfWhWTThnu8(Ǚ;RNy{ ZO-tk; Faݛt503 D==2y3<7,@F s|Ch@mջ~%95$m:tەCLɁO\甴=-VKi/..Λ15H]5! c'R8tRÂb v)\PJn(c>:\I6 I]I33rG ,7iEy+GjW(LV Mjjwɖ!.h RqpMύL]LC0݊Y_l~[iamχ9;31IBQ0ΘE+}Z(~kM3*1BbD2)fL:s`wp_w vtlqgvHaC* uZZd4,\0NA@`(hY1HX2Mۦhվٚc!̊lG5ZNiEkU̚(bɩDbsM3w! Xu߼򳿙C:#hV:\w7w:fJ^d7K%(Itl+*MHk uëEQD!}9Yo^H&;}^i`c9hjI A{q9^Fwd+Rτ'+JVRJ xZWtxu#`RΉ<._$S"3Y^;߳,VR:n1ȧq5/7cM' ؚ,O/]9/*(OCFpԢF!m* '~gOV=h%?sCw I%<6+zۺ[yՇlNF>@|')/apz6Ό6RSpzLakfT$i5LP6Ys SY֩guFg=dzEUH| -p% #. /SҘ5mDLE#HIduki q&gcshOv33ۘc n:5(!zMH01m2$?yGi}F>Fsiaӷ^ǵ/ܭxTίxPqS\v$NP-)FA/v`PقWUCۀ WBcןl,c1B{" pEcGYղX€nqHJmYTW6a`%1صy9Go9OoӖWv?Z(֓3. ydL{eYL{##$жMk8v2.s1Ye騶q7ƤճUϦ19s]>c}`?e~PEE|~8N˭G @==^]n#K!e=s}D@6;^bEb!,(&YJT9ʯ6Z)6ϧ,[^3<x$'y]5xVIYk $WUFKk͒HʥPդB:18ߎchIq4;Z~ %9[[߇JLk{ڶcgtͪ$@@n0ѢeŘy:u?P{yW+ki֤HJ%_7egDkk rzoCξ'OiHKZ,Q{[wq{.u߬Öz6#he&J0 B$M\毷a B+Eo+Ŕ5\3|,oËh| 7C1, %XDyC튦,J)bVIc M41*1KF<͡ƍ&!>ZoCG^ ս/ntRcgX Nl0c ;,lk??͊KA>GŶ/-v^G,K"%T 3wE*Ίs95DŰb6[yѐYLD8G@cX#F6v})ŷs9m0܃: $I7 Y U aK~=gǜ3H 7e]%4;u|ѧ 9ը҃:8~ Nz-Y.<'GD_?GZ`HKiXfEݠIb1$2?*B᪲M2@Y6aBHTY @& %w) C٤6J9B%_ORݘ˲@@^WWԒ)Zp"7XgxT }Lg5su| @o~e[ $H]g@7-|";};υ}zm߰3!9 ]rm蜾اxUY9|7PHNByDW9;`dYeWJͦR,%6k-tRU J5H[JQ=Y qC3PK[ԹEׄl\6gW4# ApAv~~$G8V@py*tI[ u#L?5&YwjtV"E"!#!$d=_qc,n;] iʵX!F<<߷y`Q $K>`"K?Lydah ۭ‘4I! bl i3bHb %V(b5嚰DUfhrJԾ.)T()r /xmA {y$8Q/qM Jq7Hzs?wk7sܾv5=o2OkRtojZ)@B 7HzJAd% Hh5=.` 0yؼ=T|)tct41B(2DDDJ$ZLw<<+kf氨Nr[rze}[5m92<5T N v0 Rs|$$`$@I\:adc!MBcͻ`TJY l"1F*"?z&6JtHA%H бhX`,HH"蓄KJJ2@Q`Jz dAT4MjC p#`"xPBfL+F(􊥌sW萱 nwdUmzA"A(PDؔP hSZ5aQe t58HS{M$NV &h#0FA! B-ۧ!Err(JCT ,δ|Ȇu, rFk(#Σڇ1=a}C܃A\(Z($QEQF$ sdg7 E!yKu͂([UơS&J C !΂0!F "$AQ2|]X0  r0חD$7&RB2eaPID”68 Nf8'5ц im.IȔCSaX ̚s-̵Dz\$Hf!9{܎ah X@24 F 2@hRhF!RHH((((((((((Hb@Cs`& 0S8&5Ci 88o@Z B-Q#4QHQ‚Ȭw*h#Y D9]0 Y'!Pbi4pR0aE)(Ub/40)`IJpln 0R&dL$UXp==@V/8K>,aTw}e Ib8ɷ_0rO]wj ):i::S )=cHrےGp)zSǝkc;Ӻ0 ɐB$=xnyZ͌ax28Ƙ-JW$ }&F_=|ya34pqdO麌VYb`/*v19;ָȒ"<5DSm4קJIkH93L{F]gntضYXtb5jio`fˑruvGkƦLEn*,Z+L9;6iNP'5ҤQHYz( Ymdvk6Vfd,.1/]u]7#BO=-s&`cV }kp֋Ed4Rk4ޖ8Wga8{k ,6L\}дH$fp짌304z;f~F4;A<Ѩ"Y{X~/'/lUE"å({EHLjEBf$G>wi:̛}Os;~ pZXj6=rFG }[dE (kN^UNbJZ}0ҨrӏU>Vq\ȐO̐#Q8Zjj6,> Tr!ȳ.GiF+ ?3fߗn nOmQgTNqRبkiEks-X> )$k HOʐYBTJ> nÀFo *<$O|%GզL>ڇ$GBML-2js9fø 3 MJ쐒D8,bW}Y$ gIF "!M*;jZ)$qM"DI(M qTVIvV<:~%nu0TQEQa1AUUadDDPbBEs U!9nC$AnkӐ`hnBUeb cPR"E:AV *U6UeiuV\1Eeb"0- UUUZaec " NX(tb"jai@>M,9H'(x$lYX ,M[v^!w@9bL]<U !Wf1))r Y d\a].KQ3A?ID P\U kZbZT(J*BClL@MD3&"j,$bC`<3<A_N1k0QHq"&{ 3BYgcɗ~}xCt PPUU,QHEH Ȥ$XAUFp@1X (` R:(1 H0000QBl #]֙HCP3lϴYWȻf&)3=80K=LU~ ]wMŏ%f(h obnMo4o7#U4Ln9ozÏfIzm$v̩%Y]Yq7tkgHuC>J[95xi3C5&xa[og&؅v2'ʬڡڽ&WTq)8#У@\Q>9$:9:߾w|< Ek*֭l@{诮;rΏO=ߘ -H2wC%X Wyn ,`a #VwڌX}LRVVɕ}<]g: Ly6{)t6z9>g;FLh?B>wy/&Z>{mD%-pwBVRna{;?m{ M+b*4< `*#RVZ:0;]ӑrc" { =Ctdm+ݱl ɽ<)9y41b7R 7.Ww}!ŷS;k*wy3c\9uvͱfǮBpnؕh. O Nh`4 Yp ~Z}&ooһ ecDDDDUUUc="9j( :q5_qZEST|YaL1##l 46Cf,AeWl&M̉\Pa!ٶ#VQzV~¬CW"/±&֯Hp2 s† c5,e_eJ㲏5(n2*w,nc)׽yҼ` (PR+@CreH'X I=v۰:Ê?nU@5O]-K{7"'hivvD2爛j{TYAH51~H#Z&|*Dlej $BQCBSA z81+y XDD@6 ڣaLq(p>#U>0l(a#م51n>'7Gg]6O|?E27[0"I.̑vW/wtb;9 preÄByc ܏k`l|wA歐\Y;icAw1~{:YuL711BW?&`TD$"'glvͻ7EܶzklI"9wEȴWx^{)0[dФOC홿Y1)6Ѡ V3Z'sv73HN'BQvpu4 (W  _^nj8^y1 PLn7n񿑼S9l^eq1+c b0f$HީÂL7~i NϋxM/+6z+ewÕ.<_/wÐs,BBq^/;ޡx=8[ɫ{xU~7fǿ(/G]_t:/[<\#= 푘enL*!(krCzױ- bk V (5O}yMy$-( ȧo2Bԛe#Ūk?n3@_GqP; Ĺ9 P8(GQđm=̛z [ Wg7}wWs8CY!G˳ښ%=&iB ^7- 42>h{ RQwsjtS9j?/O{4ʸBx,a)gIut DQEQCRn\v?qƐ,$x.ž+/<;̃4H0J/T_1)7gcos9*ܴIPa.Q<`݁ĦCyq@꣊' 0@^.;o;^V U?MPP|L˞''\`p<yh.⨗4I=05H$PK q-[A /$cAGhyKHRX܅a'$sh&qF {l VS?wv:`):cp>vǭ(Pk}rQ xODK 'Kh `;>19CBv0 q$M㽙@L(!uo`&Pn#D h{*,y0^đ Id$ 懗S䝆nFۛl$0nA BQ0h3C@n8y^S^ Ѯ1k!۝*Kf^ U˘Ywpoz]>db-\*GB̃e Jy#8^J2ry p/cԷh,A;%nу MiJLN#~byzsew!4FH(=kܑ rb\ɆBoU%ъPAh ̔ LҠm k]] q0 ĔuIL#E3D3@'jxgg矕vVRTZNE_o[U"P*A-:[ ,,@eՀ@80@ -7[3SōxyYJV;apx)n8~# Q`Sbgsf_H#?TW#kȱ"spCJCx2GܱW&M(N :z{:GqY {lNɐ-\Ŋ;-P}a3T!~-O_;##[PRCaO=m//}vץk{7O 2}tA^@P%,Ŷu=,]>@DU"x 9=|"ZK>nmL43kI;9m}`\J+'Vq4#FW d` HH !HatVB` R@BH%JB1 ă% 6# _{&P'nJADYԳ‘̻;_ec,:GHŅ]{_Ca掃Q~[=9\ `q|T{Ͷ*.\d1(6Y/.WSv=MJ2Lj!"#\&>K`np;.HpuŸuWK8[A@u`\@ hlJ8 T ~u@*SHx,ؑ ~l1ˈ L.Y+fdhcVDmo)!`pxy DhA>e"2O6<5J[ kZE N :BE]a YD`_(;ù}ѣoE݂l@ڀsp8rEW|j);Ą=\^'$%C'sW}UU}3UUUUUUUUUfffffh{ٙe]땧̦}cvh!R門x`°0êBhj,]`G+^e! @F_BjdYCN9ho`Ȕ9J06EwT Ol>Ftׇ5TcyCԿC~0OcF~^M{[#;LD:[Qߵ+WM:I )Ϙ͟>)y7?jXjς^:!39c.tCξ}E}CUܰm;Bߋ!n?pƣYƤ c5A aeg2g?fa#QGbv GDwD Gֈ# ~ Dۈ#?" !..I6mh  ׳H H&"NDHnBdɹl$$H#"N1`t{"ȯڨs@? wP%ť2o/Gֲ"VrZ0n}oQzHa)V.&xa5SKf] 6@!=8ex-#wPe<t8EH:HNh%POX10gx/9p4i}p]X\xؾs5 6Q]d E g2hb(Coe4A6X%ϯّ7`%uh ,3pOy4&`싮Al^ u ,Z&,E" 53i* &Iv;c??󯵳cYkQ3%f$Y}:<.ain?uyc|A?~NVo֧sٲ#Gӛg7.?7][tϿb#¦(|7uy'/,jAb)V"ݴMDJaixVbeH]Rh$L$=%BMd[m1 %|a@6 9@$85((B}hv6s9)Bu!+]Y4eP* +*1v$%X¾'|ٕ)^c_'hAXVI.yY*j6s*N!"I!W[z_]^{ub bc',~i?r)Y>x.sem d 25Zߣ&Gb!QI 5<ؐ sRs˴[  @g @vtN储xڋx`wH,d%Ʃ&FR#C8~G?Cak3[rz~}K8.p3dRSHzW&r""f~ ,'|dH @:e"@Nk m- X5Vg{xpW-Ԗ[KBd",9tTx`q|/;C_+Djo.\ݚ 6l-īK(g2"(1vtآ@nhiEB" _LpkP ',_(|Fn:;۝΍ǥHZl 1Z G07O/g8 L xu57˰+!{NGs{N<,y;O/cg{맛.Fcun~X6yӾ2u6 ŷ fud缇6>{?2O2نpL|F,#$Fqxn>_% L[G1p=z]Hg?aE0$"$|D7i"pM03uqzG]Ew7n T(UUQk!R,#hI@  D(Db a-d!eaA 5QAXBi$!BX `1A($ H Q"D 0Q"[_]86532?=R?Pz} HGmwMzhZ\m^vE >}*QEVJDMw;I˫ 2D>f9*R .HC!d$)gtmI–A[I zspgx]U|Z;\6UWuX=]b4|K3) " @"Șsz n+y L ƅd߽rxL- 3dABEOc/* [~k_VD#@ f[m&/y`K&x#5<'wlP&7 P3}4Ct V ,D5K!|: pE#қgk'3̆Aܹ|^vͷx{GcwMp\Kk@D(Cia !*|󞜒I$--5S#Wg}ϔv9N,̽:Ğ_[:O/? 1e'آJ:1me n RI3AICU aՐe^PiAɲLLV铂AGUXꮚ-TWu .`sRE^YUAa:Vs:,I\>rp 1zd cM,h4Jr>M J0Fi7DU}d 6Bl+kyI>)~hWH4XI<.族[m#GkbxFK: ܒ?;V,?D0p=;L@ 4Yqd<9~U;Ȁ`C:؀Y rQU_-7~5+f,nQ5w y0]:}g񿫕9]w>6a:ڔ`u!̎.*0Htb~n :-fLpAx x0ײjV ೷qpp rm$El{Jd: ;pOG<){c^ f硴'fn>\וp$fd,Њk m?u;PD:aWJl3`L hv7_$p|յ\h2=/]Na#8b#4E801:eݖAɢ$ZZe#mљp!36x=mޯz^Zf{80Ã{  "\1ak]o-fo @M\"ލx5~PU0K*f{~րv`׉BbPiT 8CovN ǀs8 2{K!ӿXy~g݁ f?Wa"x^7ZW {0D g8ވ`Ysa$dCY\v~KLz~98tozZRk׏k=fҪۿ p(d&e_8;͍>szZu3Ë}r،sXK+r";E@GCZ$0 zg2V1wGjnDA=,7u4Vё6<*5Uh2ΓbAv附/$[X F8 G;99V~OO/"p@׎#$$4"G""0 J09F0;K[!҃Τj.F[Uۛ;e_T{?!KfJFч0 4kq+cW,Tj)T*&h[W_M075+i{O\hu@h4(L<5,K#qiDK @DHLmM^ʏ@#xUqar=qhB1uߣ$uYXƙ_.#wud5:6yפR@0O9 5;1X=޼(>nZ2U˫kd\c*!-?u!]{Pӛ>8>o״ug;_XnŪfm&W=o3<.nԱLy@l d $h_jKc*+2~#fij١Yf/Jh.jLVaS1/FN+܆op{wtǸc{y9wUii* lN6NA%͇0{bH0ml7kb:d^"Qx[\[b5̲P+3𾸙"($ F*ik0a@ FQS I4gedgA5~/x1V5(V yP7G|)XHC 8zxgx^d3 X1;aۼ❎kɫF-W}f0͚Y3ljkuYi޳(߃eBBՁ}1-)c~y@G@[ d(TS!pЫ)Z@ %@$1R*#KhB}Hy d('nQuX>7wu(AJ1PCqk{;C۲-/$<]lN"{aV,$6Fn0y \X=U|"¥d% WFPlЏB((5䛮 "q ą"1}D0Y@ؑW9lslt ,w7FҼ`Ȉ,Zүt-Yj E0FY"ĀG*=><ᱸN+84U}yQ $\!6Bt8<`^b&Ijfž8)ޜO)>Uu0 nYױX `R?yֵ?sh⪪e2LCKI2mZG &R\D2R%?<];8 t9g ͌!|3cK`GXi5xU]Y/aA"|zYۄB F"2(2XI [ usLŴm%aH( -$<Ԅ؂ʊMNn_xAa(x"8>??}@.oăvS@-{PA4> cӋ{Tr}/yjK&f &2x0@1_z.e{0>_wvqm:vo]R~'Ì=AzE5rh&M8KEaD-V%!yD4` [✰:huQ5맘_ cHaey P1]?YîZQde.PM#c}y͸@,Q*AUW|2lpXL I"fsc+O>Ý{62wH]ri7Hp3G"_pq/=2oZzČoG;@(-(PRmcʼn`3ʁd2y+O{&urҫs8} ņ:wP sqd7~C/NBj(}Sׯ X^v Krti@d#7py6yҰxH $D}faBBIL{Z̟}I)= WżH--f|%Vϑb|!LJJWRXh$p[[i;Xt@vo/X>V=KBsty n⸄Пbş}TgIhRh0U`8`ypK H khSD$$HH!rJR,cg$d1", 'ts[A]}IM@a՞Qhs-a#[uD Ep;+Ź kFuou2F2=ff:drQIS͸LXOu7F鐓|y{=^n:6U=0;QbvWtZo "8'nˤ@mj)) n#UCJf8pjNj2]-=l]E ϟG?ߌ{=y{X^=I/vyO-J<%BIKT$~r3 52.cq^UP?%g?z ^f( z$\C˴$ޮ)r( Q:%BM5e)<ЍǟNhCV{mn/W3&^[{^2g `P׀XKR  oa8^ܺ"%"iCؿ@FΝ$+w=G֜Cx{z$Uœ1 0h0%#ex Fn ($Cr"(:quL޾!///kyfaM1pE>}m_mc;^.t|aEā !cr _%|vɲX@ 30e3]Nb/]ǎs> o7Z}`t[h%X'.Hz'tQ];d;;WHKk?'oKtߧWz?}{ϵOާsin7@ lCȀZ4#޺xf00`Ռ [ 8I޴ݺ\x}.maYTQVK4(c}o9U^6tf[Pn]jƪZo\IN4 s7cXbE&•]ر*b1'f2i8:~xzyX :ϗ|ymCj*)$ Lf4qth=OS>UPC:L H:IC}?y }#~Ѿ;t4sIRI FփnzخZ;BR'@I;Xm?CU`>Τ_.ڲ{ 2Q\7$ ZH(Q*dVI,o4?zLX.`@P6 ;Np_WcY&lfi;{x]0;~#lx SE4j ޓy{ _:w2Ke?/3 ζ,Ckm1 h73(R r^NbzYHZR/Qp}ꥼF4v֥z`FR^NI a4}c9HRʐXT4pMƍѥ|K.vb`]VP.񁘆>i}(^*Ґ 0 JA1VID!),5!3e'&$ 0Bʈ d,`Lə,Yb" ȌXIcXDmq9s6soߜ OO`z_|ǤzMTFTIPF3%X`|(~oe\?AMTU*D-kgl>KYZQj0I7Bװ] Uf3? uwzc+ܦx-9x NMVφam_o]yU?&_R{;=[u'C aڇ4=*+o#ީ=Co/ëؒ4FWvz GWZ\ɤv熊M\%#i[ZtPTG܁ڰ9\&j9]DՔTuThVou).֗^#ߣ_{_{oIP ?]T ,E4hJaWֱHep+1Ve+4QynSl0kFf/?miO̱e}2qKlf-+ dZbAq1Ĩy@:fӟҀL';n[qnDpvUL.RmmzWy_܏s'wk~ӵ~3/Gnqm1L@޻[RsMRVu)Kpc^A";cmr/Lz]zwb `D;6]^~֬"|¥vw"/[VѮ"7VB1ZȪO{DoKEKZX=ZSfeԊ c:]\N٩?MZk 9t Vnr`α H~}r3 bW/0?/9z@*N('ꛊw~!" LH@큰wЮ,"I+|/^#M +4uYV#q eh=|]3s)ZKb/fݑg H#&  Aw_{ã': sdn1RkvomHs(q:s^[V_o՗>@1YD:sCO}HSDh!9XTE[Mi^H  Z\0v[{?as9$.uDTa 09V.!>q%oCKe-AD \xXc_ze,L` !`pDF57N;.ظp]t:]n秠Gl^ڙOPE^νs;}w~{/? xc~^?׆#^/$i6VGUg~5}?*@!Ds sT Kaq&=汏iţh:_տwaJt\@ȬP, )Z!d).p8Q)W[M8Z]ݜG?d&]"0 ` m K6ѷf FTw蟷C>7ẜ6JW7/L= zH"9!&?8@~M>t$CnGvbnL/tY{)RK[Rwmڌ*'A[&&Uh;AB`E$RG#>k7لF$bs騙֢e{^I)v}AxP,#! }~H<;>f. #t!%itu+U bA`,P\kDH/Br=Ƌa⥥.ˉYǦl}1ܮ}|Hl1?B}Oc5JMrTQB7\0/fw([bk-mWp* a`{!(O٤y>G8RQ.X}/[Va/BP،XF~]0CF,X hmP!sssjJ]EH➥:au ?{uE+t;qqwm6/ EQ65AHlT(#(`)oz=VqH6@ &4 L+XNUOoODX DAb>zAWm!<9U@ bBۜځ>z}Rv 9lc k![|>mb'] : nYvdV/ApS &2b_ٳ_%~7NQ x'{l7I;OELh{/تVc6Mˆ w(/Z5dćn{,٠B'kgbҾ dm$]DDK Od.#ǏEVȺ CF!EkFCuGt!H2J^h4CVI′bJ$910Bt]&pנ)lfBё҆A !i ȍ.ˇ\8o89x@]%@j6ezxMeaWŠ1kw}Hr~s~W;/&y<4)N| JpHn:pn#GV*bMZ^78yYeI) !aՐ['$X]B0 |\z.[Ől No0 $0r#DJQ:Y Q.`G0D$IHBD Q H"@/DJDHDHD APDdB Ku!HAӰ  2h$2 ЁJ)@  HQ"`DE %(1R((P(jPBX4~Rs9^ʶçvGQ'!kI$5;3LPAF"0כ䂮JHmZH# O0=]ޮ p}p)ɯ?LãcoC!L`'lU$(1p9 ;y,bV]A?od8bAdCF x}.T}ߤ U_7Igu/ IQu MU !$gfA#JwzKӶO_}N3gyKz˵> Ebl HmRʢ*֐UG+QvQcŸ6u@ȁei&18m8N c)],U^" rJc ܊2 us5qn.`B0&I nrըVʊAM̻h+1~YVƕP5J px`_6R2́BӬf((bdTŽt38_{Ias Ap-'p.vϺ^Kef=!]cCQW!3Ysa,l{UBqi+kkH>u۫km8ïX~=ބ~-?Ǔy:oWkOgk/|~VmѤBP⣢|]*@5rOj\qY5)6-3~~]5@5[A:uVu?*xtQA`Tޯ]j)LrA 坷9 öZf9${|H_^#pH蹛=ٰ>gp @ğQ"~o&>jcc@.Rpvd0>rQY?4Oރ8^ng'4j#$$[m;i0AEe #H]T=#w? GITL4+ p&اl(K,AD9oؠYWIE͑Vܛqbo9n S%l^LmBD`c_'X?B(vnA5Ҍ{; +ʟ3`2Ǯ2hXj]wrɭN AQU+zb]{G:F eURLiJ|y2AYїߑR<.r*uTMSuIY:M5sLL!CoHW#,7+|.E*%ߠ}(iFpM*,AK[~eX+}Y>D!} _^o7c蚸*.($h,&*gT׋޻ I3l{3wB~ c!X=T+ۈ`UXøv:ˬ~Tsv=X|7Ov+ڲZd>1t5.xkQx wӱ֦gs[Mp)o~.\|Z~jrg:I%NYf'l(!@⧀ln 0"c!xT_w_&(/^4抢xR^ 'W1zrӇd0#~]fѢķ"^@=:p4-5+z hdW!mѶ$<-i޶ϵ=JOz(:5g?|-30Qc ~\@D`` (F ;qXs9?#=DY0l$laXR׃SeIkZmhcqDz ]1`ZsZ1NhLIm\/ٛ+spS̴\j&4,PQZ: А6'Gb>Γ~8;< {ػʋ!b/A@!A"d_1}  4i;>EY|I>{/wI$HlO>7c/wv+k<3L| kΤ8*^S:ؒ01r}OXt9oTvV8HA.s]gPNԼ>Comޠ-!W1_wܔ"Q_UY[BzS󇿟͡aXhQ[p+vr?^>0cl|{=Z ?ge1ֿ/IT^K]M^n)_h(V-9MV(#i ]4eySāUMm;6l4 7N`ara0/_"fATڝB -U7{Le-1ǠpSUfjf$YRd)άRKDR[ZtX"S9W*Dc1 JXIC #XL]Jȴc'uM2 ]dPrl}KqCȳ杶Wt܊Mr'PiXyeYeY"8|g/6_ b0I#,pT\JM~,uH|<*YPyW' RhZLF""DbFW6sĮ/H}wOyh裒?{9gǗ7 /'Mt-x[Ve D-,gfCkdS8v3W8>SR;5vI U^C%޴~]>w)}+R8@lڄڞa>!_Y}~(hU~<7L:l7qYj"*EU%p&qSB1teV y \nO &^~s6#|VzM"yQ{@O8!m@a{::<[%Imk;^Npijlmi8;AE/]0Xp^i`sLTZc9-rYej+`cs&n a6F.F#E+"Dq88]$CcICl&Ct~Z- sD'0PlF1eX3U5\%y V>\>w i>GpSMKx*IZJU($ \f[lŪҺ9\Vqmw=^E3{Tq̻<;q#{i''`SwyB٢}" vHLh 0dBm͆jBjg@`Խb4}ݑy?cۨ+BCw02^Wex/qfէ5kPxǃ_vǿm-kUB?T;rr╋X,LR1't>=CTB̉&nz#gzcm}_~gz(z;z?7]ֿo~/ֿ]Ov~:^)pӧ?( pSw3c(3#h?V2^NgW`#HnB҃o?@d09 MIH$F'gV`B0d6n~&!;v :e5~enr~tѴ_۪}wtow"0 B7֍JeV2O? Z:9Ӏ3+%GZ|5MQ:\=, 5 Il(NC6*qϬxϏA*U{rБٹL@Lf}5 *ɽw+19faS[o?{'K:n&evӂv  SrXZFޡ܍ůZq{q}N>syߌd̙fLɘ`NwڱcMuɾ>m= 7cˣop,诵Ȭ 0 a;\P1=bb>^o^?{qiy |~n -8+g6ÐE`uh1cIz :Kܶ"u>sZx_|·,:j0vw~D(J&0HahKt-h<@'~{99RР%e?j9 qmhZsj-kkLoryHQ8㑭a!};&&^1?1+!0vEEƋyeY&>eo=̩L2=,/&AV)T?GFZ} )wv.8%'`(ڶvo 8;7%mn%0( YU'tdrd?Щlobb%Nhn#֟yVw=$XM>{Bu䈮 ҵیT0/^r!a E'6*x'z`6B۾L|?X ûIb ji 6!gDHRK $E6"*44]78jVH}㌢O[3Hiw`jl!$$?kܡahwlC=cgQ4QJVAs+{nL_9FdL3C&*)t'a318a ƥ8Lfvrg r",T|AA$S4{%85#_ܔJi x[At: ?GAUOy=Zs~~ħzy+ o7G{7gggi8.MS~8Vܮu8=^oS7EΒMDueMGGQŴƲ jN#y@DA]zdE RN,ku)$;f}#Jv YGwwOX&4H3 TΊ'E&,\*+gc*cŦ@&[|_Pc?;2e'>ʫWe_6'|mSsT$b~3Qh1?}IL"|*ocڝwcT쿏Ɋ>Zg⻧ިԋR @"_m TjYj3=}^b%fǙecP7$89zjr U@VEY[5`J Orn< d8iAXLyJne`[8*; S c$@\es5 jzj:J$|mچ \ɑHF¼մi-.c^/aߊW*'+o9ϓr7~gd\k,82x}Fw00S VVR.brx}]TVw,m "X}bg1Սn\n&WJLy8}6WK lqhl3+Uu["YVw ,kD]]_Mcyi.k4~_oō1v[/C}sw<~V* o۫~:Vv^ש]<>_դ09>nV0貖 :CԌ`D|.9oڕ{CsQJ+58n3aҤ存Wm~ԬRsp閬%FT5ksD&ascIG|p*P sǺ-LC\9fO0вzK- PI'(bńht!Mp,%!0 E]ZuRr`Fy3ޑyX쁕 jtf-*n{wh[[c0"A~fc6 Rӳ 7}k&tVP b=_ t;3 q\G`\ /ʡD!-˗&y I=3(C}aDȢO;IBAMDAD; h:7X(ta&@C@ǯT{Dq{X,ഒaIO&k!|=#7A(UCV+RcHŠAWu '  !$$ fO7 g8u*e~ØO'U#ejٿε$J$ W2)PǮ͔wBbB@C s<Сx<\CR2$kvMP@^{#@@"4!Uv OU=<|>y D$C`,Z\DѠ%"YnkXkhܱ0 Q@zm( VbJlo)x"u80kGPdl+gHD()W1Aы._McDȩE !_xLT~*NSIivY8wXKxsKp;Kw_o<fu9˲`u)g%Q̌tx<9tȇ=˯O`w5WW;|]XQ5_ t":(oDc%AI:z&1Gvýkla>h$ wX2&ǐsu=J"(QG=ET&͹40uy3M@fWNP'FhPʽǚ6SnM`lconYSFj_5/! 󋻥Kcs-KapA+NX.{n< 7jv ^[^.}.'ٺNYw;(l`b۰5Fm]=(u]kQ_v >lcz.cyc~!x|>?oZU_k/}0S7xcG$k/ӗz"{H#i0sՎV:狱>|/廙D+\ne*.]C5q(eg(7_w)h jhʍyRj63CB@0|W2w?6-l\3\w9~$Y #3ρ5)ͧq٘bc8/ϸG_chpOh6VA#c!v韵wb޷nXY /D.~‚̯9 !'AUXyѮ8O(f5sJKݸ{ȊqNŵ76$ "*$`p̉PϰUKny;U뛼n$+g&AT$@0 D "DI?;ʤ=ί q={RSH8P?"1-u Â[0Qb]MwǓS-t,dvk`h^D{k-?dJGs\sA=1 pWc3%7{CoRqÌ2u8H##/jLv +8UB0iF#k ~ 6گ}CJɺAE ̡hB "ҍSjSZ~{N`y|(q$HhP(%H@N#Hǫb HX T񛂇"r9 ZD2EI`)-zDC?_mhQ>$9/1RERXkǏxn:LA=;!h7$ho0f]TdyS7  }@w%bv` ᑦb VKpg,KpD$UݍϏmpŊ|xa쨮ɘ0ٵ6a7.hX(DY{J6)Dv5ӭtd$6iNA$ I.H,bĂm(;w>C>~?gcP9PB *Rf>}12&煅!eXnBjNH68y bt6+( (>&qzf{4$qeL3̗q -N̲Zut]0uꜹN0 $j01LQA&-9]԰O)Y ZwK&ozS:G+P!!Mfo!CA9!=l_eXݓ=D6 !bбkjN fv0&qwl kI^%<}ǣ7,c]/\=1,bHBH|$p =\<>P'_W2H( 2P5T 032NL(N">v1" )H*IEa(1DE)B TRE!F@ " ",H *(AE*dHQb"DQ`HF2BH *ȡ H"E"2(,A 01=!ȡ"Db@E8С!v !t:llK S|23+(D<(I#AȍEN5,Qd*,( ڡ@1LDT!iDC}\a'LQq:Nw ?NzAY  쪫>|n W; qqӺAr tn9hJGyv8~:tFHԸ$0{P9a1t~AD8Dhδ!ȩx=eCl䧓L`d0!r6`Hu.i:8{`V#gf0x5161K0U˕!E;4dð8e iNFFiSj#T.]o 5 Qj=@B ꢼvB0PA UbpA !@N@79S y=BPtG#f  H I D6g|t^t<{USE֠^[k&e_D̞龜@6@SJb, {goiXH$ r@y U1a}9}Ǐ{48XgZr33;g 0D`FDE@ddA(z7`R(N56"t3USĥl!K^"1+#(2HMP3A !(" $ B%@i$3f _W볶u__{v&?{eX=nu}*оRrq9>ްcڒ0R1cma2r'y\JνtֽdmRb`04Vd#FKkHhj 1 !"@M0GogX?|%$~ċ?%mxx O?xj^-9b:ZezLu 3QjK(J\$1c@>=PIVSƶ6?6A(}HMW@sZbjnGQQ{27kV4843Ll;D ϊ)$%?ը5eOѱQH$Y 8pvs;b_{{T zKud\YdG.RuH ?M6ORd++3bܛ $-U4ݾuYk3t%VɄzx?QҧFHrkz$3*[ΪUI))((%i^JO?q7Q|SjeӳD+]Wգy,0aܨJ+#"3Ê2sI&1d-;3 ô' $-#NXV6ItQpi>s *x $DT>;R/dH@*ȽeNgAZ ֵ߽D=}9Ë+Ve1Ap0Hg^^ Wd)O@QXI a꿃}yzD#>YIPPRu] H$HAU,AS`!qUl^ '~J"IxԹ>N C:%!@euhAlڟNŊ1Ӻ$#"8ȁWrGo;_^D>lEg8;:|"+˗2<:"@H2(ٌˠ1Q aOe.uIiE Ly5{GSu2E$"uH$E!,^o[#NH0G6BG8᪪{2AM& ,oDGm(S2?͙cN/{w}3z |d1x?7`yKA G"5^omC)ɔ6'oj`*i5s=/!1wh_J86S=3񹅲!"1QՇfض]tc[ "|2+h3v7ς.5f XM6vZvJøzнlI~q X5b^}qaJp0v]_XpȱL$d9 'JdF3> uG1"[rsFãna7W~!W.ܽS/ Bѵu鿝|/O.\w`2l^[{3 TI_2ЪĖ5DF0K !&V>(FYS* 6+ךUmN\N$>i"Y Z7L3w+ Cr[ȝj~ה/dS;}q:dnIY4PiLޮ}~Wxƀލ`]4FbCR.Gv6qLD~I.,.'ˡ%`n3A_|!a}6 H(ۜV/j ߓ94 !$b0oAPa˃$\ :Db Äq' `.Ufg{$dJ#by"$̛ΐq\N@@^cE^Oӯ~Ee TP @$$2>N XJ`p'.<20jFY!sdO}.LԒ !-s\{RfI i9|!Oo10`O"eBA1$}bX,wTD~)OgJrf%I3DDJ>0a5I[i9Y MW8#D`H |nx*/y\0}TRϽw$21.W Gܸ,3Ix{˓/2==(J4r>bdxKɇb EAѡ XQ<==&9]̬.!.UW9&*0$"8[~wȦKKť+Og=6]MLAƀ1` ȆFdiQm%Q[²Hu:,F"&B)b`\CHXᇤ'1cd h.pbへ V~XqE^{ZaeX`&8c$ʼn HF | 9[]?uښ7my<ڛk#"d xMl}rQrhjE׮mhh9$9dD/-Ĥ I:q8<"`-*OU ,&hꔼoĎ{'`B&ۚ6 V9:H+ 2KIUUʉ)N]P IOO*]6 .H4 %7dȽ>oug |^r1gِ+$ YC&GVKIr%n"$\4aΜ[/ m|$DJHUIUU~^f(苓Bv̓s׫ l-m-EU PЭU9RT"jhQD7 w  |6 MhmJ^N͕1 IrCa!H.iqXl6ieAxXsEsLD"ʹb^Rß{hX@7S>JBFex$"NtDv4p4{0TXa1ddB}how/@*Y T0:혽"YH ȉF#Msv SC;EљtJ2H4DC2-8 S )y` &$&0AhX:壇>E~eTM?MwUaQ^~mH uC{E`M$Q ASc 6+@:LùQNJuᇴ20 $Pӻ`uvv'fu- vK*F$c ٩ 뇶kr{Ab`R@)..B烏Cz/Ҹ`w I$rȨrr+3E&$!CM71!\֠ Y[,Q bdB&$,"()H#X(HzB b"ЂoR##,T"(F)H( bA""("(ME AH2 Đd*s F j \:a X$R LrgNs'sN@x=)C~f̡}T1NV*%ʥƢE!E2dS'8|p A]ӶE26 ]=2mԟ8$iX<4ίg>LOyS|Zo+"Fs`_3:VF5f/ OƲ{:_QN{{ޭOA=vV_WgвzYoe[. ͐zn{;H*ȧE&0b'Կ5Pl BD"ag> v~hd/}Y}ȑ#Gm?QZs[G ˇ k 91~Ҋ+֑G9K$9?YwhVXI* 7 tKd0 lT@% Vg{1]Jͨ9Q9l0w&Me?@ PxY6!K)L!թe\Pd0 2AbhX4шwvQb(;M 0 Vځ\69KDFm:a `vTA8Rpq 2T]0颁lba7l\f08‚*Ģp; h5r"#@Vm??OA5MNyqA->MW)ɇ.N clAwؕBf y~E2bԓ,o_C?#nCGKPwFDI 2X g:|F`"1I~,gBk<DDQbZ=۹{m=V9EQ2y)NqReXgOg(jSWS_qK~5[8{YYkG[M H0κ S[,ICL)Gt; eB#8i;b^+O\Gi0L7M~hy-#S aLD"yL ԛg'UU=STU=P3'BŎO7̽Wަ֫ ȡݙ&k<=D̊"CLQa4mT f!DLY%aSb(q K* ڄnm KRa&3ڭbhD{)Xbd؎ Y LƥV ymR 5l< ۄ=?7|$@ay>(f'B$X$7)!1h)V`uf`u\66m#pxS)MrSkbEbT5ٰ:hd?z+u]:}#VoKubyZmm [cDݏVF4m$Wt ib"-e*]v&5Tw;SC7~$0!#("1E,A R@$RDG @ Ŀ4PCl H,#a"t_Ay\L.ɛVf67IpP k*Qkٵ9? Pᠰ$r~'u@oOzL^*'_d D .Nn;ѪF0h}ׄ~YN cd (|9YϷDT$WDX pRpd@ͣN}]E wiytw"r |KAt?Dx NVq%6H}.vm a7aWPA`rܤpLr;!c0OVm=MVR@P!$XĄ(9T zfNaT=7l-ntwrsa0H"@ 0K&zKRhD4¢T$8b<:|jVyx$ 8 Y-6ܞXmAHb-_y1k!XHDIKMueFE SrEydEoDX,-sA*qژي_W؀ݮt 7aW$NB!u=ƽ8M#P{ hdSC7bz^&Ag41س H]LD!@+̓ Xxy:PQHg PP8*U$A"*D"Y03!RȈ7#6 $Eq&l%خ^R2N- Hmj(,=d ^_g-Yq;s|N(BD^~q5{ć!:rC"vdWG:g}׻؊qGs{[zg(- BSM7 |`M&oBgiv8Tk0I1d_oywW R9QCp|BT}3 <Z s8 xR,|cZ6ts)9.Dҽh~ M@:jFxE , iQ@ Z|Q8 lEgdeWd4HRS I*f7AA. 3Nj`7}8ie>ܘ9 8fjNjN`eDĵ #td9@!("f,X&P6Ka3elAc hF0S bHװ{{:µS 2ǫ{(=J|䄩) Ժ2zޫo{C" `(;6>*bxdURHK2f~ -,ԏ b!J0K-g-&L7??ny *^pJ.؋ wz-]eu*]zŝO_U|wok}eJNuGi|;=G)mh 2Y!Q1f:pp`2b]^PYZ &yJC:ab3f4fgEkR=m5öX(DW[,Gfl[6mB5{f)IP魹eFt t: ಴1-k_"x5Ft7Fќem gdB!" N`Um1 j^Y.|:?/OcHY339l"~tfkm4'MP ]}+Y`yNkj,5FʰܶS?_^n`q*(qV?-Np H$΢3HtRFn5PS*RAu(l>lsgmf4yڭkIswOzΔ`%T ΢ ]| 2f Xx8vZcqAS uMlfk!KChP 0A; v@0רr Q 0Chriв7X'-R2뙬t6'"*"f b&1%5,l`c43&Aڵֲ4*DNMl)f1s.cpb7VZp{3)!> ㋜ѳHlfo x9ہ1,3HsZ(, EKQI!neIMűw0q.U^ 5鳚&)NL5]*0`%ȵC1x4a[q2ks:-7%6 Y8kX0MܫќP_G.t9DYi:aK#,f#rٜ 3"`WcWv p*l BG>,:3:-z7 HfȍKs9Q4iaKM>O&JdD Nm0k*-o{s+xvZ,t1IgLϖ0XZhlȃ;gl^F}DîmR .Il݄ ]8q|6Y]ƛڌ} lʒr&' - f]1ŕlJ = MFcll,3hf3h4gY-Va1fbP a4i]EaIky"fIHFj%P(!IPb !ùgGiB\2Akq`\isٶ Y482egd=-YSj., -_ w'"9j7x @'e,[ƶ5fan@ڲno/7?~Ϸ!e$|;z7j<84";YjN5MDΘ*8{:hbvyfpMreL?EM35aQfb?b1 R6d sV cb|{| .m2F;H8[WPcW#ɇ x0prȊV-ʰ(䟖^-? Rb}陼`TY^\= ܳ od+%uL1[)9TV0Yheh}J3K%!'y^oXX2."N9V$0pv>~6vq}G8:lr $mPX- H6[LCj(m{߶jPps+)^JwX72eWysbUIɄhMNkS0JXJro Гr"' "\l.С1G"P"@,X(UĻ& XU $ ITak:s`(`V3to ˠxjm1&ڽ[Z.SA/J_MF/d#p|jAXQNl+a[^H@D2 +VJ H6QHh6 #E-l7,S2TKɼ{ck{ siLލ2F22+,bDG{4YecF-&C Xd-&m-pNz dF Bxa fGs( qJ Q@[8?vdL2\/M@^ KoD).kP_(Dd 9xp #H`*4VX$C!} YGBUH%HCh@z4϶4+=z)g~Pbg ̥lH"ݶ߱WzW@ڕ\ǂp>|O4kOzWєjL}FUх)H1LEX,z*_}op.HBLZ9iC/C&\*I!Xyۜ}f߳2EIz>Fj8H}xBbZֲؠ y4l$\0?nAǺoH $ޏo벾U; sH,DH,"EHHEsɾ  ,"* XE ,D،>O: Y`$Bj(5n}HƂzRtu :\`(jUmnJ =!нhŘĆdE*G ŇӬ! #Qd$2#As:if ]gsv~XY)"FdsFr\kAR`nTMByй0aA߆ 6ۖc[h( MM1Q)ZRG.$Dp  u!3 vy#[Rh|yOWR) n 0MK@TKh m ;;.5BvXv22zg_k \4`0Fre F&לd  "1Pz,8w $b@tC`f ڊE{}陲Ďf @c hTlps6N\cLX-BBp'">& fmsv a;aJ# h&6AƤYUi,)H$NKÎkЙg$\ɑw֕0¥a8!XwJf6Le%-2jB3X[a7,BTYjER7.I\^ vɬڄ#ZpsˇV9KMl :3L)0$h4WJ陁 HPs@dwF@ي@Z%`@cBᮂ&D B X)`/Dɞu4 IYac! wK`0* JRH'H܃),O4u"!B) ]l'oS9 bibL6MB:5N\t$ I!H9ƑC& X_ԑ+3I=}h/K՘ l,!zE 0(FkHk ,"dH$V+ ta@E$Z@% E!zb KswZź .0Ɇ?>oky;8Cìc5fAd4ZI7`̘! *J3`TQbFxR.s jJOa(CB,4R%S-܆%ElѢPd! ^`}I= r5NM6o 7LnЛL>KH E"0d& IX>!D l1e+hES:C,H0T{[ c[ڕ  sS0+}["A|]Vh*b"AI$6A$]{(L=Pͭ,2G_ή`K`trB2 e^ZzNv[nRp5Ej 1 *C"LFVY%+P6"<\}k E'y~lpkCɕV";M8@b!Da=oA89ˑ͌ښ &"n (5Bi߁b)^3(q484[. ]D܈4 7FPcX3 FiD!",1lx<22Ѝ@g7 11\g4>~^,RF?io{4ar&m}@ `\ |ZN d9]+k͊YTyP"vύˠYzV{Tޮm[}V_{Vz~vkmO塌`aLtNz8'~g2 HL&)7%~|R6E!BowI}`a|-@?C , c=I1 "ٰsģP=:ן1z$LAāYH[K b'Nj)B;!)J&牢?),*HȂdԫ%+ 5(̘o:}D,74C8E8ߍ\&(u9ٸ{uCWҺ0bV )ޣagXjl?$5곪(i&) ?n'?c1dcj jp%O=*Hf^ !)Ӯsid75eH!!YH䯝)??]v &-+J#Z#t>))D*@ `nܙ2D,ѝYҐND;΂%ejRйt2~'rʨ7>Og66P3RjOaԢt`zb1>ҷrV@rNm0pM0{A햇 k,Ǯ!Dh" $4m7uXJ| {lH!Q zgC^WѾyH%E2vޛ 09[nJB}>ŞcN&"L4ܘ&) 7mݻr2%T4co' úp2Vag"\*jժ #ہ ;OQ,t.2Qĥ%F[ҵb -K$Hf"v "|ABi+=` !^ET`h7$O9ȮNLpsPǓr&EBȝiq_ekmcwա_Ub;Ndd|Rx6\p#ɿ82, ?[,E?gm,'+^aF1Џ_ |KHBGǩPd}1QE]{0Ҩj83eZ =35MߟZK7nWB1E&_cr_61ꚅzce]* ۝W_dz^fV{?,zklծ# ՝Gvs}1O='5SdQ\"׳e1iD)m2YqURoBS*C<.  QI [E1%%$0"DH$ "AH˨ /֡YkpU 2SB0J(3ro(FN>FX1<z p?|O6yE "0<#Ya\2 ]j0[ag5T VۛGo`!}KrѐxD1SG?CFwO“mS~C~#kee crdE jceF@㔎 4NRFvĔ%Br_dz.g&ox/?9o~}|ss0(ĎU]_En{a : f[L̄0|u@F5CҊL9zcA ^6~fY]#;{GHk$n;_R^G1޹ܸxXHw"*>>'|GrtS~'`.ґ ggHt5K5IFY͏amxͻy>,' _>pDR`0U$=X0{]Y, '+z?{9}^D D'uwՆ6 oړM@;bYm>dZ֍H"$FM>M@@=fuҚpx qš\1 D@M1$'u @U#l@T"d8& .rL"B !6mLA6P Q,3: 7 _9^"!?M ?.`Z>_[T.igE8kA3%C@ 1q}wT]s;e>\zH@wuO2.\t$ UڗȾoLQ/_%0Ē0 vEV.q8qSAԓD`gɭ[NqtˡvEj^Ԗ_h !xb ҢPKMMM,ujFf=t03M0X1i*ECvQKahm**beJFHxHB?o}\~k>E 2Z?ѡ,뎔(,k|/G P&LeۧKls,#n~GOȦzWoC X k~3r>J{_,ÍA\(ɑAXEU*C?7$vAB$Um;gpSPց;=1+NN)\ fzpVW0-I{UO PŮzS$qgTÝg=v]c=tu8_ FԂۤu ]:}Jbxf1EX?T@!(G?^SZ$5+ k`ӯG;oo`xBڂIE"$ !"@dHFH( *2FB"AEd",$R dAw C K4- ̆aJ}v-B3 Է>څ o$8Ef7 p«[5`dn R#W3  .z\pUL:gPkcN{M˽ɱu* ذt{<ĥ?vX(|4^?ﵿ^.g񴲺x| ˡ kl7_.Nw~?̝e3d#JqrԲyթ7erOhԗg7um`c_0*d 0P6E\FW Amw򈵵Q*O2' yE332䡅 L`djj^X$I* LPsKu%f???ڛ-Nt u&q,`-fx*ł%l.?NquUr3E0H Z,>}CYB&PYwD%^!3?KDoخb.gɯ~メһ'c:(lǙf7"/dpTA6yZ1z G lkhdc3SwmS`x%=] /1#:BX/~AA-2ӺuQ]@8֩qgzh> rF_| P\ZZ *qzQ.IvpwyveUZPIz.-39OElUQz/.^RowQ{M~ rP@-ҁP$T1iEAH TK 2(%i2M` UbA$dfa"EKfṔ3.欒=* PPF(+#vHX1 C&g09nkD?'4Fq:YȘ'@3 þnFӅx烅#ym cê0B"TIJKof=ry[TDL" "똖 73i &YATETX"FȪ*QEQUUEUQYUUUVTUUU"bHu,Oq+DGW73SE d l a_eV"{COz|?xS`&bt#.8Ԏ' Iirvh:-3ݸ$D@Jt|~7j$ B[H~~H ȷTV\VL8l٘ 5\,$ 054 iP0c1UJ)Wc0Y˃fṱP@SfZr圶^- w.f"YUm@+&bmgLla*nD1D&-.\1b[[xTŒ( +ur JZh[Jk0C6HZiB7Y!?;?W5.N"RI L6W,LGs#h#b   :πdU,I 3EHג&PBF($Jm=J`5I ,6'_cAIBk* N=IWjqp_u92gtTZq/2$ VE9d"J`RM(C7.>WV4s΃"L,uZ3㟄LUhV$Ba؅+ae(R QD BA}XԑIbQ"*EA),aV($ B $CE1 EDTT807h{zn| jCdpH5?V}+z.(-WvH5vA^}ƥ dZoN7̈́ 7ZzШmO?8u`X7.ؚCdL9ݥ eak]!0& 0C[4X絀s"4`g$!Q }0$,R"X7&4bʫՆһoAv  <~,}U}͝r˾>RX:펡/BAF ER@,:=!$$;\8CQ`\xvoȮm$,eҁHlX-hd<)쓑91 8*TA/iy6$%O2TW`2 9#/T9I%S# yjq 5 %)rJs% @SڈXvh%DsOc 7EBrƸAוTp] |;6n!09, e13Da ZI-ւu{$ë~ )ה0;18HX$$`@`0A E$Y H0 "A 0 HE$R," AT0$BE$$)B@Ua! ADEXP&c<1HTBJ ٸv3,D2)T,ƾ+ Qc# DsDI`,  *$w8D$INHp(pDH @>xGiׅ+!"BI"@XAd AX$D`l$Ȥ[bG \T)EY[,[ I.a|Ǐ~;;l7򶐶-[hƜHAmRж[R%/z tEY!Pjכ>+1̦9[`*DU:D D(v gO=* Z YBaUl$,$ @ )Rܾza/ )vs*sQEt*}+].Vu^|Ly~<]K_5;¤W{Ww_.waia魺_*|uR`h?"C-xJ#)AUApA[0(yhb0!U`TF.* ? y0JϲȯXYA`.tJծ9)_U#ɫC0{x:yULŐL54fjַAc,uJoۉ0ijH`$0LTE&~#+;>X4&/5ukR d&hZH}*Š(Zp IrDDR`v;]fǣ\jedDٿ{>_VM۫wd" $A HE"@bFAY @DL?+|3;3|Vj9cnڐ\d]嗓;_K>E@K簲K+s%>g(Ga^Ͼ;*w%&9V >8jzo:Q:O\ғU=-R?UWY}Oka=^+R[F (L g[,HFGߓ>aخaWuuJ Z㯘1  [D"FC)T‹Kfk߰8 Ȉs'ii5RZJu: kzDbX~&H̄7:w~G2(rLPǨp1"߃7} lo;Hܺv[%~ڠ㆜+~v(3^p^10Wc"F0'uߧS~öSh_ mգ[EnaMb k 5Y/&P -2jHΫy~{_K+ ZW.K#ͷ?JL|5c&V8i;yecό zwu9:%Ez:)CNNHD* k꤃w_O9$]y% A>.Kqvuc]#UY~<ە7nl&݅Q؋ Tu>Hv (mI;@;}敟\mjjT.Tn%sWz>.Q(&`1ܳɈJ.n~gʼnMQIOZQѭjz*xkuJʊUW*)iUwQkiiBuvJ*Zwkku<߽o]Uམ|-}dU~|o?bOKXyg~alphb=䡪3V́Y``#/%.!g0%\`1XX||-}5tLľh$RqR4 qڎDZPUs{!)p9;=KۡQD#Dlɒ"U&ҚYn)㱙.[2]إ hv˱03 ɇ-<055g CB3H[w:ᬐnLkH"BjXPlib*mi:V?Q'>`A,;²9.JU O"53KJ6hBeE馸u @dMX^.Q'#?)1@BM5ׯ^5IPA}x31U T '3fp̀$%[S]}EJoG]@|]1<لn|Li>rmֲHF4G n4gY$,E/A`l{ģ>uxeW. ;8/9}j& 2#tv):}.Ȓt9h%EEȇ_{m:&>iBVF@p {sp⭢bD(gfH +{) O 3B1vfvQ_GPR/w;.FIZF>r9Ohmډu|8p*AVAX)sTs+stްB ^58dDnCX 0a Cӹx61'h'y =]Cf}#mhҚUBݺT )B0(ѠP=[-II "^߇6cjh$r@|`bEPL] ^3}|yAJ"QxkBc>oz~ ?~Y'j9eǯ{ʴ[ Q"-g*o|_޷9^U~[p1"c}WBۦjC.u/9SdB{l;VR^ӥSҴZzr:^g#=v1(H|.X-sI6ڴ#1dJGNc8]8vjLJ=/;{&6m1 In `Dy1ɭ{:y6f.hܼȚUBN]fQ1%e2 A))+p_ 36**G}O~+['~߹{/xu׽ռ~]6yuJHBQ07x,sb"$_vl.!B_5L,P/څP(,rp@G ˦7,wx}đQdMR(?'wY3\a11֘L{O4,^\T$xR2D!- '$wׯ~#|/O3[HR}b0Hж2\AQL~ MX$޿3l]?Nuw~vi7n{.óF6\6xF$B`hƃXFai; sN3k{5Ŕ(4Aq\8pf J0F.& HiddTʀTOqE(5lGa=y^w?v ' f+R %x,ۙ:?3%8fv3y0 1 A xZJ`*06y- P(Hqݎ:\jEXx;uNs' Z($ mbSFrU/ , YZ1 !G;(`Ā"ȡ1"Q!dDG&,546=na~_c)%ř%h>E4|rs0U̻p̿Et\5owgU4WSrAAb4"qD=2K;Ø|^yq3)Y iQB5J1 :&/Uu;茇/ BMNiZd(ͩwQ>7CS==KXAFȢ "@ h4rЎZM&67#Atkӛl*T1擕CAN[v@!-8 ω^@b)6>m  S7?G̦ЅzfPIc0 `ie)EFRV2( %T-,`hZ!xW~D9+E u7w`{(!ݐ<[B0nlt$z,F=ȥoD-0dwAZղ߃@)h(4xݳ #1qlY >9RsO9iJPl>A7GD$74;[U"i0K?˧Ma  aoKL1*T8 8+``pP @`JbJ@PeBSW:k.Y'.Y9\9 k$lx~<3U]N}]>]oiY}5T}e:ǽUw|BW/meؑn?LJ.q?t"/^&a+wC&bkdo WS?{ίϾ1wRy@(/k eL>Sxd7!ZN u Q 6o+M6G( [#d5di –XhՅy D\7r!˚ꚓcf2fc$j g]SW닚Y4ÈfiLR00LՠB\a 2 REdۑkcrd袌*,!Ȩfi⁃L?؈f(:kM+IPM0T6\C "0Ҵ@%a3νMŔ!agcȂQ8  `S RhU*7TU#DD tt&ƬZ ymQ"IB6Z3@M]wp3 +19-t:M?v0}?`S8&4 QxU1ADnQS"O衢D2%( A`(Kfb,bu.Wσ{- k݁|}b&?:U:1 (JQ(28. S ]&4OdA` K{r& vC]"gY5&LxZ"2ky(T6+-*M'9>?~]p'ȉ R(()77w~EcWr"\fcw HL ~2 T"v  ^@0 jQ(=FAt:D!%6"b,Yw m (&,F~ J/_\4Yku1^%RS=(bj7_ Dv|oC+UÅXB!¨Cd8>i+D"/_v:šHJ0N 7xMnnۥ:>y@7E/7*.?~}d=j|Q˳=}8~EH&_︲PINNIC̦e20LfJJX emA%_c7Vc~!0DD%fiHGh9lv*8)/'ȀZq'>ʏ׿bhaslmdY|)Yֺ8ZI06wW,&ʃ6J>߱M7b٦6(CNpXmFFIb^65A6dЋHT F D5ahR t`DC.aqJ5;܄0),!3e=w䃹/Uz^WZդ)cS]@{P'Y 1T(c V0Z`E9{0UE%5d$XdD 1I!EXD$FPB$!1D!y[la TT %ʷܹiIZb 31Q  )hZ. -62D@c)vfdnBM#+$]դd]BeOS)6hK", H\ATRC>BV]e 6)Co&FF(`̡OUJ:/Xu! klpOc)Hp#B:%`s& ֡b )H.%`FU!T%0[^8ABBlTK-TK 8 ڒ!T#PPXXPc)*8~T?P93'j O C2(R1 ր$F#!E*P^T9⁌T͟nFux-8O (pgX@#3v+"0X0d j3CoD LHCjx !$s䴫Za/?N/0TP@I7@0:uٕpA=^w0g@N=&ɬyB=ا=/SC$FzYҰB;T\<,g7T.(,8DJzXYoWa9 %%Ch*1Uµӳp Q)#BW|sv[fXR¯R [dEdrQ,XP'Ѱ c~‡ 1vs#ze)Vkq)L 'G͸eQdN2HZ( JP@+)ŀ)"H1`D"0 HP l%A#4Tđ# &`fJ$AԈJ:`VD $T"Ȇ̋!QHEVQ Y~UڒldԀZV# c"u/e.BM, fY2[$$`H!Y\&ScH $" ((\;HMHm 6 l1"X4yY.)̘H @1DH x^6(" T/Ki8TUM~;Vp˫\k C"H`@РBg[Qzqm~<#B ж#<3|vj 0kI[?z"ԦyҭKlSXopxοm~e>Uۍ]ߟoGZ=⌺ݯS5[ioxFBWӋ'9jZ=SVm@i pACN}pr$@DGO^CThYu?I{xd!f/n60V~AnE ^|8ߎƋi֍@ѳ|:Kx{+ 6 `/?46B@aͷt/CَCٟBÌB38Bq|ӃlD!g|,g4ZA]ִux]2" N9Ubg -^dx>9a66yC{~#!ޅ8 `(rNJ\9`갘0Nl xł$]f) (B#'`G$?C#4DLPXB DHV *k͗!ň0H 1H#@ 0X2d @H)o~m׀ dCECPR1zbljn0*2(/6b$;408dlE$ \@RP h3yeR"Cd'= hPB@*WKF;bAbm!Έ:"_@JMFA!D@@ @@nnHk\Ik~ۑvWbat)XeDR3kMb![7wpm! bQ' ()$DE,eԁ@`òXn@B+pPwb2  S[@5|K*`$`.n~U[$])择f6^r)QJѝmU&H^_)HX<n#p׀QvD.0#@8c|k게s,6DT OܞdĞCk1*I %Ic\3&aہ!" <- I JRX{2H5aݔh1eQPU" "ËQ}aC d n $,IvuA,f rloCD E>P|tRBZ f*xkNu$!ϑA 3 ,DX.v(J%r S;3c,cCmd';t"pvfO,W!+V F@ Eh+H"0s&Z3S")f" `~'lz OP{) l <|̪ϟ`x `L))TQzdсӺWERᮦAuI$ Xtx{iG<-I 0H,>*Q"""Y;YIX$=| +A ڒ@IN:(I@(H!2{VeGCp J% bb!$`3XO(moHLƜ!%zIX@D]1qMKpN׋{X-!ah60\YeOx l޹'sًgh0D|$EVNzӫsU""0#â 4i W [&?RLBN쒿9y0.FfU95%.2Xټs^e s:%[EhTLǝ, )6!ڌ+ٿ\@ZQ~f`4I q@mCȜu:37}BGkQ 1h2v3LE:GFK`d9cѤ?M9.]pmSB<_w1\ p׷oNMx8Zؗ\|ފv^l`ha dy5}rtŷ1Wߜnۺsxp*.}nc[4݁-&QR'_r:mI$wHHbmDH `"(r re6"6䞡} a$7KbăD$@dgHM2mNif3X3=$4J7Μqꓼnӳp*?^x}er,SɀڕJ@a`Hm2K\^h짼as6Ȥ9cԀ?e%Qvnk,bP+%|CIBE!+`H>[Q`HH0D U U Ȑb$bpu;`I@HTT2u1a$\E:YJ ܰ* :`""D@0NzmPWҕGZ;RtH 룡+ *@],qpH@/{y?fp*8x}uӴ [.O)/T0ŝ 3<ڕ( dzj(~{{:(qW̄U 9ۍ> B8IM29l<]MMK}ਲ਼ޝ)azl|+3pm9ܔsd Ob!9yE1*O x "F>"DI ݜ&cѢhVQ0zP2 ^o)z@Bx @ AK(wU@ێ &|.aܝWgPy)ǐؐqB1!{C pu/D>>ӹUU^|y&B-:幽ʖ'kJjFbyi{RMM9 ඙⪪>z:# R=υwoF "S=–mSPD$l[Pwڄ! (8ò&/\ {A;A4w= RJ~w3>F"e xР+ {4HMqS&4$ 2HB 0IPo F `D|˿p_"3-jUWx H 'צzYif򞓝D[b6O,4KT6,,!"0"#cHIc+a:\dLѫd3R !`' cdfqav%B m.fMYUaioT*kSwY=ǝjt_.ݺa-uQߝz_O|ߞ󢠽~m8Zͦ 5̀WZuLa,[0m6~KvWg׈岏P\|6lAIut" rdĐ%V( lBYb-7_$s (M$p Nǘ`Ãkڠ | %-"iwqSt(egUXԳ |Dʼܬmȹ93j(#=4"'jTz$g}.]CVRE .]~.Rǁ65 E=^Z ZH$H(%~z?5|7tLJS!|:R? be} Iՙ_ȆDLs12 0ͽ2 SA]<_h2\RRu/.#@yQf1 -3[tphtMC} )Fjw+s1aL" }`;ttw#8Xƺ!iu [yB|dwI/3;~} |t}gAkks|$ϑi=o]?6e)rs_۵ݸ}5u_HܥHk1 iS?OؽAb̭,2%8  UVf>gPhݘZ@}60laRA lBVHBvԐ6FQ07 hNk@6)E2|}~_K8DMNTH<`"IJ` AޖI)[dPcQaJ@,b nu heQQX%Ƒ(L,QI& cHW"BYe][& QD5JDD]J"aE3 dU!<-P^f@4!z{WƟy>?i[c!#7w+)EDdATXQEF,F#(2RdXABHB@@0ƒ$=±K(3ySEܗX 0vo)xknh3J4I@@1`r$#R'gow8˪*-VV[HF@z5N7?QYmQ(Ouh!R'gX;xusWP@A;B[H2}m̑E=+y(#`dQ4StאT|ȒdlX^ 7q qWf\1"7NQ%"\vnY7wB{>n";`H0**, Â8A1NjN}dV|%tRrc {9Y(k!øUXfixmFjP5qB0DW* G835qt؁qI @P !3ȑ $  3&? EAZLQ6$ EDT8(J"JINĆrBHd@3d(B j CD<(`'fr^LDse>l'Z-˂D<8.!dB1Dbr :H !x6:~30%Q(`WT$ECJ cD'؉)w`~EZ 2MY&i -!52XRA8¡T bZ0F` U! %R1d8!0nrS*{};a塙:yHB*" N$RHjp׹ѷC)JeaM[9w2O n—qÛۤ;UBDDÎ@uܮvf;ۢL硁@ub` q+2S *FALw3u: ;Q0&vk26]F!JŢ剅`Jv"F ̉֊apw* iC|{ikJ$Ő`I ((Ej u@Ax JzHd& R̼ m#a H"J1f15-xלkop̭ d'<D_ͷm`3Njדuj0n`omunI1zZ"QE`%EDI ⫸{dt;H9:. UAڌcӥ%"hV - q*B(@&aO,?gFI$_PHD)+j-0cJ Ԥ&t(a Hq{TptkzI5 0$nszB u`1>> o|m _̯I$TcV9 c,$XH `PX-a  X!bJ~[ut1nUIU$2z(SL~uژSuKt=履SV*^Piivֿ) Q&RH?Fc{gr~Zs‡ 0zLg0l+Knbh0x!bPEC8UH@Iٽ3W=Ľ=';t1Oӿvswz$љNƓJ1I1<288m6="k#zvez5,Ca*aX`&jP\F1MzԪ9:F8i7bq]_vyJxMf$Ã@gKQ hmfZPW&hF lr.y!7l۟+n@~FcR0nDև51iF)V&tf_Wg"PԌ mbaR@> FRl؆&98;]E;!֔Q)CBܘ9k!7I{i0 \$7J7͖2N<苲@ @ڳh093acsd !A9,$Fl(v⍈ј@^^mVܦg% C1PbW,ŒYa `(5Yuӣ} "-< R)w!&gfT8-t&WdYiJkjglvxm ܉ݦ;Y3R&ZvK^ún][IflƟBC8bb`@w9۾ Z ?A Ae.8&lw'WևKOvKI)$u}W 0X8,9~ލM뫿V78)AXm)}7<7`qt'bF~"tO:lCH9k搜wjGl/#9$"`wlH]~:‹>tKCi)v8Oߙ*o.ϡCŻe]1F'%݃UwÚjg|35+@88)) 4RfYGS"k =Oj-* $r&ݮnۦS1P@1(t>0y38VxZT2哆n s*z!Hg$6IMJ De(v|n}ٰ-N=t:L=lYI('g[PZghzPjx2 uY`3xwS>=hѹ3 55 .46^r}ξJmԮHJ\kM,$SB@(!jA?biԜC6_uqb'lhv='YhԦutbv<ǔ4YZew dqSF&Tv|2Gkh02ޞVcWK8Pe: ݶ&܀Ԭ ]_R:[= l2%egG*=zu IJԨpA#`C"K+G'z+Az?+s_}@)On[hCntO~Ay!L8.i /-~}z]LB1ȕ҉B}v8N+/~%GF;CD7q V?5p2$G,,||6cγvp[88`.֑ |fVE3W6|ûb8n$L=X<ݮh.Yqz@0 '"@A `I>${_R Q\PqfD!xQ 3p@B!C2M˭!ciD1(0 XD`f"3b s; v`HꢘtdwRV4‹b#SK1CjhaqPoq`xX>C?/++8@ #) TP4@MIEˉRP3HB|}6pKͦ0 * YrFLְ& I0M]Gd&o7MkCK7MaJmb)ml"[&ܬ- XjI&ȑg-Sxaf`rQ  &0FH̷yjȤH ClnWUif.uBR(Sr3ib Y" Cr*&B !4ӱDv<^pG~ HG`S^F>$PƌFV2CCaJ7C`v &!ZveP)I`Є du̱شEF0)U`ń*eb3Zdx@p"y.B@aPzչHj{y%=7"m9:uc n`fh8!:*#띰!YХZCp˗1Nolnswx*@-@22,#$Cvv6Sh6@Z(hrd!Nށ' ^-0;1>{E'\.H1-g-g6{}F<UV)7s,Y% d}ZJ< \#x ƪXFY)nLfȵ/ TZbMQ)!TS|'O?v}󈮪uNFv}o_~Zs]eoD0 &0B1 b4/?+@Dk7eQZo~ Bv.%P sNt?lIʿsYCᵇ?hUO8"\ZD/ЧlTh//Nq-2囚l5[8|D^Y)P?%plcݟ׹;cU[ LD`"E?z[ f( K46ʼn q0g);?hKZnEB@E7s VdLL/r,3չ5Lh 3i[drIj-R 5H(maU& O\L |b ~Ldf6 2BQI`wM&+ mm~{r  Hc1YMn˜gDH!r'xs!H2p im3VG=㖔5}4 gƏi 1٢,UrÅ!~LjGW2רv*G0f493a2C9EDAMzg*iφlagh[DXQzg\1?wWB!v6Wj TKF̝tYT3CeI# "%?sx:1* kX\@l" ?*H23`18s`$b+l@@` BHXM&U0/ )58x(O&!ÖP$]ZAG@I% ַ5Y FK [攚d6)+i _LuB\D""B$AA LxjEҫ@(PC½õ:Z/yfc@o'u;Φ·ru ChRzB3s%z`i\w avs@qK]Xⱎh0rJRYIhZg{.LI3Og|,։i ;(Sƾ?PYHdU=wE/谦r("b':E@NqCb~r7g3t 4]sdzlpu{ οfM81:ŸIv k:ãuݡ̀| A?0;Sq!Aiik=[6)+g@b| &ԀQ@)7tt(1*8K Yˮid"‚NqQ]ٍ(BЇQ"1aK ܨ{`eL$c5Ѐ&0 J'?ٻp+ YbW` w/E݁ qs#ɘ3I$ g%_=h I> сZPV-s:;LeTa*1WR0U"$"WҎ*c!L+`Ђ$w[LLUO$ @S6p1 d=)uc;>lqRhXRPn ~3Ô M5ϻ}"f`UpL\}tZH%z8ys>*I"ā/C^HHMe6"pP0Rb'؊QaJBN!'؜*lIe8z 9l;*H(=)G9 ›[6P9n`U%88i/-ӯa=_z)U@ql2@$V"CF{aGL*.BC+`6鑪,B1""A HM+DIT @70M1!G!p҄6D1BpM/;`Cֈsa8m\hz>gx<24rQaBr/x{D-dG# l^!H``kfETB 2 @*&J}GpPQex`*dG9$ "23@Kc* "H Qd( , 0C {\&$eEc5H$(AHIH{<꧕D(聺BY9}X؝DLaH,9g|ґ %?8lO$I8 4Ep5Ei yU7DCE:~!7RX >~S#llR J@@P 0 #xB $H"@AUtn=R1aƁP*-(cX04ydIp C by,Q ƫP n4+$fBk@QbD#X9ϽH'tb~=m<#niVz1U5j3z[Y]W?UOJ==+OwY 3g6~Oѓ_g߲Tw4Z?V~定[?u?0҈<,Uv״<~_{0l[:8$ hc 7 c99ߧ&5|oQ4{#WXEˎ Ӑ6^ *P*r+qݚv RЬ,+NYh`f;Qtwjck0\*X+ج0%VoDƲW9Myhs0 z*U-A>b?,>'K%fS0?nPNI;_SP~0pT \xPBHQ+.>Rpe. u|֨P+NW!=| jm#J((+%B0$D!XHaaYB`u!H{2 dSDtD_8n."FN=zʁnq6 d c7N|}Qh"H7HJw[[s[C}լJ _%9Oz0ۄ=؏;LҨ6+"!$lRRފ**Ţ"EUEDUEDQQUQRI sJ Ѯ;SS[5<;EE UH F踎L 5UUU,EDTQPQEKk$XP bUjI#kkyݫ8E8Zd]VRs߷VO_K6j~U54]M|mn}*ދ 遆H88_ax:?m:nJN3\Kڹ?=8wm=zAb@pA 3$cNzȊ RSrnQ0د˭qȤ'?87BK>I7l‡ UU?~MFeEkEkEkEkTm Hx>;|:E?x `%UR!Z~jwUpJ#KP^8ǪXʦ# tV`_O0|fQ C3~֛AsXc3D®soɁ^ 0N#Ws~28n $N *Rt/Ǖ:Qde͖+/KuE֓7ZnK#qc&DA"!"sp 'p蟕HD tU23BIXKHnCFy֏f/\zZθ Lsf13EJ<<0̋<xDϟ=Hbe[X3g<1Z)l]/0XEӵm =]r0B/zwe~RcExVȆbia!#醴[%M*:`:C'f #ڻʒ_] )'CJ#v{wu01PA7dh0^MTBE\1XH|$BOl4BaivaKBxޟ@@9CO## $!"1d$R DBDURH+d b@"A`?~^;%8΄=-ݞY)3*Tp\dPWW/BGנA]$I0x w\E1;eٺ"ݷk›@5oMs2Vn.;)jͪx^Rrr CFr0յbGY]Ss?j_˗K3߼%[]ϭ?nrǝqKVBb|#[ɤ؏.U`l&P毅_s(V+mmuR۔:'bsnylI_a?7Q[X?c|[WF{XtQ,3/_8t+z֦Kz}M[PpTX_+anCgXM5q۱mOǫ9h$GݶWj|$^#Ѕ*Qn?8U}R^1kX>-0~psj\1tOJOB*-e/"^_Ԛ3:Ң/y$jq]q򵭩lM?zitsOzj}egWx0X5w6{|t~(nw?i;ŕZ0 ]h^-(07 $CGF@R y6n0$ FBF PP^2ARY2PE?ĴfFJ ,D"Xm HMKf{z%k]"eOk-_uv_Bs=nݷfcM;^]qޟz1_I:aRvoԥ#t7Ub>*l8LMKi,ެ;d׎Q92"XbUlOA}=f-W.cۼl1*W{VTX $H"Ԅ"{׀y `l޷X,bLslqjj.M5sbXW^U$uzy_e@z DD',<\m^˔?K-?vM@'lOҍ)P.x&IoCv a׺H^/8j/ @? S(&dD-""a0a*FHB5K1ɜSTA\ E$lk]rlunIxE7U!Gso?[V'"/{3{`,=mƋ#zѣџ&bg0ޏn+S|p6Ṱw| ([`]" mP[vJZø <Ҫ΢k:-1YxF^|[ Vp䏂 N2 qav*㇡\ 991Y3]Ue\*0!Jv{&tL!G¤]oW3QY*64+TU8c'0l,7aYnֲ)`agN󓝧y:ϝ7(bqlsoP>[]o3O?rkʯfpK!sezLo{ kUgԭKsUz*K9>i й "t JO}Ow<'}z-b~H;W7%md2,HZ+zڬRk.}wV} :k;^ϹzE~ ?_~i}Rtz}?{[;=N|]ǹbL Y纱5o>Hut j` hctQUR¬S1|61.x|˨*TZdߪ..;4lIjԭZ*;_BNUM:0w 7f;UVUk*bcj Ej3kuqy ƒ G=hWZTr.H^j++877;īfquWMK.tYS[Q zzZdj{*B#OP伂>]OoX5 q݌o7׃I=ޗ'^"4aD@>'sЇLBI"G?g_t7dPwu9tgVgs{VY橣|7.3ы5T=N~j:k3Gn._i eiKwUZ NBc!n=ϩ>eXתV[C1XE_e[Z'nX\͝_ka/KRg/~w&tm,3uS8 OaK(wH*N9m&Xٿ f:쓷37=eK<{*u{fZ{dȶbĥ?3Xm090Kd> OVn++|Lˆ,O4>ߖR/ ԣ77OAf={&gg86Y/giCE]t7jaJtd؉Lɀ9}Ǘ3.*:kzmvn.IRi~6mm^4E'ߠ؝KcZn{S+^ Ĥ%!_%G;V{|sjJl F쳣Cx;6¢ک.y _*M^DGGI';Hz<5{KGzQRO #0rJ|P އ<~zTgjL2e `ݟJEO֗9_FOnitJ_G=i:_)Fke R /0?/AwKҺ*/.)IXD u'-̓5IjS~j5:kZY9ufɰG}3?us3¨BoC_R G\ԴMVl # ?DyW77/MNQÝ9-7ɛ:՟7 fk}9w6>/n8{lh#= RۆE{1/RߕV\=ی~:_L{Ư\`>~ϰ7$7>NÒڗydpJUsoڜlec1g̔Jܤyux!-~FS8܋%JХ}<ե'r|h#?&kPv7p>+MO![>?Ƣ_ȟr|?$Þ~Ru~ԉ04Jb4{fwۜx85ZTMrh%,L_Uw-}GlMq!0se J=_[FN>^K fIIp%s}FG^]_+CvVg.H+Wh96"8BD d׻A/ deιrP!prly5=ݩK:OjO[j(|$5y dǿ^t|~ ʧ?7?ڡZ]sz Ywx %%Z G:}^ONNc[raiKv})6VcyUr]j"63zbRg䮿/W|4?~?j󐟡-L1A#xQ +y]V;d;*9[)o4T~rZBjj5I~*Xw]/6NM鰳)QO2yvO'ueaTL *9Y\ŗcDsws$c7`m%d{}pNsBZ[|]=<ƿ;%'kA'Iq&d<+-ՒTߴeR}{=, J"c쁤.n7Vޓ H `nQ}?&d7,crN%roy`Y>gg%%*Kn{ke| Dܤ 6xIl77jnH,A3=<<2 <2w9ϋaoh6Ur3(? OsKC%KEӤiNܕY̾H%>+@A`_$<}35A];5oG<w> )ڛlHZy $8uObCkZc5c44WdfI?rdK'1RNbr|}s; ,;yIoJw5!ӕdd~D;[\SF]%OXT%D|\fIo'wL,̢o>~Q/=[TOOP:z?jM=z? ǷU=?WKP<έJ3Ihx4=͵in꩑^k9~*0ڴT*'gi(7Wkg~cA}ߎW&>W~sI˫*N$ttcM:n ?9NG??(eLZ?g GMA<:I 2^[QJDS*(e7\ Kgn^-/Ut*w}H*/ݗ{z}w;cWu&S^h>;0궟-yFc1CҭOsTxy&&_}T5Mu1/*-sg)/*KLhj&$jؙk{M̔שa\Ǫ\SLL]PJ=2 `[|i`ҢY# i; Og/^bFStˬމ'2IJ[hsԉ yIeAp#s{9fg4R%[?LO[PF=k i_D)5Ⱥ&`+>OdQI;٪zoZC `z5MEk w&1ͧGtĻG|˹11')Sv{"mwyS2⥘(NDf&J[J4mWBYs SN\mx[n&9=J[nߊ77wt9S~~DzrĞWJp|D(iXL̔ʕϲs>-NI;t{}y=//,J߹)9~dǢfkKykjs? @7sS|z0YUBL\mn ݖ8x|F,sBƫ,-_zV˓JjEmF*b2CAq+*d^?wfÏ*z'up~9BSW>Rxf.7I93dR2BhMKMF#̙L׹)R^!-Ž(ǘp87/?<>c1no%ޟ2hK9wsS?8y_o7yOP{W⎫ݪZ|?'C||y^^ FR sU V2A66JeDTVue>uUPa< F7·MIF/wCBCLn? GYSK9TT{*-SK9D?O.74z3)ů%=b@nlu-^(@ )CYԗoGWFCktKP|jGf?mMOMm㥨:5S>׉WUu=}zs.ֳjUjkz.ɳV^^uǝTpGS ػ`PnE16lJ E/.c璉`^)֞IM'YMSJ񕕕QL:]]Hb䀣=:VXeEZ?DʎE᪨pj\2SnL4e)%,~NE&[ ^9:^Ki.IPY^IsF9_ .FT楓 y32ԟ2ȕ3qV~I^G_1䙃t7HWϗʋABE^ZnQ/h?̀SNna]EzkŠiPnhyj(NG̤߫ٙz[c]I߬ǗF%D,O;{OOfsoV.i)޸nZP;%4]'%w2Izirک&?NsZE)bWGky<+)KmIJz|/{N-*r?]Y(U{p Wf=2B]ACp1gf7'xѰa~m~*<ۿ~-%rXyE>_[~Wǝs<u^eBG5LI˔ϔ3 <.}8Zf^'OĩeI[Ơb '1^XB]y\)GWzߓKv/u'icwP}o,vR~ΟJxq_)79$7so ^%ᫀ^y85{ûcc0-[:r| X|Ci>>:Q_ -n 8)5Ȱx>AY>;^/q{\yn6gsW#ݰakxNǓYm{<+>o[KW8Gµ !rH}<{q~NN{%ydOI:q?n0۔0䚝#_w[tIqI+nkOܱs3/^]/A7u'J o[5o{Iȉ*jlg'{}ɮԾzruiىNTrt7vp.?i=  !桢$$='%y.yKKYFԮ}jP1_:7}/XVz'4?_caUݏ˟edӨYk9v6 :__԰}1Ͷ>qSӪ(2?alO :Gv¹G>ƺ +uذz)kV9DUKMlo==UO!2*YDUDE5GP48TEIK穨:f^[Ȩ~[9RSf) JJ:$!S7L`1pѱ0Kb+U&ʾ|t|nonvғ̏}ckc[xfŭHjtNT-D|_Z=Eb3e,)Yuz:_oTow{uݪ:b;m5hPin67,K/ {! OC(}$Tڦ}cpMqکۡ`pJiz=7=}lm; $ml+FvZIzs q9M*̻#clI_Eڎ5#RHwݾ߻}oݹ$o/2VnV~|3)F炳sqŐǑ a:% .cEX ;LڐJ컓׀@ݎ\PrLJ-;#kvXv1,(iνg H4X{ut]0AD病$&:|&pNJ|`! a!@i5DN$ ::suv\eրf&{VaK7CCkx:4+;s{~Ufԛ;%⃈ιgU/Ft/ctqϭZ 4BgD$"# DAFMc߰9?}C}Aj"016\[atMH5 +I?z[cat*{^!kUQŕ6GΑ^B&1Hj М4TǮgaK0ϊ<~'@Kr(\6x$W6O}dn'wu'=G"NtnZ R0٠B}4%u/fGz*uv_ jIx,cDv&|q\I׭K?TtgW]cS @TqPo?~ }.VDU1LO@j^8<8R-^eH ;Cuc\o@f+ Nunmq6kI0{3~p[\ wrFƐ 9zH|eK,_x^Vu^v"s}yy8}>6=n*҂_">>? ۾#OhwXkT}_ ٌr1L=/qgS/3. :S?,b/-wCQڑ[zG V\$x_5ܕh,_[%htzstK?E?ˬE(Tko 50Q߁UI&t"B E2 -,co{oehV7..ufߏx/.>LJ$T.?e~cAb ioVayzPۯoLF78>{(&䑅868NIJrX<; l7kQ^^6j^R{"]w~u'_K}=kuvxxub7u7|LJ_n}뿧)DG\?M2~^k­K4@2@}6Lc($˹tO Jgds!e2r1zL'Ab}x뵐3$9(a` W߫[ ԙ?zy>\b0*$ G$ 1rsz 2.{^h0*j Hyx& 2 %!!B22 %=\0Md 8AH %iPts# 32nXοo]F4NW.rOGwxpBz'6oь/Z'k\^zoV߼yݜȇIH9"û#;ujf\Y8EKevqTqSܺa.[':lKg QzAIR9/ZnNM )kt H'[ןb~ Bhы@t-B]gMK튧v'  B-)g[:htZ+]G?;+/.l/xY 2;> w=C2^qq77gJ``>6֦|~;ˏѪc3؜^7Vnh%4* VU.5EۖgCwШm£IXХLrč>[$-]\0 y$ Ef0pUXwFra7ЁD(S9:4K?u ft:,sgwmmc<ݷ1qL;a8]]NgNJl4XtB> p^p$ @CܤC zFǓo܉ ɹo6ދqMқ6s{ng6f[1:$p_IBNQ jGsit7#3 hKHx` =DZw&zVF*ݮ#g3w[Ɔ ~~~@}s|;t9:qAHE!嵴0W@Ɍ8Do!GWUaaJC[wavRF)z!5~`>=w#x8#24́@߲Lhz X;C?I{E<>Ƈ(|TD>]H;>pu B5#Eq &G”vmb BFF. !ym/?EEp`uYhaK'g~Z4#X9GmI;xoJ|e9sc,"pc|m) މ-y= q{ګ)F|}{{>*ҽ^_~-ovKPIy] (8 zJ\s ޔs{A;坝FEɮ5BcN-<#rr8PhqŸl-[HGGMu3 l^0`Ղ.u^Zt!a#P| ;Z*_;xwek+Hznzµ¾^_9P/*Oo:=CMú!l٬^ˆJu1@rN~eP;nSHUF2$l9,+K[o2N'~佑 c`\?>__r+PQZTlDZ[G#wy,,z,[\,@7Nj2FmBa^H ` 1DsgQbߓn4 O`OXyp[xAˋx{rޱom|xܫ*;:;;,#qxv;5l!DRPv$V˽ 35nqXC.&"t##p0 Y3ϩb\Րt\ܵW7Xxunuu].;\O 𷲯5vz{wҖcyy4^Ҧ 05l؛'C2 ;"D5Ahdu6=U(b D]v.ׇ]3ƝmV#vwbw/ NZwxV vQ\bsRp=s3x@0֑BC"O,'o5ʏ VAT,z9|4$tmmC,kniw;~B$4w<祀Һ=i]~Uks1{:/Q0%E9Ԧ,4Ǣe:$"0ǑX&^{N}X 5{ ﮪ3`u0s·@eSAj;]\3[h2KpeoNAG__w@< 1hO_{mt|@d6K:cbKjUXdFtӆB-o]憎LyvgybUm痷~3k}M4$y$P(K1T~L n o F?vG6A1Ȱӵ24C'6]!\Ҙhopn?sN\(*ցd5̎G#us`lxPQ0Bqb  Gr+R}6,pn wCv   9F% .p` B'Y||[O" _o`_yّ5/r7duQZt{; cL⽁{TPHpI? @D=tc0nnzrպtj{kC˶a ޶W|$M%A 1z  *DN[CLw/X=ah5G.%dUE??>j"Lw-^R<<5<:6b}bOiQjc4(w dч8c 𦕴#u97u\hmm7r\mm|.ќB4N76e[`Q pt[597j^K_9Ma: zH] r9"18A\3W bԪAmcrth7kNR #O MAX{mvpjж$wrF"}4%7B UP0mMp;=^B:<::5nWa3$"#=P2?fsp:f|+Bf]W`4gv9G9Rν睝~\Ƶ=HFE=I]OOB-8W }Dm1߻@-2M(H'Z7H522@Lc  !e,ʻ|iLHA^W-D.2 ׫x[qF@c OףswI"Ȅ#ȋl?B<HG Y8=72 AT ޒ ն99909"X{tn:''qn~qzlfc:::g xjaAc=Q*Qbۤ9t0"n" pF 'a3`?MRuLoqظt6w'-m`osp$:B:9>GOX݊qŹ 13<4&\qLI\8@Fcnb6MHY @v  2K.q#y|||¾B=(kk%ȸ~ }O^xׇrx~ .s ST̎{&ȷ+o o\84+z Vۋ5N8| ݤpҲ8i-0j3^p\|ޟghNĦ$@$U!4zqT;RpH> NEݼh>=ЅLOZG+;;p]ݙ!M}A- @r!ܥ.@Pt"Og0H`D~TWay]$[ KR#,7=7 ۗ˾87ڷ88g- sixb cAgIMX)[a4bA b-31݂B. vㅌxw*u:G!= ap(w.ߑzӪbt;R'|>>>=rP9k;F0vX/Q`q AsH:HZg R¯ `vMġturi]azF yyar,;F2 {{'/7qr0 86;h1*'/P݂2NF3mkË2Td9vVۺBfg o81ELZ}KZȲw~ˁur$2Xģ%0ĬyF\t W*XSA]Y50Pz=BݖTAdz )ߜ9[T6Xv@1 ;kI{Pzb̀ bx?+#ZA^DkdLgXH!!!86/pr!{Ca]Sd2Sy<-@a~c_[_;p5"d̦ oFN% 0 kܲ++Ys%UbH<#-rvT&2EW+eY2}ko{}>ͭ?A?oWww:OLK"\:pb&R@$FpF9Tig(pg]T;C)]1MwPlvCхܰFh.G;x2@ğys%e 0̿ xIPPYl5Cp3: L|N;cv4}ssv=͖b̼z"lM_R# CĐp@8q/x{۔m@ߒśӌkL|;4&[Xn2㩷xd;Ǯ|*qohR>{pAmD+4=q$8! g2C:M(u[DyrjK5#D%=m>'?m/opoOk>L8=hwL)ww;e]Y|-ѻ,kkYn!)X m}(qy8 ܀9Fh=^jk߬NK Ĉ3;/;H]fzcyQ"ƥvϝU2Z6Vyz=T[hxc9ˋ HA5DAc|ͮ;tCI18l'RVwLJMnjr[wfBsӹ`G`R[T ,SØ1`w9c+'+Aruj7|hsqٹ9.Cd s`8M'ˮ5 c pl1@!w];!H'{rpY7Bۛ]e¦?_$a*;ΑFpH7-ׁ+gR*8F0!yd2S S6B_N{CziZgq..q48|Vg1c5d:{R`D `MPU:,Hs6Ĉ1$1_\b{/NZ.mCoEG+Ii<KF{<!+osH 6cL0ڳ@ @낕`Oq4A9-fnP1-8әqhK=[Fϝi\5(͸V}#C92X_|HF@sڝXl[J`76h$oEsx(v^쓙Gsػ;g5{*^o T pP鹻[L6%cj7095# r1W,?h0uuBa ZՌ{4ǫHcו#. ~mmoqչtVEOwG59\ۙ9I1i HX*P# ݤB`ؼn?Lyۻx_=?oĂ~(??d#pO@>t!ߟ>ߟ~]~ߗ߉N${{!>ȿ:ӓH۴KOL7+ #@@^$5#100+|BOѬen> PeI~H?LXG7d's**Nk\u B' ϐpQ氘U҅b1VS"CF9xd 06b9^z 0 d{P0 ӺصC+'r^2ۖusjc򸱕i)x} yBb-90x{FĿ֍W?u9W/B&ioҗ0_y Sdż#63r]AЈِ~4IɓPHw9H'8V g#T8MR65]>f2YUDry\57/T݁<1}O0)2/>{'c*sHT x|tgS SK8 <ocr$d0uB#dVoy\`p9rA0^0cFrRۓ/~%" ϭ?x!˶Dw=W++߮DVoZx v!}e_ߜ]w+?m_v/a@AGQ9&8V '}Rbv(x?H*h:=-|XGӨAO2@5*MKojBcCV-&AsfH@f}sh;lK5߳URc)?n+qhc:BSAW5g h*\47O*z=E/ [hͨshuC 1o`#9sT@%~v+b1~RSn77]vVxC\ɶ[[3m8qm)zSiڞ͚vD󪏖ǫؠWa }H͊_\o`߉nns6GSJWl &A>0IΦIցMAkP*Ad\bP42u3L+&0(rCHi C,$&3o.uI!bi Bf+a"&hT jZ#Ũ~j?aEcf;NӍ_xXOq8۞利 Av~g6Y=WⶎTBg_,q<:b݆[ $/fhSziA'a݇QCm,lYo+ڋIzXשm6!޾vl=Bzh> gYk!4Nd jPO+r]tEⲭ)TKY: k*kx8푢bb_llSN+ٕmE)l6-so9lKQ:]wYZ7'zxM>=:Uev}5ۡvr튇6ِTw*i֜y(kPڐڐU!:Cu:~ dtLat# 1!DSc8CʞάT&X?(@ )!CHWbLuN`>:^ wW(@t)0R^Ǡt m`)T UKmPANZP|}  @= 70;0`*QPP @VT;f ^Kץl;=Fz {=:D@H41:{Ɣ\T@Pcs}(*@{ o`sFn {vPޭ@֍LcBwj91(@27Bg135d[сtWSm:[9(:rVG]5ETh;rǦ\NsF7;D5WvGRB(0i w0)"KVrUPFCC6PimݐMiwp٦u`+9ŀf.CFLǐhvg}e|DZo|( 8=sAOm=}G\#>}8Ϡd||5:o|nO|7 @ Ru}V"6||7ϟ`x@&|(bsCxz>(F3Z_(|}Vx@i@6^z(Wcx#^}MvC >>3tzo \ןzzJ\|=;+}þ {};|ٳ!ppρi|0>Kc7A@ Z>_ݎo@}|=8vӟ.ݻu| 7ү(U=42a^_|t妈{3EK׸|C |_5h@RPȷӽ=0`{Cπ4PîHN3>A ZWdu]}ƪv;/N| E9%@= ުM3fyn}%RMe #P^_ =YA||2 8k%=OBB:@@T'3F.7*(̒G ACauR7Eᕼ }"I_dcQ=۶}C|]|sUJ>k1Lzԃ鲶S2}E.+y5dxvZ}TaXeWmAcϪr{=6<{T(}dԥ ym%U |o>Ai4^|h꾆RuaF;@>:cQh-bl= C=W=(T {@ a4z{Gn. 흱aR]FTOmڭowsDMV:ldUkR*^ڝjeS:R;v5{˻SQ*-n;@v-%˓%TZٻ.aTJ[(vh)4Zݡ (T/'g@Rc]j픘^2)(-TksPŹheI ʻbqMJvV9m)@L 0VIgf@T[\ ŷnmr )6w r j[RڵR;iAH҈3 ZP&eVͪ,a [MCҕl 6Ȋ*η4ʀ Z̎[HdB:GFjanptp0tuØ:NgpQjX.\ h;Ŏѧj![1,˕w` 1CaFV%*mF:i00rն-N&CX%Հ:C :eݝWD]9k9l͆Jpꈎ;cVvklN'Nk- T݃:;7m3`IX$h jL]ͭa"]Hi&Gt1s9v ánk +L`6TCU+tk;kjkqt(.k%;f&:VōE:]X@XqjL;%tB0h+ Gw4hXt 7A>p Am@ ѐ&#&L0T"ɠhh4 1&A`U<@  `&& b4ia0&F  ل$ @0i 4#d4L &M4i a1FL@ɦ@& 20A"H&& `&)L0& M Msnq]C_6PPAE8opKz J\&i!Czr]"94K-2 9˶M9DSh&D(#69/OJ%){tzx!r3N6q@СNQBWMD % Ps`F6 %E%%#~L%ޑ#Fs(j"M؂#?B93"EC}hݢGKi̊s@!/V;Ns+ 0bʇBd&Uմ$V |Gk2]M)wF"Lm^J1ٗ=Nϑ a~6D6B،˘iJWԉ0mJjm1L\Ȇ1Z>QcjbiLD)0⻓&ڴ BI)li%8CCh!2 H4Y;i&Q!ɩ%99h&q@SBHd%)M()44HDQ"!ĔD91BACB%&MBҙےS!@s"JD4DR1PA)D9 r$&66(6BI8b%&'" 8N3B!I9DJ̉&@Ȅ撉A p dD5(lvH$2Dp8SDc Jr7C rxi!M3"$NH8mrʁ"P)B1D%3Q4 QHM&sMd Q U.~aC2 1 427B!1i*@qc'bi `!Bzcm66 b CM&L0!fw,()1C[B1mC5RD lM 1d41n C;M nZ* +%& n%Jn੍:OR!cbnQ#5 lv  o7÷oD6>aVb{c|Km~!zM' mm7CDm<@cow'#Mɽ~/;k}mpn_;?w{0/JPRjݰS =ȲecD8Ϟы>8>C!-c;ywe?zy}d'"S[1q)\MMPpɦ'jIeಧ+4B*&c3#3ț34˿*l8 P=I j#2P7"#pq CCnb$ d6Gly͟T'BqC 5ӆ܆q7Jh_j$&Ff; !Ib&eI@۔(n#WInPZI;H!0e ʌ,t3,M&ֿ<ګJ7YCn(nw06ܠ7!n6F&&% D6*qD7md@y2eg "F46q Rn A7&iCrM!4ʓJ':iCq )fou1U㸌; 'x|cZؔK|O>%`=.0Ļ/%k]etmOޗ+e+ v@?H2:٢͝ Y(L,fMB#: Q,&`SKF ipJ'cΡQsP;HO:(K8L3$$KI[|"ZrKP_14Li7BmbZOk?=tBqj^F 00c:f [@HB0HHƄh``_@! ʫ{96v%0E:v@̂~붎;4C곫`fb0+s`+\g D"[P ӍVaЪ+ Fd[6eXMJ*K-&7\ *T.l' SRJEIBɧ>R"pG2 =$"'{2ERXK?.3`++F1B58t%Jo?=@+\#xi)1#YւP66cD4%1pI!Є"BШ-Eh` X @$!s[R%(^'DxlCYX*Č3(mOMJZ9 ub*:#zRad]?`Sht*m$@>Ǟ'ra{dcF#jؘj2&P`qci[{[o|e6ߨ_kSr=N_NG} {WSWHW69Ś-!&hM[G> L5 [kO|/E1yuZFhMl@6@6iM!$$xLF~hfU%ǰ%6RYkW *{CLqTΧ9N?av}ghG8E"U_ӥhO7m^ ^3!u2w2WZń.}?A݁f,/lwֈg6u1-̜%ѫ~}Ⱦ 'kޖIwd-~}?ςV\>+Wd; ]O܄v Ki?4T .5uڻ:Z* $Tp*-SxZe !ƕRէbHE!VSգ +X 6:-I.ŕK۳ׂX@ $,@v!#e 'ӫ14|:=;MXmXɤc{X(0*Ld|zZZ?yC^ƃ,dBX+X" D`pS 5BT_=#$f-daR&ΆZRJ86 B)UpxABEqzG[Ufʴ$-Gs\V~( KNV\P5r|^(gٶXwV`y,[ >ˉJ[v>ʬhق8>Krb?pF:ev[Eþgt!a+,um F; ~N TMG3qrɑ3Gu>M*d@lW #XVbEa,߉VpZv[}*Bi5 v#Sլcy"8A#DHյԖ4V~RѰgٜqĸ#9(-mjHIT6(nl hbaa-`,  ,X(#4GR f",ю,K#r Ђ}<= kűq@a>C9Xrq۲ߙ?GE2@|DHq-k*K{*./(rhSۑ-M՞dĬv,BQ^aQ+*P&sv^u!C`Haِ1fK3%"% ci11czlZBJj&C@C\8t8D @,ew=W`m7vC1DMh0ϠOtMtH=7nX     ((9P뮺뮼=uXrNEVWEĢG\3J_J5en5/4*'vW^.pT"%lYlɨ߬״uzgj C!d3ܟMq֫ڕ~E$̉X00Uu %a33P+G\e1'$"m>T}]x7#c*H3c%Jg}WI9ʄڔɓ 񑵫C敕fWVF>X{+drњ<ǣ٣z#@a{|PVgQ24ԥ6!e!TdaxE+3g2A@T##h#td4c~z7R;\>2AKѱN='>c_q̺1qn VdhmYL$l1qh2VEW9 dRHU# ChL]. &Gegd "e`&]~Pk 1ʒV*a,E^1ldE/WDu+Օ&%{_c%gGYثm RRIn-o*f"~.9am46;YMuJTQoghՍPi=X]sUZTǢ!XMQ_ 8. 16WfOi9dCC2him֝D"总O9J1>Wt킜%Tc|Un9fo#Yu~k9#Pef{vj\6$ϏueՠRO4Ϝx.}7 1zUչxr= 55]QNAXO!Ȯ2iQpUK+Ѹn[[^o69x;fF9 ^4đ]|U !@ )?]ĩRUG*x$0k;>퉮UnDanY0]Bn_U^^m-3̦ X&ݭD%-όUo6 ېJcR%b-^o^N%+z}sX5+ھq}?@=3#p7Sc47IޘC4ǵ0R_D)? F׸|y}qp0cYc3?l_])4|1&,Jk_s#'KW&mļrR'MJX^ћ Awrʃ kZF.:ZrPUQZ"~qר/RFG~+'9X+@:O6T DqjPpyI|mZ=Si *2ZQ{7xSQ-\y> x+kgBiAQYgҴ)Ĝm&pb˱GtU\v5/cTDAYU2 G24Pw?n7N7>APә Ck4Wec]<~v6_V'lR E!Nױ~$%f_qԭv&K[, BriJaZ=[{W("eK‘Mim)bl#ȿ }A0΢cs,`a0@3 ԧ1{tʌLw0 g:rȆ;?o_i[¥M9E|#D;;ZꢄWJ-KJA4d/A_& y4hnp%g28*,/4aY @  (W "kDE )!K~O`/TT(>|V@l;/2%ڃcI;?gͼzSv ,34J.:rDT<[Q]Z$~2iQhgE[m. 5JNʂ2l]ԅ`0I>qOH6 %'Zuvn)n%.gM-,I^S*V$iMPF΋jTi\ G_JW,1|2AQ (# = #5fؒL&vdG2=\.0sy|קTS1Ң]:U0*z]{zG}[Rr-M2)rj͕$tL W$eYrkB&E??6A\JKOB4S91Z8}0a6A]\;p< ų{'X˻FJC&<6^2ڵ2DqOŃK(mq@eC̋d)h8R\4VR(mR$.\qEq=Bc7mHP\] ʤe(_|ͥY4X¿t.mB0Q|*cb4_.]wV_I_2MjV{} oXgi2ߥ< i93V,رL4f!Y>ݾiFhh#P* dbךAh贏-C !;GbT]+G=X4e}>c+No3f3;='~cz!>$as'+Dpi[k ǰQE9R1L|x`{b$`7et?,BA,W3,ϼLJbS;>b:/A(̪Tcle՞X'Is5ss:*{4YMZ[CkKZl-*h'}c[t: d1'ҐUPmhV"!ijjOϸӨ@]%:g2hKkfXS'u[ǁCrMBҘW\ЌfնCQ,3!y adYtO9܈/]1ĬKr#r- w5ުuVP2WMA-jZHy9j|ds^`0OZ۟s[-ytEn]Tc|/= J2bIhs׼ZP0&P*7:Xjcץ * rDHs;:S%vج߰nw#Z 4M9dNU` myNMS\pVRiJÑ՜ W)߽3BY>P˒ԠZzJ6WZUS[z>Sz?R;e7[)R`]͵68V4èx` g) [Ӿ귘5 9) +Me>+RBXYz])פ%)fn&5Q;kakOX]=&m.H;l1<Zԥ-veʆI OFd _`B(OOmMƂJM?;^_S7em$/e[cSڵ Km$-!l79"ka%5!)Ud-6lԫH(a8A s: _XFi|( 66 }LwE:Vޠ YTb"ߚ$VWƦJ LUNT/p^' k\LAZ (h.Xw&zWL~ D&P@Ͽmz)w^4ƙ)eJycǣߪS #!ikXdžDzgYs}dT| rr:ٕm8 t4?"6n7C3R$ϴ&>/YZbLf40Y lbB0w| II[1V9 [Y1sBbJGMDDDD4$CBDDDDDDD0Wjghl$ѭJ 3@LBH5v"bMQr- *NJ@hpg&7F3#;Ȑ CdAJ s^3`F EZkHZ ?!"Ո@ݵχz&S#^'`q[_%{ibqƳn_1cS|n$9&i=p,c{)R)DDDDDDDDDDDD6m'b3H(6c f 666UHBЀ Limlmlmmmm`immcm6mmmmmcmmml`i&lmMm blcM llim4641 mm0`6icb`6bcIш@69(0D%!ٚJI$|0m@1 cLeCu'&JaVIaXI$ $Չ)s }H0I]KKHVݚ%n30m!L2f 6hcjCHlM6آ/%"cLcC6 dD@,3 ͜6$vV>ַ-ֱbF-p1cp-[DhV3,3:R-[9NJkJbB(9OK:*I[)7&R(MXUV 3Yٕ0lJ X̠Pb4PN$Se %R{@z%]lsE,ZBk@-DPhiLVjh&`DDJɀ *1RbILFQAԞ: A(*0@$%@Y%8hL9W/ ~xO/RzJ >)L.!$F)> )4j$Ģ*MTPdA5 IRt&*@D'£!Q'd1sJ#>*Ib+:MJ$ڥ篮*x*S*OP6MvL:BWK^Si [l A4̦簖hr|mj-\6'A5fwi) A3uaFr$I`;ro*o6'AVDba@@AJE`ueW7$CJN `s:lRv bSȆ3+q"O rK#*4L, K0iVXՐ&IPu NNVT+לfM5MRS%XUg[87Ԁ'oq^pzQµIRdf vL6V6u `-Ԅ;(E㵯4W.yTA S`;f قҨȬڠқsd6mg` Jk$Ej2*TaZ`*ժ b(4A)ԩ&TR( 6Q `/"%*ZQUTUi QQ6"ř12cuVUjAPbɒED՚ja@LI&Ic2(WMA0PiGU!@9JŚ){4H-` hBBdI&Y%d(TF\y(a8 &jL b;mN0EdsRSP -g)1*Z3$:m ^:mLPA\]iE2 +fR8@6f\/@E) ؘ60 l8hO5" H8d 3M%h(=¨NTdoqvNkpèD&kMNev۪%cf|NlN' wq8N ߽CXU5+[x^^(޷^o:*4|_yz8#ퟷD?e1S~Gxw#hg,e.j2C Q9b4f9EtSLTbH3 JrIQ`2'(+ӝ-E'4!Y:L$2* &E6[o2.눡zd]IWzfI!+EVJJ-*,nRiFk$Vl/Zb}5 ^J٫wqii:\Q)`ւeP, U¸ApEJTڢ P# [i fl9T&*%bVvA"䂓MXubRDV^nz*IWVX,L)րNP TDW'"TU$SȪ]Z+)PcLcbAIdTJH!]]*^;{3 uk5n fk*WÉ|]H vSeQ+Rj߹?LԚr ѦBΊiBr#?$mE&H g5B|W) U $&NTZPk:S T" :i:J)A Ha]GRt%gT*E1 pY VuY_LMb)ZYr1nJbdJ+W@J(;a]" `i ):SLE 8)RQ %QiCrFTPTo5 E!"- ʨw,UEq0- StuLJh *5PVdTAL!z1F& 8Pib=5\W$mľ[C(`%n9ݺ-"lbhEHaI'6 PSH(!6LAE4BEQ.* ,27jBX2)ؐIe'RtLWQ]1X$RqI"!ߺeB E$VhGPCX[jblS'I"Q\'Tέ+EU K/gc[P@Z%Z T r jHEGQM&ҕ *l@PH&H)QjW*.DQ(t%SB(0;&Z{F*m$- R( TXW9f0ISd+ʡQQ"("ƒAHa-[anBj@a$Һ-U\HBE'{tZ zvéP %A8cmD(X`c%10b\0Cid`1v-'ԣXWe {IPN9Z|T)뜅.Zr>,`%b 0ChBŲ)_΅1c8pѝbe ldt2QХ'G&LgEBfbQ!&+"D$O MjQTb?M )VkN!j6sӘPjS)%* TZJTDvY7wc,hJAH.]b>۰e;nS 5ZRE&lBn\hL)Bi"!cci1/;y!zA-PTN»D5h1tc"`-eȬ gkt%%8. e*bVhЄ!.`2m D(䈢R-ET4}D*@@;#(쬨㉯hYYLI-ZfF L}MIh  ,EL :PBh44Vuwt(H(Z5YB QAT-hL-ŕ&mR$ D,n0J)wH,ip!w(0WWNWw4rF-)9LV)LV%ݲ HYR*jN&HF 0dv[aQjEDLHPªBpN|",S~38,D5s2o1pPbh, RWv&#G&ƀieH(+Smmo jEP !ӮʓS0* @.:񆩦nFmQ,#)$ѕtS Xh"k3G!ZTSQvn~ALM D16љhb.-VXEyo졹l akM¾a!iB(v0'hR!QsQbC jQ5ֻhPX'V5`i+ e6PT >!&-N ךSX-l7XNbg mtF* ĉCXab eH!٫ UU 5v&'Q꺽f'ԉbbDy;׏/cKu]vG@ֻ@pGI$1&74~ (;ڢ"ʜ6ALIv:Pb]a :y9rWT,zyhɋ([ ^Qmd+T5&*ĬQ %M4pN.P%2ѪϨbtҫ94ؚ!TZBDA=(SehQ PivK*^͈`%@d8 ,RAxT "Upj3B_(4DyN1u$j )h*J):#"G=yH/9BSE&1ұb Y^S1dDM:ĂjRT4K#̯ڤГE*T -]PZA"APWTSN4'BĮAM h^i>޽սYM-\P9N&:r:6!)6 pwsD)1PiQP$^J"뢆Y@-u  VOs1;@-VA[MI zf W'V %JLb`+f 6GrcբSN])LJgri&W&6cAb46$4M5Q1a#fEb hTȆ A*QCe !mzJ>b*SvFNh [р^^Uy?H0!e'Z'W2g5MN|T~8*{dSVBIiz3gPJwӱպS+!3 хK"ؾ"F̼^n6/##'BbگѪ9V oK8 Y͵p# pɀ5 o۴ 6crHaaﶰ;jv <[$qP D\8N1<NqJDJPTխ+]nc\XdV\Fp0L%aɽ)4՘-+'1R1N")Ĉ;\:b𡺥RJ)>ʛAN3dXr/b|΍f7Fu)&K#By-4Y$PŸ5MRM2lBdag4,ui&`{,ר=/mhg̾z27yXvҀ D!/U Yff4F*x̧F>! lRJQdT2342tlGhYtuiyu+N홒4ԉSX&'wbڮ40F6+Ngd#J8yjGV `وk:كD Ѳ9#sdі6d~nfpD,v gnH?DҠ[%%mnsdkɴD H..+_ʓE3>Hr`G 6Rtf13Yr*] a/rm&!ӞESVXD^kN&qEiW(S-WkV_gk:^/9xwo ZWȾ,]--.NqKΥ` )n6]ކ߻JZZYK3u;To~K5?$/לsZ]~ӥye&&hx_#''<3m *\-:v^y\c1x^ ]W]Y򀜇Ay pL5>jJR7rg_[-h-[ͩA7ɒ\PA읍F=% >!,"# s@:ׂRQa ߵboBSƐ2KA~ ^ N[ 8j7ɽi#,ױVAjڌgTS]Y;bs#3''>KPd@5`TF(ˀŘq2{[55bp& ҩmT2Y[ْ,哋ZJ4k ^0$~AY38iќ .Z-@F`qt̅pDU(/YD4Tu^[{S4VSfU-Ha0oQ.i = <`4Z'eeN_O<;6gx3_k(W8HY61Qfjl*E ٥%J&y ´]ch0gf`NİcgcE!.@Σ&hXFpzSK`/]1"g3ee&ڋ GIPNҤwdmi1[!m"i1 m1!DCM!6`cm66cLlhcC6 llmCJchֳmBVYPyХ%GgB`N,4Tj":9؀)Ё+VKMoєH Dr5aE“ql.rrʼoKӢ>hQɨ$YcH6 j6dr>\{{_\K ۾L0T`iB,$"NϐeҝhM2pMiz,$$ش;(` EcԲV. &{,ص֏YF~dCC5;ZUG;=bFۍj%I^W+nh(2N'jM"ld5!)SuǠG?!NZᐭAy*BQQ++oQApTZfK+^^&afЏ,'mm3ٵFŅބĠ Qio$J.Ec PRQ>LKY{'hLm3-yĵsphMZ#B7GQ[*#j?YFDOA+$U zjʲZWS93\RҕUiSf,120d],3/ -'gg@jbTލL.Z-NJᤊאv\)B)1  &!M& g62xSU6-]˸GQi[JD4WH BԭԄA}2- hCbpyJeˡ)0F-5<]a^YaqZ1՘Xh=5В>^W,Efxw<31  VqTfQrͬa UWCCa„0݅6D7-uƺDLM:*uUEJklՎjM 㠈`j5*EIR5Z b0^Y%a3I<׺үkqUd I!m /Xt1rZGtӞl+sw8|;Sb^}R\=B/YҠXGA[15 Z) ,M;\7wE,4CMЂ{HGOw ;KY-dhh34h"w` 잤-ƀmfr^;VKP ȹ<)yn-cY5MQY\8Vl4v-]?t,uZ`2t$d,.(ż пuܶ~\l] mv+7TǬl`xcML"ӔD2<dPIah0Z9%^jE2RkbJF<]{ID@b6C!J lEb`M VӠ&xD!YxRj@)ee+U3,3%XSi5r-bR`IܴHB-nLH298*Tk/q<17^Rb! 4ֈ<$DCweRTeVah{8%eu$˴hOet0x*BhA@`&^uFX]`۪ĹS4~6.**ȄZm _[VdVsssИP뙅dեX9vR`E 'ydyk~iiZ߾xz rBMŃ0'[ps`q culafkqcwEZ-kc F> 囷77c_r,GcIkXֵhY"-k[15k[ cL61Zֵi5kXֵkZMk1.<\kZkZ Pd8poޅoFVca%ULdC]Ŵ\]9(}<04aesv(2,`) iM.- 0ʄۗny4%50J6۰ɚ)nfxJ7BWVdiRiF k>FT (5Ly 0/$&%^vc&0ڔIbhE6&ņimxT5HK ͅEGư AF1m$ሰՇ_.WRk08cZX)0C9Qs{/~w)kdɫjޟ3C]GUN;Q{w|7{_-#y13̗w{Ýo{i~f}o|{I. m0`i(ʬ{m"a@(X'5Mg$Z4MDI5IJQE0>EK#zأh |yUb(2JX#< b;) a}kRZSVu$pG1[kE D>хI4eƕ-R쒦7k Mi(mm(-hBBգ`(iZ2 lvń`N&fvTeei:Л`S4)}5s2pr|vJfun'ś_PH 1hZ'$\F\94bJRvЛ0lNKDfrT'j.`!谬ћrh3̇L\0k-n-OwY6ʴ+ RfUCyCYpEu7x3fH]4J-L}]@vóHғnX1ȌIVtU%4%!M4h?vCƸ`h;m(W]\kn1Q`xGzjBCcM6 hpW#chڳ-Ab2BeL &M(!1|]t$f[rAS_ ߏ+Y4IyAAY]1jH lTV%4dЮ e,<+HvLa!Q4| Rdag.\fЦlk.pd,cLIF7U@յ$lHw, zL L-YQך EFPge!Qh]f-̃qY,,3An[=@\?mUؗ }HE54#Ҵ!ha2!sЈjˊZKLSx,ֆsT(;F]dg3Ɯ6ET +ϊt&C\#Aw/;2Ki[%b ,SkL%NĒlBPۙPŔ y"6) ^%X+v"2zr =얳w0S.^BfzhSFL'!iD zv1xdj$ óN@ Vz)2l*@ˍbVP 6qܧkWΓAvF 3ܶիf 0/2{JPi kCܰrWfW č;& 1 cf m+&9抠Lxg3I9+(kf Bٱ.Y iW"Eo<\0̋AX7ek"PzK -`*AVL$5 Rb>ٰo7(Xz${"Ij7ABAUh(1̙46> )񗭹b[cs ~x&@j V%;NMΓh F]bZ/ VlesH^Cfʬ.˹Psv*4]׌{҆(ԧe8킑eB/4b7^Fӑqy%,9.|w Q.)E6HlwnFаhD4r]VzMjX*[_!b⌕Wxy\Z_Me{mlmi;#l[hJ"E,>@Cc'nLYx SB1!lɮa 8)D.SN 1ź i h&ecxMEW eeZNHGRe^T2_珟/ K)@{M`- )5Ŧ`_ztqYCb̂T"WA afVϯlݜv# [YI%vEvPRyĶT*Fc [xUъIJVxDj?w5=iT+F+q8s4z$cbVo ʭ`;^Xv/(u)Ah] vM[#4횻B;^m~_c QVi/u;BXs1h^_bɃ;HIA{83/Udew<啠TbU]\3ó+,ԅr4u9N=3ѣm!a^)Is $QamI%jcA+bb/ZәK58fFAsgJAs e:P00E+t,뙜p\6iZ;F6avu"KvGokkE!,LEh2/yTip$Z5i5 Xu) jV 9VdNלEջV2%39"EUWr?* ogi3[Hd@$bء8=NS*3U&䰳XbAw%mQs #C&%`Yiւb,U;YwuFiS]Hn?v]kY$/vDnXXEI"BUi?4-iUp3.CB,ش*gb+WU w1&*LvP^!ۼ1ClcMlm (8mg6M!91`oImd7O]ho)3bk,xV.u4٦簷R=+-sQIatӝ+lPp4٦؂Ltp 2E%QkHvfFb9{jki Y):=`!m}9i LوT01_V Jn{+{efvq>SG?Rkyp"o г?d(s$[ Wh4afitv$=:09`y+W.F1 g<BʵAU59^Ws4@Ⱦګ̭C`e#5{99gصq{!`ip`Z3\Yq 1KR=<34YZ [QO3"[i_ /4dר'Pk,mkHiLvV(Z-[u )VHXTYj2YvR4pApx6b"Gh =y\$ F2 ,-,\6:= Tk ת,a͂\k5p̆Yb[J/qlW6 wXŚd1,k,6ZZsF)%0oFia,ku^E-6ͦ1,0d+4)m ]PJ Jݔ!6fZ.<^;P߻]Pi+fWb-=5hHV!wM [[-\$> (YkfXxLJ~<̆| l[U_"<^4e%'&+1`Yl6{> ;/_dPoo$hi$ s SOi ``Er0w -I6&TasC)ࢳؓ8jA0jj{ם2ErTvZ#HWmqfG1CL+8aaPױ<ȴf g|/Yrk߼f4n_FvSe-cmf1g]LKf׷4~Ig0"%h17q4_Ұ#UIf7ƢxމgĴbav;_Fr[OfU #4ܺl"Z4תO-+Bi\Xw7oѸ{XV^d_u?2R^+>)q5 F_/nӞ 2Nu&VwcMa F7G{?d<힥WiLD<=bkԉ+Lq x>is uzE\ nA6jГY-w[B{v_?εSik|boPm+h"?U5= l3rxۮM;T\IDt=[IC[J~v3{YTձ29ȪOեiۉzo-m%}5EUe;;{evK+X]ʥVJڋ0svܬfx?xe| 5TWm: 36=/Gtwivj$tG2b[ y~\g!&_;yzTOxd[)驩۳z%:n߽z~=)N.+}|;[Y`K,=3UC+rxx~ 2i[Hr[ XUtղԊh,kZ\WW)Tej,ۭSqrRz_5.x@llT0d.FsTsjNƉ:og1N'_ ޤYyOɍހ o9đHؖY4 8 E rvG Cgl}2|BlÏ4_!) js,EdhzFFk=}n$SGgr;iIp#;L?B ?3WxLѲq@}_fGnT+ֽoK1 T' =+ie~>Zy:!Z!>1v]!Ӆ:DG+ KuF'oy>5e@_rq;8~?dċF/M[q]&=1fhynLj0-"uў%$pj|ˊ{nEV_v x{Y NOa]iA3[詋pA/b~n~\-Rڏۋ ֍'NNCɻ FɍD P |aq% \\:N}P5j(,ímzC_z}n6ڃW!Қ!-90\6b Kf5TF[nM>&fC8u룛`| zR8֗HφcDfD[AZk2MKְ{ W(uz{G遬pw?-Dr^OֿuW<LB:K5|4 6/R062`D֋L޹@:Cǵu7|(*WY7v;`65ZS_7l!R7*OW 1h~ :IqՏ,=1e AZ筣;>dE%\tzrULCzn 1DOk`=YLGMe3gw\CCa4+=c7t{2\w5bt I{nѡDY\fH.ECp;O}v! ЖkbQ4]c(q 9ejJWo>?AG|=GaG!)6x?i%]1 wМ&OBk)ɗ]rCF.FNlE;׮Ӡj_.lç)79VirNcJDjӾUaϜlp"MZE8qm'OJɲ̽am!t||Yfj3=g]E*p,-f{@Xe2N2`<{O-mcE{7/|+^k , D _<`k;猪|:hli&F+FiZ2P_:dG=+ jOUl$~z}-1Z3/' p׫Ţ<[k61 KQf8[h(ҧdP4_?l"#yl9]~M_:'?m=Iag#om?S{v{η~{]G_G >N'Kt!:XMf'E݃%x4Meg)_8B/h wo)AqnZNl 0lP=6dI\wQ>˜u:r:;j^Rn^5 *\Fp̺<;uyj#6FcSH#us`a㊪n t-/˦2 :7[Dl7Wd-"CƥkakǐLT$Mt/p@^v^]ؒSa}[#\z~=N f /?W\G0ySia{.9spó:SW3Vz TlUH:Z).d}Rwԥ6WV !qܩy.YptYcWՋ, mL ;0bV/"q}\^/ۨ..../QE٨B./kys|M~˧z_e;йUEsQ2qtiWNU,+x/]uoS3yY$]#'>'2vlA;}񽎥 g#9ʛG'jUht)n _Iպy#q^i|Wfn7u{]]4\#37y `L'_wrNWŇbg'rF\2e}.\۾Ttzj(O2ʟ* .MsJj뺕Ђ]QןxF1%[ 7/\VbN'T(RJJRJ"ujեNϓBZThOF:^rM`#VѬ 7T۬t÷ ^9n7u >@a* 87(6lپhѣF4hTZj8p%v۷npÆ۷nݽ8pÇ8pF[ުfU T TR•*TRJ*T)RJ*TS\F-^mZW5yO +G?M˧2j'j4rx[ZPv)Wʨ\GYQ|ޒ]e Z$9"` 0O( P,걍jSW T\qlzl]z5 Tu>j/?R{#41i7BуuP2suCT۶`ah`?x'UHXkj+E ~ yIA yi޼EݞᲉ\yT7#UƸUM%/9 7+ϺJ{IKl5u{aέ4wYܢugn'YoSf&<{sLXX1XC#"*BӖCs_lg3 9vI+4Y-}QO¥ v1]z6/|l#Ws+JyM?d2{u0VV_Ѣ_KGrFN 7z 7CK0qw`8e'Slρ8-[Aʴ(i+\cR]&񸛞 k)8yZ1 ]z넞wYp;sO*:FT0{}x?T|czzV&gws q< KFn0hW#]߁3nC&`cPFؓ}4MYk.waXRr[Č|x3.x"ٔYW=V*hom6ťM.;jQF+Lb7ZQ@l΄@U.aůeꇂdύs| (/ء3v⹒ tTLמ&_ZE^> ~KgB H}{/e¼m%a&Y|58(,g%5?%Q[K*uMW*Qk-MŁd]aCV>Yl`EۿѾ¡++ѶқᴗN&j t=u %}:E ^ZvCn!weX1 =3z"տ?&UQ?jHsFrdՐA0 /N  ua A[:/vuٶp)#IQ>=; aM3%SyPTTxZ9=ofz*ji"& U DZ\˼[S9[ifSXժz,%ϚxUh btIgA'/y鿵X0ɔ'Krv\1\4N=]71FwWa[eW!ҕJ/S/@~W lX@э.^yNO757'y3*9pl['by,g)秥X4rU*=(CZ"vYm=n~R HҨe͢a~&[u5q93Q CR)LpS^9X}('t c;ٯpŻ2rpUV >ae}-`e TdmۨћH5;;eA5&J[ʘ6(3CERoZwin[=wk A\`C,nuiG7ό _6EV:wg:βK”WVvTa' kT֛l:ȳHDW-/W &:.)Պ a̿\I[>db3ʌnR>jءaEfx'o ݶkt׹quV-{M5מ#ܵbKX*X2pkb?:9͜Nj׀;srGm馥N9] ;n]QGѥ}[4es&=%G !$44$kLLijUr'4#vEƧ:֥zS_ubGń1m/hQ*ĭ_g)L+Qq5\% z%(H={2@hߍSwE_T$r׫ >ux q1;>(̯F ,3O &Ocr xiQLU1 7O6UYN9ue>_H@ 2XE*ew﫰I4UK9i_ ׍ %%pm:Te%gMaO_rd$U nw6C[6cTM Vjʾ554Y] u&o՝… K0L]&ymod:Ǒ@pcM JCC G5 Uk_57g<2P\ޒ$ZjvLo;3)+~/k$o(z[%x#TJ13MPrs /{?jf;Mbh>=\)Y:. ]ѱʧi*ĵN綉|*shuye2h{xQrB<)@4ic:v1EE O]IJ_|%/)Xԋ8{uMB}(JZʒ{e.I6Hqv'>)܄3\`66%3QlHH"fU(*MJ^w]5JZumh$l#8rx\l,NJR&0'ܰ[1Irӛ_7PZ)eϲ-&k快]ky1OR[E.~'7goB8 JhBRsh>06~d4!6lgc3bJb=V\<׸y@G=&ҝVQ' hi&B;p*Wb,6lf߹i!,yaE 27)S5<ʜ([%UD^ lI{g,i:gP1L&\XIH` ߔfx3 D}ij A[% v:k:aɶ dGR^ޭqܕ0yxf|5[6wFI@IxL?0)n:Q R;,sﺷBu&J4So6fd6䳲dm o-AV[nOFQ:h ;S? oodfoV{i$oC ?>I5+Eq#]{R)S>Rmf4kȧ'Ǧ/qٱVX^Mp@ ?5"˝oLBte%再gn%8nMZEv֤s収Ĉ- U^xTCdGU^1q:̰r4⧺0M/K00w Ԙ{܊%a\gz&nNԣNT d(w=x#X7T`pDYpl\ DŽ6#xPzY,!w}\BLeĒ[o!n6jKZ:cF i0@J9dzp@1yvdK8_k&${s0"T^Q #{u5 Q?Xў9 jGX{1O3@uWpm_jn$!׋ܞMV K$=b^Ӓ>TM/ #yPKE8$I<}UbNK'< ZVy[,*ڷVP| ?y'ALKZIm& } }mTPޔ¹3 "'*c*+q V S_ oѸ:V_E+K VAwd^i;۟t`cV54icb}xz@KCSdӆVMFp,-y*$Q\$th%:erXl,ﳃlrh%r7zsTNYcu='[nSpG"6WBP WE *k\WnszTK T~:fE2b5D'k& PakpdzPmn=ӸW*]qNυSYԱUckRj'mAjTjleȖ7=XRA^&$b̶=4E#&O7#Ը 0Ew]޿y}RߺEd'}_$f {uWHYp]4W?qw &/&չr:!|_e=qE"rňJ4%ra뤱ayT5*+baSsnLBg(kH<.I_T$Ј4Ra, wMWp&~eS'X>l@ZIɲF ěLpcw_]xRَQT7E츌1/p(z#{ 4,Hyfi^e܆brh.Mx owL<]>f?W0ٱ*oF|wo,h ۖ5a[:ק+| */ЯBu3vv:Z?}Y#7c>5WmƩp{j:|'TôC5_Ƣ:UznlWA/]>oˈNyw;0bk܈Czp9ᅗ j!F4`TZ45vv3BB`~KSKt=͠ B8g?tq緋q K^g [=0>_du]5VntQqFy46&7PCpIq a3y{5y<>?҉) C Mj.Ktw|7biH'v?&yl:'I:(Dx܅ <(oB?Ho*fUb@ p%%;Ftqܒ'q䮸gnys Pl')BZ%0IȚ̏I1p$Eg]&W.vi \&Ζ䂗CoCgH4顽U/hPc׉"~4rŒvhF3y~*SI}4)p^>ms6[45G@|"h|/~g t+VԒ`ps>7//|Х]xWiK|&عfųh>AhyG$T%}F<ޭ yZgpX! wYZ{]/_ ~_%$4xr5ֿҘ?U+?3$f;(wC|aa:]gلbV"&mbkȿ cKO{Bށ_rC?q"vU5jg^ɽ R.:HhOr<]߱$̐D)LEi/yƦUfzVG>|]_Ҟ ܨX7H M򟎅b!=VvMźMh?#S'!^>g> iՎ^&Vȱl&0:Ѝ/wK#6bBD6el~ry{fCM8a&s f"7JiKt:2ߤ#Msuѣ~jœsl}3}¨15<3&AX{q̊k`* xGM_ =W׮%{_____^_|mkppppp?n^ԇUGꨵ MjjnƳasG?Y3c7,i!4 9cFd3w#!FFFFFFF>>666&oőcc{쌌>F'ٰcccccccca1܌####b>nͅJxdEx9~g|jEX@|.Fٌb嶢dVkj|[:m-fԀ7\kxqe=F@Bo/I[yCۑNcr/F@ 0m6!0h5g ڨ,S( Y}C>'G&)ϜX Gx uR)y]q#s|Vr]n)a7hXhY7f5n+> #X!1~L?w7m]ʔC'U7]9Q49.B?fX^;4Nzcj lY b8d?pcI1[~ -IiGZP[ڝ7W3 VwkoO?KmyZE՗\ǽ8PJ"_D[ռC; n,l[^%7Ks O<Ђ^ζpd|Տ։l,O=foWtnғqeհk}Y/PiA»9HVǩ*^J.#z[mlc :MquFl8\a/Yt4DqV@3 hLj#RCa^1f܇͸iN׮YU_VvfK~:lXMoY.r*[iH{Gu^륃'"md|$ nTjc Wqz%HKws:e%{VfNx[g|K/[3]ܖww%$`hPbajl܈_8zml_緉R}Ut#r7?$>`E B}Xo )@s<}~%T#;l6pœ> JГ}l3X@qȍ)WOthEn v.pn_5cNXW\BzO+-: >!:%jj9BCwIvR%J֤/bH |mM}ԏ o?G&[]V t=mtfS*t~ϧSu‹7Vׂ+q> ̵Y̪r#]Q0Is{R;k0Ut %xrUo[jaubNe4ނ W α)uORWNƼZp#a'q_݋Tw!]"J!|.iz H~HW@D)/ ~@^az|eXЩ pghU~c;%0;뼉txO槜>pGOn [Xҳm sU8ٛM~ÅCKy_ +,aL86|#ȼ*;)UETb[@nUmܢʶ_8Ti!>ql7d[.or~MXM9!dqWmjUYbĨ 9]_'!Z/ :`6 @!+ЩĝhkI֢K+^SyFI=ua7[t;p_ڱ4VxĭeθZ Y gz`T)MEj4Q]Chu[#0m^fըmǽwg8,޵7R0DLA2|c/U6ܾpƎMi,@m)E_CaZ˔7BՏw%'W1:*-Bx=!pu;jԻyE^Kh%Cɓ%Z[w;y;2*lr2tG}jӒ:%e}I`;-zGSFCO]m*e>am S-/W0%&GN(hw2F5M`D<2X[6bJ,!eϑe^gWO&iU$9{L\(؀Oc0$LxL.H|5o9MS숑71=h}ԻWS5;ǑkwpWY+̈́ގkMX~npš 9S#R^8 J)Zt6Ys%>osK({<J|?iWIנQ!PѬ^k蓒'[ho+%%.F_\|ẍ́rG;. nw)7\Kz' "O{ wvWs50Z|/S8b]S~/B)W]qP6֙`3e k\Bۋv|,MFE"D(Ul3c]x^Ym ]Bm/$!>ooWIȥ~%΀ڡ$"Fx_9 l@G1j4Ѣ~u4KVx)Wk"I>{?xk4?a_}xwG$%lK jkH3uܾpmgajeP_z$ߦf>~qcxWEv*SJmrq,ZXzfncV/y2cύ )ر!3:VzKH)mj#LC-\ I'jNUؐ^kjh=5JQlWOJtZ4ד6J֭c _> >ů86׵?Y ua {@Iۙxqani@?bQzHvJ1eY1kCt~>Tʬ$sc0""ޗIIdaX:m2[s LvGS8be{@*:sot-om 7_an}$h)wjd 07<„+`n7(փջW}l|{b\ SO8_'Ktב34?N| (P+0Esֺ^~!RnM`'ܣSPǿGvp.,'c.݅hr`R%o ooE8?U~~T1}DOll!BA6nurV[4\D*LnciUwg}W:ʸ$Ȭ/KrgF CǃZVVVݤlc8+Tt}K+7VdP>%qF)>6VN Ac[GI%ܠ K MK_w\Tڏ{,ܨbc U6hS %H:4)ObЭXN ˆ'"|꒵>uԝ3iSW@&o!lն h')EsST/ ;ء8]yjsX&Azk=.&Ljz|wZV2\ͮˊ* Åh_{d_ۈdS'vyN"HPސvJ&A+>qtL+"س^[qɘ9>I67}U l~1nw#G^BjR]rpFSX( /[ xIF|9 ]=g{~fiTԧIc:9 sTh62RFD1<8rjun8۞|;p!8O6/I2])y/{siE׼ͅ"ῂnh[N=<:agT.xޅXJ[x zC*n`GRj2iGBEF͹PDQrđ~|F6S{]n]s)>hcY޴F[QlSwW{uy!X"SUd$?mAqu%/^A3Nҳ 4|2k(Aݓ-^T~έ\-(7¯>'kUSF|E]>يwC wEXM.8)Q4'ٸƳ\RJ >Ua<ZtDO`zW џ4;%^]cmq'U(T[}\knh<.A詌# 6{t,r\iUf ɭgOaZw?G:}se+JC}{]£ƣ;߹rn 9ܑތFҋ;ky^ǯ}ݙ/Sw{)Ct:z~1UqTF3I cTDp:Ƽ^%1Ljd%`)Α Pk]my;ypT - z*D˓\ҮA.ߩA8J\4ڵekR :'^CnǶ_bN8~g߻2L bO^'ӣ븛g}zLܵt{'yϿFI'^EfeZ!Z&*;2k-4yHk_=ZE5c,EM&iSZfLjKKhKkz=Y*Bܐ8]W{`h8hQ]5BEyr`շ03L`}|.`eNƩeXwIZT6<بrtEǞqct]9≚X:@wI6٩n^0b)Fek6hn*WSf:pq߂?&=_ jmlk&v9UGp-KTB4)Gy:^0II=!zg]7_6M9)^3(tR0 TU ]KuS+s7TCX x'soS . &c/X~L'LthA.n mȀ`Pp[P%$@%'9|#ם[>]~5隆UDۖsjzջdu>tB?=䧹s1״dп bAozA^Tg<2sѣ(뒼~p}2Bdȶ3>d~CljO-:QFqyT榔kY7b,UL,4V}{l^u_! (Zr,vb(a̶,odCbD2`pgk%y^ \<)"~ >Ni'jAjx~Ũ,ь8yܞ ?_m~U,AvRΤnǫzCn]sE?\C ߝT/ɺ)k=QqmZ j!LoЎkiۭctzi0peӵؑյţXєgAq&鑒eRUtw *qTܾ $ ' zKTc[h+@~WB{L,N*ݧamH# M=XZe0RyFu0 D0^ sε ~08>wWnfhֈlp2?vC/5g L6)@ D\eK+ڠ}7gɭQ`&G;jAww7w`勛 #hxƍ8LI%mXf8M˜qtCNCNb6Em>,&btYdoײCVbYtzIU~bi@4P]7t5jU{P?x;zhtuJ踭n1(`7Sn_Hes%N ?!vpiΠz2#t }’{>i7$P8OD܇] e2 ³*/j=E3'C:_zX*ܷQ<y+_=f6+  ~} vA ȧ_o}!@A5ƌ{ti ף:B:X?Y\d@#ɬ0 ~--mzx=BW^?Elf!boMG|“6ßK](u,H h_rMc \:,'MDځ>5Ҭ{>LK [j3 DT S=i8H& {;?w|OϽI9X,&$ꪝ]kEհ1TP29[J *kNjqgyyy.Uf79>r, 5ُV-g-6/į9Y(ZEﵞG}C~OJeogIteD KiB?A (1$Va#  lI  %wj,ѵ~R6w(tĢF⎅z4nHܑ[pE:erhnQ#F\|hQY"<-99{hΣ;"{#G ѿ&A-}A omWGNvwz붗r1S{XlVI ٻv )_:/"mh+kN"fNȉ}3;5m(u&4Zd{)z1hCjݹ̣B> ~!:0CG ڦARsޡqv]y}Q7Vvf ` h}f\0- ZHl!IQ̳9n/A?T_-\J  i%'r,]>ߐh1  l>1%/'M>h9Ss7>NLΛ>>e{ԠTҔ"(( WV\W'wSw679Df}ݽ֦/}F$A^jme;ϡ'VvݔCf|_b#CPW>jWL/^Q)O=ns_q2b#]?Retji9v۷2ye5sr׃j$?D|~`7m|AWw&u9;3^Pa0 a* jOgґkg.!SσY0 CαQS6+ qkhN@4]u=k٪Bƣ/G;i6W=K> U\pm$$ ^ 9~ 7[1lUTJP:r7ͬPurm5&iy9vvZbRPM5[lnm/2wUCV z&DLxz#PƾC(nPO#elqel`Sm|4ot ۡ_i^'~HG76"n:0w l+ﶆK㓬,Bgfpg<߳VWb:dtRqK\|Z2nsMU\`ZV55ee!{co2{uD1)lF=>Y?U?vXI X" $4Zndl 9Cʤ͞Z>w)_Zh 깣;׳h22$$XXww9tۗ iQt%-4.VT߬>ݰMm@;ɴBk*ހo.]0O苬%E J2*\_ aVce/KV^pօvƌV`K&>k:xn!_arkVdZO8e4eB/ ,'d\:ޓ%uTmAȚDЗ?8n,A'8 _xզFAYLLKHpU9I-mP;xS+GNOy+J)ul3X>1S|uSz<9eM]կ_}+SU6wW-ߝ]O`=˹r50z슝@ŗ8DRRlk;RMr; Zѧ}52Z5D'6$SS1{wa/`YS鱨ڜMӅ IbSkJE9,Uwܪ&G>:P~?iYkC)MW1Y^"``nܥ)DUt:1^-vTeYM龶 {*#)bGx&Eh zXgOD)~#!ӗ@^\NpBRm'_U)B_'XQbLszWeZuEϋXsՊyj/`3ʺ ve7kJ7kһЩ%QR#re ) )Jw4R54[0h_/*t#KNƼdRi[C ,Ts*ȓ4`͂\7A?^>?|o*37ߟ $l\HcȁdSt..BU36sBB}4em)5"Wo!k8!ULx@`vѰg>lgR^ɋ;Cu<!:C|%ÒV>ӴJ9q+y}ֱլ|\VGqf'߷0E `J,61;^ꊕ²RAXV3䁂Nm:wm\4"WiG"k1[0 fb;]sRz2&5$exf{n4'd>¾9e{*k].&.[/: N>DLpڿ. 9e# i:51%^OH_ei⼞#ĵxl=  mZ]M]/qZ6O\FuX>&Fj#5#ju - N=N,1'`iϖ$MAh9"I>|fv=Sns~WWX]KL(MVz>4뛒&98[M ˁ'-\UG,/BM wܿ7jCɓ$ۓVmbyUY R=ɧ" /K4y>xƤs#^c+p=][N h|WMvޕ ;&tĻ 7jCEH;Bݝ%ōV0#{ٝ e*4(iL' =qWFkQɆ? ǀ|IZqj,c9SUq{^H  կ~ .J#<03+0OQ?_Ϋ g^xvO:7y>Vj9~ƺ-juG'ވv vV{j ϕ |@T3z yԨXS.ۉS5bʁ;wdZ& cI%eԉ5$ )s0אU2T]/r&bsULgֹd>XBz,l% ] K_Ne٩zm@# ,kxhBa'\/c\IN5"A7l;Cst26Oq3JqΣ7x6հu*^WSA;mdf}J8dJ;ݳW9?Wh3K]ٙg!R[Mv9} KmWk4\b ./:}Ie1gB*T!htLhmDz:oϬI~Bmu v5i'e4gQC=G®C|<.`bٟ ]`.iGZeC{]m)I-ꕨ  +.9 yLb(Upc'p>["mY.'eMZ OҵnXсU(ւtOҤ.>)7/ɘ<c@+(k-$juvf u)ńm >SE ?d+G56GE?Җ 6Dh떡?oz?oDS.%CG?5ܣ{¹u(> n7{{ 럇'za i榯.dq qD5!v@{7q&Zo A^WS]}EisdwÔKgW2ظY\L:Z\)[SAćtRAا!69fTB /XuxJgp+3>Y+ ?I.&Bu}~^&=KsUoIJj xc1ߘ}3M0ß vnTX1}R\@BԚcs®î֫+*_Y-,]=N\Б{w$ u ꬥlDkؒT.hffH oN6TXQP!XnW)oۂ(3YIOb۬_ 6:t qKnURdeCTQnG Kk)Jn- 1 ֱmy.^mExQwk #PѠB%]kCē@+4ho]z*^9{_ᗶ @^mzQRQ\4(7~p}@V]ze{:xkzY:B3\v[?p>d68qRkk~XudTv$:6iP$&JlfK茼I-9 yrT NZZԵ;Ui I hBGDRϓ/=kiE6!nέU d;X,M`̭Vச̰@f) o%zAO[Eqg۬䂀 ,!:p@ueg,!Է-D+ Ezʬl=tchejp{wc;G3:fM4^& 2i_ɬ|,%K6pt !(J8p-BÍL`!])DB)ˣT?ʼn$̕K ((^u[{Twj'H/&^l…:s PUH.XTL )0~-DWL1Xc/)Y,8'r hA۠:BĮDjd=.o T@<{W>(Dޤ˵D $Md ^A3o?E+[BZ,AJ+2boHF^HS=ז'G48hE8dB4ȲIKXmAֲ(DZ_!PCvXN(dGAa̓3{F AY )OoQ3g"WfFj"q=/|+]Eâ[aB4:]3I=1~J8~L# n>ئ??)Jkkjƙ5;)w *#rhZ[&v1,eDU`z A #Mp=A/AlQ ~R131);SÜM4߿?'YfR9d0yPAޜ1k;4( 3*,:Ƈs>^Z|ay'!WP>яoc=AaU9/ )P uClzO2WG@0`2%0zDa= j y#_Ht%KQL °;>-s\^3_Q5SOß4e K#kl7γ҇S;ORw 'x]|`Sc=uI=QIvv6bvo=&f+G@z_5yS pٳ5?|g{ձiJf6$ 6&B(I6 ؉6J &%Cac 5.|]R9{Jk;&k9A׃JH'o}J߽wLN3yZW)W# }kSâ0#?rOg %"9-gwwu\Ny O#b]I4V^\MM*@ S./ EB^&!zW[b&Ҙ?;_1a;s~F?f _<|q>fEa ?^ȉ-{Wy2 ܅I1>*3!|Vq)͖Os4V~qOaxswqUKMX2j#h$pULGQ,:^ t[H+Ӛё3ZSx_)%pQg!66Or+ԣ};-~QSίRt#XF)5?v aWߕB`Dh/mBMT9?aI:qd +l\XƦ y.-lf%t{Ց$nn:%/$/y9uh3e-իqc{JLj#Ojr&goڌxYv.ݽ-{' rϜG#w@P'iM="MErJ;K`!d6ˏi%d{bN֑V_%t2<{鿟N{y`j4ie@[pM;~*ZGs UW'2y+K>DضO ڒ%i͝akndBH0+A*_ZIX\]AQ˪M4)Q\j"74%? Ԕ<a暰juINw."YW.\qWz>6`ry!n?2u+yF þ Ivo[ 2' ,3EP2bY%#2қ늩Y5FUwo+iM.c}EVI8ok?=GuxgtUTIϳ'nw7Dm1a1HWj[$:СcPzJiç&N[w~u^>oaO 7m-V[-aJiw9Ri$&v'Zf=:ΧIebɰQ7n0:$.kʞ6\t댶0S#bf;+ߗ4w˃i,I|Yc*:psT4\К3_ݺk\8x`\IӸPfjwbI8ظ9zDh_M̳rІ^3/zL._ZnzVh*F2,BKWJE#oOyZ]]}~<GKhӉkz *ر7IY-4S:`N+Tr%;7gך[yhrΦ6AbܟzE(:W&%3&#\g]vw"Uzc5h_R zWvJ -FLQc`MH 5K^h6}@Θtd `+8I̯H>[22{kn{-B 6f+Ђ]aתCݞc11ԑV+Q %^Q i|6 r%3ﴧQ&UuMK 7(N†V:O>t0h$Y@ƦCKV.9M q`g\nBvBM e$",]I;oV&Kw ݔ^3z*h`=$% J;\X;v@?~\z_i ÷'@nt]` @A}h-=Xt&xntdZw2m?6 ~>#h#S7.Xq>R"n^ubr+K `cV f,stϷ$vz[NveU-:{6.AQUJK,*oSt*΂`;X_a_8ΤV҅& s(]N+ç"\djԜM!/HZ)@:S:o3:]Dr?&9ְ*Lm0v9YhPϷw?gs +ӇnafK<^֘GM,l%N)` {~ '݊$z}W]Ջ`Gbsqw}T^%Ud;;&<ajLhH[,W α, <./kKiI* Z6Nث&QJLGG/9,k{kg;9}ahVQWVRE%R*JۡCIV8nr}-ty%M.Z*a[1ޥ\;s]hH'j2;הX!{nhzP0ʊgr]t3+Z{-Ws=7dxӶrn]6TW_>[=sT0fh[SNE9Tkrk0Q ӖMlT`@\]͵w .8~m\%|vJa"vNٿ´ N.:ހj  vtfU""TaK_ezn`-f~ELLDž!)Ձ wHHS>.Vq (gNmn$/>vy<~‚̄P{_ė_FJG첦緼oc~A}] džojv[+eF:l$Rg2֚4F`Oj!Lq54ҙOsx3T+[zd txdҨ]yworaE r!FL?] dl+#̩2YAΤXG#r魣gU5GKȩNI?sj?p7n ٰ+x[icP Kʵĝe:k| Ujk jZ EJlt1b|=BѥYxr:Intݣz2]U#! b̂i ý^BRoa^GQzhr]+`b%y5J3Im+WtcZ~&)ֹնɦMU[PS1*s?gJ ܗ[TpOowɕVQ]zUm}eh:d8:Iު9l)Od_Hń7]B+"򾆡FXTkfŷw*S'}$,pJ07Y٪͝UAHOIw[7YELz\ v#9z-l$V\9υWn{s}I[ZTLK´' hCU}ʶY PCMܑO'}8.M nh날x~4^eu)st%{Tg>a3x/(3-qK(NڏB2׿ȦEϖ¨=pBN$ʹN.sgUnKH$5yIĞ]̟@ݗsıXꙺ2Jǔ;k\W)iߙv+zִ+7Z/K A?pY-a9/aE}̒ Uޛeu;mo; Vx鉵_ /YxʵۚP)kS9;ؑp3ӰIBd'te"V(JKo@]U'`GW` LÃ,ՋVfoQ{#&(S(>Eԩ[R ətz:{5׮05rTZ'_dւ~.+a9 yNE~Rl[Qd̷I;U?H ?odF=kz{Sh*}=T|L_}S K fE]tBk&Vn3 s#ues[_*oʹفtX&{1,Õ'^>k.{|<& ^^=ݟzEԦ*žΥSav=vWk\\+Fz7@LSL?+|Ya4n@tSpx{Nd(6Ww-$16Yn[YapjqB{3:q=[_B˶hO}e1ճA`' RAŅ@WS) *b,P]L'˹N8VV!5kW w%,R6>*~U;)wu1 TUw S>hlrʽu\Z,'HApcs/m7p;> wG6Ncai$O.v7P/~@!MߵNj;0 r2nŐv;5"C7[rOWQQn?z}ء$V/*Ȟm f2(^Og^Qf#*ΑRvЩ?^8\z}aَ2n_l]&Lᔓ4>erv}4MH3˨5 gU+Yİ;Zz[>JaP9Cles&1c6{@s;1{cJv5R M~tT}[l a6.ՠlTP9ٴ67-o]Y6Z7k̤<6Qls>eCujsc2~WPBI+9LB"U-Bmw 3ݒGwpX|%D|~V:[Ln(Xm 3>mcSN4fꈧ Əs)Q5a wv.EQ5͜G KJp|dww\ RwwmZƾ=Vځ`P΅pjUK6Qk1 :a fs8C7} VL3XUkDaQEHd fVaA}i$j!gVQsɞQOYz$P\ 7l6\e6 Mi-ff%3t&{+Cww.Pkfinիݾ~·.iGl Ď'DžhO 풞?62QF[S)MϚlӿ]M)F2w2(T#{D 6IDѝN 6йHnif#};a/5,Gk J~hؿ9kZvZ68p)P$k#rYsҦR:Ԏ  >-Z t$sJ~7sIc9E~atz;>ln$~ѲT24 Bi޿O l {\P\z(x+U饝P78Ƌdž4 @L;Pѿxv']_+u9s?%nR-Vv='Iͤb W*Nd]Neש@wc؀FJ@iN;X`ij\hO\HwpErܩQ&I|[TW,BP*'0A9Y#Bg #XEٕ,NK.՘_fXW<8A۔gQSv8@[F`fv#kzg}dA8dr81NA~kfgw)=ſn{@R2"!U {!.מN%Oa/tz~tmMC(?g cH*!9*= aKIf^Bgދ4vV O|#nƦlNSݑt`{z/voҮ_냍AzrL+? *bO5ns8ƒǭhz|f4w *-Mm}gNrP#7|T~dhRN8Dl"GCM,9F,# v~Z1V*GRs֮p5z1 /(X55RLSTr~M ]{ߵ eEyKՉYҍ}1LRk MB\=]o,|sy~q33.tki[roY[Ɣ<ƷM%|;/^O߬r?.lmu(xx L^Z5a]&6N/;|HAih.NˏeDmʿ?(akȍ;osOq?b`VզmiݴQcwᴽ}ża[׉MF.֗.gmIoY`;acm6mmmlmmm Mllm6i6mmmmmm6miMHBZS5fP.7wwfű7H?c¢ Iw[_8gnEu \mma(ѩ[Yn/G+/;CFӤ&!Đ"x21 |IdrHA*1ˆ;jsc^NFq[CZǴIѱBumI۞oC_سooDu^;wXBjԵ[5~&>Z#twѝbx-~.e 1O"Rnk ٪h0w4k^1.\0뫔j >狅FITNyٱna[f= qݶU i7pl ]nݬXgXRKd?RdB*QYBwb+6S֘~F;DozN@6$Y@CrA\j{-ޑQ \u?i~޻+6ڲ;KMTGv.XLe]I CC؜2{ݥnB0۝F9z4[õ%XO$sp6K 1^хŐv=:vEowe4f]ϕXww7,/}$^%{q#^.hͧeNgy`W8{3*}ٕO]F(ߦ5ѦF\x~WOk@sa&I5G>ed24e :;-DuET_EbrSv2@=Q&}m`yG47Fcb񷴡=1]+K+ŹCDJ1o)9G_YHTnSְtw];#o?+ʐYJ~á#uh]o}V+.phZhhod$y qƪnlУtX'C+iL{p "))T)PfE5O'R犼٤w:;x-҅YYw>JfBr"FpI[i쇽XL4!!hatij3ʳ".e'_>C>X^-#q@^yXS TeXJ1#yd|F{):3jIͬ:l3#Cc"$n\;jCT{Zg ϟ3[\,SkqI՜Wp-@l^S=PWD[Ͻ7oV.Xf`bY=k,.=&Iq1s>(ˏ)L_z@V)wiE2,P9;\1!Ea۞ЋȷKdXpq|1&V7WTE[q˾ L 9y kx1jBxΣnYs!N4? 2dQNe쥲xy0̐<~vu,qqwH^-H.BOuqnL8Y2kӃZ& 3́MI^r0W b\P{ʢm 6 qq6LNc/}dA={!jIhsvAǒRC_B9^Qr햓%}]c7ҽ6{(T:RmYu+|V)u?sKU\ʳ]tDQ/I;ٖDie9`IN[T.X+HP6}MHU5LPLUkIkִt chQM `c=$QR| sVL'v'd݂X|TŎȕ Nn[hvj|Qv&Gv.P)jk/Aܲ~YҖI짙ɳ+4T1&)JމzpiŠVL wpm^7ea=.mڭ_D(c }3چɺ\+ѷچ2a dd_$+_x'kn `c^W3Ĺ=鋴j9 :xxrr/3? ^tIZC9x:ޯsfg %WHXC?{ĸ-g$f&_HUu!rc,xTHߣזbcB6`V>,W|΁.S"6t&4ƗNCDGs? RyEP&pqnxbRݷ C\ ^uilы,JEtx]t8ɺe> FƳ*c=prSjjJfVk3״7qjgeҙM.ELTIZ*} d09d=ah25aTK,6Shnё'Byir,JZ5!{;%\e!J{YQ6Im%hp٩RL֚TVf15}93I/e(>8@|~kЇG]Xv$1'rEq3oۺ>{4F ZN*].lN_>QBU1Ӎ^׷WYشh>n0'zqmnڋ8nק\klp)7u$ApNm|m}[K9-Tњ캱o U}|p6yIzSq2p:ו9- 4uۗjvuatJ^ML^>vexO1زlw~=%ҍ~bB͈ÏT{; BS2$!`ӹ\or^xϢOjѵ[E4ڱ7{,r3{|*\p*p;= DbyV~ ,Nejlu\K2L{l%c߿&I E'̌㴱|4w `n9|TM{}`]ݗ2D7n8(Ɋr/y߈ }ngsg/R`X) ^sY}rpZ6FFYsjD.*%q+:񑓝7$,6E"],55pB-|p.j`{dr"\㱐6 o_V=;6ޕe\r\:x5+AG# ?ǎFy`mWxa`_^jE&mӷ@<ϋp1Xocl9|=1 <ډрVxms~zk@ӵHQq7n%IoV$5\ R0:ITh]NL&<ݡF۩頼7Svn+4a /[5-qST"/`K۸X{ bU֣QiEđoƗ)|Vg ]ɵF6jFnDy+Öe,K'JZjٳ`%7Ajt̮fapܚ{ͳJ>>=2+㐞+\s/K7ӹXY:v4(R)8\4>ai)M=2HrjLvBx9J.5TXavsQMdUmB} Q!Q vJ+t-;&>Uaѻa(c+A#;J8bcLvx %( kM,.2Ԯ [R+$_D^4V/]{_u>;j I*5l@3Lْ/!6WNA3`Y~| g> KQt\-h—;B'×/ &$Y59\bEㄬ3Ϟ ~M*k/+&%v\4W suyp:re\8QMnaɗl?ԍ/_P$ri{ !F.ΖqfdYc/=(ǿij^)mj4ȝ=v\ʋ? M~rQds`cc`T5~(]tǥewG/ȁ(j J{0 DP}M^7(CPAjJ^x+ʚ2nilCNeݘju PG=_6rB Z5-DǶk+L#09ȱuowS}n=-OʋKkT^k1埁Pe\r8ƥ 6 d@^,zmUQ]|o^uo8TbPx)ZX9dȒ4w\jD^9 [nΔKf}"t&Ld, &+"=6 8țb g[U\}) *'gҶ!VAM}.7;%K(.32MZ Y(X#}!& jQܲ>U+[#O3x\M[՚qs+G3|K}.~IXt3N,"spYˤWxЅF*k1U-<)^[ň.t`;INK5ia:< dZe>V_ ݛ5lK<10.xV9fIhAnRħ:yhC?RWVu1yvs ~e>K>;znL?f1N} X(@z.ɵͼږzlKwZ[yA;*xUZ@RTzdZ)Lc36iVz5#adx/iGl)v1K9vk]]k'}E=xM_}jbh25BΙQΜ6<_Қa?H9ְFLS.j_/1\c3WɢM+%Tߚ{Kvgu33#2Ē:-ļ@k=5EgLiPڧ&s%; a^){иz]s4⌱kLj`22eu[{XDgX1N05S"h !j.aD/ͮI=㸺:$Zz7=H#?O  9;Jb&VmIPuR]S2IF0Vbyt5'vlT gtҹF`/H}-7n(֩6 f&]-M' ̅i5X-պIǢTl.UΎ'iLnKrX[ܭ[j^QnΓ4{.m#U̙RLzNZxV4NӾM"| dHVeDP#Ejiy/tET=ʂziwwF97o^tnn%Ԛi@upg9cզzkIHk$+LUtu mTU;1`^43}FǮ\M/+Km&}͑6R|WA(75/(aHKc6 Nۡ@~V3:Ƿ+p]& tVd!sυ@i7.)S}lRULz F^x4qOπybVǹg8MDW֑NO6bnFnTCIeֵ!y;>pu"r֐vC`+5ґ{='#$٥wzS[oiThl)9`\zMW<)ax6cgCMf/ Jm>,:, 74",4%w;}J+͉=t`)Z4zZ`zw;G୪6_[- kE#Y16\ nޗ$ @Cf(>o3'xYRY¾!I;nXljn[ )+` &jE&`\pwGm+p~7u P'Vn,&*+3}B9rp?TX=֭RJhf鰐Yο &ԈG\0Ocf Jtf%w=5ٮ75ƒ3+O Zr卧GFgټcP) XA"X[疽>BUcy"RnAQmubLm8 I^<[ p7$\xB59/vٗi@Epj̪IsS/LRN-*RʾDLfЩķ1r6YdkhK[ZBh!W<*k;e=>s`XvB-OUc,ڲ mTeϳ̷gkRbJps>D{aVƵ|fg7f o{[YݠF-&2,ʔ5/e0n*C*HE%$E- m^k΋ isl9r]e=VzLvɏ!ߪ,wQv%e lw mȟ 3AtU8m ie -H˂bUMt/f,D.+-0:qDdkKK6O4c,.ϷRvCL6-!;H.G82xqބ",Sr.32Fpv+SoOkJ i[t]W*V\qb}#:e"Lv bSxe:kV~/'HVɹN_ܳK}8~9W1W,w#*@ h-Fm=#jͣn3s !D m(p"?>b"TRZT gn[O L5˼|MMďCU6BP. +ݳ~/3B{k> τޕ8ꮍ&c1ҧ]D-KKəgı"mq[MK]1O|2f:'rt*՝qծfM&%ĦXd|{՞'qDSoPoB1epf35l1KN.:@Bm;UUjV}G6%&ZjnU SĤu險5~Fm0m+5YA-Y צ +K=< ]MV" * q + \އ4'KذDtK}#mbTv\awVH_Zi;]P2Ѵei?}" ?i]Xōָ=UV-# †V`~%~aNz]/aG&2u1WsB]tZ{6] U^@mZ1~Fē-Z3z ޸/Edge&Q632۝ʓ7Үw+m.fSw,k e0{^oޞ[z^ޮ_;RNv_G]BGz@ #TK Fu[*tmgt:~ޯ 9>mx[Qls9w[NYݕ7ݶzO& *%z͏ow;>D#WhE=wڽ״G]DX;_#oN/6L?M<|9x^B*-pY_O˺o6Bk|."#8^GȔ?cN1mۥP<-a}?1ZfŀIb4x,@aXv/ n`][BEg$n0[>7'䵧iJGi؏Im$a_݋Pi%4Pb9֖9]vWG[?؎)]2sT}q!O0yI5wӟDGՑa;OFVZ]QMVs!Q``@Ri"LE$fjѴLb3J&PIDFK!Ԧo`q(Gp)SUظ_z,]xx6b Q*4(E/DzÉgOĽ,6]n7 )9g$1oy=C} ?W= u/AϬ7Ѳ,tR8˪Jj;,>ɮwL}_2 dA1C\ IJb_ >sQ ~Bϊ ٝci)A|Jx=FKO}osG?[tx0aT4_g͛lb^R"r6 k b(ρؗ N` +&Vt VFV]LI,,2`j,g?H[CS&Jv <:hÑٛ3 3T|&6x9@^_%~qTBRHzZ4nZì5֓kg%ev%or,+k/v'j7حqO~)+ỉs6A^dehd!Ȋb6I)1wluXABھ+xRT8XsXZ"S:$1Mٞ"6w& ~jngONJF%'w-|`7&R_Bpr)~X:\q3SlzSE3ߓst|  f!7=5q_2'u0usy6}77Hl|ͩ8.>>?e.u꣮HL8髅 }t\U=qðҿZK9[Ѵln=ڌMO1N'z R/藬'TZH:Dǹ[⬭)TaviФΜ}Z"[R Q[ :Plz}lsCJLQ_ RoåeTCճV-4_d^Q]4[{)d;sMuQXY$H7P㕒 fo|T 2 |N`UMc~?blpMX!5B]hnZC^>vޜ\MwHha@&[b[Kۼ~9D2'6ue.%(C2z,dC+_q8; \k*wv)ffSEI{*YG&yY@%'o?{VbYEB||\a-u\Έ*е[T{%CT/sy_DRhi;ʥF jl|8do/,uψZ[*Bw;Sq:0W:mzg9vs[Z@1_/'@i FۏLuz ?k+k!张nQ HVZ^\/S^߾ng$ȟDo4kJ=/.}%Hg+5,{GDձ38 O.QX_Л|BNΘ6Aq?H"h~o\n7r(VϢ1 ^͘N/,v%Hbt%49T{mvM)𥍙 ,pUWĀ&1 (%R֘};z|q\Ȫ`8zvE+L.5d&iypoJ$oc=TTQ27U2s=&BvY.$-hsJSD:*N]-HfZuRUҰM>7_ 8ݺc;˹6ڤF2^ YkF]@ڭ!je6mkŕK\Q.u_eHvDJ>6tʢF!tȟ=mbPHjWYkpRmk ua9.6Ѿ16þ]J9o.7FSC3V4:ɘh&2OS I8V&BpCőKx,{I=vTs9LFԶOtE1õ޶7^hZ7۴tRKy}Ui2 K}#2/ZMas`s[82>dLyLTODŽTr ,=e61S0:q-l8jwv+.*94_b,[S Y=gm39Xf3t)s<<2C暄 Y#&XOp?$@ì}Wq2lϦU{Z! "L,4hpo,yV,+@-~Fo-2 ߓhljX]1@C|rk.zВ%P:D㝣Ha}ZN)Y;IMɒLT;u!QS:s$JnY;bHfJ1 +FY7oke8fr&c7qSc`EmBZâik{b0י^*z<ӑ*NmIЙͷF]8b$;| rAk)6WʷI\PDA!p]`h_K7;O Jnm%L7-Jnخ5xyaMnFNj8z8hJy> s+@Pqcco~,Q&&tqf$IAAboLxz$#=gym+,h0TؖcvN,yK:i-8ә='F(\_7xRZ4k@`Y.ni*x%]- +8},9IUՇRH}d+ia#HU3Iv{gGA emԳj!-͉z[=iX2zNg#Kc1W˙95FT*jhvbCד4R8²TglDS~8$u;F7 hqG(e/$I*rk:M(\N9 [O׌i\fHoo1V+9'L\W{ GTOGbZ{L),*=;aFp~f&y(\AF8CWD'spiwA#ܻ9L#QvZЋ9ʖXxUhST'չg&,2ΏJxE,U 6\ ʟݦ/)N'hӶ XYrVIX #Jpy=jOIHELfZu=.qFT6ivHVqE9ZWr)xYS }ogI"мMF&Î4jx]PĨ$Ѱk e3Q'OZRݨغ~ \(⨔CU'}@r 썮n>UVԍl7xCqMA 1\JCv6F[@ ZJirQ@8[F,w8+_ &"]'6ǀHOqܡdu.WG˛l߳}P흖ˬ+Y/;wߟEd`v n*lVq\AC \7lU _WOaɿ.1> V޳ceujU_۬wu&Sn>_PﯣzW#+j܏E`]0*O'iHy 8U"cd'[]SVetXQ]b+ Ҭ"eZWW8vd*ȣ4޶Ey#/P" iAѨ̹l!z9e HtE@''"S)ɒ%55ޞ) aIXѽ mVE.%)^MLY]XeBߐ0fXLj/=6R}v/eOn4?WK.$DyaE˅.'ލ[/A<|xߍ-]VDLro9ϒF-7N=ygziAT ̌U)^NpZ_"x?4q4 eB!(}vpiTRǍ Ԏ">!a6L' ?69ŁPƱUsXsBFU'gO5Nڂ3> ruF2̖0㲧]mh6BU|۱t2@}#W9> :4X]1QauE/@=u5n r:7PRX!rmC zї8ξf`$>~ GZ:56*wƇõx>nu8\Boٱo^5y1k*w=MNߧ.ar#Ս)Cu_~?rڈ?V2ԛLZ ݓ2;pOl;`fiY:k\J5,iɆ?$-Ň77U{Wv}7y3n$}=͓U$TX)|="JvCH8R Tg?C!g_7m5ߏ.tKhۙ3}ޒGY1.wUBZ Q[4-7th6mV|-Zj oBT8pwBʏqòY2Jd'd]ܾQ:ff/wĺQ~DE$z&i MCciTȄCP<lVcc;\S}eHYl</$pŽ f1xn@>̭L[򑮎 -ۜu5\}qve_NgnUj.c^o3{78eظu}܇!wƞKo^ǣE^lon: kb?}:?_F3eّC=})uB7&&ϪDOHѷ"lxf^|iw Fu_|/ +YH m ЉۺK}(JacQ>{N1?U v ͇f \֤ .*Qa&e׷h:[?o^ٱOz t)pՕn$,e ~aTA/zL7MdkD& 31y; bj2a:FG}.xM1 pqz^>zE# QћCN)9+Pc&I/vo8)<_y: v;asdiB)8k% 3 •3Y?u(Uogmw,*p_(b<}M+&"TV CٶK3+i6MbBI̥QnA6Y&Ю8dzӾM'$6ӁXԆ<>*]8Z^7xpݾ/9m :>U,Vx3Vײ8%2Ov{EC ~ϛ^iDN ?~.Goڗ[14,(̫]듾S =]d.##LZ,Gh*pb 3εY7e 2 v`dXC, ^]Ȱ)ZuOWn;nLab:KҸ,OBqv *_Iwj̱~Iua]o8]jȶs9e[5ԇ-v NqKtya#fg;_ۃ7+n_ zݵ)LVݫ428|4_L:5@|[ %pP4& nc͕_ɡ_"R-u6T(e=3@ZZgNDj-N[<@*ӒA%RBdKuK&[hk*{&z-+rV7O^eH9=!f,͵7V%kiˈNΪ%†Ӯ4u7b|+;HLģWxMF|Ak! Ro'+mkl΅Mیf0)xZ_)ϸ(f葢cwRi6$dg/1DxG MXW_:4;v{튲Փ=Xbbu{>n-Z}*L}ratز(KzL^mOR. K:%L$/Ld99u3g)HmY jM-ËwN?4d`)HЩ]Δ&KQMm]r3t~`^Sm{:"ѱ]$R'KzȟUTf1 'cnWoJtҕA[akU|WHV~jS, l˧e$[WzQ>֋9t;#6ЂFKWʿRqP='łlܝ9%^qV ҰT{BRK^dl2C(JbT:E1SyCp(cT2.IeD| 7Ο̬Z$Auһ/3wB]ZP/R+M󩿍*Ļb+:1+K=Xpbč`a[y|Qqm3r{IU&`BY6)Afqc*9>ϠzIop${М{)!XǦSRY2Vr۔fL~0EM65V 6m# +CP9:oX!DnJ\AE%VkM3o8.}(aw{'ͦH bnҢd(LAkVQZݔě|i55t,T2Rvn57SEl[kj,iд1Fև۳%)<GCjThCu[HS2嬆58(BvZl~+$}wZm yQ622dϥ8g>wvWN&is,'ոqFV$-dp1Ky.,Zꍴ,z|kʊ7d=)Ɓi7+ "5C//#ܸhIٛ8N d%N9QoX3quḙĸ?W"V3pTkj&OvPξebg!0,"l R0Zqv֊J9ϕSKvG2OIkq7;:}V$ښV߶}Ӻ?N=Sӯ70sAD[;h۷rTpBȘ9qq?j 5q953Qx{<'iiPh5ԜTM+Am_dXiN<ĺ& UnN6[qJB|{/]3XB9pZw|\1,NGB9wpN,] bI_Jlڄa`g&-u.õ#Ѳo%L+<6`4q!ݓ tEuioߪOl;)l.cCWn5&KC-IoM.Q5\RfWSfTj> qTeq+$( O1;0~MfDTav\ʒe"@N&E5ܻgP…C3²9' |# ޱ ӧ3ikDzna69߄)Ķ:c9X}$0[1򉚲M* =M[+0:Jl;a6F*C,J$l':RFR]G"hFܩ ÂNSBLZKJ6Z߾䷰$?)KvʊE6Zc q*NAX.igaE—=o$ 9䧘 `(ąD?p"9%(БɾM4N:Mt tu4 n<:u.VI/$_9במnI&J͒MaQ 1L+2/ⵗL]ud̅.;'ߍY_>6 FZ?^Lo]U*zz^4HUJ3>.c4-/ bZ_O+¤&fN^JzD 2iyE|{wر\=*3Z2вe09H]tЉc 4t&TV#6[s66>C7WuF͸\]  Zfi%lZ0DֵCdP_v]*͕I;X[KҨ l%BzT2_Hfc.k.sXɴrCVvT-ICnG*z˛YzzAD)fe iŶn,#W\ri^e ʤtb2v72w8,{[G4>U~nO>iS5)fH{~&C>ֵrYlpry/aQ-ˬ=&.MxDftu.o6*7NTO68P^:&&uot'&:ɐU_Eݚ)4f)2#ہw_PRѴ7Q;Ԣ@B[+Mւ3EJTF'^1[`?)t.G|tpfjM{}A7ZtkZLH2?̠|Ƕed2x`͋XMdfl$%F f -%On)ZGpxgP"#0W`#_܈( aciwG[ ʶƫ?gnebFOзMwafJB"K]sڧsB, $2:2tUQ>U)j1v[zRV@)cI~ ѾtgjJ'~\ul@XegWm@_J130dxby:-Ón39ԽC Զ1[2: =#r63fr`eQdM(m5KSnuק a昛9Z(W (XP_Da3[/fOvl! XO,37Hn'8$u>s#<ؠU6/Ο ݝ$m끤t*KU.6@є`)7 8F`m7%ɇx˶/8\TPe}Y(X[cY8` [V{Ș!v9}}fj%U|??NU(Ƀ:񵃉S^Ӎ1?+:<(xt?$puΆ!̛|&ŗhGCU;m̀W|g[i{%=ʅ~714\nsi.z7/FZK1m]7ݵn3_>qJ\U}5Zk&7W}e6j?;k)ۿ(-Jas6gk)P]"F1 F(BS b cub w?k,mHn\k^3յ5>8&+uRV7#&e%+4Д-Ʋɩ0ǧ,Pʚ1xrL=!\$)#JUYt5 )[8 k0տOE=QTId@UԽ-`ͺɿզ_T(+PL~kTJFe.zg{,$X\0-h>e?w.b_IV%$昪M⵵FWF 60`CIvD0 `[R;+6'Y2\w#٥ S 8 oW..IGu$a!&~h{+!PZb_{<տ~Rb<с׷.H\CC PCԬ.v1u φR{K[8JJ 7%YSI{|Zg4]ʙ&E7qvfO[]qY'z{}0@/m[tX8jO0EW?*6U@^}vx;DNlAh술北17 Oym0u yGp -V}\^Y<*ضLaB(gļc[%mM ´@~x;:0#quC|b#DƷq'7ØD~ʵle^*K՗YX|fsh`@M })/o/1<B 4 ;1! OdPKtHXi38o\Hsh,;G!Ai4Gp0bKT2a8kZ5E|HHn.I*=%,9pi !"iD•i/~S 4HK,h28߃+{WZo̙8: d{zr@f 9Lk8"4" g0<ݛH+J^V.BN zbWE3-&@;rnQړKޅ9#Ϭ3_C$p!* 5o2%t?i(i{۷~P]WWgF1,&Vխ"!@:V?Zm2ގYVsՙnߧ7|ubk8I zvmyH1wŁl 6Idխi{}{%tC:H [0pWm"#T+e'/c7𾝯IS`r~3񨀨Ԁ! 4ЂrF'hT?, D*6&atL*M{I ˥ O~bᮮuHck2YzcCQRĄMFM&m.1+Hp)q+WĀm&ؒcg4AJseiו8iʝZ u5Zp_.9.q^ I_ޛ`'9Zݦbk@w*B^^כ #z7kп1QO gYf Fyqd?8D,~SRjgK,Vօ7\MU~UNÕ%sy<* l{wyƏ0h;. M3U-Olۂcs C55VHUHJכ;@11W֋Dyu ?@;{ˋp!V`ﴝ1s+u_*x^j'-6 . |J)Ś&w)^m B%6Lpn7l9MƻOpaqutPyxіS ji9s,/+30~pavX<&˹ʱ5yItRLPaz&B7s:i'y8~ϋla9NL|~Ve1GKNYN՜Q28}ReM}! F/ڈ~h:œ&,o޶$7lr1.s{0nS~^06vs+>suvS562#@3}_G}M.VT? c30c J6x^$ L?"e]S%Ełpoj9,qcot5/ ?7!uspU=̟*RˏJ_OOO{vX,n|y {MyMFz;[o٢v4|ކӡ|^ N y/v; j?`E?oimy>>Isvq%X7Q9@_ ~pC4z_Gʺ tdЫkwuCQn6Ӳ6k[67==&w&,,wn2tnl~^nWkm[ϋctc0mZlwv{{I}j{a0ژ$ϭ͑<`aW|[?GfנSJtO |?;Ok?R"|Ak ǹ6xvvD[:ֽO}ޏsy{4hEL11+FTriuXkH7o((r@nB@ H (i&$VzU 16Ci&0Mjs`s{II$SZzB@yC3^"ܑrT K}E)Q#UiU#`MKQ8ȱB4eZ~\:dovvǠaiW<Te)vHAyF(Rh*8WTkIvg,}_aB.HHߺ{;I_}8fx/ȱJ48j}5͹ q@p'ch3?Bcɐ'xAuUXG6rhjA+%&Xc? WCv/V~H*?^jˌ.:7o~` R:/$}9 b )#|bz ^qhL^oi"4Eܦ= O쏳e/ -n+,wI'w6~xu=|p|)0jݖb%O;mdt$I.@uadtkau=e/Ys*,s{/3Cb?G:NLk3 .6_8Q)A)1(;1C%Ӄφza#>|l~ށn#V3Y:x2Q>v{=Gnh #DnWvoTU yrȣx4/o봁M ~/ҐVayޔ p6 aO^w׈?/S&A~H䎓OCD}5vAUΡK~r ~BrX.6r礜Wv*k;{~;$Huiハ' M Vϯktt;L &u骮_}]o_wqjZ=Z1<"%G7#2/kkY͐3BUl6U>/܏諟o!yV?¯Nm]j9τJmb^묲L\L|C{@a  Ժo<( [~h{cK[x(Jgc!ugOdd-d7~zO`0SRQd VYw‡wu]wuWSmB-XD;r8WwsЇ ͸&D:ͳ^?[& [J~ԛ2WfFu+C s3{3eYs`LÍ8N_1 G|)0)^z3`Gʿ^xǚV|fPBXbZvvsLmPS>Y |a>osZ&@1V!+HqqwCЭFx.ڏS`toHA$ H$a0 $g 0+*QR?g|:]f{sv2C˗,d6% i6Ɖ0cCTewS̊cFgn@Ďް)+Pp/=\4b=ɠn@xlPs'<-w~?Dzcj^[_/YmHЙPWA8HprT}#](|_V4&4Yʂsh{ bk[vZwjm;w)^OG]A 9XnKO-p2DiYq&ǎ_P' Ѩk]60{tuɞ 7.@q[~/3T@.34A!3viחsƧX`sc^Ǜb?T59guI. hx2{ cy5X&&;G=҃ \ Pl}+OjЯ.LA^3yʧ~ݱk{'\j~ C^II6nt]NG9p[¬2f<5zַR쿪Sr?=fFt xpL_NQk_ȕfd )lWtWP@~SWD˕"_?eUW8J|)iR\ܸ~Y\ڣ2Gr25j9Y<`$c:uax׸BB_v@ULG%L6 \! k^ӭWsMFjB(?A:[(|``'Azn ۂ)]rDΌXmP:on 4|V7~V3 1}]]v\LEVjwԋ̍|*;4c 8 )$\IK&лGX*bYF:[h;qN'tt_B6Hm460m[0ONcM^4pSyY"@`yAȮйa[h )u\:bsj7r?">-،HvW8V;/ar xþ;%`RB&HG'H8\w˱έNV ?y$zv7k{Dm1;'sL.۩:݌a8Ӷ6 rOuµ4m$7{Sf ̛UK.خQ$er:7eb#w/2k5`fߡ(΅\q4H֭ѥ^՝,R1\xnGs +̦}+K!è#Hفu$,ōgoC9X;Ϗl'~(J7F${D9ä HԧhzF`׵ ٴ<1P~c1壟- gu_l?.0~IYJ91qL+/ D%}M>wĵrGjg) @7&H~`=@JCppIZ+au=u:?E\.%g} A1f{"zkI U }DŽ8<^iW̔ 7v}+F5(-zzNGeR d)&GUfZF[{scqn*כ͏OdcUegM93ru.G8Rs<>+R 4y ')P3Uȟ1󿎋$*Q? 5_ʮ9޼aNzv1R,n5ی RdT?`OC\yCvVmʙ )itKzEZ?F~rg[.<Wj _NB {,|}|ɮNcwz,վ-"h~j,xi f7>G! N&[ϰ;̸{cT*kڄpHhoW _#CMk]d}t|}brCiQ{qݜ%;_|7g6GEq T}㧣v(ff|zutZj|F߿#쵆[610c21I!hXjh[˟q'Ogぽou˾;/\W8 Mf6<9atGo(̤֯s{ 5_B51؎qUc`aɯP$$ U߲\o vaX;rd3?~M#dcO%lv/35ZcUzMmLKR,[M~ճfmZfkF-֋D39\sֈffgG2>e#N<15¨UfhI@3k$kZֵֺ! kO}bسZh k%5+ZuZ،b1kEרcckVƵb(hT"P9ч` ;7lPo\gp"PB( gKLO+n+:4<2%F iUBX¨r$-^u( َQ[2៍ "(K̔ a|xjgI9w|Xgꁙn1v#q:Li 0v1lUX30LE\qӞaCrWX>xށoC[F ou-u!?]{찉 Ki#b9֐ њH=,oqZfsrfC~uyoa0Vkp#6[ i&ta(̩ԔEo|s=Ü/q8Ǩ\jP荴OpI{MBwv뙦8ؤ:th1@+w:7=Z-!^F.S9{ۏCyI\LG Q=oqr |P_/&rio/>7AMj]Fet'l&;5+j9L"!s>(FF[MEMOt~8|h#B7^STf `ˇ{T`uϜ8Z޺a5ofᱜo|a^GN18w$m,~`W':j R _ Ƭ\LhB _AjԲ9Mi.(bэX,!sh.v Hz*gJՀTʷB=sj-̔-c-JGoy[ i_j$!Q!0~*ʎ=Tizo}ݯN_|*~r<^ߨCH k/⪃}Yr~wӮ;Β7zLf%8JQ^VG0 Q?4?`csazU ?C8 n VnjZ@VCUWMx8ᎊ#ݻ@'M 4n0X0ุ?_ 7pe} >")6xʡY$2So^Lֈ2Ddv).gu`Yҏ B 7{=s>BEl>NݻH~{}f2?/asD;o>o wHC"%قɋ?ᤔb=G[LYUY癯S Nl^ -bЖ_Q&!Q}a^4h|\jH~4ϙ3rb Oy82.VV̙zs<+jh&n08!IU=xMV c]YneR&T/k{y(ߨɧ{fn(Oj"`VSZd½TI5<*\; (;,<_Tް,&w j_z,;<.qoTd7r )z#CVNiU ϖeE̒8NE|z?n.B$w۾Q쾝zFk@]x-=6Ҋ}mv\f']'rk1v63m3rhn/V?~n*3Y#_q\Gǭ9K~f^.wE]6oOW!{c7y8cZ_Y/ c/K{а2bBইѺ0p!i!0 Soҧ̻>;gKydXlFʺ)- DvV0ޫ~Mm<(E"SZl+oOg mŇ1v~:ZȪ^)1$D?Ŭ[o1: 8h.9OEY]_z4J^%xxԄaU`԰1}#O,lmP&i+ƑUB(`)yx rȐdBW9v+&4"Mv &Ir[eK?8ZmQEhJ":x4MB  jD(aeӭ|~Ҩ3,]h^K3nh9;Ɔ3QG?HKCh`t X"ңǟyyyf5[ i Ƅ+s%zo_b}FtR5%ʅ1>sx/]dܴ䣠:ꉚݥ?y2$}零~gɴYzxwd8_r-V}tN'z z`kyJv|6x]K}?ᙠ%rȵU4$[-ֿ1ϨnHksrgCȭg+OHѺ |vӿ8^Ho*2|]ٺ? P85?o3 p4f{o!df?Vl5vY+#+ 9d(lAE/#*Yij޹04& }"G{O^ qj+LqޏI54<΄0 95cݛQ1jMJP=%\$ 8XB(xB6Kl,ƞ34[,Qˌ$GבS @+9.>>_S@.(jL R%w6aZJ-|b_j `A/ bqrX$T}?18O}W|^ds̏N}hoi01r2FC!OzNւA4n?3ǩ $_4!KE8?~ϲLjVo"Mw;j}U`M7# =S͏Cc_> [>/Ȃ#RXh-jtvҾ27UA^ }#[UąՏJjP%?5juHL/ĩ͠[Fi1$pnrKr P܋,CgI1@ϟva] «Ǝ<͠r\qnWpZc=Dl|_Vnk E{/ӡsv,>4(;;Ɓ^Yմ/E.[[籰ƲMdS&7Eɋ]txc= S[f.s}UWUеL+6xOi35W,4mivT#uɬUvf:^w嵽Vcꪆ-h!Kׁ}һZiH.?Rg?t9|S9:| ~7/~֗.^e&L4i{Unx EH@r뭈5D3_weoV=w +\PFo>{׋쪵UmmlRË~3vk}7w/[8W]ȏ}6wF?+JX_GG'dZ~vF]nt5w- ]ïhrGʗg‡ccތ7`_ pG}Յ{AAu.<ދM*b}w'] R bqBBHC:.z\]z AoG``ap9v(>ֲ_7R]ᅦ&11=b׽=]ݟ1q=}ou+/ynѢ˾{ލ7ɿbS3>Tԯ6o猫Ltݼ=/!1Po^˷ےwxzZĞao7\q/VBUjnnmV5T 6כVmA~.oTq;}=;;^j?5[גz:/?߆'=!{O!5Ay]~Aӵg;R$_x BK+e'͉isszT>CS\srSx `A11W틓G3uW͓0c;/y(i6l~UUj%;"j%!G{햝`M6 ൵m .=!^KO{IceY_CFMbJ4! bW7|v{<<_%ei7̛$Ѓr`e~9U9gEEfwN{kW ##8磖eXtpɝ=.nן3fCkϕYڢs_pJiRuyh*Go}`uHCͅrЏ("5mE벩.9U ok1 fz7E_2n<û<mBALӚoBoƵ1 3ɚsv5d|zH=ܲSpbrmY]Ռл3;͹?l'6M$ϾVoqs |!y t~>)]'e&GQe3]FΗ<8Q}Tа-b"ع1wDz8cE6IR7AᢊC=_O~dOk[i `TI|MD u䚬p&[쓻 ]K b@`#9W{Ӑ?ÜE\!~J$|u$+N #ư#A4BNǦa1BQՉo[+P v\+Oު <=h@x/n 4Tm!@|K],Q̓(-M{ @ ;MW+q+x v.dzTۏZ~7:H}7u;OI}~WJA_l4KcRJ᮱cƬWc%MhKsm ,R^GN$H݉HF wA*5;eh%[- Ѹ\&0p+ 2߆C;\r -\9W(ieL3ƿ,8]2S/]Z+3NmyXk9^ͩ<9D:Ւ0LA;tO쁝ep뉗Ql.3yΙzk[o <ߑRI Dn^@Ai0Q(~N6F\aɔx3ܣbq %鳱J X5=s80便c^jr4<̌|=8SGI4Aٽ1r=1mhYS~26܍q.Z8cAs6M\)J$d%%hGcwy[6kW=eҦ>}wkFW!w>gw9ma^o9KeyMb|M6ZJ;~'cυTo#ɦxn׃eL{}['/{tfI@.$zO'/eαj[(%ޔ YgV93Х?1*xȨϧ|Wo!ewJx}8+=#t-o;YFsv,mm=mWbyŷ]o9Y=q~u~L6:MOqh4(;ƟKmߙ4#bHf_\KZ;_>[II(GJK[hqѭo@M04Dd@90 3@[ֿ7mgw8y`Ճ(PhS4<#?u ZQÈבƙk@p:,ě1z=Q 3^q.l ~?;? E$ Hl%8N5&fw(6zVY%ZO?z[-m8aICq뗯h>_Gzj{/|+׮j& mV{c'X\&Kt_?`οq{V'4vغ7U=mGͬKiٯoRLgcmnwh; +͂Bv.^։~k߆i/ dfw/߃ۑ2gtst n6ORrmrtHɺUOU !c!9Iz3MĨ.vo'h3,f(tZ"_ oTXb}iVjl]X x]w%hX3:m[~oٌ)Gv jWVA}4  ;$lލ%u"sbj3SB5TdW158B9-^ w_Cu7-b;UOm+}s5TCI6 " Л@m98h J g3msx;)Wb! /֞7?":ː nYpcL~yqeW_jfau}M1WVgר*d\}]k72 ٥!RkdDT"ZU0J2O"IW+-2ُ1]!j:}oA_Ouuah̙wЕQ?Gm/T9;pdj$}E)ZG:]-!^>Kӌ"5u5yF=ԁtd).F'gL֚A :Zǵ0d&v^ &v?3I1lyN+Mkh@ѦFɰD VYɩ.ݭ>.K[vp7sXS7)NIt݆k}BQ^V"ϒ^75e~ jEknݹŏ{eou*pwNvXM弉 ל^]~/0$A }Du\GjmT߱ǗUNr>n6GC((/(b;r0GZJĒ! '0 ya te0cֶdK꽭)]܉9KK=9:N FrcMhl#'D3 ,Ҕ@VϝAMyǴ<}>+D.]KKQ-t.dB6piNDAÇ76aN;9Aujv3&y"hݸew `^ԖB 9FWۣ}îݻ_6/ŁLmԯ{u˿z=pK Eȼ4^'>(Nk},؍Ю^v;.o([)MMŰ\Gڰ4dqWAO =ї1s&D Ͷb:w.^n 5-wިNٮYۗUpeNyօ޾,!^zÍ۸W ,W7(E}_++q߮X=r-W`7mX0 0`*04U,Ȣn\ڗ F孼n˝wr&g[y`#YG^<1R5AAKj4WI$;S>\ؤ+dfU͉i$7u/KBZI fljݻuFu曻!Ru\CѺ^:hūMù$H_ZT^#, /h;F 6og2##]۷nU~n(C8n!nY rmRQ# \ܮu\ yr㠇~{_YrZ2O8p:RaHl_=qũnrk.@5a;VAfC-nhy}U*P)w]eXQEQV hb ǽ;4403YfD1/Ljx*ޣ6#ZkqYal-7#DKZ^ hE<ӥ֤Jaݕ%5 EiM/sn%ݻwb0Tv1_}Uq^)a.sߜK\)f"j-A=>,Z$`ΖKuzfA |V+^Ta$v f4#k/gtP,װ/ޒH&}qByuzy7Fߙ|,<veRx0vҮpcS*5l^TIE"OgƔQEuݹe;'4DA7v|,-t 1L^38jsN~wKaX9 JwvDVJfZIEZPgH PUc>%BOC(~嬆Q;Wwޅ<ׯ^,|ӌnۘ+q&n(2nv O5 Fɿ}-(.앾 q0#ƃs[İ]7v$2TI+7ɗ1H*E2(9SK_$>>6$XSGk}lLi`]V!~mT ~gqĿOm\(7n\˷]_؁ %ܡ)V\SLIUZ^˫k_f3@yݲq+.ߴkAi^̃[Q"ά|Mn֫=\ڇc AToۚC*@&л15HݨEK,6GB(NNT4nn뉖wB~ Bv۽nOb+أոWw{1-nX"S~e܊2\j(qn'APA (ns}7#}7r7.݈jB,PAΆ$j='Or 7"ۛkj f^w^'%w.\aEl aIVϮt_sr5v6'tXy;JO:TYʌQs䘾6>u9Ȏvm/iDNĄWD҂.LVM%m=Rq)4f6Slf0B- BDT5ѓˣ< 0 4tK=@ݍ5pRtbU CYeMn3vϵz'Dk^cGaۮ/"ٺTZXEsGt5юud!Al5<"ߦ*fI3HZDnTazbxEmIAT%.WvHFbʙ1Q8(}5kP0lkM5>SxsՑljPkP۠8/7%Uٸ{hnq]ׯ;moqRh+W\&!^sc{^Uڒ صv&^(hI;!duI$jFGy-byel>^̘#))3&u*.;6jfqF5?[9ɡ8֩L|i |GvWWnЙq`Yku*0FkOti2?rTa1cTUeUp;ILC˫4fqn#"-s tYϜI0S:#~|eEr5r*e{%m+f4N $ǐck]()Vc<=èaemSI7.H\WhV} ID)4N5P<< %%Q~w9D\;/A i U'2WO>jx 堅ZjHŴU떥MDL-3;1n^oʯ %3 =+=Ϯh-93$*r!޸VȊ[*VOqŃc ]碕ЇuyUYLs,zPؿXsԍH&4x25n̨qq;NjVv|Z(s}d/J`%l[\Ecp0g-붔=#x `XYLӷ2N͈^Aƨz>؉vy_1[8rԸ^`@cAw .#pيZ@Ӱ f"1kN1}y,ۤde9Lɗ͛Q5"@8WDꢘ@̌ Le/dl]Uq*D'lsI=H??W7غ4o 6ʽ<4a!>cdffڤrO&/zLn/f໪S>oFR3@ReWmd{Ua*%?gIoZD.y]mo9@)|sn|"/*Dq ft۔j:#-ΐ٠K ';u<2^ŖHj}`JJ3_~W0N$'PfBg|9ԐObC^_bIRf~"3R3zAHΔO=[[aVpfKvHN>>ɂ.Ԓy/|fP@VZ^9.,v Y@7Hs@0 ƽjDhnx=k5X'?dO@33z6s 6B y!/?^=]Vbmi@HF:76Y/QQvVQ-~1iNmgWY Kmcp!ʸdHĚ{}7>A }fձ + ̟6+o|zDmZD"+ߢKio|8Y:H"?f{46}[CusI};=el8ǔ$Ot\fXq" φkxѮY=]]ZLgCUyq5}_[Jx~2fcx&"׫:3m%w\Ӡ=}U7#~ZeѬZi qZ߮ yA7xBJZ(&8ڂhEdUjs9R:xv&1#뷮;Hš x.H#-X[Q61Ly[]kZsb; Z8NzwtfF4hguPΚr^VC<ӏs\<?WԀf^Ǜ^ӔDC[;oR%ka/*yy}!9㶺/`+8݄U]xZǯu뵜 cliOkP~;Iڍhyc,3O3B=9^PxVP'^ߞ;YGӹf(͇~u$Ac\)y{lgd:&7cߤ# jӢyg{;x=(LV/Pl_fne}?\-lQLP|#Gˆ:t, tO훉-⡢\2h5 N GڍXv>B[nL_lmٓ  NO5e>uofh,`oބl5RrYG{kWzgg]Ϗ(oQS6Ƕo dM H)hDD= ehV =t/>H`Q0Wk~y͖wKJ:6˵]Z O8пe%- FW 4baEb4 4 as2 %!*!HʗwkĦb'B; ~*#0(fo FHtfTh&J3 wDj3 kՖiHFZ7t:]'.QMy{B.7!4?.<)D?q}$xLWc%⑩ETN/no2myg'5fNjk/+ ڹeWb6$@ qJUI{g9y"xw[L\áb ,w6goK4n~]|ZJm6.w ҷziSKLSXyT-2ݣ kx3m e5. T QC ֖%o:Ӥwų5݇3 ]v'3ݤ/+RiËb(%n+7Xkz YXzhrkpXG(ZP!_a`kϠ:gCJ 1Mo>$J1m8d4}YvS^W7^}ȝ ^&]JmW\n*~t ^.뭕c;2^~60Sx[{J⚷ &wҎ}11sI!!Lq4~O@RHqmWPLo\ #n5[yr:oy:>RQ1KHZ$=VDk{j /X?S4B0!^;7#!:P:o,LUmB]jBsҝvͼ?{bM N+"}sjC[|[{/eKV#A+]_!؊9S]&xDV8?S ׈ ɠ;ߞ?Xa.3\m< mp^d=b%iK3 41}kt3tE-TE=}3/*EA.4ryz&ìھ[ýӂZoyϏ(`^Jt& )*ıQ Xཎ Y,Dgί!›=nD?_.$v ,RFId?3'13y炰Pc`rh/I3bG__L4{?zܦW;#Y' {6T~NcgpRުlWۭ73u oCIxN6?kQ>]*ȿ:#i_3oYTn~'TlD'+S $ H&5$HʤI7O| 2K|UnU=i>U\ŃN/'W{J+-`pʢ]ҵxY[rqAnLڮrUЯL?D`[V, 6{2Y]D6#gxޟjw%q'[~,WQb9A{>lililFt(]# lպ9np0e0F_|_q`5d%d[!)":nA. 90Øsa !0j_#{Cwoo(ǰ #JFsζqv/XK>#]2r4EGwg_Gr_Y[ 3ލ.TF7;;_>'wǜ5X7Tvto[^0>Ӻus})]2fYkVS|ߛU^G(u!zv~%Vi;=6BZSixܪU0%w1ӿ}NkKPo߼A`>uљׯd2 ^^ "r(;6r9^Td(Q]‰cLڿǟ*}>p- ,fƬz~NCuh[T+Uλ0~ ^DշJB4藱V @bE V+->N`dGw;KU "Q/פǙɖw]FD~}JNNasw7~˶-G[|%l7;wٯz=c\a|HH+A6&+ǝ{HOӭG" { 3s`+~#1…mG=5UrY!QGJNe0v C³KS BOx-G#}xvYmڤtAw{<%c=.}?k1T6{muL5*hȟr>oxkG|Q _ԙ~utM˒A}*jLk= R8;" yߒ6`XXۜ=B]ar>C6F>_gҰo1;ya hO Sl2h4߭Ryͼ<q~-|{^ݻ~GC1bN8Ӈl{Ug*C?X,5Sw/b $y-_6}p3q>;Ҧ4b; /:;.{=S$(%Yl5JYlJ*7%agQ  5Kz7wyzh@+X˫ibJ5mgKˢ4D]>W@! 4ik/W}(y0{]}ߐd 7`:(r/]E̝2` O+tb髟:^E;gՇ~UsO#ʶg%e%° ΀7uՀ_ٳknk̝+<^88-4:@*%hxq|y,67'*uY@竹( \-X+=R,޳ |H.WL!]U돢0i%M~8:A/-<\uC:lgqv&^&v_Adb;ZgT!\3U9WȢ=Aޑ}2G66(Kml_rǰ(N~&N25;>yW)-G<s{h?𴌲!WyU-S>@d ={C&8a_ ݭdQc‡+{ޅZ. ɐ ^FB 6!Ndd18%[zFM<5+#Q͸lWw߀,#c RB󶕏žA'1KaOY!΍FhO '(R3O(>;A=I[f1˩#Jj%vwE tӞ*" R٤h~g0'>¾Uٍ1_7Il[zdϡRz|;tmHM`#g| )n {pmY]uv;YuW\=}pe<ԆxzI/Νgحowtn#9QiGu{ p~ȽsAށK`4(:(4A-wMx΂t`q \RwT}h#?u?Tt;g8 !L?|&Ѕ7*/|t 31 #G{s?S 5]?Յ;`nSj(mpov63nⳌ&GF0ceI:nT ٘ݹlF` =:^"K >`I&NH I<<݁zdx:}zWcJhJmVagݮSPaۻ0{rg}9 W,@ b}77޼gGdӎ}? @ cO(kD vƋqa% 6ch$R@D>C ƵQEx<Iv<}6;V *VΆ~2fdvFN_+ ڂSO10A@Ku+1bX Hu΄FR<L:L!(Gp566%74c h{[lZ\6m#P/}?ZkJs;m$w|_Z=zv^bzNZ'::W;×\4L]5#\K9c~< y0"|=;} %uM}'C z8wϧmՓM_CGԒ0%R*?K*ú$Y= z;Q=JtFpx,fWK~aȩ䐽AzLJdX~][6riT*6ľ-a"T[¥MxԸSv,{ D̷/cWN tjw9dKw3ro͢tKzǯ<-Cii uK'tޅYvj햺ضઑ&wip)*3ƚ/o\ꉥQw5>FF\4,c3ɚv5/g{ҽ;uՇu}).#8y6'B,e}.>2E4DCUB巋}yh{<# !uyN$9{R.\  wa_Ze*v~GGZu8Zb Sh)@yH}ݼiu~Wbݎ%<%F^HxJIے~ɚB` fϮ@s<*IB]22*qј1ߋ__oAK-;fSɩ&⩻q]M1\v@as܉ۖf1\p)Ɋ-]3sL 3LQl;@B):T͸ڮr8f "I nBR53b|hF `kشUкV͍_o($qi^/ 76A^S`$9'-mv_DRKh{jqq|ToM1!5W זqӠ{>U|7m?@cV Zvj'7<_Z5&!6i!$CLEBb #7Өik{h2\N,'n6UtM17ӛe>F]%,7lhQ+D{w4msq.TSΣDf0XmQ APX(jMnsCߙWfֿ~s{bq~yXVeLnfO:>HwcۑDR$Ud2H~A4>q:md󲘒DC$sg|W(>*` I"B{#?d>MuD $Zѥ?<6$iW9;e+*`dN83uXTmcrg(Nn>ҩBK˜` kݎ7a2T9'(RT\x1p8W58f.dw%W~{Hs|҄s[\muBS[~!?/ A?0ftmxf ရz+/.O1QO{7X#J:6~]p\v/M7O?,Kݒp=dSxtVkѠ^|FFiӳ/bт?IvGBa[jH=e8`ݥ۝0i;.ɣ zƮ'glv|30{MΏHk|g oO#b+iZD%t0-Ȣ2?{A؏+@q4=Í!M x+xTu d~jMIC|s mrv0qz+d齏B@ =&r`f׌sa["{d wuZ*aP$=wIil-fAeBr>HK}c93f`'ݮWc='o'!uW7sԜ̿իﵟž[-F![>'SM9Q-|>v{υNfBA҆BYz/g<^slXV?]Bpߤ.mKBEڝW0 4 t~ M%f׍A4Vz0q Za W,F4 9bŽ8Ѫ]tGQ Ga+DrVqs D;T Gzd ÕL;{5y`];.a7;I.xR0ϑz 4NEF?6^JzSev6]I;ny9 JOZ NA/BRV Xۄ_u+qg1F'sso{]?߉Z: .Sw"8_c$Mvq. 8~-f ݖuAG}} o.EYT+ma}KP_Jw)i oDOVNGqn?ѓus|8KF1@ۜw~wXn9^8Mdܬ^_ژGdr__Є_+Wj+치l'c gٺ]y1FgÌ~v#/$UCZͿv7NO>ѓ9V;gķm+̛[쭝xM ~/`.%&ҫ!6 |l/_؍N?' g@nmtbq?3]ML|O:0WFALP9m FHnCQ^Bb;X<džGPTpeW-; ;n^ey>Y\|68 mU"m$V+x^o?Z{VVjHo/|l!FvI㎚"6 k7Ȩn36fnW~ӎ{Eb<};)~m\,Vf NYI~rf 4(0VcbFThblO@E[Wd78*lN~ncfBsԽ<$Eڂ&fwd>1#s4Dž:QM27Ȥf1m#qgKc'6U e#{x#rVf'-a~-MNH0#|<9sie^Q<+^`XaF7(V7'Ec]UxLjK=;!7-*԰h'!M,$,hE9$_Z|S(}4HuI@PZB*ha J`@?weg׿ЦxU^'qpnǼ[!MEkLfEv[=MIjT =cgj lB'ѐཁȏˌ1u< ЩHs yS!vY ew!> l[ES<_8iRbiB Y!e3"xg:~1AϟD,/N`fC.^?k]ldV/(J21F*[vŐQ^y4?MibMyAZC}6YR9n(Cv M7;@Ȗ>@" e}J`ė]-ԙ{v 3M-uчr$eX}fOێḬRFMut>$k4tYYdP,p:c#-Bp Adx*:a,0!nr8>xNUrRiҀւ ^՘n6+16Kn%Cb >J9GmRK˶9_3Ͽ:nez}|2]uo۝cagL۲ֻ,wu&e~n޲O*y7U|*'9̺Pt!gi$-@aBsB(YiwoSRFǺəLo_ 343>MXc>(? E0"X8ӾcËفqd^l_:&²@cDUomMz #O u/faTq }yr=^@xKRZ _huH:;'"a'溏\u߶sV= <~W8`WL:zM7ݻMLSP io/.m⽪KxѲGrۍ<:wzpk#i57r{]/T#ϻi*rޯλyV_Mg|vKvz2qj>{,uD _1oZB8ևbb[.#B62]L RµQ8m#$ '5p6B=d(O*ƛXqGs?O_)ؠyƪP#è"zmb-C2̑r/1nI:#ͯ9-*ƵŽyW DU3Et4_pṲ}*FqTntᯉC Vz'ycO+/r9>|yGpD>Kf0rqozE=>y kQz[/2ݹ]E>Cݕ`ĒX;v1;447^#>y&IwsALLN^jD?9xAãHvW7V:]sʧlYG]U|s 0g?21Oh 9@tZoF{pƠXhH&+FVBs7f:@{-_ 2;L'=J÷_S7џrrU6`G2g12AGkb1N`JPgG:hsnɌje r==d gF!շ(9_};s. &P:L-Ej \5c7.vV[z QG/*KQ6.QP s^<yKҪ_"W)7z.y Pyn)U|Ask5>/Ow</E%qZB‚ecsIJ^k3ݟZZo'Nq:o3o4|1;mޥ|>?:=Rek|y5x dW'yz3OGzn)TB7;D+ںG.jc ҙѓ &-\m 35!C `\rew&)};SxU)#>Tj6 6pp߮/GfiB~#Xo5MB<}qDbSq׿E&F?{靏fƪuˢ\<_'Y7 ~1n_S57mzy1̃r)re@kaN:vVssdZU ƛLi(C3BVM;C{qOVU] dݎ]?lX_ 0gШ=w4ҳɗtgg$^9We/y*]Qo&6d^q|K9Iy8g]v_]x.W#.Rhz'Q4]]`tVydF#KܳV֦7j8Z6x'y{ؘ?FsƷFƳ7=8;\3Ff43h}oS5LWpί}s/Iq2 0E*㋍擟gR(l(u9^5\$ȍ'+@lW=}h7 ċ:zoʾѠ4|/F(L꾒0Z"yWyL4(yt < lԋl5h[<`x NS Yz`tPDۏ8 M&azdX緎SY߭L\jp\fc0mR^Vw(6=Q*Go(`prjɻ/c"hfH;$_g ഀՇW} VK)_k_2}i$#7ߴuebU4vOؿhÍb%pcx@Nk[{ ;7;Z߿}W@hNJY͙O8f%YPb:"f6BI6Y{b QMͮBm^ G.ۊ3$npLz߇kC1ѲךdG3<.&+kX - Tr"j[<[ԻT` )|I;ihg0(o"AF-<\7{%u5ュ[_8x5|޲jr/pµk]h-%pOʯże8T^b|*L.lQdm;v?BuZ/ApIs^,dEjN6S70>oms3t7v鈾g7ComSk1q򓖛: yt䧳ѣby}e^W=h>j9O뢗CݹF5w`M@mO!6>[u>wZp݊+J ҇Z|/SQ:0BjVYe71 Icҷ$i"6'5e7+7 UT ^ ozʼf8NjcGJ +ǶA5mtסGPM9Dxn k!۴ Ӱ mM> #ьbbMzΚ״, ?+? ~o/:IRĥfr{ؾޘ:zz_fr]?hYIxT[?gTCF55m-yÑ>!!43;ؘ߯OdN($-FYn3nYVN~B.'.>[$bV>/dAFKOZUV֩YI,'.J{1!ufn:2 GK(ZVN sX};fbUlk4߄#y0 D(~md+7f}d7]Jɼ2i co9% $1@F,j3\6Ѥz-q&ȡFPrSc-t4YTi(}.@XFW0`P:\0[-{]ecjyeZ}q?փ ZM%7.k,q&X:pϿ o\pl?eh\wRG3qk+(>?5Z0P(ZEԏ(_5X 9:0G;A^BJ0m؝(``,ɟ+ĝ\*nߺ~kE : ;uȜěi-!3FI^v7H‘% q?l̹ ~ˣdγp.q{.l)vΝV6nb8GE@!ZsYMy!G)sFs-Ќ0thܙ{tOu5t{"v%x5(ChiՓ1p4>](RE :;|c(va(:F5?{QQ)tËύ`QB6/ a'גN-)V ̸Bd/kQ5 \"Bq!` _PLjVɣF.gw_I7&{1U/+N? sc5Yrq o@W~y#f8=#c=( SA}GMVTj3gQS=U>԰k2*](l[|@jܺ˷K xhęq#FzfJWSg%k{l8gW? G"o& nX&qL_R c+1Blx,9Ȥ0pdd7nZM:ѷuV'e%-BKwWYL>K+:J >K ~d MR++'OVy tIzߋ{N$ꃄkό|o wX_eZRڐ8or4Ҭ%d1CC9|+jwƃ.1xYqk3}-7 @cͪUc/9+ޝ@$}I5и=.dG|<]gRzC}.naM||` 1M۱|_4+!ly$ O#3}뵣Ҭv]-ZGxZq۽5R˞;Nlֲ(vo7HZTI嵝KN(#D`ۨh8љ[5wSŘ&);UˍBʼnPxKǤPa40|y]=fͅڿtuv[߆o2r#Oc9b^1vvN̸.I{8yiHʺw #!lJ/,@+5g@S֫ZEwK/.v*{ˏQ6h:k Icx&aW }V;tqR k}g7 o0ͅe:Z3Xɶ⑓|9$/=Vg݉3!nx} L1q/hGqB:|j(ݍڞuKw)P=&LR/̡0ή&gs=/O}:;/\?=J#8UbgWvs*\bީ|o-hIf bUBuV_or~\lkǶ|ܞRݗ^锹<-p|<^a6Wƛ4?w=}w X:s1o~ct{6/Px!(gQ`Rv0z0] GsMh'__FuotDC555]8vӧC3 0^7ܦ߶(a1'ܽ_ Kk:fzuVp{$"b0 uژ˝p |yy1iY >ۏqN݈Q$G4/yw7MxKbI vWFJLP$NЩ.iNңIk6ҥyPOOu+($xJu)-L#`<_Gww':&.t{K{o̦H<ǃnj*!rL ×"X:hנ4|'8_{Ɩ,MW5_Rng!^u߂twH mG/@h:w8rٹVw~ޑOtY?s~~T"%G"7=|3!YNA#䋑HR@bo:xas6*,_BXtJ\zeO!Dz$ Qug_FeO`JF/zG>s~ρa-)bTti} ,Qݹg{Ԝixps& q>EPIޠ)K]d! (i!+,`ΛCћ,0P %"_U`,/p+ܿ&QRÏC2fDDԽ\!P dizM `ɶJB+a7Pۃco$LR*5īM)/ LP3gw%q ^*743] u|v!4N:~3^ύ]E|;tA͵^UiEB~ѹhOF55l}R 聠N_4vNއrAfsU*xYwo+*+h1{,OgY`a&,ܳ^'+uS,I2>wRY{55ʪ{KfQC`2dv:BӇIqpCL<İ=0 Odl!{[yO[ mODbaޥ"<6w̮{x"ݺ=QMwȊLpmid#zv~[97_ zNS`e{iN乏sPxy_xՊ˻AXfZ.0"a q-Ù@tlu^A=(249žGZqe4 +yY$Ri$xY0G;]G6~V#m·~4j uwi.g1|nW)<"ۜv|Ip-}c4 ny}n5o>&Ѭ_h\U&ͻ`=/L.>DJٮ#@8+It0vl܍೎HPs^5qŔ5AC}%3ԓO% }D6~|E?wUqp2ڔ ll{JQY`.yt|.j*[2kH?ͣ/pԵjקq~'tɔdhq8)\< 9r}^|2EOާ.fGC5߀J?GkܤW+jBlYMY\Dj"H,gT2)CqtG< [A O3>*z2+,`ۖom Ol g> bʸ~H;YaA^xjy\ȼ.\K*^)p6%t!2mϱ%> G 3iN|D<)!M=ԼNX[fd;&=Ga_\BL||cLIDJ^A4IV8ҳjN׉\aǑQ(U}:ƧT7hU|Bڥ&T%ʄ ōI)0τ@O yt, _ofMsY yfFY"sTe}8;ںk:掮8אR8iv"3]"!O#- J$d^hՙˌ%O`8]F٣iFCO6Q60?Þ7@bdUg1Tf0, ^/ґ +OH(trnR%o+,~">Dm[4<bڇ8A&\eC^UWwi1k]4 fEd8Wl3 /f9- W]<8ohRi| %uAcVM|W#<)>fZ^=)~kvz- I2p>B~`cu>eŠ_Cn%b|Zʋ:e~k̞m~~i} f}]wx`VWlv8Wvs߉o[k]~]ĭIx:|=B 1A:ka@A;#x]~U=jx[d$o9B\&RsWj_=M4]Tu~{1c9zYs o̜mmlhmmcmmm6llm6icmimmmmmmm Cm6Mm5)Cl}lWVү 8ݤ qu|{qE;H2!08~8B*G6> f!= ~bQ>f[ F81 ,h\'-Q!- \mĮZwշN((LvGK>չ.0ufK'={tYx T\ /f#JDL;:8:zs#yo'@?'zP%f̮VkmealĘӽ4'M۳"J ETt8ِ苸-\蕕Mڝ" èT*P}^cb厱{١ PEÒDGެ֫58&@,š Ta9/IƸk}*T6v X fA^Oe_B7g) 2c8UfLp[BL))SGGQVִ#5* t Vj&q^WX’wROp-/zز/Y5+!jn_" $y gr/Lzہ}=J򖽩l+V[mFwރᜃ`kS[6686Z|-}b u-+)Q>ഛIMVFOrƤqS?@n*WOrc[g]E]NXh skwNΧ06žBڅil}kARE4g4=L!99.:'1HOl7CN|(h"VÂNµj=5[%K [~u(mVnt+ p;YSz~8\k:F$:aL? *7%YdW]]yL[ KEVfC:IO +ҴBEz*U>QiÓ7@< (t<NU  [tn;u0H~֛WfLGJpk9ImBE5J=|Ⱥ[蘼Wh1hVB$ 2?Tk e qxɘ4Zග8]T^"*e8|>̢q~M]+Nʼn30^ +W3u+d j-lLQ+ cL(PqW6$Wu w,K,R"LhmFɾorEϱFY);wDZsW {R2?k1XyKNpaLw>AAgj 2;oĈH{&Sv+ SN}S=n/|ёȏwY80ꑛ2sH$ OoO*s¦c2:q g4z WFc.K/Ď"sy^bK|8IB2nGݚHi[^wr1$#@[ھX/8u={d;v>z^L=&R>i=;<Zk<+Z^G)h9]i,21X#FEu7N5q^7Cj!Һ]x-.o2/  JFwcnq_^xJ14 paGfX :-Uꆋc/w""59>?fz6aBsMd2A)igגF)S%U{2JfC:foJQ4_FV19@_z1Uc,}j#,# ckYtqx=;~<Qa b=? ?Dӊ:~0XB0qJ]"| fV窨6o=ɑΔ>|3UTUE9Bd  UXCwIX4f0B09Tir?b!Du}u4fM)0ڽ6}&#gM6kf;f,ȆFg [1QT4F#` \Loy־Z5 v{lw?_ ̣)JX532{| ꪩ*~ 4L75b+ _{Wꨦ/@h?^쎙%b2b,Rfv{9#NɭzkU*a R%Sc<*=yk@MkM8ճo0sXزlsɇy3YXXVVb:ց[\6Z56^L?iNsd UT%Uwh<[sURUU1x3b#޲SFnkG?Cz|Rf2_N1RМT8OصyN'`#!s7ٰ7")Qˆ:[77pjlw(aP\E?RIEcM-"Pux{ۂIQ0kƿ΋y߮hx&H,th2Ni>e}az1gH&Vr13ixA'A@X ?C\(8ˣuBxj>Qc+4,'o1`W6[ac 31 s]ӂ7d?XX{Âwa&BCU#FR ?wn6bOn5=mA?&saeu8eD$1>d4䐒I \7F}]LXJkv ['KB\ioee1Wdb@fV+#&W'Q_Z}Rh!So=' |ZJ:ezTq =4q{U w_kv?J]#e?{ЫI_w(F\ 3qa 4{~ gjjxy}dll%<1z%yW?y`Вp5 4.oc\St˗ObσK@~Fv|dA,D :d%$ d$5ISVM=mڗ4-e,H2ivtnmI-,ɢܛײr-ظESGD#~+( FJ[zmY\ 4_00`LX2p5`( &``@0``BQ  e0_^YFoVgAfȶ8k3<۽rE}YuF!0˺tǓ%0ݻv"J23h6a9ŝV|rޅH8z-uX^U~Ei䮒; g|r?N쌎9G%"D$X*Kg఍-F', rF o\)# ^x O'qZ7|oi@ >vͮb5Um@1bmuWZҞR` )sݯ(Gˍ5iշ_Kd缬.>oR[!2H@6TweOmm@HEVm#27J9x PH,:׋x#^HgHF7h}$C4CsLk,~q yP׾{` ,KsTSUUӁ TSWNTT0tM3B#DZC*6d!&H:JO*\cr~wY72?m,V{r3DDX'ȾqrZdoy].jyEc9}&jz.֮QeT`ޢ#lc2"73s# $gWFUVZCi ̓4._ Xʢ"uFo-VwO7XBU%$_⋜=FVmПL4"o{6Ƣ**O7TxĭAy9CL/ ĉuhǁFHbpk3 BO*V \T eer挵(K-)S*laqh s 7M̆üu!W+%(lp>"!e3I/u1c,6\tvY,aEN_dw)z")Z<89z!jt0]+7x,!2CZj"Z;0n0U')јZ7Llwd+Ԑ4gJ&@BnاM],V0!wcx YNQeLT%W$ ilP 8lqk JQ-|?W1Ǫګ1 8뜦/cC _.0enpftPF[gW<`Ʃ Rh2 5Ctv8)UUpuM ˦háP#vX"f}bUVǥq̀WC0!,Z5Eƚ直hpyNm8*BF"ٙr(U24.fUO,#t*9[ǿkE#SE YDD%Q<h4wC|s[+&T5'_;jpTqLr>04yh*(XJym٥/Qc6c1[>r|z o(x d )RX3%_i)}n>NV vƌ[ DMGǩH+ "`!CN(R./:`3iI hF;:6J#uߩN,] B : ͨZ1FHF@sM0!yp/6=PSo&ìbEP?`̌e+UOxOYN.j]":8#4k( ][af`Mۥ`b,?,0(+$OԸgĞOj5Mm/+@R^^ 6pp9?vzy/oI]Nh#1iKkzb%VD! 2Tkdrc3׊УBܹv1{j8ܠIo]ƝcM=~uoQ}0^ Ŧ_+=akwaB6o^3w[ qs/gw3c֧ 0`` (g+%2SuN.q,161Kt&1@4v 6wQ'a -q_=})- s4:p}M ]|(#i +^+{KC'᮵!m `d;Dc]V׼՞ J˧=6p{dݹ铈dla8Oi_PXbzsŒ$(hTtTˢHꁛR/X]77SgTBNIl}kߣnן +Z6ʺ4DïZkw]YcRmv`eDq:#k(g%ÿrkz_gn)fTK\XA6KxEO S"\\*/93VhĒ*!۽.{ /t]w +yd +,ɔs;+o礒jS Ũ:qթ.`S6HE۹RVH_}XiS{țZ&2pFjIVA>'|'+ ]6E‹Fb'qAkc0uSu+e_Zn=+ȼ}FK?? 4h fwghg˼^R. 5,:Ko`.X+e,k]tʙ]qsr[Xt1Ew$m YarT Pg y#ӽ PBDo]gcCn<$$t;q͟ Qlݛ5! oŽUbTמk>`>} س5{C,5 5cZeBh ^ʹ̅zɱ=C愄 @$C6؆oTضFgx?Jr1>SΉϣ6M.pGݓ1>ePn STD$6yQ2qt3vM}z1So䈄ΣGWW4JM@WWDx'pxu ܺuȋ m|~DC$N'H{|TUL;t""[翯Ys]pe9Ȉ恐}z+w]Q4MUHh]5в'ofFgks&,Δm3p|JB ơo;U39ָW;[ 803*"l_q_G79">c65Wa,/aWs`nfMH/3ҵcphS⑙<v>&FG\{ Ĩ's3Av!PjBUXhP,̄ÇFy?`UȉĘoF3xG DnxZPG}P#llfDpeɽ/k5cL6UDWdj֯Z6£qsXtGB1 sY7h'q9 +]\yP3̷#ւنI2:hyLDr{P!y28ͱ`!^{,P:;3y#xֳsL953'*d['4y `D~W`ӴHlL)*.<Ҿ"s) Y(wg₞rGj6ק`/>P+\3 { % ϲE 'EcM9YV]5QUpe..3|BedvĹ]+dɯ“% ;l羇 K+f\@_rL[4\95x$W<Opՠ5rC\w3Q§Z=Slf2_|}V'=yƆ^8TZpdPrgxm;Ӟܿ$_,|6aDbfդن\=v$os58nArOn+69@"@ csEE `orST"3kYN#Z{xJgݎMGRΔzkg0#YDqrj|"V+Wݾs-%]_,i48ej_(*V `_,PFjY תvX6_obN*!)1aJ*] kObUrn`E'գ!d~(Q N czGsÜ ᮯE羁TrJ6 ¨Ewb!/5Ɉ`LƵj fq)Ie)Iû*ƴ m:"G҄hDSN/ԔLl",T}wxn D/_]՜=Ý׾s@Ý]s@˹ugP B b^F!VDx'<32}^Ej $a)roC!̞NsȞ9_b"sȊh5us߮xLo27tO}W:;<DOq-Fd7cX(^5I3ybhPpPv$U 8v;m)!sB{]{8Ý#ˡ#3 001xlKBCqn9fM2 ܶb'qqe$#bQc,df2xg/EC5Tesv.3Q>fFL{[RE^Fc[W}Z0\c@s;f1asjЄcFA=5҆1*%R ;qŽ&GNjc*"H?vco)Qx`}G֛; ļBGX!ŴqpǡX!Ӆ0Aoqyⱙ)v41s[fdvQ9$o23{{Xn'm& 0D2#JO*ZfȈ1mby><]&fyx3]0mvQ0uA*8RQkڅLT]HrD3?_FY]T'<]z2}ڵzzoL |$'<+noKʧkS4z?ܻ?>=.ߺ[t@p1K7 P&l ӘI$,X xj N6܁C (0 {j~r֢ЪfHZxtC{@_VxIį\сe A &/gs6?m2!n<i@ 1 UqVjB۱c[ GԂ` [n s{U6#aұFoGPdh&a9(v"r<? {]zk ƹ4W(?vi+=SI68bܾ>Mųqn\6ۅZFfaO"#U^0cwڼGT ͡?]{{'Oa\Ovp,S 5_j#^=Ҥ/3:m WNH6'ݧF2DSiRm ~dl*NN6YY[U( -s<*wfQOEUZiZ3X;4eɥF̕*+I$m75H؇ζu39:U֯f~o8ZD;bZoX;^ln,[޽ʶ#TYa`Nn^\󦄐0i.CQJ,io)!)Tu [͞BكXU%{Q\u_gR;j (Cfղ JW21PJNI]m H!4mPPzUgFC੼_TCC%[v1J@ x6%72`﹄ҫe8gYMT[<黑ԱVU@XWPi޴nHN买5MƇa]k!rC6УFh2P~5xpK=N[0eɢP 6ˊqm,+jzXRK xmT [ yy~!;.-3֮fjdFpX Go)!b{.%43 3yt"*R5kf06Ր!4A7%a\@k։/r(HJt4$4 [k!0rÔ+n?yQ#i d^{#NdG!DN@k Sddf#{`:tF{2'><axȈhg\&Z 53ϦR2ۺ~˄꺷{31)ST3A˙^,2wDrcGXU{oN3;Ɍ5㟹C\,ZYDExwi5SyU37 4Dz7!Bff*ߏ0B"Ó:q|s3{Gf=Ep_yDR`O'Խ!"k={{@ h"xϊbMQudZ97hB?~Dfc]ݙ<Fݩ/ e3nb541v03 &L=ΰ2qc6:fcTUEEM0egc Lb3 GYf߱V]0c M& UMd*}9)F2kHN2=Ʒ}7LБ 1!"kycfc^9+5{371uNy"" ~ fQ1m`hFt h/M20f=ca a)̼9O{9/:>k>tOq;#ix^T_Ӽݭ%o$HFSx6pjR Р*+&љ:X;=MnyS(׿GlL@_!OHT9LDZji3:|~D%RL YGTn1T9ǙZK<5!pB>JlfPq)̵p<:z&S7EgtFZxSQۚ y U=jB#4sו1dgFMmjq;cpQw ɔV@C]2_=+{e,`k~/>T>X;3~!{kmVL7 ʒ={6߫c߾#j7cog+)ji{K||{sݑKܸnk*3NT7vӳ+`10A>" ;gDZE9}^_j޵ʌJ3TsD°qɝ8-qwKN#~0 }=c>¿`=8+ b Uhݾ^4nh'|^vn;^c喁k.\!nU<3z|וˡóx;k>;Ϝ<wGṙcD @X 7hS4̔Ǧ E"-&_In/U%:gpwEoR "i⮏SQD5)邤nqѳ2\,sgLJwG;l4k\b2xP0d^]SyoyRZy-z~~ f b ,n<  ֿ\8o,-(vLrY*r6Bky& L jLr٘HsX7zmos3xC@ހ0d!+wgfe2\RrwS8vJROA2]2lzC%z E#TwF[Eh@СGw5O8t{DTE\.Gj5Ђ/5Y9ϣ`R'}M\5^,榊g,B,M;4 &z4*aF8Ĕ))qc*xL4]ciiWw8RzrAM")"2cBlRܛfMUMLsp0c̈ϴ-stf3>/G4E7BO'=.8ffFyϨ"""(?A\M"'=DD$+tDNqq?]}.dxGЉ2=N"n'>-DT8~Eױ["rfίU"{!wfcܻ4CDH&1?vwA?4"CKm+D1ہ^F:wEU35_1PN#;YyFjSxѶ̹{":0v#p~_V9XŊkHb<1]tU0o𽫯I"-rP~bE@ yQt 0W.U w1 jGqV6qN)SH%z0+jhøƏᎺ<5o^723OpqyWބsBqitlmKRVOd"ٲ6B|.RF8Zk>V]~k"dSfQT+x:TKkm ǻۦw{ 7] 5$x1l=l3-O\A A@#rxe}j꘸\;Ml>`j/nz,Z&rMPZzHGīc`fMy0fsڬ~g%+9P o8= )BID)6M>+'0޼!o*='ջERET({\w}(9uq 'L Cmbm"킁ZHKbb zTҳιNd48u=RN""s..Cs1~CC0GZ(X"X9WCr?7S2U'vpXX9| r)2t Ȉ vl'|3׍W`V{u5*^D`kq#Us-{_ECѝR\gLO(Ff;z羸= ' 6&C9`lNcXx* O?UUU)Vd@~^P- J20% ASOh3WynX.|]Fo6: x;U|DW !B3;;HZ gU~lssCC|ϯ27fmZ=H4N3st6DY7#suOU{FO0ECȉ:w9ڊ7aή:v3~b"5Cp18PCILHyvf-z+Ў}?{C ns?od=尢WǔO]̈͜=F/J>t~]>ƫ\#/ X10;ش<\zQA阘/uِY_Eņw]h~+{ʹm<9Uߔˈﮎu3bA/շT\Lx+(< Es~y,{( lk3tGaD SxĬzl^O7G۴P~ 󬾽Pg3|un73lUهRI]['wGܿ ն,5O@:Q|10lkWXt^-hU]gG X$697n:Jg|^ OlK{U9'xB{84h$ @ɪڷ04h'#"K9~zqlTT5BںT ,O~lvfxE$0ж-kTo2tSU;WpmVu [[[ZI`!e+U-ccx\]|UDܛܘ`Gq qiEɘg4j¾j$4~qr*M@?GcҭuT{ ?vv V.s*ȉRPdcß)"W+#װf's]52#1Uewg s MLj;`ɾ|4̲n=;os ̃}H4 nV*_QC;@OCEt`~g33#:+" tzD -˥f=?{2ΜQEz%}6֭-2jիa,W! ilaCbhMCHlAzѡii^PUkyC?+fuVWQЄ W`P"fc9hѨ*('#/?%jTY`:FñW{ȞD=y#yأdzQ'iAkO' Ţ37rvui:'s]K4 dw =s܎ O3#3"34y9PGdgCw|sȈa3s̏PQeE=u#j9s/RP;B::;_~"S!f{t<<'1Aن@83rxr9<*xЂA`a4 Ѽ70s&Z5sFJyW'<~#""P4cOc{!! o}w9 QdULnݟӞ'DEi M}C"M"sDDE]~ؒy k:Q7GS&|H\8[+Hor}5'z3wwYתKM 2>Z8UFx<W ]k(SR&2mP2<}>4xbygj3xmjupB):!Mg|F?J[B  &.Ǝya+G>u=,DYkxv<]ٹ 77҄G3m!yБw#W<x`'9 p&ƥ!"'7W$}=);]_%/3yQ{ƐOyI^X.+l_Wv6|b«ӷGᆩKWdchל-2Π2ԜnC26Ak|jsuE NO3ґT>~)Dʓr2CCu;γ5enc?akzjg;UyV-6qga@!!V{u3cwW|UWĆ@C$_Fp ).aןo1yO 6Ɋ+$¥)U-u+\pqmQ'sSnto{MO ȷh&Sb9ٙz"YcBiek3zt,p]xS DpĹ1q>8g-mM踨A&Tjkz_b]vu%W^&wZrm%H^!$"ՑY5!xR Kae,?)YD+L=s0T,eHŮ+J:^52a5RN31w`_a:'wm}@_buԐK,[V!ڦԋgN9q*K|ҍ9ޘ+:rZj6tKd$!5C͜=Z^_zQZ=`<5#7sHruSub#6(woXU{iK~*_)K[>={39Ϝ|i_BdSRt=>zubˋ+]ɜ/RI:D#Խdz)e#_ V{>Vִ@|e<1p*h6 ,UvB"-Ԏ RYw&M3-T˼jAUڋ+kV͏b[%l{WiB{rվ ?3.Uɼ$3URȤ9՟C߀ 纏Iyn*>dãsy7rCYhq=} Ws\2 7,awʹʸ҇G{U{07Pz+&.+IMT FϮ[nŬyə=6bs{}fz`9l#i쟡j8UT ZͧI;9g#}*/s6Cn[~DciNDD4yF/)AoAG=?D}?vϿ7ݪZkW䪡*}]+'/[=ZCPEkE>W'ȉ Ю(stFsʇ Qd7WkWuc+^\YL9V:W zJT55CR$ҧ#`w((\B "Z> ]>)"+嶒;`*2C# 3=D0 S  1llK]N8$ XdaeA?XhM~ksb#h*q6^>?mTJ=$@'Ұ_ VᏉ7bQnm?rGxyvL g Ȍ?>8;*hYu&澊sf,< g/a/zOorfWY|񑖺еrU_6{KH}ΤVL/V#׿X<&d+?u~)iylTyiF8/ Kuj)<+-.},ʶwA5^,doR&#o-#mˀiy_m{)1mw/Λ['mVj?#qNz !Za)wE!o;m^#˫OVcjj{+ѕ܋XܓV^ipAHk/7 *&t}HZ|(]4ܼMDx/8V$L|\KH_?ԸJBHWF@̮8µ}/|c%YO3I'WeX.WE|lRws+eVmKwF6a(b]:ᚲ[yvuэ.fmXR@pI6E5IX,0ƃon\sݨuz}}\$0h3Dp;{*sp;I37XcP_޳ ]Ϯ>TcmU1O#23%G{:!P(s@GˈDf}x:oy!;ֺ(C\f3!9}_溇?.6:ㆫ"xw^=мbϮRQ$D_4{ǎ ʻ'wNxA<yӎ<U!7+]@&s7'S$TG}ٙ:{v^ =f WfLo3*ЍaGQ~< Cu!n^=ްM,cq,=N"pVs]v7LKz_L[Ȝ 3:P:PƌW{^8I0瑿HZ){C#0T<#ieȫ/!n"#ihi5y=O. G8'<^k""(8C]ΠeaEwc?8[_.! +؝ aC~|7S@N2.A4|er"Dqs(*f+-BW4&={C]oO~8W P6s{o3wyZż"*DX,+3=>8ĉ6}~eJslF~s}zPp)U*^'wPng#)cxHL nL{P!QbUC&Tkj;ͯaoJ6K=σ\fWkZ_|x]mez^ ≙"ڈ&ҒUiTQZu5ܓrP:i6}PQ|N>gI9 Hx[r9YC(ZO@/.F!oYN-/p7_Y~itkx/.\ݿ v(ꂺnŸ.Щ6yzI;v!r=D`^XǶZu]7MWmZK۬m%m+KoEE,WJZRt)M\KgLQ~Zf%;.A]pO0׃S}CmZ(|t.dvh'd?u2)}k<nI <3(r1O5CJTǫ)F V@*%Ks>,Ʀd1͖mefwiiW^u5_ڧ;VlկWIRlV3 E|C\܁5u cGu}ں3gT>#}x#8ݑ8?Y̌ʆR85Wм~_4 tǐ(uzѳȑVfSU"DDv;+DN{ˮa{`<.@""!bq=ž[[U""~Qu^:?D~O'<5KrE.XkCrOM#-k#"Oᄂf|$(?ڑW"y߰3F)y(ieQW&xM7yPO0]ns~kzbx&p8AVLiTPNFOP2u:P/)JܯS5$Otk袊<=C^^L>"77=3sF;)?F87>U܌etxfyh*I)u*cv(4&,5ӼVD^~qLc%ypVg 6"fߎQRn>Xtz(*G3a{2lFṉ nRvƹ%~tzT}ܑ2k}gT4ĺ% o=pa*o0~e$~dýR)X;˪J:#Àq+33T<4o?{k-{cB-sonb'# [.HV[N%^ TfQbFkj7=0(_ 0 Q3 #XkAlXEgjIӘd5姫LGZ{Crvo.? *w^IFیBkwï6]<!k{omh87]di^JsyIS1!̖}fvqL[\anӕxp*J/w?F㭻Ī^V[񿔭,;ůq `! /.Qܫ6?dF++ŇQ:>ARrtl$6cg^ Fvcfit&m7Q/x5ǟ:0aOΦkW@3Ԧ^9yND<5e[Wi8}//OdbZnLZW0ϵeLwVF; >*\mFx>?σn$z$)MIs;xWtWA .h#&}iCLKEW!6]$#G|Dz!#D?o~#7ûEևPySȨy,oqC;NN|^yr9xshh6/wT.ks8g@5qCLryz;շf|C/{*L<=O)8iu'>m!rM{͢=f<)QC;feX*},ETTM TVT|FENB<0򼹃ChWT!3Da3&iZAabB733Cg&3Tg_9q& P34Ȋk ݆Ш7qMѱp QVG`4b6ZeTC^/4'y<~YK3#?JA\27Xѝ9CTh^=w?7<Ό-!E\W&vK SJ0:Cq.kB2XJF۳%S7ۡqgLmsMTָ3<dfQ];d2#';X e9l6,{sPRM#{3:9_>Ϧ=iPuQ i[KC9έEuޟShddo#:QЌ#G 6l=!Co24Omr*",v]mN3Z_a1&$&vtЅq\y}J8`J,tjt鰪aFCUB;7sX{4ޟ!ߟFy/s~CKh>D{lgU+CL0i톯7!FU&eYR @RQwK?  !d:ag(a7e YӇxWT>`-B,ۉh2WJ_'8LŤTى-~/ NhSPGp)6-!4:fh^FkTW;%sUAħErʎVCPמ]JƋm 1-tKEaC̑\/y&6ҳz ;Cgsf)7:;=kqIST~?g+_fUm)Gaf6j:]-{w3tx:V'1CC &";.1OYl G!~$>B.:旰{5T2('53շݛq[o-0X.kbZ!vd_K|8y8f"KYZiㆥE+g@%?}9!'=9bi*ˊ%'UtåiTPD;EOVǺtfQ ;nnl%Y6lxa^=*pg8.?q I`M})B?5nt[2k&!.pJRwNS =$5T]DEJKF}T\Hx~Vs_=,?hCEk=0 b@=:XZMX,AR.&]&BF β7|mz{D97ͬm~M#}ۗߜh)ङJ,cCիJqD;~z:F_deßCp_*ql駽ySx*% TA:wOF"(r2EIg>7*fQϫgɦV>KDh?=/CMǕg݊ 9{&4rm T`&nB^qm|p}ڮHsy76mqݒdڭb}-i*74v Wsέk# }xf~bcȌv1?XW333VaZwAa 'C_kC"4,Ȟ,#ڷ]`gh->fJnfa 8 Fqmh1kŒ_Cɹ,Uu9\OD"~(q?UQe{~cmv=qR1#HAhxeA[6g7R/W*fe<̊VvA3d(,!V85T4Oxmr~E[YdeE8IlsM31U9o/Adh+PKDh׽v>oSNFEuZ-fC/r fFf\ܬn7<Ϥ/HlZ7oBD뉬|2'i 8/*QgHsIf s$pdFg,=F{sfQV^zCXˑK1\ОRg8v4Jt'8sC; ̲sSHx[4 ]|;Q)B(n3RT=ȯNF5X q@G1"|VuTDCߢ2ÏookZG]FNa^yƩF̅$@<{ dFW, 2Kߧ5JV3`qNQ6ӂh!|ӑ$ }n6L+XKV>sխi򸍓|Dh2xĢl0Q'][Vk^G :E_Q@j$>\cg"kPXeUԶKZyDpBցm)(r5Wej`9d~#EkP^7\m>h)W'Q.&o)wP*=W먮(w;bM͙U }{z^} s{.lF(mJϯC=:.wdeZMz3##"Hw0ETU]`"\ef̴t๒B2;N dkoô+D}g=5>J3Mp2qKouO16O.PN" oi#3#> F:v5 4ڿXflCF2wKnjP(o]XZ!s0&HyZZl2ޛ,-:j΢bh՛Ew91zauXUYW[}9" s''qh*K: ݈KQESf.A6!b-2Zׯ^U< uʩW ^,6T^+mgM&hm m1 6m4imkCZֱ45<*#c87q"q;"ꪒ"-au)Kxea0[ m!"b@LI&4cChMlM!C`i 6mkZT#4=H@mDgN"Y6Zm|{]f#s:_GcsiØ~&ycM=w`l_\5Pdm¯9VۙYwW~|eIg;@Ib=#*_Ec40M썌ցP}|[ϮXy㿧/VwqʓѦ;S?~n =0PD<XK* M2Ns66hH1P;N3q!`T^<2r\<}o di10ֺmK?yb\5"ԭ953]C1\$arTy2`{K:_)[Hzz7.-ɋ^oybAc(K_?Z-lyHVpv{)gG|mVw60|ag:Xx\,4) qw-Nٍ c^ u0ĞM+!e^ .= {^~n㉱YW-}Mۗqpde uYkӗ׆`2;yMtV1,^HlmpCrڿo*!ڳ'@EϩSsgz^_5.-5fb9UvvksUƢdh-ʷ\>^gxw؅/'QUUUTt 'c-,UGe_K,NCQ(pr7NdI=Ynu$|} z*KpNK]s]q q ࢷ}AD 9?=byݵ @G2yڵԇ) JyG%F$TrnCX _RMB @+0yC >״E8aOI>jlxn7ho S_r{-ӤaUr`&IjX(?=ixSe<~wK'X[T#dۘgbbA6+` 3J-Y0ȹMA9y/?>  `PGm!ey'GEMX'-r@&Y]~/p쬰=3FlX\f䤵4hLҶLB$Y,i.JֽϩIY>~TxۭNi}N׈ ʻ+]+.Qx Hߍ_ņw w\lloƾb/au¨ ٬!e̖0]9v;nta( <cqDOq<s2#+q3<;8o33gSlyW:jgccشn\?:Vo!' ie^f r_QʵRZ.<ŷ\H~ Fj?IUU~B8 376bmr3*G0[6#*Cs\lksj#'%gëP-m{ȝk0DdAs<(䍬t!{}{FbVQyO8G+Jfd_S>7&j5>q"G7ν{sF/{h2,s=ڡYHhhX!"%'#FDOqd*7`nsȈ!Un,7Ϣ=<DDDEfkW1]Zl1BVQgTcy"b{pcV&h= "ms{籃y̐%0c3O:b'P5gcʇLd"yc@z+ע_DBDK#W"2)f/G_n>g P1rh>cZ"}јݕ|ID]Ap͹,w<_3l՗"wM?TfBF xwyYwr<`Q`>˵/7aȠKhdžQgU=@5^*`;uR'%'n落Me5Erk] 3A0Ό}>0zOJNK1sWǹw?${2scc eyul~(ݛNQ`hx^ q3D_amw{4Sb}a=>o^`ym/lx`'uǑc0 A7FwJ!szJ^KGJEA˾^ |̅2h_huZXfIqē0全r7By[kr X|A5]A)vF?Mm9@B*so8ԡ&a[&r7 P5 UX8PІga7QE,qE0X"۵f ̱Ld>ĘYpqJxR-`HR^QO KD'Ȃ̌Xl@vUŽ"),uScfZrV} #|ZKOp-&:! \5K#mrg=Jp掖P* b-mRG6#⾽o@Snh"6B=Ca&xPA/mC nf8bDR#{?Z䢙LHqXqT4:>?F"Wm4'*Cnʔ,vCe mqCmmm =nw HΗ_\(q@z5|g%jիbJ7 |GA"7u~Wwz.GsY+LEŮ7eϑ}`w{'jˈ2%Y^j8fTyt_'и(Lw+ttt.cRW9]'3{) wR~QפB 10bjɬKE 59SVr^> nW}b^7!%Ԝ8N^+X}՟wWv՛@T Vy/ JH(F/lNh6!ۦw7V*l$r*~}(~[l͟ADQ}}ڿPFmEYY]`%,ڰWtԚ4;hô㣻K(ºږ+Iȷ{uI !NP"Ie7YZfk=۬?$̖3Y" Ywݿ.vP]]6K;*L܆Hu<=!tt8X)bL^"%~B00aB'&GEY+a֚ L?[ k֡gjtX5P PUo鈹zA rH!Œ>\Y(22mXd%+ lŤ!Zf"Y,5 6R[uMP`=yk7R_uOT,.>EvM\x&{L<2NW@y3^ibAo<'+}d!74^3yE@ɓ.u@3 >tCUPu::J=2`ô 'biՓU0ѣ :`hDOOgsݚ"POD[=)d;%L8=Nԛw*Ozg="Dnbߛ&ro{^L}jne c`ia&$ 3ؠƧ^ˏZ[#`lZБI7Ep'EK״:扐w..S*U b0I7:9"d6CS%@nu8[[Y[Zl'NprѤ!`+fԩBʄ k@eM54]ǽB i&=[LT#_[Vs0" ` ~V-MRІou0f!"=v­CzL&A.AWdcF>@:/=33#WkedUEUWX\f'7Y Nc#A JvuXDDE [F F0Ry ؚ05_d ʐO#'usYPdFSg 9LacM` ;u?8 -\(fb!Ӧ 9?2\>#SPW4pp fj0zUHn晛E5U^F^O"/@Iq9|ja,ٔ|yD34T<rPf%ܶaW7@[՟AhU>,9^%(;<T6[sڋ5>'z1@e25.Q}o*9AӨt'`uH1O uhdž̍4&&vSu #U^8I%" o._*ko"3˻կ!gf?uxkb`!`nS9*Up|>~ѽQN{|xKjjjmSX{$`~,P4Cy9 J48MB$4U~4lMKLqAҩZA2"Rrd %(lm8"SMc%iTt w[? ?H eT/Y 2FfNt}`wԁp8|E Au]Yee<ʑl =r^}=vEUFH[a|}bO։J~C/+-E{z֖!wk퀀ܓfhf :DgGTwOy%%68t<$11ou&k5,ˢ]PJfeĞ3=fVj v~ ۷u!Lwq]`ȶXZfe¯e H1qbje% ~WykKPf,\!FVPݩ5 <~?rW@{a^wGsk$\6jHTv\Vruu*^}>jv"f[UU5Js;=?tO(Cܸj4!!{UEw-al@0q@cJ# L 3NհRUU խ5G]O=½WS{ 0_]?,^X<˭gv&- niD0kK|@Avg;AI،* 'v{9UbJ'5XE ~RԊdp6_d<ިxMzT<JϺ\ 8<uӯ<㮼)>qOW ٚs9Gg*Hfuu?"#K(EzQP?5?Tu^WC8y33|Vdpkyvznfca>[V)gmL ]Ջ -8mζ X +g< 6zŊaV׸044"} 7%֣1uusN 7d 6e$c*  "!!q Bb`%4$8CցNjm1m-OMbj+uFun9tZxu[ȋfwc<*Ei2">t֎&YYQP1  ˳hL>sY]f6l٭Hûo4OOZ`1aL[*vTW iN"p͚i޶ыzc!#7 =s3M,5C}tw9': g\zd羇\HdghRqנ8nnzCDMZ 7Foy#Cћ=3FF3@.r9(΂#:G}P9omN)JeZ2 U`o~>a*vCǶv.3#!N7ͬDDE\t"*+'09s\ pn\Wts ˈUUV邇9ΡŻ:]^D_Ҁc8@R$c (y9QC5!`<"1~9Q h+0/1vfpgHÜyIᡭEZ+Eq3"7Kv5ЂQEQ1a{=>-TD4Dԅ5ϡ{ {sI;l6AI^FfOs{d5̷f#'B(i'}*H*aL=}q㳅ȩg$ e4$Fdv<ob]wƞDDCмy8aty<P5"".qb:vnn'|܋D܇={1ؑ:FdFOHbfWFA%xG4w6:Ģ+ J H= d+(Bp6{y"%(: 2|ws@Xsc;3z^>/]Ȇ&oV0 ;?6Ş>bypɺ\a8m/klG[-?E\#xJ:iHC;/R r`C ,Տjͅi>RB/3oA~ʂuo~UPL=Sys sNKznL׹ty_$p>ߛ6_=r?1D&]D%߉h@{M#[멽Motngo(78#Bg p t&"O-2Wu{E+zyҲYa R8u46&nCD~k,)Y]c粥A{^Ǽw%>Z(Zظcna_d 39˻?2o6ւ~|W75qk_gcQZDL񿍯'E[44/24wkCkG.PB$anmh~l -Opy-_usIi!76vq8ե}|sgĚ%yӳH.icO.[=p`Ai'ԝR#J~픽*7>lwVXH>yxE-+m +xZrW,# obcz_͜ ,_j v M0"e{j|X)/3JOėYho;CMSak+[eVM~ZN@cUUD' '*'Q*ql͏%;咹=ֿ̔<6)J)&դd");K H{no bp~9P5txHXh kTΰhRE~>н>gzW~Ϥ/S= Y_-X34fli|ɔhdV͛!C1I| -wD3[gxcvWB-7>A̒(%q;㩮E+-E_nr 9&ݏ'_`~-tQ;b]^>,ԃ=as3*skM{D4'"@h Θ5eĉ:pCή>40C ;mFs=P+͙ (EQֽ'~GfG_wB/3#,A?>AxQ/6,ϛ4T=߽NiϮh;rK Ć4XZ)[L8>-ní@蠤ĎY6yNf/ł.PHaoRz ` ž Vee^*잎Z Eڲѡ M`Ck-mmmmi`U CVE~ ECl dE-NcLƉ`c 4#4J Y`XA6Z;]N23>`CZUm q)>[h͎g9P?nvX3 Em\=M;{ʡL1w3ޡPO'nRq 2]XPU[#Sך!{3n##/oz&xN2?FO^7Lfgq9Z3C8ur0[u"*tc9?q|LPTW0C'=֠d^T34OǺi=)ڃɦr S_ ]1sz7d!oۼqxכ5)"2hsyC3s徭E'׿| I|sz4ssprh~8Y#G523"=?x}&БݘdtmQ=">q6k,_$ k24c+g9m&6bL5yvHfٹ 8%FS-NZ(B4  &&'BS[[[[`fkvPTUrC=sȺW7j5"""'eYn ȞGcAk <9|#>p(! cH,Mٲmf2,u,ca w΢8g DJs)`쇠j2ȥr[PYš6/4S,dK f\TŌ?p՘dn_j5+p%MjNv6fik[_veFE% ]a%jZ Ԁ[!.xcẠ͐,ޞL?}{P?q+pc]iljWK/Uqm.m,.Vr9/o7ums4!/\&L.} .R6"gcSe [Nl+Y/}F,r3ĒƏDž`a3v߻X=Eįyo@\ݸ5Jz*@Y]گk?GBJyr'%3ٗ,E KnzL`ۦ'm[VOإm?Uq rJ@m}e)9Q_ɛfR$l rn5?t;C;ioD.QޠΝ-S(3_ C Gq;^7:df&R sd䯥^ݶ6J}x$BѤ9pbK(M;ٍfkR`].HV&Y›np3F8?wQd{+>mP=zf< Փy9,:˛X7W ]Kwp؅MU5fSW7]1b%MةHі)!_ ./ 6F#px[˲։׽v{@=sHCϑw Usr%M EgȌeG#hN33,暡ELJOvz9'ѫ{"i}B P^V'pnI'߲̌gzxȌ@3y{eJaڪ t3k9]WX:H=^^Sxݎ.y4W|SLiOmuu *XYi""֎ks舉+2rqmنeyh34o_3E3UWy ʇ`$FFf2^϶Oq&&C/sss $F heV2BAhf"iM44)M&ܠsHrDhl*7#?% n=oBv#"*xh҇ɬ P<-5Bt 5Jȶ>Cc*lEoH4* v:TD  B0fۑP|͎a~F3(9yPT/@sCc/|w^n  ѕO{@6fÑ:",sqT=*4fUQMUfbT;e[aY~ fN~;&1=hԛȞOF{-L @QȆ\ >|'+r8YW<,?gg-O|LAj1G/FE =\?Ov0z<ƍa~X1{s|γ?xk@>K0cr k" <|`6@s+DP<*H
EpoA7va{O8~Gn>˟gy?iIQhN#o^Y]%?'mB8>)>cF_ pT?p‚ǚV[SB;FF=||!R1cfo>7힎r=W顤P& {/sK,3J,eqC$rZf.K71`,qJ;߼áT>&EAq 6#?nS4s6?5,D\n{#7jTmn͔8wƄ567nmUEmj}!PP`p{u67l5jvC[sZ&(NWLӔ\N;{0HFǴWM \l;Ht!1Fq\&ՙpyUq@(8@Jd^f̒DR B 3f)j$U@50F@؏]n{r9:|[!V:KTgjVֺk>Ƨz6]R a*bgu|$;z7|t]fx{zus@~ґ͋m>V3eYQd\8ղbUr3\XYq۴@ɥ8,+ZxhFZX{/?^rYzੳ yXֱ,ZuFVA*|'o85G>㟐0DCCDvi_yX3y?}jq^=~lW{^['xѦMΚΌ=ϮD7G呼{fo#3~s5s}qaRUEŻUʪ⧓moHБ+x':ʨ_bty`K_CndUD5Uƍcg 4fffzIվTW}fk=\4+QsL237]Oa?OXz],ӌ, y٣33EZͣL9fdDf-n`Dnc hkZEA}&eZMӸ HNLg$rSbү^Z̅|U2#C!9X;̢a,OȞ fYXOl!89R ECE^W__OT dQd;f"*.S3hHC.gU"%M!TD>iscޑ2xzXBQ\[V`߼uηYOAeQ4ʚd5ؖmOq-/m&Y aETC9Yyr55w4Czt(]db :9'F:UN*g1}vCEK~aW**/p;2n׽ϯk6ECD]xCLyoK/Ǿ97Tuu0vsy U_!Xپ7F4]5°uB87@fHjD`@@б*F}黜=pgT=#͋lߩ# Ӽօ hp?Mw9Z^߽UZV܁| j fRql20?dd_atg:L)} zluW::F*7*hv#{g*1.6$j*bh^x4n&Nc-:}Y汵MoP5.7ZW"hvtM/;G7Q!d.xܦאFAiTe$T]9VWqP޿miZR1+CVq_]e{Jnbx3tQtl,a}ncTsj&ǧj_"g|EA򠐮Mkɐ'I@’L[\H'Ovʾu2V0WDMAl/\(ޏJ1{|^n2-gf@ӧt9uJBt)|gV%Y9rQ*\^\L{[?}}ӗ&Khٹ9}v3̤ +@F-qM5wy0֩= hg8\YyвO^DVѼBt?_;*f[79E_P:xґPNyЛZ+W>u3r"'H2N}c3 44DвX{vrλU'{4[(GL,޽{W3y8:eM3HfL5p6 nGXbQ_f65Qk #ZZݾi[2.FucL|1%^Ŏŕc, cl"@ޱDkZֵnbށPV 6MLEE+&(Lbc 8Pe%5K,K`(1Ƭ&fmiY6l@FO&k+hB Eh,N<2cCD]џ{]x,d68BBmB7qhb?vyhh]:~ NDUD\]"}LXf^df>׾`&4"#M5.?XD~78<ϣ"2#?pR-w9LbW bMͪ^!V=2}[vүCMxJ. ? 2N5}uMfL5`012+AbBs72W(:y|rdg ! !" 4{ѩ`ZMY\7 `s|3^U{(2=/zQk%QtxNe *63?z*,S&&LF*5'Yyʿq@ A h\t4-]͍Uy´-RYCXy)]hWdF*a\~Ȏ ;RwnM(>b;'VC$}DEW6ߧxaۚTlƻ5-&_y?P _mtǛ:\LU%4l g{%l|]ԤXXN],U=seM`nͭ\vۤsRuJqYaKV+j\ո ÎMuul{Ra6]TeG5i=en+G[K `򣫶ly¾!0ij݉|mhMs͛q #>{{|at&o#fDEQЊCWN^;*J#L'ts݉f}8s.Ua9?hEӿŎN%O$C3Ns[LE\8i/j֬ 00Þ 0233x L[^F瑝ƕ&DNfFO2#wt<6y:Z6 `iO39goqn38fd7H'FWs j{-c.SsƄ4 k7~p&y3}L? l;lhh:4,=׳%So9_RYF2EA3{ӎgUUU_x&5<Gy25ѡ<3Ǯf=3 =-ئ%b!. [v tS?!*DW`i2Ӿ=|hOyj$DVЇ? DIBݓЅ-Bhh0O;g4ҌafU 7Ps 'q什3ٛ~r1$R-Vu;>'b*"-x3keqB*]3YhgPTv9V~h`Uq;24d==t.*NAU#4^.x 41N8c2l ʼnDDvкM4B?BhdiS03q3;M_cÍ&BQb6.hl[+̈4=15y*T7>Ee)SM9ihu[f8MἨy>Xh C揳L|t({U/s](=G1Gki_ uID5,/#d#3T/cgV^輛?Weⓙm^KT꨿Y^=|b׫dV8φҊQ֖޵79s}?a[gP/itD.# 0z>ˉo Q{3Zjɿ YA:z(ie2VɦVӖN 1>{ܾ#5>yp8?wWu=I ,GEqQ=RdlF K<VrGQG_VfLj|$$Zld6F֒dz90_iiV`Txר`wgbtzKӴ}i}ɏ`D 1&[e Zvc`E ;Bk˻нT+.\D9e6lٖC*0$Ed[F\u% s#]K&/3`bpGit5˵?>Z`toz+@nA.!tt[ ӣgRV}Ƥ٩_c6p_FGs_G8M5}=Q޳kPЊ(315fttg=( Ez( Pt≮zQ_<"vǬ&}?]lo}=DMyPO"hmu}W|D U ŋ1zkVB]5p#d D!1c{ +\V`7`eZ:|cϭ^\WځYIk^ŭV$ V CjׂL>J4ر(}~ҡUVeVskҌPG?try4eɿA. e>UQR1;jT0cKq CIGMas˭}S0PCswM_ƆH/ у}Ǒ9-A}X$ 8dfGy{GЍddt3"Щ\ar|SM<}= gO"yv:/ T;sNOׇqt  !sHFݔ# Ka.\jH}+c,\j(S"?7QF|@in;~ w2 ~acP30v)ȩ_?AF%Ѵ2Mh[aсLE-m'Xȍ}ʺ?nKqQ_u"h&Ć)٣m[epbۑ*s7wй.;r^e{t_'96@]H(_;7Y뇯os_?|{}M3?v]Ts>g{yUٖOߢq!gHb1^hCO,j1dl6כ[a6SW(G_a#L#f"ȱ c{qPEh+ZNh{`7)h7aEo5HΤ?CE-Cg׻9N5ן{`Ic"H@/`Z6g ECPb1-nO^7yg-_앚Oh HÃ$rgcga}4cS&K~_tpe[ּ.kU_tInCQ>_`R=pk(KOthfgтJ)wj\&Դs-`<6-Zӝc*X2Ji+ߔy4|{m>f#-_AZйWY.Hj2&.R2dHvE9dҶ#W5^N2!ׯo~ \3׼ADQz%:@~OϞ;D0{xtʮIRvAq n5Wvֲ5SέƉ<+mw|:7mjẎ?n^Xsk$FJ[Px^.†|]1|cND/.W) e*Fk3<nܺ dF۳KUήu:9uw"s9{ ֹuϕ3Ȟ.[ Tsȉ֡N;wI'uN9黺P@ˤ9=jiQQ/*""3"7aE:|&c>mX_Cxh(}yΕuIPGJ﫨%3M"RR%)$21hF! ^ZZZZuK[[)$BSI%"! R%)LaSsPt:e}0V7?3nӿ1`k&*,X58M48 """qȂp2 ĄrxoWUYYZv4"4L&KkHvv,bɽw.9XB2Np&#q0qt~g QaO6vth^NsTw#9ȨX|h_ A>4YWQyYNjљ$DN{#y^ř(f.MZS4̈>Ty/?#3,ͮ6lby̚9#7;s#:f3?*<2uU=Q_^1E#5ncaqxH7y }8U4[^L=!Mue0qR1t3 rAv5s#qMbU^f0hDT<ќX*Qm@4CDw FIȜ B4 ĴJ!tݣf'f xޡѓ(tA lg(!2c'UyTšcM>y [=rE";.1Y[1G'vĜr5T"NdEo*"!oB8U}TB+7[6QEgBшoD'Я/Lç?sUz龳@z33#tS4^'6!z4:h&҇% eqchhG  9ݸeR[+FM6N'%.p)y#$ms?gC0+^s[})6AYS S*{ݳD=ynCIeN"".{qlA"y1!5P*xTR.]ⷅM yəsdz ?70invyn27PtޔSk1!"╯U:U6>oqLe膫yXjJ q;+T}Z5x7U+QaY7c$ ՟ !=o\NlG}=-~qVJpBۛYSoF?=5Wfg'盽QZZ[.=m<"~Oٰw$z눮k^}e$íVYKѳT[^_Kb5Vgɷْrx]?ɷ>83ZBXg ngw{Qےz n>i};dwoYQy/SgrP @-h4fgV%('b'a52p"T hCp0YȮK7\RBeUВ-nOn6V.";3X/cst;\4M.?{xy$af4?Vj`]!J9R!wNLmuJ~/4dY2qߔlIm`k\_\Kns@M;qOXSM&zғM;^~S9^΀[J!6OJۄĵSLMlݰvn^`Uto~i,IVm/~_gviKs΂]W?˘9UV4VPT]<4V}L>.~:_l4ЍhϙڭZ+iǫJT)o+sI8 t@0 bʉGHO֠uj?3Rѷ7Zx-aR9+EڳD4~d|P\*Kt7B]4 jໍwߕ^ˤ:$5M*x2cXu]ھR}sxO↓4JeqC'RH ݁ VUv}Szc,f{%mOdz׫`Ԍ5ZwR|ܚmEͿU x>&:B-(JRr"C+zE`kC4Ge[ xY6QTʗbSڟ֔h0+C"[ȄiX!־v_oO^+8_.`Zh4?g׻-c*4"8]')"j2}S5\;\kլXM63^~C~\+DB3J#羭סA{ƈFmu$8o=(ڟ (Pea.34ҠbʰZdY3}̞ukض1r8B34e0FDt[ Aa0""9~xuM} ukjba*@tNyMP{x]ݜV]%2S=+ZB yFU"E^dz6_7ӧUTU_qd2fw&μ#D2^d٪ 4$:MՋ*aM28;FBA*^ h.~1%Tz(m1q'ZYZRk6*T{ kasa;;J)܊E;ȫi{#=@ Ѫnڧ^4"3!DCo43n3+c lh:s\9lBU1X e}bD*`/6Oy=n""mG(F>_C!!'V7yv/6W2is9:677;1`kdQqe'ָA?Y#Kn,IOj HJ'؆`z6@;05s80j*R8ԤJ@60ި" GC}t9bPSѱ"dc /f_p C RW_LlDö($yrDsCA`P-^:%jf챃L v՞=fÈ6`oG^J袸ufPb0油CB41Le\'t'j.d;>2"`:!tvTБ攘f?{uG҉IC@Bn%w9u{k9E@Sw!{r!Vcmxyvڊ޶6,YƳdgܢv ; UC_qsvoESU^{ǧx7nq)lb#3}$R$7׸z"xn1̨2<;Á`a1kl540 [`q2B z}{~F@yncc~iR""a= 4fxT{D sN"{:dLEGTm_DD,Աϡ{_*|~j Lxc&,ysᣅk]z!/TM촆fO#{΁^,R2"3Ϩz\$!1 ^ffFL|8sFp2ܬaP>THBAD7C:fFȘMl^D"xѽ(F4(5qع{u~$P;"vCȞEWtxV?Xo0V5ov-w}-fQc/f4kzjam1Ãèl~Sޫڭe~lk , \563A}muik;= 2};=PǗ`}) IѺG; Z>1 8^t]vFTT)mLK(>E'wtBb,~i! '(gk&p`z#rj7SAI^C)7 kھkS]/ȾT}oc1o=F>c_fB?b;В7H0"li*V|Tg&<3<=':wp=ʫ)P%cu߷̺2uis"OJmRkROPlINd@p㉔.@5z]CNWd{]ng$_Q̽ƌ!RԯeibUٔmq7Xՠ$L e2nQ(_:" >.w= m;uգNG0JtSѾ-TտOogS,@҂MF8ƥmJE6T Nu73I\'z5XU"yvXyfM"]Y H2WGG$U㧈%7ً4s=oEfr?4mB>1kosDP;*`q $ʂy`]&UF-QCkQE V*3 .J!"!7mg9u袊:Vա՞=æ9{Ou{)f~eɎݶHg8z~osDDt ŽsߗR:{ˣϼw%(*E'/6c3"#"fGWgMWXD݉[䭱j ]7 xhHF^ӶsCU1Á{Q v]IN98oyek&R"<^hL 43C8oW!BfY5k_F p4`vY"*[  ^n@ J\v;ߍ7s2q5e||MBv fkN 355Ez7 {ˢs2 N1`##Ĩ,%>0 ܳs<c?\uCv}  V` ^:VpNgP)`=/9H| *hNy^D2"/ʚxok:GB*{g2aؒMc6WW p ;A5DEDBȜO,O(3"a"z#"3 s B0؝ꪑg3;cbQ4}WФj608";ffƇ?BCnvb"d `ٱ-so"3^p,NH[%diQ 9@ҷ / .`G '$acx ~ I1*pP13Hd JEQYQ|0h˪To\v4 œ<~sV6p.ZT5_Vj R},YSJhj/"qeF Z)Egr d.GL@Sƀ. b#::̅Sm˚gkyC'+y cge2k1Kf&=Et)F6[0E"ke`<"f*S̗3^X8bʭoZcdZ坦i [Ijew7Ezv#gF†{OO\~l AFLJ@@BA2!2ˤk誛eiǖe;'fz ^V_}Ct|}3՜-oɤe|MePPJ1/ĶʎR? KO XG${Qa5W:5[}oH;03DAk,$>`k/>Fǁ2o9Eaǜg8qY<-SlYjB)OH8؝ZrZ-at*$`! 1U.-m%3nnO*ߘ:_D*:Nl^'(!KJciSHHS8ƎFsnq㽽ksBڶ_~M h)`֚Fz5Oe$'d9JuS-mZavݯp`iK*i?}R>la |{몳q2RƚaQ:|#89=Y%Hj%]>w-mT} jk853~qR& ew5jkvaEmFbv^}{[&˪`A\۪eQ풱@pHY`h`acm+#F߅HNC ]tߜ:yXXl>J:_Kk6g=wǼ 1Q_kMLjMf8b6 nyVp{}{08l ()מypdng#>ÈR><5?>e(s-:9؝3wR*('d2&̏IqϦZ DUOBr c\ `@eakF0XF3=n~©?ϒh5VR'y^i~gx/O?!GK3yϭq >Y"<4QC!u3##2 =M@m-!TTeEryqv-ʊ.· P6SRΡOPXcXH4X&hk5#zn߯i)o{cs11KExUQ|ˆfJ*Q +$aC`4_ryqncBGiA "'<`}i lG)VgP纗^6 : !cf5 N#*fw{͛yHk>TvDxo0{*, f:%*" =vLflvGӔeD: mb_աB_3t7fѨ=AT pnyr;!  C5h ̾P翡pk;} !Às8TPDV.B7;\!XCF֊u"']5 g@6f܏#=(&g7{RfDgl*j<T iC~ sW-~UQT^QUmqw4Y[ < HCB^=y#w_hay؎4FnrC㮸uzY[UUy͡R'ap]Yo{(d,#?Dz]݊&`rGZ20I;g? ;AUW.F5L٫Tk8*_<58Uc$TA$oqnoiUSԅPk+ 9w`XPWb.09F؋/Ļ~>hg H^-֒K|Riʻ`%#>ݰc~Io~;el!fun3 tUߴ Uu;ӂYJI̐`r]y~GZ'K 0xL "|99-=IxZ:r/('1mid7WgGxc]`^W7߮>FWm-H/WV7+#7^`Eo<\ =!|xׯ~ev]x_=@~1[@||tAl$44mVDr~xAT Lr|Q8!gʕH.?3(Bj`#X4(B:w+f.|cxP _vb}O3Dt8?ĀzY* _+9ZIb}}ej9U@\ 6@x@n!"@X)Ф(_ !00@Na 뽽Lς^p]{P˪rF/1==\)guY~)Ja:gMCT ==lhApRBvP9V+=ϢYば;چhit&"" >y:OkY ™ScQOJ(sE/bȈ GGڐW:4 ۼpf~3DC2dsd#>_^B2"<3UQu|aeN#>llIjnPȏP;G$D4g;Ɉ "]P k3=ZaUeC"K,w^ n":@dߣ"{=Ϡ{?Y=BxñCD41unu7fGlQ22?ԘQJ*hJu_Ԫ",H&-_ B}:y~B+.>?A8q?.kasbb8cAx!Q÷iF1#y '#|#"38tZQf! dGceZ,842D}Doeވ[h[_2#X7eKUy1  者{2y91}gKwH=1RJKȜ,@8D1}XFr5CWyn "#ty\+i7fG]޻Uժƴ8MO"EE:-@懹s:GԜFq8evMTUO݃39|F cԢ#M ӛ{maN7bixy?6nۉ13&Cpq[@tjx2;=ǓsR5yb: u02t]z 8Zpѝm"{EW~Gժ R9Z.>1 </@25"vJfP~a|_*@)@lei.O| LGwi}=>xWz1r}1?tG؆G|&=aکl"3Z| mCwyۂK8zDZ_$X0*nLNŹ]9V A1|d3/ýG(0u#EZdf^udIk$9+;+Ec򑂽 YBXV\erC w7iBwtFCtW? GNW6=€imԃZ[qل;]ؑlqZYv7k5p E)#d@ IquOW[rx.CoLδ:ˋB+@)ai[7{ٻ/_9ڗ7!s.]nuyii1pԯ h9 g6#zQd1^t14uͺyys7Vv2Voi`^;16O-105غq!G7Z9]9O_(& Ƅeb񕥻ƽ$ ?YҮ/nF'wcxw?tM/~)A 0B\ţ ; bN$r&²nQՄSm~Ӻ/ڈbY.\ ̹Q^ip%-` 2 eZPf᧕F׬ǫn95'a> P?Is\L@5E ԯZ0spwc¥*sGȾХo)%XtîeWmk#0Zvʻ-wjoy lsjTs%ƚ_&bXH[Hl50l}隔>&r b>ՖKs7FaLklE-͘}3jn!5Aқ;k4>_zgxm9fӍ3ei@@Y  RpAP^ $A$1?*YI3][tax{ڬK7JŃ4i#nSņP=Mm^,j˔70pW aNhΏwXPN, ;vDo` h|,ʃ˄Frf5~9T Lɪ7ny~%:nݾڪ*8bM}jy9\Iǘs\3JNW^:2_θ#y搕/i7)lcgc'B19s{&Ccx]TC$D)|UQ=^OH¼\^N mFޫf܏ٹXf_l(aR"}Ӟ{oHqDfCDžMɪ71ۡ6aXAhJᤆ5xϳ"k[[;;[kmP3TrUQoP[cg32#}pBDyw_{CcxՇ:w@h9WsIx*hs/x#C!J"'[Oy{MţKE#ҐkG9ҭE[ռDZfS;?X I0 /{Ȝ%>n= =C?7١'!fO"*n&Z "GOzGCF[&4XC5qERDWyDy[ 摓p! DoyhF 333=~Ʊ3f.&n FufFGCm{D"Balu5݀hߡ<jxd#Hdl332<,Eډy"hMOHK68z*0@T<t51Zx Q^O\;Wc!'aj7}}0Vf1#SYAV(АWpCy52Dݾa;He-w?xnϺpdx| @mm{ȵzǮ9DXCAL26nyڢ{sq&hi⠜ԉs.;CF.4?֣DjsNz/8s>rx]y %B*R%$!,*\ٽ[yVs__3zi=_03Tg#NXI6 ??gSΈƩ)~I vra1"]/cFR*fk6!bCxM80T.BGF)}m^SxYFB_U.Y0+}):KRpsG-ŵÃSÆMlqzS=Ma!鹆(IxXM쿔kaǬDB^;NfzS1N`Nbr!u&ߚ/ԛ~1hҏ֎VyI?J4Q[ݛyή~iZhyKt2,apx;4p;kSL"mZjf37pc߫TݦBoUwʹ }X >Ӕ% 257m 5t`ÕGLvpQNAsU7|\~GkΥ:S}|\\s}y} ff!rXddFz堷g#8e?{N/5*ij n 1C1\+*P\"NN=+ iuwx7U%U^wA沈HFZxy2"3pr2fn"?LxcVD3v-hy'n t4dw/鵟^,>揯\"yZx?'|< 5\i3#|yWq+]efT4X?Aa?1HFp֚"r^)ˡ!rY˥ ,r ,)!<zfn##n4n8Es1 D"Bif9TUtn_jd isy#ďnCn#na*<""'ĵ[X*"k 1 &UdUUu yDCD8p^Z<;vPƳ^j(x{Ȋ LEdg2CDNJ $ȞDzysU2mf|<HCN0B S$< nѢdAV"eΈfh9jvhQ2 z5EŇ7/Y>hcH5ӳ8!nL |hBy) 辂#.ljm mI xVy/ < s D|e2HKxۈ$`эjMD ]ZzR{eH4-QAcP[ݦG6jl.fȚҩ1oζ8:k8+6m%y\Zi{į['~Y|8lЁݴrilFӰjU{j1pa5gpF'Et˛XhWb$<=ǟ ȰD}!K$ܜ-q(M`GIߖ) pB.XY&!pA1r: Dka1DŽ1սDq^GI\t/O (dkgiR=w\px={b{c9I2;EIiVC57!u @1y!ۧw 񻬰 Ս-jO y B%*gC$Umw5%/7310!JILyP'  qYC`[Q 2p)_}'F󋼦`P.|m|\X+NX}GkV~dˎY?hL=ubi"ҙdPL5B[(vuZPLT37{.t:5V2>և]}`q+tbz2Q!KAJTL1|.fqJfPUi]kcsCE%Z_r\gF!Wz(_v.v$Z,zHZNn87FuuEXj ~ȶqw T>>N4Rf%|$C[L`9~koBƱwsc%0+PH^X -X/&|zŘKK-[}tE Ww#g\BR,0QX*J+L|@v0 izd @$b1[4~oԶjoFe>Hdo ApCl$4:f¼ D;y`:" ˗*#l ?NVVC];LAnMc`WC@at= B7%UUk Ro0F.ڲHnjUPN}wrdb'jШI?&&<&8gq3ЇUqkyozۻeLM4A[T$*敒 Q5%xPtqL[5[ Hu:lQ$xjC4?=uッ*hH8dq}5k>ZL k u;I] {.AY`p Cj>3?9M'ӸclXJ7xLaCF5`k3q`_%N΍uٖ0̢` 5%ŋL1@ՠ_}Tz4G>WBҲDg>^V>k0䨞76cHy!W^fO3SdBLJDʊ&֪mdX!Fg/xHa7vO3prf`vߩ h:M#M[= *+;U:U5CNWLlj׫wHaTA*ټm@U'kd+bj!e7DFSg%)SiԘ glXƬ!0hhfP1˜kkkIU, g(NxYߋBM:5 6!rhCj!e6cB WaoKieR w&ES2͹xH+4aW +UV]Y7HPum}uTPވ3xXYLҽ-:5:~)6LƚJ9T[Mn>AKeҷ߉B=+€ =Tkx~ΆRJ0_6$PǙB%ڎUVlπޕ*x6bBR|Ű@z>>K_:MU*[pXg@ yM/Qxg[Y,Ka)Ze>Q>@mEeKu9, VBwu <1¿>U5-|uGޗyK)0e_PleuMdfyrm<'k.nUTjzýT `Oy\ml '9YY/Ny; }A[QL| Uϴ3H<aK5Q'}Y=8> YT]+5X'k ])2(oGT'$aՃP0J}*sNlf ӊnK%iOAckvA_\O6ʝjXiUP)!0QC}tm-&F5L]dharGUI9E?jZ@K5zMªtn4\[T6Jbq5Qյ17oUzA@ /Y`A1^n.vp3S2V*;rG+ uUOKN$Y!&^DIYKbzźұ«J0>MYAyRA/} MxF^Be08HMD\]e\_p$̗8,=g+A]^<"Î-r >nk`xB}@q ,}mpEǶ`[v9~—ysvT>Y;)A5oXO A3"G܍y=DOυ<;g1<9s)brWM@þt'bZPomKaC?u< mL7ɏZ`[X&\y͚Rkɩr;-gfn"65D=Ż7^&E{dQ'\oPdL.榏Atux˪ځ]]sُԮMUlnѩ10-q*"h4PÁujDD>@$25?|@hq.!3ϡ03kN 4 3Ld.ւ}zs,8R[Gzfoy~ i4b""l!ޯvX,c" A \O,a F'HcrQx̤( @ FGyDcofi~nՕ1aZ36{{!>4PWs;PǑ8z#̆fdkYΨٞ`+CG8Ѭ;_U8 9[NEU\̏'hj(DBNDD^ʜ5'?LxD rT:mW)`0 S {Lp/Cxt 7GJz½pokfC۲6Z{$9BKB\bKzBo H$& u~ݤj1󤳸X@"?TbG <>S V Pmr}6aK6 78Y!dWvY c1Z>(֫1ve5XB] L^2VM6KB{=CX߆4dp, #'#%|~aA\!Xa+_6F7>ddd|]t.ukWz29f*b$ *OD2_`'fIMYa_ 4luՎ.8f_Qej jD@h8|N4",p`0 AnsdžU+%L Qq\n.8_Z/W[kA(m$bX60!m;S".+$Fwu}&xXi_ŜSDh)liT>G) uYkdqq]ń͂+" %] 6˹0x84Uw'zXoTv ͝ΛX=Kv" 6ԴJWORLjַ |Al<_CƂQŌD1ޔt>($2/ r&j+< !O:0iƶ__o^߼?;euVL'Ӏ*WP }h@q=[ 'fv=Mw=ό)aӦUZ5 YNlSXL RɼܩZ [o)G mYaw.?un49L۳U3 !h0 t=0(rj9Ѩ4cT֘xE0p,NeVٙ>|m\4\̒)F$. ʬ'Z&fgPKʪ'ߩ^ޚCR~jwLN`m'>|uM 0z )llU`13~B<؟<_>kr׵E9:FH+q8mvn?nC%17[ QʡV/Ӌw'9)2Clؘq@(p = 8X cѨh:(QP'_$bp@h@D[/ A7cV)dgCmA?G;ufMxu (=`f8BX/忔{{ޗ'q^ UM@dccPdo#:i<33ò/i;t =.:,JO9=/ X!"!e~v^wWLi|C^|CB#Dd/fk̇B͹ {ngġ;X㉯ҺXau[ MQo{06ޡUqd3Q"{f&n//ϴf2 Ћ!F8^iP;A=v?L%(*7Fpo.z\*Un/[C.2vځq !]Wg^E8d 䢚&8f71순DE~ϸZ .,w9*]C3F.ΙԒak>!K7F8Ooד_;*(G- 0N(a,T# y Z0$`ǂ 7Q,8(, PiT J8׬E4a'Aŭ`~Z+(DnҜ{k&`.% O_Kh 2\k[FK8r-U2Mty{W">g&y+uѵZí]^rMNqHлbVY4C w7AGxޡSřƳC'H=Pw:3~{3kB Sv5`lb.9K6Г/s9Q^!,Zܝǁ $Ӆ{ǒo q{35<{Vުa?sa.'y;d7Qغdۭo/q?7xR*Zr)jO{ FPǟ _Mo+wpTFPGC ňCfig@٦cyxeRoCug=TϣCgMqFjb|`l!D*xjO7*h=bsQRj[\UaPr&٭2#&݉, ZGG3v,BKJL2&`0F߳$Yg unXA[WwqHy,oVARyC%4Z+E&ƒ4^RuTr3>NfE,i7 _a+e-(%0gTdAO~sk{bh~>P-Fj-;U"hN~DEN[?XYp=2:;oo+=? K}ҭ >Cm\hزe8sѺtf]y: ZWwbi~gϜ'abc <̾ǁy ]U5yw< ӞZn,e,_US;Kx:!`I{~Y.qܯH 2/g`npᒡƹüo5V{Hؾ~9<r(Op$"VCC: {Vиys{:/"ŽQCfiDA"lKlF>M鵞=1>`T=\vtWW;Fo{ [Aۋf7/EzWځi+:vnM':hhh;Kw"""ҫk`s 9Z#F?R_'c{/+ر*lS!}А;b5UDExv>D"$Ls}R~͌(Ya6En C羸pZ=:#]h5L-`U#N<yj-A,yL@3u8yʀKVVX{"سIY41LxH->zik]h&#m_4 4i 5:kkKkK[nOT43jDCEJa}P>hVY+lY 0QZ sCk7wbigjl^ CE#UM1 vN "@s / s8C44C"Dya?UEUhk-J2*h潺@Ab#* pi TF4c m=l`´sWEA% PhǗDi HBV Ȇ'*\MmrޖwMIYdУ-SGDҸZmbXOzV{#qsx\q1a4mMv[ w݀,Y?/+M dK=4=m6 w!. c"jԐ-g3#W Vx'1QI))Гʇ#Ҍ"Z.jq6B? $d݌). BAw@ y.[ix4 m?C,T.4F b HrH`7( JՁQ3貲U;[>ҋ~!–7:Zx<b> tgecmgj7(G77u=%ĉznZX<}ĄhmV?)R"S61/b'7r#GfqdW=^).MnRb@OahrӵNNtu/kS~xօo0@$s>@% zTyG W_{J!Y|78zX^aeY#/ xKV oosV&vnſLΫV;aL33@:u/DN"'s݇fo3#{1M*yg ?=uȞ=O#4yPI Fff~ϮA}{7uSF"sZDD$D-K*gPOv"X ˙^ :c#'"ycF650)y8aDŽ~EذCuX"DC1]$D$K_jzʰ48C mqR/J&?ۘ Rc0ʂ{+ ђ*h&㼲SU9 P@`el@E]61rnn.n-0WVvWJXiʙiwK1񼁆n! W'^,cYrJ!pi os+!bgh U^dn4qGiP;6 Xfv?qN fMQ@I0fp3X]EÙgØqiFJc),-gLL֏ ƶQe5`P^ ӠdZy .FxBc$c&5Uzu;)hD47!#ڍ^wSURDբ ho"7Q3g:f E1[5˷9JC.ю lE3U\V\Qt+)Ss@cGL6e@0#)ryG$F}Y)BBuєeuk7v3p.D3FR(c9`N]{7G2ɨ~ܳB=v$;؁c*.X͛4ٳpG| hk!qDgC3wc S{(FRqFt'w`;ꃷP%ɸ7+·c PXAaAk0ܽDRT^;3?@CZBk({E}Ӟ3g3'<3&іhC3놏:9$,!PjԷ~hhΐk>D痊o/Cz332ɼ}=A<"ɸo5L)EؼqYI fj#zEd9]J[Dۧov_v'E 06K\k_nnbK BΘ[ȑ`UG/q(G|D\ OpaM ?۟}//0q4ǻlYG_Fb_0 D$HSbqlvb.j*bM6]]zgّi( yg vIᓬ2Q[ɡ R4>o?j$ORX@)ޏZbYC+M%+k L_\0u5x 58Mb_. [;\oDϏ3jMsQm}Y}^ (s|-䠲Z%*K0pM+ q`AV~ Dp_Pt6 /mHc_J}݌cɗဿrDŽjUd0~~WR41b*83y %r."d *&̰Y&d>Om=f9$xo#9m;PYL$BI5Vrk۟z>cQ~ \ԶsVV[n|7 :&(7;fSU@M@zy/]#tF8bOy;klv_l,PX~hjhbh}.ݫ 7!c?ߙbEl VXH7?Wb%WBտr ɷ`@la6 ДoTRWӹD"TȮ=h?Q 5-uWx-Vm%"ֺ~DjO ljt 2GRO-AO5[9~|>E[ g#f,zޫA?"4gSAEj D:8$e-1^1BMYídlFl7e+6l.۳kDƴFIyȫ*T'"8oAչP3 R~fFw 0n5IUJzhAE hΈNq^ZbbԾ ͛&_ 霹+y IƦHwx9A} _4wH cLiBy&`j/sO KN^w^⾽t+}Ի;/ӿwZ bt}T{(ѼAip:2ce YpXN`cx9z,p!7wCמ/5dTw-V4`58u:ZhX x4P}1zŶ5DTB _h‚{5|1Zl?½wp])[uU07qRW3?*F}wI|lZ"LGH'3##?M$j"33x`ίV:6&gV* n'^9 _u19iTГSVX"?ؗˊJws6,S(ئQyԌwV,ٳb?[}[T}H0'\t Uy#ƕQx6^W)6,Xp2b+YӵV0Z#gtbaĘ/}PJ!nk[<ۜp!# c'/@bG(. ~7jCE!3z5X1f_<7~;|V0y0ѣ86Bqhi戗w'""jx8keQLQW nof LT y 5y%T6 fqssf"~HE"pHCb1N=&AɺLo3S(L#/v0XAV*#P>SE#í́cކiNAO]Tx̥q]lbf͋,Xߟ@C+?S͎hTE5|̵Ơ2#^acEVլFdw*0҇A1 o+kjROD󯓙UQ- \-?a~kE?;.ZT>|]P)fy ʺ_ܰ3 mE+ἅei)p6F{y*E >{w֧m@XŁŒU}CW,]Ke-JH0{Yp:pqgvֆ. ϟ>trӔ%Tx!3QS7ȣи \qR.ȴ`u:XkY2R?76aeTtDi.ړ4pAbk!{,Ì/4FBP]Z#d~i @ sڈ"y"^ 6Ε/s{<}-Awd݈.!fȌ|0帴c|^±++&xCe{Or3UfVZ~wumB*FV ']df([Q 0RYpJgGizֶ,;w"i"vJnG)R`tjJkಜW=vmO)kbLߋLgiz>Bh iwlcO8h>᳑;9" ||ό|PIE6q[QgUejdl?p ;4Bu6, ?PA t^GE75.Suݞ[ X^m"[ݹDmq;6d[Pɒ:ŬvrVzVSͩ8_y+îzhi—Vt+zX6)H˫RޏSe-n;X?вؾN%!`<=P?'Q2@y?5v2]Olc{v_~Mtң%`YµfXΝ$5mr/e^ 1NK$^#[a[Ƣ#fݖp|H{ F0p"$&\aar.}XR(Ll49 /ڒX7&o^к|;,<8hā LM, #JM 5?}rs9Ve0}8{o\t2.|#r;7SI1\y{k9OG#ڄ"j{ؑsU3WBDC#~AÙxc.yV9ϻB4G@tO332<=u,#3y2LȁUU$T1m<01ZD4L2tFg΍v?w FF3c[7#D3DfA !k&h`hkfYJDNRHg٦E^,Z*.EF0i/@qRj7 q*EE\n2DD4ȫO'`6c7:=G}HnDw7F1Tz]pT y9UEUfgK{ uK]3cB.Z7d&g̴ܚ9НoxjsAPb1q0m s8 cAYg:-  +GhY-Fof[AspН3=9 KR` PޮO7sliĎg^0]!xz_إ@{Cռw̬K9Uj%c3rit^ZΗɯ?:/ 6E@N='cCl+/9i얬d}epAٟ)֘7fg. smڞ Y___1sf\=n6̽"R4*7ē.Fj~:SY~1CF=`y>+(jg)VSBï^;|n }Bp-R%w}S odkr* /LVIt͟HͶ?1hLu%d$<~v7zinvZx2z;M0]6͒NfG jȨ nhQQ ,#yKv8{ވimQt-y C`5Ey+L^ϣNJLPU`qqTbpGGa7M1|ϼy;9䈝'7!>/OQTWxw9\J"<Afdfy֜_ 1B1c3wHZ9AUaLAh֠'HB;%sz 2isiF2xuNweY\Xh+ۜO-_pEc'%}AN6hB0EW&qsYwK} (X>零^&Ll+ݽe2. h1J +;cX'*GAEr5R,o`3rU :C./=0.7s+!1OrVK_6XǪ捭/shCZu>@$\{ʤ5Aw! $fow ԕlYm(xNʏ2 @ba!pA{D! \Io*3ΟD+(G7t={ASQZC_:_ }ݰz 4TMQďg/UIH>o!3[~ G _i2]g Űzl;1 .:0A>-{vPY.`MBb-ils>U5_:uouD %zFڂzalwG"@.6`)a}.@邶 >@L*Mu{F\+F<2^<1-L\<(kyzzVT[G'Zˆ;\~׉3~Rу΅?䖧GCTBOP?*gK,{ޠtQ^Q RM<3V|K%%F0@OE-+r IgN+zX' ~@§/zڐz]oj~^m 6=o['ЧXhy#ɛ/E$ň",TcX-^tܠJ\!@uJu԰6?7N4j3] *P%lkT-m$!m7yXS߿:=5<"f\ϗQ:3bez|ȕJ,]tXbB{Ӎ?n}M~omROLF}}·3= 'ijH'<[.'{_u}^3.gĺu (vgdpOb?Xr DHt</Iݤ ! P+ G끸ÜHiU yvOs=eciEGV|34<;GO.$1TUې dB24N;yscP(hW332#!l9ytFc)]X1g1U{(Mu>4(*h&Fq'%$iud4lQ~\uf*IcJ#گ[?׭a^̲ 2C/V[Ų\xrt'|I:+~RĈ䤳F)%‡i%xu6ޔD1~q])q^hHHWɁk=@* Z Ř'VK mA5 Z,i nH##"4f%\+H~b?iCB,35h55n>u@%0Ѝ!؊\hŠmŅt]F0{e\PH27C/!`;0ޅ!A{.H%q+p]e"3$Z9t8?]ݸ|1# z([a->>*ܜ(}g[yM0Z]3#ytB!!Žw7=S6FCAb #.Y{O4gCˡh0]Q_:/Q.ڬ&hWOX8Z**%0WW!+YWv=9ˈT{/9G_3/ٽA??z'Pne\ ex4?;G $a'Cw]"9<~ڹ2˫k'; sԴcT6M6(L1e2y6x,g Zܽ]BW>t…${rEu Vr槣8IQ4gJ$'ObIL.us[JF1?MW9)i 2fQIx.@F-)@; LmK1>:[SC܏Oժ/BYɚyríD3Ic.?ޘ҉rK=-*6rǩ$%Sc~V96d:FKI>ާɈz?3wuNW%H?7'Vo#9xnUFp ̮qWMy,*Az,Xg3"_NDOLl^+/ɬUBQ{kea=I.%_&OJ }b=edhsdG̷ښCb^>OKQ!s[-_h ŗyXVt;s:I5eL9/~o>^jhz vYwcwŽZʱ;"!YL0a!! 2O_ MMVaz0@sj5D,RXgzM`nHՈhkCjp126,ڱjՋ6+,7|YbSdd ~sETTDEr@Შ&u$EFrߑcXC ooa c#!kV􄆆HfRYU!$!#Ts 8cP?Q#)Si{u qt/'jVvssU*1dfgo.˴B:jʊ\v~W9ec-cꖠ$4a7 ,c,#a$]**gYɄQ\T3=19ɚ8ToTar5r]'C~xA`[DU*4ccL[p()JaMhi]FOiT~ǻ@N3a6L OTFgaj{S^|޿$|`0w!"000*Chw]B"JLWoݟf7=q?N:hN/#ކ~#4z\(j+ٕ"cnj1WMDme4#,mwZ+=)^Q6,ZJ|{s (j?A鏀:*yA-9LUa(%3H^Ua2#žH*ʡۘP*Ռ#ͺi+ШTs- {@1g=B:NHSI_Q^1OUaɳ^ANZ0m1pKR6rp*5#%wǹF>]0`.p'T]ind9vc 2L-h+/HIq' Rr Fkotiᙪv3TJYVVW~(Ja 6PH0\>O󊌻Y"8}ZRzaEѐctx2bpWFKuZS Ei7T-0֌?(P uri2ETH=wmUV+.u^= [rщs} lSY̭I^[ vxs *'zɫ5eX-Zմ'[OZR>ܦ!H̲t=g_rXrI5\ē\:͝=yY49xI!粌G<,?LXu4T4\WGZfNtpM|&qtG A*@ M~=J\FkdȋC~nu#.+D5DSF=f2#6Bjc=Y,ɼ-{zyiYh1s9z?FCd۰< dD~5ni`qI]9iwb$8h%K|Y=#˄w뮚lsEi4 ޭPbEl;ƽ'5?!Qw^\7kbisҤ7E#X5z+Oeló[FWǢ,!A|qc9FECȝ{E/9#B#4f}QiwEJ#Ihr5NTUZ;Ȉ㙡xCAzO9ׯC@qIOqnwZ"7ߌg'UUU.^*.nM+vW̏,gu= 4XqQmc8*B4Ģ!<7租w,!=sVXCk[aΈ>:"ܶOUEBDUC>zlvM^8B>[h#L!g5b337PjFH!dѡ=g—uɯV:1ea>18c;V7'+79oq8 UUo|1f] =- UUO/՛Fofl!h[e}&75S0t:{{{k{k|Qchh%]1`kC@fl~jX.6v.n'"q|_w\ii 4x,K{,9f6lسf[Lnֱ2cQ a}49X D>谴u4RՎnot!2JBk_5+^!wk|2 JRXh j̏:X4Ə3JW#W(gvWn$)`/Nhh pGS? kCa͔'=^U;kfghFShmN'pf#7)~Nt+sQ2)K)mfE2D^fJ= JPbEULWL&aӎB.u0DC#D|mw1#anX=`܂]_  {o !cc|̈=u+e\XCff+,3y}),pF1chb"{Ek잋cc,cnZOhE <{rl܈i]1/!/@A 8F+) OlD2DLȌݓg F".Ť??? VҞP.}0.򊪤eqrڬ#+μ=q{nB"*^ Ƶu D ʁ<ºڪoi.TeEe=|)@}Q}F ,2=<̼.7Us^hX%)\!Mϣ5kihJ`ie Ppu8-qGҋ. 5]xURYn콣=S,j~}nZls(;I2[G0ZPMOuvvl@U$Y*VLsaV Akq50` EI1 8{z[PY[hQMg (05jyUJ;?D0[_ ԂMWrguh+A`0[T\&;.Cnna/g]֪h3Jt&ssXՇd d'90ހ'" *P]gwsw2ON= 1WzӦ\Vm2\qݧ h@v`jH{W>|ڽoJmfC^P2aDw7 >hU\=QFuw %2`!MVJLҺڷmk&'v:$1HA +[ڤͨBSZ_-<*"kNyar%]uIKʋ-]!$ƍm5䴣OӃWX5PD/t=o|y,c{ꚷ4_7:c/u@jw2ԇXVא ~^ꜗ$Lqcw1)D떑MGmXMf5ݼ9fo=IӍM3=aiN4 h . 9Yfv_B2.gp0ՓysҼR)J(RGp=}9 wJ1XƅhoֈfHϫ@OƁ{{Pt޸f wTW/GxGCFs^m{ XBmǷ ""&9`yЄ sHzI8SkȈ"zu8y8EjH:5縈ϿNEDUS-Hq19sKF #>ЉҲ~KUU?~0737㓩NrTI]O7s+UBT\qŹMUWea MUUqWEP\$wjQ6_F1#!yB2D4KPN""/.1byC ҵsqKT Ndfhm79QTtyH -kZ֋0gQ0d^MqlBĥM62c•J_zQ5$lצ֮b|O{j! Tvu5lw{moo9quKc,a# [n+UDETUJoM0(!bm>2M=L"X?M5ӈ|:XcE}~7-_cM24l?_?VFoz"[cu|#,DXClD)9.a& pX\/M<Q>T580o,, 节L{~p|!1B֕yI%a{#DDDLr<< Aaqa7oVX,wphz}ҥTTEEV:f"g63>#DD4̝D<2F[MPhv tWc`F#IS! fŘUQXujnҒ@mujteI0Z QC)X,>3K,E)U]p?z+jxߩ/=fIRUq](byq+fƒ {,~cWΪ QgzOPyASE+4Ѐ {&qrLA@J08,0pP.z*D1 0]i(?gGH"xbbJgĿlf|E^9c\NϢMmݳ[@{2hHE]~!)CKZgem-[- ^`[dB-*i5Kzn(^*a XӲ4/[>XXW8Y? t'6ss1<=UOUj:.b:9*[JV.B> ?=R ucՋV7)="ON' W7:rDsF Ӥiq @֫[NV 6 ]~a @7T(A<  !qI|3byA@29Ri1dY8ZiBpJ3+Ĉ58"V A#l3ATsR ?!,/]ee7D{P0&llKTyzQLTu۵S"/X3_iYA^_csx߭˝z %8Wyfႌ_N򉴓zL擃16;?ౝ)wN`X4e.+^^d|z2R/@ nAy#JqZbH\ü L|)a_ZaGtӨO#t70o6i*;b;|hgwnmuSͪ-,ώ2 U}?c 5r1nMcH2鷸ۄ1u]]i#'ZիسjӴ/dY>?50,vtʞLF. 31_s`5SEE]L$cӎ84vo`,aeҁ VܝM)J_R2n-,[| 3UI &ߍ dF{byfm^'# JYn"!cArsꨦ1EzOчKLu"Pcfsڊ}y=6,ʛ6uZco4s!"Qsh^*/003{Ⱥ2kx3DO'|/+c*Ö[Q<0ko6LBng/0m#L?J47&e䘅CUS/k#,!i>tcDCCL83lI^0Z\d@}vMPyRM0]D$L\kK=pe"E)^gC+ 14W)lM,0 G|T$~~!~'e.~pֈ13i-ܗ՛{|0aj-|'=j j@0gNbе] zдb0$5d&Qʝ#ˏebE&PW>SA3 diZ-n1g2Ѻm}D7.2Ea CUC_Z3KU+r<_`}Q儸 aGt[ҍCbXCGǁ 2j>Q2/+Im./.x8 ntIMuA',L8<=jUo.sHR={.6ICw~Wcy͏ZH9ZGV\IeYM13DJMA4D%VJRn}W=F \;NQkL~_ ,7ˁQ]OYxL 0# 7׼[6X1|ej"kN#7UŅ {c[Sߥ諒 7?dғ3t #M`ٟۢ,_l',5n?#|wP~rX_5eرٖ`N,I=/ gpAeٍ@P긞zδ6r,b2]Dt W 卖lG8fګ.;V-;騌E1.Hg][j#SqȑB[ߝ\y[t2k@ .[s7|Z!zRl?N**LrTO涊'ou_+;!V7qgxԨ^TuiӋ &@t!&}O{+nF?UuFNmaݻa QQ} eqEޫ|-a~?.+߭Yх3Ni~[~f.A l( ފEe܀ߩZ{ɾxXkfK]ƗF]\'!pNo.^>+d"۲jD^UJzt\9}q,v!4<, 'ڲ?ܣ;ۧvnQE\1 b &Zsm?JU͜ғD !u-3DO3ʾg4Cz"vGxmLfC4OM?$t=rc.̞Gaz# 'ޢs' \Oק3C3Bm*4B$O_w=O1r`/3n{F1s>,hnaBҢ&;A?8}hDiQ3W{{hHO3MgYN?uB~۝3#3;W^axhQQwȆ0u$*gklcM+L/Iwmd4446i;w/A ~X6 J-ɣ(EX-6Į4D~t{T4;s9327cǗXA ;wkio09ާȶյAxȼh+B'~fo#ϣnvyHe>2"w21N}>`Y23~T.Rɛ!UM<|\?4yA3:f~L+?g%%6On3h`c)s05o$(D1l GFDAHC :`SSUPUrLsGs;"wRVVj3;TXblX/{m:F}),%)+~{0e&a1c\iߎ2Mo7JEr7nTECgԨ4CU iL^BD:3&!U1hfJZ>ܺ1#g4hdi,}ב4Y&dHMtbpsSݕ2IJT VFfVGS9fy|!sW"v?rh! c03O_9RmriQTEcV8:nT\`DTSUlhhCE #ft8 @o23ܛnUXBؿw$οM)͸x /)MUvY_AͩobÝ ͒40Xa&x&F?׭>UUU13{̎Y4=tn_83GI.D>B7&%ڣjg '^TO|!70fD,S黅6f?(;$+C18ק?K^J]fN]ZYjڵ'UV<+GNVVWWcPOB0NDFZ-ZFQ A~%[/Iqb!Cq5ce[0q$?QcǑ[bZ-#nN])\;\.Y^FI-M!XJhZb*hy{ żcb| w.3bW 4_*7j/Z u[fXq$KDgPtuոXrK5<n&cee `oSj?$4N{=xtEnR8-(phX0A(g,]08S]h?H+{yoے;Oۈ:qfw_IƬ(u5I5JW4{V,B=n}<=88GUro߳}oYN-h@= 4!e^m׉;8iϲknzZZP͹fgݢ& 6x imHݦ/14<[)9oQ=Tz),mov~v__S \_] j L^;=Kƙ_k)~#H`k~<>)[G_ rbj΅₹7sp6E^gmm~n m,,l/g,.$ΜCtnw{T00!x$8*ߕUn); (^7.:|9f}Ӊnui|5#i)xYN~'m` +n{]Տ65@\F񅑈{gaКyҠ\y2VJeMl*&NH=+RVeY8l#ZC 8]_V͐ai -Zxݯ`X4Jc}b]AZag-2P5X4.%/^;}A*>dxKTwbZA"A8X.~hH<=ޠx"&YOsku_YXUos2 s"*uʩ>]ۇd޹vZS?~l e7OJ1f忎Jq-'$Uh2CV`0C3 a~Ad|;z@]VBҨSrUJm z>$›c׸΢X& WUѯǁdˆ/"BmN$!Aa4kfgLCHG:>-ULVd?^a#3 7$4CDӍn?zFcAk#h*qLIc~FRʼnSb04j=FVbUCU^ gz<.q|7V,Xb͛?2ݛU\sbZ~ĬX=k/ i*!q*9~=cLeLVz}p+Ǡ{'_)<*UE8ї5V!E|MWbXG'ñs#`S5%b?ȗ5 .cdcO}vwz4M0r66`gQQa%v?GB!Mh?|jb#{ >G}TXU~TNƳ?)F?Aaaj""W+_hUTEvK({79gSbŊlXcAa4~yం."Ck89O(qcѢcF`3mi~$tRK (^y_2JQ}#~CiЄ(TdfL0Zbŋ,X4]4:*(XɝH(c!#ϱM0Ō4!pxիc3Z"8[a- #،}.2C֑YZYYYXY+bbezЁadS[Y[[[[M0jzeeV1~뵧E*Àc.nz JR.X ovuR,w)I#Yc^qx3R2c}l7{rjeIS*J(GOȉi3; x׌8Jt=VN?56c穀VeON O_•) FpםfG;-8c^ѦX*B6K]f[Eccz 4lm1`9A 0V`0rOkgikky\i՘k'EXgt6`^> ~(6` E_8ksO#{ = :==|,D%c+_~4Ϫ =tBR)_ey-^~cb5j"SDI=Ft96Ӊb*b1R'Å!12/⁜n̬ $#D~/TU^Ռ$+yiM Jhرw\MC~{*cL7{+Wx6^{}BB zͧU?0:Ɖ`iF?a.Lw¾S>uu0 qd;Vwi cޙVf*2 ~5PVjmB -0l+Ч/[ l|Ɓzjޅr#r`  K1FO=A˂9^7 0@f/ \Y_;Qwi5?y,x}#䚰 SL ÜCE3A<5,Hu;NaUJ 7{28Nt>א[iGxzSElbҌ)!l-77aH҇9"{'X7dM"A_#dx`VfdJ0WK݇0}1qZ-1szMe(zB l~L > @< C Bتr q5d@ގq;3ޅ`*V:ȁ ("wPlo?`GX0wT?끈zbϓNg*"Exg[i2,䆽#\Gkynmޏ3FS07vC{p|/3)^;PAL5@/dQ!&ң$#^gBT- 8QC_e?dZ5K\:LWy=-ԷzKw;O Jp62!m`I݄z%834ٴ&!]2`@8{P{^7 cR%~ČkzZGWjպW=j؍9rB>v|*X} AW!E&j!:\0q^׻CӇڟXCf16}v4UHyUb#j2U<fb&ڤ]m<~WGT/> nk^]ߕa^,oX+dF3W ,X<#}&>~^]G%CF6bٷl=Ҏس΀ ϣ18D^Vψ3t>'kKJ윊~u6*jSմL(/P%Joc4kL?Җv-Mm!mбƥuj[J7U`< b>[@bYD&AE^pIUiMYeșO¤kb졐/r3;`_כ{?);PE*4!Gc[vvVIr`( B-#s{w0ӒJ'%@2L4!O'T"ˏ;pֹ]LyuH31+(XQUE 8͠jY0=в뭹4`SL*CjE7[ Iz$`0.rj/Yg>zcJ=eO.vrd \#X=דPiѵ~E 帢xSyGl?܋p;)i\KfAqnĀvų>Za!`c.81KB(bPڃd0Գ=a4ʟFB!knϦ4N~_uHaVЋo쳒cLt>A8ŜM1J͂ؾ0aoq#oQt?eazshy,n&n7ꈴ{ !5c=T5%UgGL0!ck3O}٦ś6l ogQD1c˦:TUU[@xb%4ر`؜%L#*i꥚1dq@XV,Sc[sE-mmmmq/ [q 1N$1c*mN,6VÄbc2ZF#C#Pv=&$$"D8گuFzpPhYd-XMXoOoVb,Xl`i7"q%J@ 첣{ pcUlJ/xTai44~eLeL8**A mBBCDK^ byU{/ZT*eM?IL]Qwh6kf͊lXH7w^J1a fJL,J{ݵb̩gabQzHH[a]Y4T6:]g :xufJ[6[Zk?y} ! fΧ7}2ūZk.`!5ژn0%tLmlF6,wG& =F'cE*$&hs5X1 ?>bNe)eƌ?rXcF^*TUEUet0+Y* C>vLs_R╊lJŋ+n 7=#*1YHL:Vϋ =V1½!>wdV; ,ffW% ycSnz[Tڵjͫh·雎!F0!vky,FQ $q: BY6 t1,hC'%莣B $iു`S2C'>RMzN̦J%|v`ל@sQhڅYUMu4n,#+0b@ۜqq#U0>Ho5@C% pIMH r!wPt!C!9[O1b+oВ&)(.L``8w5Wå@Bbz ď^7Ysf(泵&8msMe0jB2Ms|نmeV Ĕ :GZ`9x7JhE-g2H*@z QB9~iw/nʪ!bAfyf¯/(i=ĠP9{15oá5Y칍 >ίR6ų6~׏~OKAc'[-ՇD>|z-DFo0} Tpj3HUtWLr4ܝh6zC{tt ~J< fF;^tnF >ކliXy\?uY~ūV)fԠ;cDB$4xTn=7m{0c=9SLN2ňGy;nUT~رWJVΈ\ nV*/N]vZEZAl{-0:MCLa)K*ӛS`Pt2>%JQC?1~7쌥(JK? ֿ`F+Fۯ֌Ԇh ?aJR w4q$#)Ep}?,!c:7(A\cwڪJ"'[UD]{'󈈊^nS+6oi4;vkEc8Ȱs6!77̯7Ldfn;D=EQ|%Ao^v634ƚyρ}lhDi-zBeMQh1b6*@ufz_Ҵ)q@e 9l (J.]$84;dqCj%%c+o;0AG0cyY0xaVeM0B7q{_3sz,S^}!?w FCYbb2Ži t@ eӶ#6yĠGL\$U6wΪ7T*@d\u񑙰%J¦D LD)S*zؐ'p58Xüs ~\Qq`#+J=' ;z]Mʛ>-* !sw~)Ł͋6lرb͞gET2y'?L;=' S5Tߏh2|Fn1 F\Bц%N۽=Ǻ|s{P^ZM4ٵ~>4N[TU>$_w=FMTr/s9e1S~%),00 A3F1.*z@AqSaH> &AG]q, y* j-uxŶVPPA0WZffI;V]_q'1Qi fsం"G : zAUІgVuyWyZؕ4LyewPmjE}nrE LTӖb473`z}2Wb6ݎ*tDr!y87hZjիT#ɐC]Ժ8FQ(zR4uڞƶ2ʯ2Ѳ= X& &Oq2"p?5Q!0ÌVlD]KSED:uY͞w{*]b #ՙ;Tjd!1B۩V0`ku;I}XH*<.}ޜhoɬV Kn|yq̥%e.-,fa *V11 3 ^%گ3M>8S^ oB'A8-҆j&=JVPqCEV~QhJP_j~'mNF9#ipLH{C䛕$3r{iL8='sk߿~ ]0xH7sx1h yW(]!Ⱥ0S&@Tl{ߩKaziX7x<><إJ2w׶[$P*K;H굌1ŘP02ò3w tMQ v=0C\Qъ4=.~]>sGc5N1l8,Xft#IAPHML>i(43󬺑VB@* N$XJƖ,vt%[PR$#&h^6Bdxk n&avg~OE,9p=/3Ռ)iļzꮛm~G oF8"'UZ_b0[lK+Bu3f&2ˢub\0;nsy uG?Xb5 m&WnRKXpcz_vԂuu5t/VBJ3.[R&wE>4c_3?ٱh`_vo5buB"M̃T;8%QTxzs Hh/hyhjӔn]-In@ۛHSͣMyOj+?5="/>sϽҳeQWYdOS>}l?Ŀ[l4%^TO&U3Y$\{{S+njŷ zv✌xh iN/s J+Dyb8r+} њU38mV^koh|wv<`0 ,h!za~T23?~<hҥIwo9UKRdwc? эTNQbW{{|4+6c؝0|pxB>z' 4tb>aݓi@Y|$㧹pKodfKJI^^brաOM=-_r`ئňرcQ<=/t>ہB0aj:-e(22:PP0Ρp;_aPDIҘĎuIHfYܙzp8\UUDU_Y&sjK9b"yP"'@[DD$46w~i9!|W(:?9=Ӟd*WGczL!Da ^ ,> hHƙUIyA97V֧X,7{~Fh!yٚ+LU 35bhޥ #3s>LFyNУ_hTԕwism{Rc)y5Ho7,1 ̌z0}}UMW R^`DD3nDÞ˪'W$GDz:NfFhzMVPBr0b |ضl40X6О{Ȱk5{A`q:6>wS*i~=k3n,J,Xb!): 6,X~)Y8ڈa_u Aq0atB|5{֏߱bňرc\|?麩Ȩdz&eXֱ }ATa QFhqK[7êoqQcך q.0vi1+>ݭ f6͞ 6lٵ{2uW9d:$aGw_ckl4|)p\umgDG 8'jɕU x| bXǡM<qm6#laFS 5"S$2CE9ucRdu.e$%)v*„ !gl *h#M C3#\B5cկk#4UUEb$*:K5| )J2&I Y&4 !liEcF1f3}*"Y],^R|g=K~{C7cxsӭgDlJ0M0_/}?" <SN3𢆶vaiaxTpGkeE̓gpr218yq`'(͵ƖBJ‡=fh>$S:Ƙw ` -Yr}b(~+$#~E&9,0f1 !WO~*}yw1{]~(hj"{_N)"Aׯ_RՇF8&?Vde bGqQ]6+hIHAӴAg"`p'hJ 0H0e]*14IXF2acty# lBe7^fSqNް*rءa,w:U@!u]u6v>jr|49 ]G;>Jh@El~Ă+yIc3؇%H +)Qc;#l.{W:լ❷uf5X3HM0аW}.A0 P_Z\mGO&ò[i˔~AuwԐX?E<ހWR_ۙCؘ֫QF 4eŠM_aל!^vK ޭ/Ռ3I55eҲ<. |q׫dݯUصfhlep_w;NVΘڄv]D6mw%c u7k_/> _prT%.N00c)ïT C CnO0ZEX`vz0zܳ՛ط3 . f G %YK>3%z,_4U)WAʓ`7:I;xoa61)21Y_D2(yǶ4d f!!wX)0uMGNڭ r \0$Й HMͿ]]\Y]]y;pX ϋo(c,,X)e3!N0[Un1tTS*iS g;ȶQ;Otu!6B!o0юbHy?a L~^c1R:/J"ƚ͋2M=ʎX6q@!*"Í:]_ pJ)(W"V*F"1cGk[- v1ڋ'nwTjT4>J[偢,+vkhp1-ZD1hINtTSfbSb5!L`HXCf 6ffV1bx㉆z0 4is5qVJ2XRʳ -TUkLC=0UV1ᘬGS =1Qy"aO\Ic]縹luLe*ke|F|~/~- [l%1V,N!X NMiꈜKN >;&3ha԰/=g1VYLML7͛b͜wh[Vc<Ɣz<拓CG足i`Ϙ(ɩ4ƚi5 ~5R檪gsб dcJ27[فu4c:,gfUs#"яyb6)7`T>Bqw^^T\CW?#!6Z11cH,n\ŜaB1Ά:/ XZ%oc1EcFB`,اɪ 5p'_Fk@~yRf<uS@@2w3" sIUHv4`7}j h-[H= jvD^s/#`G`π%ڽ5;M. QH, r/ _OkM\X[v IG7UHA qR4'-y}4xu3#XZZ6)-0l?q\Jz{H4z$Obmˢg[Jouž\q+5=IN|Y#QLI%XxKM+?T!~8.Ĥq>C K߹vѩEOGHToET|(4!.sTثR $'CUaaGtG.\ `S1߾Kdpud+=2äU>/0uu*]/LW#p0l/uVjh a+gqdЀ `=Āz2bE"Z?Uq:Ȩ@?p _QbuXWh-Ն!{O .RDp\CS]bz&61ls$nEYI̵"S?F)-_F>AMI(Whu?lȾ1pfS Ϭ8(>ĉߵ rh#\h\z~ ;f#+ue6l/禂S/ml[~=1/^Mz_ C:܈E)mȤvQS2x$HQq0&_VXV3X!M6.z</[Z)ك}hIG֓@I#s&GIu}1Kc=.؄ ЌCHm-QA'5w>X.ς#2PH7O^iAǏ0r +&Ap-#<h~k84No|mx%86/oQ{%{k׾ZqS^r3ח6G 5ח>U^ `o2UKisq -_eEus$3 |P[ #9$O~ўsa4M ggªs@b\> )qY<=EJn`j5%H]thV[*zRxl @jȩ,8p+NύѭBW[bʴ R`?7?Ku# ԫ*+ -S3۶U@/pjVYzw\)eP?IIF5*bYx.Kbs{l>%lI6kSݿ K/NPZdǛ6f>b{%3!']2b9{Aޫ~[2έ 4MvxoW/+0)$(A(bDNc@̉4%uD(rKԣ Fd9$ʾJWm`DNgf;mrBd6jM=Q x610N?58:1Ix\1, e\hIh#7u]4i‹2gnW\GH ێ{y<ġp`"1b4tsZH%MmSBRa*[+XZ a;TݚeH{gcA0Ls@3sw>坸5)J!K,#"ccԜJnk2%r't7muUEU[}f AVBק~m h*LeY@pSƘSNNNS;Ï7R1o<0?Pu?XB!eq10ڪ/CE1w͊lFV+GdM2}nt$f>")!jݢ av^T G~˦hD7yCJS45 ol ̚SISL)?}0FGdR9nL1Ye)# KHgB!6fhMpϡ}0.RieΣc҉Uo,Zb՛V`SL.-'7R4[y۟Q4O㱠Ut"u)J7}pC6G|٩2Tx{e~G)$1^ eZ,D@Yl͛(!)J M$Bo {pnI/`xPi#HǼnH;|Śe*i?/ɰWokKwcmemkmoo`fR b'/bm6ƴ2v_{MTڵjOrR1CBXGrlM,A/#ɹMw!#&L"mtIF:fWLw[~Lƪ5RyO"y<ųsr*"$o!&TCDUsQg=*VTNkL}f [yٚeK |pF1^ccvubfu*"&5Q3jIC7n,4*lZCgΉ,@&ܩ2r}>eoNSbig񵉹C-PB;[pwyfo@'L,X%+r8 QXFR~-:p&UC4LWEId4q覰0e(#B/0:s##qO\5] GeP/Z!XXD?%?E4#jl(O4\jG5}tUTL4?!vC>"0aFG|]ph́[ܾ1 3!\RP:tDž s0΋qy4fgXh%N*/?^gmДe J\.+Rp ry䠫([ #C%*K*8Rͮ0φA]Fp{7߬іokO@kM n|o7Gk2C8/?ʨszf%<ash-Q_T2dX,H4bֈ& UϰB,Ϳs-47Ԡ|6.(t:(t2Oo4; Ȗ|24T]9Zc -߀-?eYQi*LhP^PxYub烞a]<ɑn-ߕVƶV/j 웨.>EjMc,N)@p(Qh-k)qC7 O=!:¬ǑJl6Îbt/OV^SFʯ"5B<3$3q-H ;uAt$GLTɜznڃܝ4($R~,P z4l!`KxqkՋ!jMS5}˗r Owi9!-w J kr9e E,'9g`bHwڝWPpkɧ_k/wL\4813b7" Yr7neå }#ߛjj<p`1AP1`F 9 *N:Q.I/C%.l~Ɠmio/Cv&导6Mҩ [±Nǯpų92/dtSH^io84?Cд2+|x)@#yPݙ.,U$}%տWf/EuzJXv\b`>M.Pỹll=bk!4KP\k4ʥC8$'+{ƬoҷtD"I9~ErfGڭ_8G7Ad ŊFیJ`zaO{EDtlP Ud%z;c96B |u#VTv/ꪧ/]YEֶï~-}/32nO4jgVT{4n5U |GF}jrRp('èDھw5wޫ2jŢ=9C[;!S\x&  Sm__.0mc˷]G 1*LMtR]/CWFM~ M*_tQ0AjK=3P \'Iƿy{vp-pZJ;L^mzHR)s}uy6ŵRQv=݆.Oaڀ̗0d6';V9LC>vt ~nsJ 1~\}a'y5)#6Ή`.M=6S))S/Jrw|a,kφ/4ʜm>f# vq(0oۢ 9 Xe(4ӷ} p۴wx\)vQu{سLXVkv/k`@ (SYLRJaDjTR%ѣ 䊷;54+ K47JUwFFSHp;MbDō,w7774.z-Z $ƙSM4zei%$0CW5<:z.oommi>pw$hF-Kz-)Rȵw- E2;"!*Y 2`}p'Kt "0^8mbAX6)ǍNLcD}gPXYm)S e*o;a[)5W"+܎06|e)GAš+*uEa3TBU#BSeN40o{ZE,(e)w{&\aB hǔ͜9*bE\yt{" D6vyDSCK :ozЁ! l<9 '` 5EAȃ4)!X...hHp{FcZ;SێzҤ!BEH4XC/y18EW\t >n w_|@) P&^H84 kyy`BmNIQW58:0+U2Xuk)1'LM8ل9W5Li*ÿ>sޢ9FwS)Sb6=!aB /W!!v?B 0u,cBl !si`Ѻ o`8z^+5Z!`W^+lb2;. pշK'7TkXgQ:^.1XrH!/:̘tFPwM <g] BI?>::Q~Tj6DP#)e!vdl* ~ ƓhV2 /|_i# p"=ZSĆiVIPU{Mp^`kln dB!R}P4Y>z0gH S(D X."`(0 iymNL[U;*I_pHezꛓVA([G P0Džfr)6A|Kjmz_D[u- AI>dwAe2^D յg iO~^inBzMx&ljM;|%fWRtTEjȔ~M< , aih/֦rGN89pNc܈4{B !o1D<, pY"/gw bg|dw]?3;eX@!۾B: #=* I\ˏp7 +!y#ҕXqˆj΍t(m N] k8ՊNs{X?(E ]A@dB)LDfЇ9~4` 39ӿO.!+*{CjͣxXtAM'Gl0ǃKPH2=l 6o FpZ7F& b?\kHͱ] ">&A ]bʋPވf> ooC E~\5/QYsG޶19sMp̿[<|^Y߶_"ހ7p1Cװ^O/"WfA7&}H8S&24\'7Oќ(Ihrڣ8`'7+*oϧ >W0>BiWZ=UV6F6w:vkyE!U:RNP0Wj*=TV˲4B4Hb#3;:zRXGq*ku]0_J~J;Lfwo$ S瓞Ees%s5񱑌!X}-C4L.5sta1忝 0߇([1ԘQ–QUWށGALHd2DHfdfW]#h0#-),#*Q~ {)1#G1H..22& [7XIJ2e-rxZH,aΕ ]ԠSXBO33Lv9JRe+9k!cX#? k@\y6ii~lpWESCE~{\Nm.jQ!)ktp!RoqVbdUUU\׭}|!Pny F2tI[7c=LB8n+VZjխ&bXgN5UXsn6X)BXD}#hEk6lٳfŞYv2ퟖ82eFniTs>`t', Db @$,+G^"1A`! $H "My_ω ⶶw;bکI$aZ4MBTرg)=Dݞ- -VMcMՍ$YVvLF0sI4+c*("/:^KmřXfΫgr 65*qڦ1t\ʨ/faR.pcOv[% Xco[<Q1覫H`7=U2TEŏN[TV߲ѓ'ƄDM&Q{+lVkCA=obB0Uc=wX^vtXMWl4[(CH瀇1py~C"JZ {O e?ˇjglZ%SzcGwX_,#!`λf< e-MK$qX|275/֠[ N TVш`;/xM#0|S Lz7]TUGG~(yn, .I ]g`L=D޹PDlKW,bly>/^Asxki~l653P]=Clt,ƔfA^ZzZWrs]q`2<3EeH"i*E2:J5g^` ybD-~"Εu ;xSWHAQWw'"'K AN\o1rC 2oThW䬷CՁW q~ek1[ =u6KN)3*1<<΂G&hOs>&p6w{98BSu!]5~n1X2ypHY&A<'q"G:GJt@ ;Wi*7m`|?Ȋ]S{T·*ȴ~`WLr;I +,!Qa" Z!^$WH.EoT8s4\ h? N<~?5e8ܱ!/Z@哐2)?z$m=H@'2§_ѫvi<-zڽ",{…y=CR醎 FKPrv]8qh[](d&=nctizai4k/(b6/?oB`[.,:I,+4+%dO{n%~ޒl(` ^Ɍ2Gu֕Ү]`[)zd~b0̽% _NA]+_tR е~cr0=4!ǘV{Zڙ{%),9[(bP(須P*ϮdExҊB- #]د"nj~F̒'Īr0&ӄEֳ%TtI)t,@( aQQbA䅋 oܱu&7]ʣȸln,^0g=|F=CAǮUbCUЕ5=@M^ؚxL,<8ZSkodIۨC@%")9Nޅe/߫Ttmmϕo &5Ku2VMqFOwlB"miٞ۵o7Zt&0too)M>:HpXA N6)=&f6,٦ŋ1l"d42E_i`JI(B]) f9M4. uF_~U5UTb}*0! 6haE5$UX8{vsIw#7S{m\[\_^՝5X~;!(jj eX,! ~vxm2""$Gh?}2~*eVQ#( `lM;2#p3o0hFH&i1g/`uN&K}_"LM4Op#qf0Tcf;'O9XJ2`;\T**!lzufW7䔩4ʚs7!ϒʼnJe.>8Yў!>:J2=l*B0T2hG*= TYԬO1sc_k+bf6@և8` R9^H7 np#96H}jI(#$b P~#yl w]_zx=&-C=aM3Lܱӆ/ֱ=V}?{OϬh:?޾ML3؞%KʬP e ?َC7\- ~{f6thmQ"#M9՞Ե~5 8a6]yb*^`K"~~0dAZ*Qiv9]>7Hshc?]+Úzg7_Q9KV  <{'kHsҐI[IVSvf wPg`r0Ѫ3'.){ǝ,*z4> {Aϡ]Wqhh dD |ȱk?0EGԦ#jy]^v)Cd~Oy2C|MaTZa*L*CH (1MSSkr+юP}ؽW&h{iɎ, )Q]U7dnNF<//KFRgi8LAmn_Avi\ ki25Ffs)z_aq eUeL|SP?*y?E~/ypJ HxETe|GN> `PfvmWMZkzO1Շ,[Y#0ɥyjZ7+*Gtm.c*6NAvo!39R}1r3G&RV&AljiV1dnj@@d(ܐ޳p5S7SvYg|$46m#l\Z2yjKl90j{t  YI| YSPIJd$qdTor¦] Wyu/#ScC`SH`f}w>Xx؟; euHdr<.}؛#~܊ F Eɿ_J^n 1\b3ޛ {SrMkF_|yw9@oݶfpW88ڀߘVUGkBs>Ik*2\QoQ|P_6Ȇ2r0|MR sIV 5) ,,4[k+/3${bbxQ .' ļ~u wu4ɴPq9x UT5EdÏ!#QQM;Ap's~Dzk9ܤ!$!r"'?4| zX&;&H@aXx8do#<g3Ojj2x*x:Pe"FLe>7h>!h}r""--Q!XCʧՉ'AkBLzn74 ib YfpaTUld=8i:{Cj6l[[c=x,9E"oH2MH"FmLnm -[&Hl9BDCJtg4 )o@{aL(O_*2;/35^JQc+~)u"1yK&YTV_oK!qP7Accs73QcJwp(a)Kn}L`_&+n.2 #s}a0ºooomod< GTTZAv4?#?M4XSFaͥ SLix_mU Ux0s̶RpBhd խ^}/hy%欬1 :=.60a!a`d274ئiOfaʆ=mhʈag⚢`6fymtfo#3FrF*5nVQ61RnI+K(=sq,`NQk,ceM:{C!3-u:$h5UQYy,U rm{1,6l]z;0̀*)[niM{ ŝ6)I`=;P m4ˇl1_7ab,Xc+]IcD4설sm b㞑a:BdwKvرb2b; "BϟG lrRč `[2!OBGF`mp.jxYMH7.g FͷxyσIA hyR\[TGua #v͚z:^O &1&ER0G 08SVpArDPLߕ ,.fƆt@S[0e1ZQ?>N~?~< ̆ < 7%p8tæ"Ӯwcn!+&<_pL_A1І10W_%\'5}\KgH*AevjB~o>cȀW'J 5ԾTUěEb^u6l">[].tW!6nہsnSW)W¿gԺf*xm= AHݨޏ\=W1JfzgF}Qdc^,-i{)H z8TJ^-b/7EZzpL; 8z 팒.H02>XaH?,F0-?~wbzvy]L2C*&S4i. 9{,]SV M$yHIqhS,pb%P 't D6%- Е-蹳_y!ҐRP-%V hGD/HCWHg`_1jq :~iW`dK9㈵u l@d F\/#owG8{&ȧ`֏ߜ\wٻOb#M%qK\l[JtXfqtY/C[+ѧ).K8QF>^ .k@P#AD?#!>NÔv#-׳F ȸ?$?Ⱦ2VDkdSxl:+WV>rT۱M07=?15ܯ{.bя/Ip "ڌ\ݩx~ll5ŭyASB^{^Ʀo\x.k$= v,hYYR0ł(%%2]+I+HZ ^Pݨ%xwM1mc_"'V8Àyl[``cPi*p]bdwᶅ)Oבm םɲp)$^fP:p_ 0^YSGv,#Ycw2Xp=J-e5y]gKPX4b?e(ǰxكIfƸTg̕4Mj:Ĕ)FQ4Ti¨i(J 9X=x nW\dDzo!߳Cjw~ãXB!}s 5sO\Wj xH0h|aR*[K0w(L#M7wRݰn.ŋlBvhf/LPC GDDת|/u gN3վ`ht~5)X}J/[2fkкPfzY+4K:5}`ހ׌興QEX",Әc:) '*B C3.0|[H^ǁ؛.M=TM4v,>'{*G-f{mj՛VV+ 6_cqSJ*i cmV B>ǯmx5ͫ6-Zr!g[g)Sg989RP+[oMJ1}QЋR)Ks^OYgV-Zbյ909,%A]L pYJY>=j0kqcF1s=.AHٍXcGtzu NzJJe߶vUR5SE%BkkXęY.4\ !鵝ɸڢ CžްZ*eM?on3F2aV5!}!0 دZ` 08;تn%B0j83WQ??c~C_blEJʼnJmz5"Q BRӴO׃<"axҰTG׼ XUIQQw,xhz':*n"R~~Qc)K}F7$c)mt.nvUTXCmۃbo˄ ӍcGԪ**xC`wnH,! [nv_"VdTG^*\e$)JR!KxѴG+` `vȄkNk1=.w=pjp绕5%U\Mz? H 8NlV5}qM j3@DD[L{.X-b4M>R#KnqY,Zv&:MMn>< '^q*T u?&˯cJsUkI} \ pto;ʲ҉m*3?۞2)۹H  =\avaU)[aC:I^[9l1AV2 `.@#}(4>:0k%(,~1dRa"43qL2<"ƉfH]6m8`N|u:iw k9%u-g^[&s<M^Cۮi8'ti7b'@11Rb&-jDV+9@XvR +\.aT@} ߞVSFۓ Bos*ohlK65&-Zf"j(laTOأ97Ai B% uۭ>^b4"y\uofSKf_(7ϳ*DNPi"Hnb}8xis3c P84G׏?L-ezQKˮJ ć\: j^hnĨp''ĖR!/MۼjHg󶜭,;ضPg̾Pp\! w|H`>\3NT*^IקR+*`qłEpqd6eE$0vsAC]LDRGg:7BHZ9je#1oIpO zK[zjoI>ʿ[-eggߘ/ֻcqNbb!D#Yž_=8|yajn#:mC{_tEMOe^JxxI5[yִJ:SEɻ& U`ɩLEՓcejp@ XTw˂a(cY}7S7MX S E -k`JOVfɁ!%k'lLz 5 31 *V'ymsA̹gHH&Ȃ:S?QX#AIexf*>ϴ0oY|f1ZmzekňգEȟ:ZR~ FK-,ǝ&reSLmW?u kW<1l1hi`څfz)(CЧNmNX|{L(ƜEs9UҲ[ ߊqWr}j<e|42ٙdeur4EM1T_=!?U!:A/<=-"lXwg!sb3xV+W:l1mf5REUw$;Z9),c)XcImoXF+)JXX(c;K#*cʚ|^ 1Qxxe,XYkg?ՖڦlXvEGKyXj%!/oԑUy\}€z܆"f}LxTh0ypac)FQ&\y,3y1ySHCiH,IS3|8 ]?M/W)jBXs0g\i̋ ĵ\ =KMmmmP}f磐=a}M袣`\ƠqHF c\:1S|珴3{Qt>^ Ƅ3Lg]5Eឞ>[e FJchkb]N fˡaWO⮾Q|&)~+[Q8B0tdL^c4GDf3Z>]$tVRx\ŮL& ;UVfyC?g#^!jl%|~8Qga!$JM9s@<>*-(E\4,\&q2r X, Ug ?'| u 'ƴCHG:@~2AOPj9T-槻4^U^T,à<aOߕ7Նu#ǏP%x_Ʉ2y E (ԪxFD+$SN+#ug.-n慙mMV^ELg Cye\%!yq @A<`LSVg!Gi3bBH$ze>:kPa '<!Im,}xE) _7`:,xʕb wlF*fz|T/#-65sp@dц-=NpMF '[;PsBd֡ F@>O>Y\ eԑrϓ˿ΛSFdt ح6YScRt3F'ϡREr:p߸\)Y^Al^m]F3x7+(*L:xŨx`>YPf`R֭W"V,ysmՙ.֑>NjN,%d])Df\MʳB#i '\8CKZ΅t9 W&:Jb$5O?98' 2+s|8_:FЭ`z ]YۗMn<^/3ɳ71D$DNHȺZ|MjL= 8We6 (VGazRЍNHdLȭQ}{nvv1XAcsa{\7= qHh$3qCZZlhGbcEw9-: ϩ8YxA`/|UZ9&oyoؔzaVz}EN t84#Wcb>|jD5.I˳2Ea=Ma#)K阋.Cq^Ȅk,#~>Cdñc< PC.!5acUQUu& 581aG&/yl+Q"!~q}lP6V1q$v1V1߻th7Fx4EQpH**?,sEUBE\0F[BHBp:Aa*a}y(Z2S,e%EV0csxY Ȅ~)nq  y7CJ)lptRN|asoyg@ZDd%bBmOoUa #0.5BB#gg"&d9&T!/M0N'j"/ !/Yuu4L愭M! SUK(2f{a! EG &~lT!i122237+~2|B0c_=x!`"cbERVvvvo`daR1Qc|lS&ue(%{3 *?ra=2ni  c=~+ٵm]gMi~ 0QU϶˃]Qc(>gS:JQִ^>hF#Ǹ͍CUx-5`E҅miu77g[TꨕUT4! _x+ 8ڀ]~ M4i6/ӓ"(g_HDU`h`K7<e #m0r}PX4CʤF5DC=D#Mc0֕s{̎4>cb{u `gݴ!"~]aj`>(Tg4)SM(jcR3]L!d>[nGl|I5T4En}l~ȭos{eM=50,xV! ;SwH$0m|MʙS*i;70cMU׾8?ѴC c /uDZK a{G켟jG}%j}ǹR uwYmc Z\?C -D>~@D$I?9߅ZJ&H6Y8Y/9):ۤd:&F.F,͞'D f-L/.283U A$qB1V)ri2me6~Dx9luY ظ_)9ЛI)u|[jNR+k9Y}^(`}b=۴B w֨>oׂ^h&˰.R9?Y taF ٥EN034Ta9Qt`EҬJ9}ەd%Sg*OڕNqw ݣU#۵Z!dQmR4ܸwIZE_`rh]Vp#?%"c zQ 1D { }v`[û\{A Փ`לw *4`郸u:<{ݗHW14벵h#q?5Y|1W| VjC&[{!4a}֮<2P`pK>?CiUobڨ M B̃uT,{ Ωƺ&g69y$x?+laCkeyۀmё) Muj$B`&En83ʋɂz:fݍ'ne3VX+c|Üx:' { -όfH`),_}vJ6%VV9kuQ.0Ke} H9XќD$C"lI&IpSB,)dzm+|OqԝQv4CN"֒撎}Bi)q`>l4%堭/z< I*ATX@J]QM4 n.[/+iŏ 9GMfrt-fO}!54B՗|q}nn gɽ޹϶1wOE˛UnuSUڞK6xQ]ܧu .E淲r#N7wx\.LV%s:aŔa L)-hSl7I?~Q.4 {If 5uקw \Ih]@6M?<=.dqҳx%!wox^Ǐr9^j2Tb'K.m ]JRP1D?c(/.kKv{3jL2Ej,/_VT4U, QwySMXMȀXUOZ(s<^c=Q8,! n|QR887 %U_rIy}lFF+A6w]oUYU*Xōo!d5TU^n5UEU゙&?<J΄8irV0!z[H,VO:0XAV=Uw8OdX*" hD"4U:n∶>M2XR=?2{xTM֪USIuB #23;$bm/zj;BR)u?Пur#bŋ75e4By"~w<>xH7XE"wh[i 0"L&_}-g82ymWgFPqÀ'z 8Gp?|W#)Jah!XCM_wg˜j-F 6oPF Xm kfO#>m)01Y\M 6~(+5F?2 ;JȬf)|[;E(ƒ`f>G̽!!4,ADV3-Õ\ʧUcPFFͧޣآQ;ƬxP T3Tu@SrГ騐9#~$,f|:}RKChs;5)QpKe2DΒN{jC'Ԑ:$vf?= jDn 89i̠a1C)3a]tcDKw,b.}^U W(PENuFcsD0NF| UH|TxQ3_ޏ6f#rh# DsDxq-P[@Yx*3Χw݂u8H 0Uuj.YWwB :܃q,zv>C;dlӧ|TwBGO/{=bL1OLeX1r 'ZH:Zܬfz䐗*w0dcEiM,a_ޗ4g.s\ =wg莑E R0hЈ+фx_ ,riMm>;2X=.k S9*_H\R^ ch⻢hEv4\@S*< BlOaX}z_1,ӌNkvGWk)V[,0mlk^1#1awfk]Ǣך%6,Iw<nvi?܉ ~p_THd6nD2eﵴJuᗮevjo:f[qeezПCPƯ365Ed`|4PN18vH^;Ȝt m|s{~ ]BW%ZKtt8S/w5(a+#_h7kV98с4Zf)%~1ds(<,m(̭֤&#MM?:S4=f;C.ѤD8Ptb/7w nB ;0Q=eEQF*U!z#XŹ,2YhK6!TXzY >oQRud/1UȏLo/UXQ)?y9sS^wO{(*=[כwXMa~Ɵ?Q L:hvU{>l1gx-ݫV,Yj<ፅG0#6&Y 8wXF1gB:52dÛxUT_ʊ>MǛPe\јȈhH( ݦ4TJ˹TTUEEiåI > WIߋnm3JT4ʟ=9p&nQUU=yq7S)Siw¨> 7 _I oUu [f*,!}a f<;/戫ŗmMws6&""2Hѐ X-3 xMaR daLhjO, fX$,:LǹIU7*[jMֳ5Le iBkB1X1P]Yc=aIm᣶pcʔB5#M;@&5fc`f0 ~ 7TU}]X_aDcdl(3M1$ k;UCU\ {"u-%b1NGګ761;-M=бc'M1i~}L`xf3./h(J]&_0xLșZNs:<<USU_ `3IV h.M%vݼսk{|e~_,=ӘuЦiNq5GsZpo)ňʛ&y1bjv?at%:au~%v! lL=VQH#uم|>B1 }LJ047X Ğ,k' hӜZ%(JQfMwp0q\50|x ֡u2 (llm[777777-]'_!(1sx[Eő7eO88FP,yJ =40X4lVaͦŋ6,~]tC!*28<6%bmO5(B+9yvaٓ),e)nyBƁT*cLgGYӘT)]Y ܻ Xuiɱ!~.'}ƚlt|u=fG绡n,ci,'V5**t52ѱb6,Q+[>B#<47ZΥWuPˋmXڵmV 4[2t%6M4cP`4GRBCD_"_֮DT]qyiU jjj.|4OHAR mf)1XVEE#RvB  8X ʟ}ʢmFFoz8fzM1;6N?c2šGAm\ ˬS09fs΋RxȻ톂)$Ȍ|ɴ yhk\@MMpN)׵{Z=9\y57vy,ǻ}2y=>|I  ' tﭠ0{)bYMzt+*v6'sд<3:"1(ľzO,vGb Y2)e8~qqGzG%YHM f5THm U m/^'Yŧj B@߁= TY'BL`88WK=($'Z@뀰CKpOdFql( ѭ1o ?_}):'9?|l]eZ4yz3vv'vްݟnu}KyoO3phI괘X[Is&j2V N~(-x D9{Ha(|!ݐuO:[r`م'_ 0y!?D4>&&ժVL"dVk+k2!f`)ɚfK+%5]B~$f$*G(SE֔ Qx7jLbEcd0u@Nh}TVpHy^DꤪDU!yPh! y3yӤ&>a#fkϷ23D J9QWQ(hHϷ!*[B3@fT{Űv >OrHhgz~'\m7*i)/x/!B(uCDDDO #ѨR)JɌ_ ##c<վuc" F5H37{T>GUSEEC|xERQBiTQUurZx/ii sH1t6)䌿Ibe1 Ţ!{! '3BqT7cqMTU|}e)FRwAN4h;BōxѴ* G9%@nF0w?+dV"" ñCM#ׯJRe)i2\XXJ0#͉DRBD{|dT;̞Ch3 eq`^!FDh>\̫JKQ3tC+Z&a6!zn!*׫lLoiL)4aAOH QsZ(b)*yH , lZB`9op6Xǫs=\6NlFP>'gaV M͍nj KdgpH o77 YQBSF,wriG>ƳU4(M7캞vن4ƘFTG,^5tb10}WDQ,a~]ދ՞ ##=} B7a5_s>( h-G|loXjկgв "T4V>Vce$Ϭ9#dFhin1T;=)!*A8>~by1pǢ&a|h<К×7;tTǻEIcіsf6r2f:^H>h(0K"91CΒf4]BT:pw,|y/M*2$?h K%RNb26:OhHF878i-UlYC>GhS(|怿%郠uoq nQtU\d2 ^Y]j CH8~L|tsʴ% iL(vtJN 6i0@?ZR/U8[A QHF=4>F{4P`:Yv7Ҙsu@!(gfX)>ñ UUUց=yĿ:!DD}g\Q{kHԍi&g&_eNКSi³v's](cۇ.(L_^Sd*9D.0`/znh6?ǔ = ot"Q6W ! 0ҩ.`{ar3Zֿ g2+Jb,b\R?(<'|ViJ>ܵ@U~5gY- u9+*x~XYr)1Ag`W8Qf:gp_|%}E^b1 cÂb_cTj4DזSj& FpRLoo|j\)R[օbx{B/Ċ&bN!ix7ј&(/B>>NaƹĤ'ƞ_/l~{^ D=3j5dBNM ]' Lϱ)8i6x\b$:3vowa ˥@mi$WE3#]`Ga0 h<С@} ,S 7@08BY~4 ^rzbUhuGeOfxX'P'-ƌWQ#7/D34Lo9Άݸw#8fIjy]h5T^Q:o(2~,#+?OO hJT4ʗ~e!r(,$fFWaÊQeQ "UU}kob8,>-mCYzߘ<@ao|OΊ||›xȆhfH6O}r{ȷ~_I>-hF0# ͯƺ VKgjk)WtUczuyЋ]IWELbG"sbs1V,2a3\O?|71!\PPP rNddpUEC_'!ȎAQa }mNQfn#3~Y {9Aϳ7l$;:h`;7N71QWivDž/(B"tVmq(oF uV\ܻ~MV1Qs5h555\W1!ƪj6#D"4<A8ED)JAb^j7점asev1,ϣ)JeĮ[cFuUuJD' F H&#~fv3P2L$UDEb0`6>DXr"A <-p FR)N3KT)bM:g4ZoM4)J*0pj+!U"a  ,m1fY^0UOU60]72jJsq/I0=J"G3^ k^m9wf̬fB.$4wFB3ʛ фR^A5FcReog p2#3hwvTU$UҠ 9kȒ[eo?HLqet֬ՊRe6fNyau~YucM2T5R1ͷf͘cFgXf՛X7䵆Dfx8C41ϙ@W{_5c+MSMQA*-,>nXH$ N?s`55!"?oeg55/K*tvmZj՜I΅F"Z->Oyʂ X"Aa,S-EJ,QMd8S=޿s;YjfV"'[qmꤨG*mMIQVH~XmAX$V4QW?)dB{'>`&`sR2e.3p\ (w197yv^Q(fVݬbu흝gyZpdϙWtMcC뛃 I>'hß yuk6Yg6,Y0aRnE`ųѽ 8>K岰Pॲ#A+kٌ޸&7<(?rqϧ9 w&IS )q$a `WViƝ3j2ް~WT%0DMO!DY#Ki.J8{n_6:򶓗߸ 60H,iT>'D pW ^YJM=Ωtq K8Krkrئڏ/j_?#LMboqblGG?eiG(WSgN+tWm )0JEx* e. Ė 98=$.O l1Ⰱ9}'0q1)Y =q(bKs&7Li]Fˣ|hbA|"KF{AL]Igw pPu5l!dD[v^ǣB–#Q軚y%/,_^!ޮ+k};D錢 H0 ? 6?Ǔ #ga@cP"fg8_5X-m#xqAƽLauZ}{| 1rx=W*=7рT֯[u-ofkMĮ\;q,B7AWBb4b\svv&K:We~@ՋbEfYDdɞIU+:hBSB4)M&_fZN=_"kQk/_ ϔ뇮½uhNV,[l*﫲<"[^`sڐ;s:9YFRI9jpϭE ըB&jhA'- <VLFk3ܷ7[\7ԡ>YXp_A6Λ]g} >?|I^TB/#җMTY Sd9eN 3Uf;zB; b|4Rv;_&2tZiʩ}իءO[ 5he4cC&YGBg׿!!l'czm9Uճ (sޟjΰ~, (&mBA.MeT2Vz}z2 ӹ7\\=Pa@b8ŝӀmv5MAsXO y֩QDq¥uy, af=O=awǟI =1L}7԰5`(p:9ڏIs|&){=Qw0$d~G!1l7#Hh}w{nk?~T4E]#}ǭogPB1=b^Aa"'w_k7ci#!M0w?C|_+ʤ&`@\!;+),ve+j[U,$;kkkKk+[l}o V\ JLiNn kNO%<13FٗQ=2]=zE\#*JD59E[:olX␎9;%ÎkQZ!PIQ.IBkZ8Hj d\'xL6LLBEGR4#M~V!өd6~M]!GIɚ(IRـP޳V2d/|vQ4az|FIGjAW4cc4&ޗ׶Vvv\BVvd@mle{ZcMǘ5.aA9BWa~8CdRT]/6VF^ ΣN~q[m7uU88^Ș(y=|&P7=nhF q ;9Ϡ0 ؐb;?qO[m}(FH@^0tvi(dx+es<@|?]EW:t0vӭ}gvZ狫u;Rޠt4'IܻR2F%'}]@DvLw/f|/"C?i&Qiz~7k͇%:>b*@U@n :?j^[p7ܩP "FFMhB0$wǥk(ZE6H̎5'p>[wOW}]<2z6G FI'csޯNj.@ }}\#dG3,39liiL'cgκXJ9w~h3o&{j(o^{10Ǒ;Em|Y٩~b#&5EHJo"x?E]dx:cQi;R@,V6N]lBoܫX~ rQJw-xqeS,}cMdN^U*1bRJW%!_y3ƅgd|>ߪhΨқT*w#CYbRC_U*Z~6lUZ&%m1|pXK0\þcX <\QO"8|\uT_C׼mF:@g * j HůhI6p\5Y.!.XI+#ԗ+cu:ۥN@vwN+[sax9+_7Debj\ɶ?:W |ݸI3CNjKSV<i]'W sx"X᎜#?/)]d{6UoTpem.ibV۩]~ ggn踫ÌmX0N¥kRۙ|Ґ4s~_6^IfcRRe.TNyQ*+ z P" 5la`7228ߎ&Sb ,c~0101nG~hal1?n .^:q~>t|̄illXKFn73p씢TȌ]B#-6 3q@{bѫj:ԋLpl ~N0@qgÇ֬ڳMV!sgr#Y16,XXYDFѸ*1Ccgpq_OMb1c??X,.rh nhb"&TlS cbů#}ެ!u.eCQ^)SN(szb38Ŏ!a5ߨW{ȪSc|~0w9,878oКSJT_ᲠE4)S2^{߈>~4ZjūQs+!n`f,cWfU%EU7 =_";T}/Aa'NJe1X,o%4jƋ̮V Qk$-OF%(RjF P1ÙUUUnyLiȴNCaP& O[Fy4H9|u +yʛCfřYgwstFDf{;M蝈Hh[[[=xc6_`sxn]`>śVZkԿ_>C`dŰY,Jŋ\bj<MxHvhHx3s;'yX*CeA譆iZhSlj:EeQH|e3OM4ٳNÛR"#HkN"&6BȆf\UQn{)eL% ijbƌέBB={cCHDNcbcƵv5fEXGdM0}9elYfś57/"zV[2*lSb'v+UOcHB7Rt"Oz$ppqM*eR,"F4uH楥X@aʎxB|cu%;Cy-d9:i)4h4yk*iRIJ2({+cj5WR:qn'.04s ܰ%HCуƋ:N~eXF͎mtʩξdSTCw[ϷX)Aa^qY$!2´nq1~9MLOk6!"}Li TR oFj7U1Ww)wةT4TJ=>j&aqx=h</4ئ6(Psv:ii,ZoQ+ϼjy+S Fy"ܛ>yv0vV#m<-. vkj${}%3ƀ9"1>P3Y>xAд;)uD3S#3zMO2 8 CdIwhKeE4N-/?4ڕ*X )?~G s>xܣJyg%i\.'҃ڰk;1vG'1/R_$ۈ{t"=Mr ERboua3p(@7plGTeKNq2>kj9.s54kj_N݁ge3+N (3MP4 FMƌ4ޖKM(RyF%H{~IiMh %^F%܅"&(yo׮/oTC l!-3n-2NQ$t tT4^NQW}cSiD% g/Pd)u 0N,c;]0ev%bM gtԕH}A m1SA\QlKu؁[UAqfuELKglwu{ѵr௪ jDd'߂40 h%yOO=f1vwThy gײM6RfׯK~L,aĨ-էv@:i.~OҢv]H61ʼnzx{_ˢ&e{6y۴{^yY:PBN/ZR$+dlԩ<'F5]f*,~=`YpOW;o:1'84g՘(c`:iIqh&Wt>sV?^6E-NboK1Q!ziI 9Lwо7h`Z#]ۼx$1.ݼz'.A=UlEeUXJ,kǼGwJ{H~++pֳ/AgYkn.b.TRu|(Aɳ%=#(@v ܊hcك:1ÿ=yge!e@X!5V 2k ,sz""'nFluAA*-dn@A멿B+c͛ `7wmUb}R|}"A1!$!gwuq4bV,XyJҏXV1cG! rHBNnaQlHo\C.`T? U(4L;NEB04[F:Peaibw\jdcR&n]X0=_szc.ge*є%.9.1#ƌg+dTTU_uH#IW=nl _ݿ֌ 8 j=s[1V?)e trgR YpB c[}m(˗ZFT-FRaYӎ1MJvc ;;=9K-lzi c Ve]]]]]]]]kJָݼ&W;z mmmmbիkZdv5g!BnP!QUU<<oCD/0!v*ކ10{M4,^oAsKUЄ[Vq[qH cSILi704m f1XB1N'0a?Ѐ0Ŗ5h4ƙSOr1$2ݭ@c՝řEc 2 EV2lO*\pb'o_Ux<yk.2kkkimkkmYRchmmcmCzъ '̧Mp,(1hXڱjՋV֓3mgo%4)JQEdf;¡XAa^I6U=O*)+L%&fF4(Tљ i!TI+S۫kU ̀BJZHTr2"p sƤ$ @7;˻z~[' 8"̲xb%5sN6h72=yHcyFΉzl<<3qoYNwZb6h̖@!hɬ$XGy ցȊ77\jhܰˏ @:xΝQji$LMj>Ί-\tʵ32y(Fϱp}F ? ueEҫVcM]š&[i͕$WI)R^6I󫕈b=I~3X}m.=?}J Mn.D&S9f7sAu #XA~ːTiz4W| )joP/e̒_JKLZƉ_y8r4| V|J׍ ˜[GJBj\Q' ѵ{hS:P/n ou?$[.Oܻ+-nbDne`&H~fS?3KBP0?ڇۮ7woHYSo)ږoBZ h0=]\\PGL ϵ-}ZEg̷_Xf6l%N4QTRTUw1$I!N˯ן罈1auJ)-2ǀ792Gq *a\+aL"kC1eV2ָo&Pvn[n" aۤ_}ͭ'U:?bHhj72ayX+0#0G`f?hcpzid~qFLp0yog1C1H`QӼB, qt}^[l84R#(~CX1§*s1#ሺ~r"`|d #Qhc, }Mc[ɖ.4?S 0!'9D__ն~+8V9{8WG3Ǣ^@x+,SRfC+ d>Ɣ\!B8,>Jbgb(Ǝ$D(=x9fgh}Pd[wFRڞ QmUMW\ VR1 }j,ƳG{_`-zۚ3=] _2!+Ǯk%SD$K_Q:BHBO$*E4E\gUGZX6,sUTRR)k7W!+6nL!XF1N&F>ِ0MYbqf ,Uv1O8}s")uLq ,XN`g0M kO@\yXkLDBDη,f<~ $nBB%Is tδKK?mčaD!緳b6l:;[6|NmSfիZM]N˞-=44N(; "tե K10yH-ETW ~/ ʽ@`6kֶm),(YԵK%9-57ZسbΚۻ19mfDw>Fᚂ!i! ?aĢ=`?OR)K">LT_F0ߔ6M$>ԯ9 /we S/wck|CcdF<ٕ. 2*. Ha* )FQe; ` ]\V_E/qO4m{Ql!K/ sܪ!X4#4a)܎DBa sN׹N 23g0:\xP#'W,ٱM*0 !L[X?]0HA!kg^LxM(?a>̕_E%xqgc(AM8xGYvNo$5;2Z  B)! KW{d9eR˩!mD YT6r ZNP?0^\?_ybbFdaC={.?4 ?)!`JWa\x6Mko_ԹSO3.puO\,{km})PaW4Yr'p>aܟU6t @ ;ZE2S(}5m<臨 $-=h". cv \P,yڼ;gC`PrO.:c׍JK*A@]LN4Pp>)jCb4 djv#E?Ev46煚.d`szaW͠vxR58հˏm$7YD1{nn"B 1\,G =փ<7@W}0дBgL|C81_4a"v[ |c+9Q{ ƀbt֧:q `ׂ:V+v;rP+o,ַL|$,e9R .4caJ8ڗ0\XѰ!+g,_?`ke$yOçeVƦߪcw rq0qoѶ A*v=!aƩԈ0zm+P3o3_Hv4+`4r^_J y&Haw& OydEEC}G[xѴ;iX[ %yġe(lh= >۾>Z@)1NБ3BMh3ޫvxYPO2nA}[]$Ugm6q]GM뾶wv|&g0j6miD+Ƙ;a-yдoˇWp^w9IG&M#Yu~lny[6XK d麶u4=m[>mf[tlĥp= wOc$/ /,%y@ilP7xꐩʝ8q5kgCƐA5F}j?.[|ډظi_絲3l[ٱ`@?-[(~="&#ƎM _j_-xn9Ik7pas˰T@7QJ\/vq4|=ˋJ"'PujFӺ0*aPO@v) ~ W>7lZYֽ[]$69u5٫KϿs7cY0ZѺh,Lg z25v ,Ze3(:͞mJ@mAgagٜ܂}CŹ!Yù}Msp0W^v}Eߘ}kڿ.D:9hWzZk 47o}C<@kz-9,CM3X0<Tv#9- vkzEemf{dYV?gm0kc6(Cw]ǨW%͍{<ֱ DDkɇ+IoZ-c} US.QCMm!8۴uЊ#G3ٕQS4U|# #FK)F򞷡IvjV>۠<=s8BϤ.~wjf-K:,Q`}5fO#gwZP}s5 m(=a/cx<U{(irBue$)x~x]r"!pQFf|M,9}nb6)`<܏8XB^gxL`d+C[ +YL=M8|XAsYQO_lǔ!%ܶ~H[TYB0#[d "zKJ6Bզ{FQez!sV>:,e-HzѧG,lQxKԏ^[ R%)hz1c8?+2dLcM='/)p&cB1mmtf*y՛Vf[1\4~3";>8j֢'OƁlbcal:PcW|؇'niffgs<~㈹]('gM)Ie)]"L1b!M` dcba0v]V1X >eT6]꽋WvbhZbK$( d`c&cXL!Ac.EtvaEXBge,9͠1-%M4~".;Uj:;-e JNyEEk1.S*|3Nt'i3Pah4M5W\\Z[X\8{w6 e XP]]\]]]p;^{TK| NBeRFFݍE5<0Rdgpl!`CÀɍh̛EA5Y@s:Yٓ]] kFm6mcmmmYR,RߴSS.69C ~AE[Ia{{;1M6lmcmmm!mimmMimcmmmcmlmMmmІmmeV4,v(VVds{^Vq#)GQrgTIb@c+W SbV,X1f%&&Uh4K0fZh*1ʀ I+~{cEKș!-k_rZo'g޻ ʿ֡4Xi{Km8٦g9cτ8񙾫wZE!Ake|RmNB1vVy8n ςOsYx9,:{,Tw끘4_0N#0^lLzi#麜 z_ttBHl8idF' IA- 89y-ƛ=Mr͖*jR0LQr(x_8aΊDJ#W@{5˴OIȰ{% i)9{aAU3^Ń &% f^'vGxWpdz Tv{-I;1]0,y*M=px5P8=! ]] O:9EzFT/ʞCxWƣ/x(HR}* `z; ?}*V ʇ~h܇D_ 'L .$8hC)Q[B ڝgn$\?qoéRfί R]1 \} `r7/lz|F Ǎ fm83߹YB5lv/r6#K6-e+7kHPize0{9~9X]~߾^Pev<e@QӆvE~@ !s+d9sm*֥fCX娼SqMDȡ}DEdÿpmSO#UK6kq-0Zf+L!{LSTUf;atεfXbsef2IzI0d6|ӨiN\W]crC$%HyuMOayz2{Yh2^x_?:8}\V[9 sZ5ҥf;Ad!?%ua֑z+M,"o ,4m*&'$Wd.m~»ΒB_]d b(QBgYI];AE0lZ:ӛk񖰼L]?-{]Ncc c56= %RԘ.#P+03͑t+l/C >85z@ u ni* Znb%8ᛒPqEO;tԊ-ɡiaxA-onɳqSLO'c/F6O 9{h[0:tcҌ5c)FR0]~`Gx#!VyGĬV=~ݿXB;n{!kIQWkdh6<G7ܬ` l"!pEATkgE5U[N8b4R>¢#]g32#.^'I{33>{-.&fR//T[n)tHa?cq˅fs=o?b!]Rp?!cct:_xދ9(JPĂn&S+$Ђٛ 4V|;B2ƣPMʢ<-e`SY:PUkI ht3"3,vmJ2W[%Գܺ0#/TO6ݷݔînTKaq6ՠ  3_<1eu78Ŋm4 ]S-z!7#7~Zx zSʚz-.3[ك|l)JQGm -F;qjBOt{ַ]"Yf4rg@APeII1.|4B#@i$66chm Ho? ۪r͟;?5^Ú]ˤNG5F(Hv=x jU}3٦ͽ t4˪@,z-뫒_$,ڝzRDN2뻻#01oy++E! WX7 F1i]`[{`q`2VmmoqbH4T2b#s| ~AT|ٵmMV"mC5L*&Ȏffͫ6]k}1A9q5b8*}1G*1锣FR\.s eM24ۅFGgPfgw0D URDLVGggr2[}񜻍1)NAq m2(bWIRDR5T_cylaMSMyt=FaKa\ O Gn6D#a ,_>g0YK`跳3Ebcbōd1J*ߏlŒECUfƐm|Z>:Z!17`^iZCw5㸞z5I=3_ Lr-J <U$?u2ؘܼ;7]֞Nj73==^x#nbZ@h"u4gϪۭt[߸M'KB\dε¹l8)s~XߊC48o7Kޣ(۬#E PO8Ļz;2(Ù%9*qp!jmԱ;'z2p}rTdkK*9tR{Tu7%A*@6xjx)+a|H)TH§W$9m5ͧk'a=b'݅ߝP]~)^.ʉrnԿßt;0 QmCh|.K;] }=!c3)u.&@iG}8J֐av0 N|}& 2}`b|2G`3ɹIP:!`Ϛ&$ra: (rmetlb\^d1jMxqK>&/܍o7<y~*_t<l H==[ HYZJe˺)lGϊjUc .W!V G;ivA_1bL.BEaز-Lj ғuS%?WQ FAY=76  AȌCkvr6bg2!l4,6G]5v-1v dr! `խ0[V)mjR^(V@I7+Y` ?شǍz_U]4踵qn} .ߤYl%\ZKYFP}v{ݯROw9 fiV**&Ko3?$kho2]:nNOiĀ>II|4Ap^iv,P$3|rDF1r&1H9CLI;7>q*0sLlr׫c^jj)$[AQd,[Hz6cUF Jǫ>𷭅Pk9f;UfnM__xX7^O]')9ZSݹH7ɵa.K4j=j, FkŚt]6^M_ -^׽NI:ک}Mf؛d旳ىl}+\=$w݂zFu ۽KF{s=g~7ف+w )h8&6GF4рQK(o}*]+keЏ0qlTA.dbgwMm08[5! [Ky{>~_ Ex~vufCO[Zh 6fV Z@1OC  Tlqɱ/6%_%^ewLLW<{6Zfaa)^+J nh z 䈍'2F1Kh͓?ͷ ,90F6aO9L cM<֙9ܕZ'`2w=yCܗVZNdi7*!!^N11滮 Qc#cѧ*vV|oP wVUQmL< =fU `#!j1B`ɺo_B)H16fLh9Xs1oLЍ M>>6ͤ (el14B3Dx.6;O#!AБk _T-a?5yFR(Ʊ10|/aF1L`{[sRT4E28es6dG"]K!?_[M4ʚd hh4 f4o֥^ذi'/盿BHB71ݪ[,{*+{#~p6eG`fϘAfXUUumGac.@f\ ߫MiǬ\H׏3sop0[ppU#ڌKv YG ̇1z׍?"/XB2׺WtzeX*{n^zMUV⟢gx{FK0H 㹾]3 @2% @*J2rG61}ߐ?;LK[ 2332o.^Lɫ+:%Ke4k\ c]"s?.)ĬQ:=&ͰziG#g8=pƏf v)giHΚ / 80g W6Q jBh9[`o:g-˙4k@m?QhׂjEXw+#04tGỦ9*f~Aho14pljOQ*i8ׯR,x:i̍Kw3@ 1\?ljo?W%s€)s0^ś0 #ړ'^³9-e+puxR0*2RɉO#bF gU.] s} os( f`~Fa-بp$;%d@ &zj$o'nb g#]B u&qȑPDYr@Nho{HIv1#+,'\П!fL3#:e<̈̇~<j\٨[Euw;){X>0! ja׍}>JvV4 FF~V7nF.y&<> 8/6'C [#\0 ȺAOƓ4XAVFMOT Qr>ŵ^ͻӚ<FY&zS ¸b[b6lY²\kc ||@A:33o5HA85GXAagP[<ϕ xZ=;' 5V@F#Fx=A2`kXiRoe}s\nCXcGu3oj& 4NyQmThu/8UU7յ=0q7Ge' z!uGx {` *?tq}CΉo l-#+I4avi'C8Bp lߑdggQ&F=$ݫ߷!s!O޶}Vl|꒪92=5fkѩ#=͋u4pCTBjMD[x݆Y!`s5GX%c=?o2 i-?,8cZ(zӆ喜b??fe/cdg`v&=oKst#lKnL31j_S?#6$L|cD6vlӏ[G;+(2ѐ+Ae^\ޥȷtfn.#М79U:4mm@N݈cT2RnM2cJ{Tj{.13c @`~F]};ݗ:>x +ۧkj65iPai5II)|A^y֡Lj~C@M/X% %VYL#( \kAu5s(,ߛ:[H qXC _ Q5l/?uAG(h;Cz =ibqf.Y 8wvh!a1?ۈa&H0+B[X(_?L\ rц Ci`=LHS7}*BBQ.~c1@V(OFniu8VT֏&\17kټM ǃ$׭##s2ټ ( R+!x;ϱX`.DsCWi s RL_#= '+rv;:^yv^%۟ͅ~SgwT_6H`DV.y+Fke%[ۨtQG}f-,#M` L5`m]oQm8VV*r&qI2 !bRӧKĵ*uSyQՓr.ɍ; 鑿D B+_ lDNquHndOn-TdLj$Ƞ1~?Ap[n;c k@ZkVmn&KOHf)ڶ揦iI%(F'|l_y61] Ow*}>K?ؐw1 wY\8XngEE(ҙE.3ۇ`4Lh&\-[[(D~oL{Q{_K:g3Bu &पHJOMjIh9-ޑMiEF#h=|n#8<˦Gf˭s)ZsEI. , S"hpPuOC1u>=+qQ ' i"_ QuxbM= @]# ֚ꃡb '1/sɊaB`\xZ)|DW+ɀ$i^:"͵ʿOghs戙 vV]#T Y/X<wwpG: 7}?A)2MeըBYĴAsQ5,}+#6~}ymލf;K,rr??:  h>uڇ5tOV>~fOpR7BD}+ʁq?$"WwoԵ݋3'k! EjkV:z;4!|̈^k9ZvvCrssAD^ο{*J*|(gzmQE4;cP^&W ʳ^yWvϞ\KH3={ٝ6-yS_p f1]o0Np!XC=m9447CdQ~5V$f|I˂/7}ly쮂wh\ 4C|h zYĎծ}?m1 HP%u++׭_߇tC&,h\mhzfFQ2!UzO0ˬ|DDNV5kg>UPF0{m"7 .Uq DHvbx42p ={^[ʼ9k@ny,3h.'ֹ,:3,4=] aUMpr4e-O/-| !0׹uǭ<YUDQ~HCww x9uzMjzgn#ꑑ|aB4L7-qqm!5{}yg~Qx(b.)C9* #3>54e!o;f=sFs33mTϏM j*TV2?ZT]LmmmMmeڮ 5~lKZj9 %qNynOS*eNũ ;32<`ؙ EX$ 4ӽ]Xִ6TF}C۹Q>ݽZ˽0~ h43EUS`lhdR ?`8@GK挏"2wXp(F1z'l1C4 eU[~~}Zhc(}TW'a{N@gg,3T Q#<lT#jN`ffj3,XbPP:"239Sf""kuܯ`Qq U|?}qMQ|z8BK4#MUdڌK2{wjx]9\RTfn<ق!uѿ~lg[>d4U"yc^׶Uٝ^?k OՑFۑ!`y%/zY醊톳S]&6-Iͅ[fv}`e3ŮKGg .9q3OVi#~Q6 Z*Wn 4+M3P #ϸymZw'e#A?Bv"Mw"5p4ԣwa@5\S0?[}Yޡr{0Y/b#HHYF gt:+474 q.kxCOc>;2v1ߐ :izoD2m̿ij3@ X'=D.lau/}=Bc-p]SS@Nw֢ɅУi..ЂSfz@iddrݝ.*R$=!81Ԡ"–:4֗xؚݰxU" %mL>{;c(3s^S$^&\t;\URpEÆ*tgXA>9e"Kq>Ӹ]EĒy*2:]Ʃ:eDǦm3A>dx[ZaM q}:vJ*!!my~풉Ɓ E5c@R7#T" Aw{B!\1͔lytwq4c_Wۏ C9SJ!{߭I`.6w6Zɒ\Y~S]c|73j:ue9a-L%V~I}&{nQwA ,~^{~sC9O=6 gsJlmQi4J*d'iȿZñ5[6 PVy@cW u_JЖ[ ̪S p+y6}Rя?`S4ȯ:z*`o(eJP}RPLZIE,KKv&OP:ABΫ (?M66y|{6u|ѽ _ |ѣQK<}b5|m<ͪ́X-^Ü|쉘cm} oT$$)Mi9CwzjjR_V}B?ۢ0_f_W]eEEYޫQ, brmcb;p` F\h8-?U`@3i`Md{AqݏgAoioK _N"姮P]cp3%&cStIo;!HizLSyg'yrBy}:?DZc=3뷿cZ(o*dN: 9V}$CD>9""pYP:ʃ[i"U2G={i;YzYG͌&FgcPkgQK??z2؍v7oʨ(u`tގxtO'C} qw+Y?y<]`'naUiz_["5*<:]]ǵg^x TdZ'ely }|o'|423/[>иU7qjaS>MQU:̸sj7`z&3V4I ƙrm,X qٱsD;͠dFBbyg EB]I-Ӡ4OeHX:22vE9_$\|W:K"[vmha5fcԈfCmlBB!_EשB!oN0ζ鵵QEk݉ ;KLsslUu l΢y1nh|O?ݬ75_UECt:b/+"Ar"kqUq\v1DDM["ֱWEj|ك Y87D{0E4ʚy/Zf?WRHp ~_GVyj""\!컺 #SNsJ b3|/hwӁf` ' `Ϊ_iQDmdٵWvfF<)PH fg? pvs酳8ﴪhJYPs>&?O vqEvɤ>gc fXΌ1 KU`Lb,hГQꬰ(dF?3AO Щ E=_'ogq2L*8-.x;m VfHgZdWp+=9USpRx^>K^RV7a(_"APUݩhEi$S:~WESiH qdtl#xIt.aչD?聩@}_W=}hg)c%s2 zYC2A׶AV$)v5LzrMXf d>@l‡$n_t&!+bu/|,z3 ({nA8|WVh*v!R-6ꔿWӅPMty}%?׻_2'uswn ll[nWle\j l_ca;m B: pX.*<ޝ9_ f“qal)<\k$3>=F-<UoĐkY cBڞ5;C1s:N2J:jZ%X.v]ۓ)'t}cI~ᾇ ׷3^G3&%Vlʁ\ ~QtSZ| q~+ىS*=A{Kø6ԼM%.FُA a#ܓ?7'QEx-}1tj|^<*>`<_S]Q9mX{-Diz,O.p%tƍ{XW -ֵx!|aNɍ7_ONBrk =y+)4$`[3#>V?QS.LjE#PF|5k"Rbyz1u`0:%Mud.8+M)k}Cx#1hGIO҅OUJ4D.e$~YЊPdۻDBqŐŵY^;likabĮ`xUd,8# ۿ`z ܼ2შ~iby5$SlVmx*&- UXWE6qʅk:.GRG*XаdVHct3>,37GWn3坶WU_j=~vpPly;'seṰ~λfhjw:/.0Xf}ݬ~Ꝑ4ۥjݫyv> .l|V7`kݩpڨYf?+oNxh,,%5zb6,;nE%ir4`,˾𸽚ǭH19Ĭ%*X^>K<pjӵ_5hyGGxiҎu]zUl|_}3&09vo7&Lkzn:"8"Pb 83:l8翱{ s32CzȞNzss_0c?Ϟ=FgZF?3øCzEOfRz ~=ӲZjŦ7Zl脛'\_5=y6wW ά^f|ʵ46cf'`޻pP? DO-,<ѣ]R#:ͷ@.* Hhd;z73Lr""`^33-דP޿M1.}^j3{T.{Fo AWGyAݲX"9 8.a?+ZTNy0!;DV)]>vѣᒨ.GK69sE= J5yf` XWbbŝޣA$^4 AQԉcHJf  $[[Vfg?䄜3zB؛ۤ9 Z4444kh19N[["݁gg ;;;;<}ƣJlm6&0@ify()e28ɢxF1NP;>GcT4)su*No 0D4M_G>n(yJ2cm{Noh O"U \,Cf A ئr @Щ8EpbSR4Sz+aoNPm3au̶om I|Wa0ks 馫[C 0b``%]~Cm!X}λscB|\1X^:A8"f81mkkkkiX%di֫>cmmcmlmmm66#I XVHmz\-nJ4Nzc)K,91Z܌ @ňCDgߣtPrz_N!u{ ua3&4CK} ^T cGn&^$ۊwP h֟W4ބH|꿽V л(h)zII-h@ wb3 0T*@en|74)•I;yw5<38IOnRޚRr[pp;x;ʫځ$k!!K_DCa`^~H|?MtLw󸢥[',U{H09EFP~yCJ$U~8~)Ҍ ">vEU[OA"]3g,Soβy%c!蚌{ݞ;'BPrC)Dkm8:[MP30 6 h.Yܢ1} V8>K)R9!w̄R nvj 3W.`Abp-p#Ck?~ԃB?.q3 ?~LoQ鸚^C+H@3.ݜ/ '%)|ף<:5f16.D`q,|piΡ0 .)ǛNżC΁h ?=_5aم%בx1r^ ȼ}% 61 w{g>9({0aը]@:Ffٗע2`:sN@\2g"٘}=GL*LtWƺΗDۖ-q){?\wPQ]VQak9I5*kwN 6e-v63ϩ5MӊYR'bhiaGk(hjB:$ _`6o<<㳾OK'x~,o!4DLÌ!Q .8:y"EΡ겹3G9(QẊGf.Jw |""17^ey7uF5Cc̪:GܥtUAQdUD5/gE{;ơuqLׯJAҤvTNOxi[s9w::7'3K6cgI^{Aai`5ngo3k ?5M Ӹ;(w;k&zf|`;:ePjpsuf}ⲇ`V۶󿁺˜BIWMnwhlo_gUwjѿ PsWF1$.w9AWb\8C"]бS;`  }~ķ+U⢯]QsLG `M(xoKe#Тq ܨBO `PLG'* -( &11ϥ s*A/a8 ģ Oxbk 1e.?Fմ:AB5/r\s8EH]de2 r cU|1.^d ] f2߆/X!lV38遄Y Akrj}Q[dKT#PipΤ䤹0Eb|A62D6à Me18kU+`h$n2 񌫚 {6^$ElwG 9X{?ͻ5;OsRW|/OJD!Vx~NS*M0W1, * %.Xw,a]NfgO`[22SLԲtS)A|beXʊ0!5,]c\0 fG "Y6~ȷP}!"#:rokO9Ne"YS߿ ,ǼMܛfr[|\2]q/H܏,ti ;(JԷϛ=;2$bk>0c 7ty`=Z3>QllLbd3?<_ ^q<ᄓK gR..hWj7W9\zϼRdI2 1I牤Tb--x'=tTNa.`1$hK#@dyh_44`kq|ҥe.D*wU,{QON -oߪ._-wVwCFh|%EE&lAvA"8뷩'lD0(i8fFZnzf7n摑hKoSL4Qj!5 Eݶ'KuUz!vOUǐę$9ǝ NUC ?|0ZpQu1!3'D G b8N,K׃b!L:V _ngl(+Iz+L _$M k9_&:c6Z3DZNGGY؁y4?gwZ?||\A} ;b}9SJ}Li^hδS;/1Sc*!"%<~u9zNi?CDNs;Z@DE{aYGQQr `<߸<#s g=!nU?u.,frwÏՕ"5y1z^cHs C 1#}[iQ5\I9؜CʨDE4 suxI ё{3/({XZ'4R~o03O&w_fxot.M4R+Ϩ`y"`/4,DE; wY}/h "h绦@h3#:،x0DDV続>e8.usٛBށ63yo* uUD1[wOsT\fgU7A7Ffz["}M2K=ƿlZ\_[Z8FGMq4QSUX lSb( )V"3=[/TDN8Ⱥjئǔw^DT+8?W*28h:9!Zh3"".;Yz8%zg͓V#B4ߝ5pY|&. ;/\c7-xh} c:rI!0kPUiT0젊`o2 ֹ{ vMmmmMT`eC \'~ԮUŴ{V`2ȓ[^jr\NFmmp*1T"-GAxãsVv.glA9ko:2'^ƢMD3 #aȏy]`"qo6V}M:l+7EOƆrW(@~lCy瞌y@H#+[MP3گBZΐ爎31&Ȓ+\0 rhaO5(`ԥ)sf.)*f&(Dқ"iՃE1PfNrl^EqAk0{;{/n)&X`tPEʮ0W@ 6LHci<) 5J>W> O{XswDcQrl0ìL`ѐ?#6 8hh] n0"*pUc(@ʋ(yYHNZ*Ӕį\s0v0:ACY[,1#B|,_!_ώ3»gZ3:#3\kjkAxyk )wC3:ww_ DzV7"e8=2YS-m';XI>ok[;ۄd$B56Ϊ-  m r__g@PIεC2_0a$M 1! ;mq7di-nvv&m-;׾݂q%ǧ!\,u?ݩ`@ AÅTT%#Mo`m^ڰW+0  8XU?!G#ߎ>͗BA{$2BmGRu/^/iRL (ƈd tN*a?">}oV$\0ա zBղ npZveg_eu H +_ nK8b𢺟i?S?`2k ş5Ulj%udʰ؝"9$egLj`v*i9ik->b%g)Fh <o"ws4.W8>: t2i{2y>T]mTOLzSթ֯Ú$ɫR3pOv];֦Z39K`̸D>MҬKd/,7{W7~|ݼ."~J+MMMajdˠ$Hh]eLVmvbY`,R3V%.DELSs)dy-r۳?o}{|8D7MBX>^P6T=>ATqN63̂CzLI1`]W߮pKZc599f ݦ5`pБtek)Z9(=+ٜm"`K~'^>>? Ȍ?"2 :u2@ I Hκ}E \Ǯ_FNlΡv1s}DD4m\M}otq-7:Xv=}]GaP:tZӇΪyOl̷'Un8Zyr;,oh -5sz~ +  4qܔ\}j.|N>y_cg? 43NBuy"'_]B'4ʚzRE?+5T3#<< z3Q*iFFw~V+&Z9};4oD9Ύ9yo{ 6_2ƈa9a:;{~OY:7^7;ClY%2T^^i\ۧh⅏hijcrJNWsZh_C,-ƈK8jy8,Q .Ŀ~lUT?;̈W c4Qz6ŽOVJi{'zkgoDE>/B?u8!euЌaL"گ٣"ͿD+Cc\&y @V֣u>2 /C;ZYR jK!su)WR1sussu7ۥ19(&-ne0C;kGDˉY@b,̃ uJE$uHN019;V-nȏu: A^io@4XcL?1򠰄48'eX.Cm;&XMB=s[ 66;ADDxwM-<`]7vԳY,`Ot]H(< ~{{*0/c"P:x`U f,Y=-EԮABAIu_RX,i`H9ҿT$"}Ƈvs";ǹ/j̒`L麴+ٿ`INLw@C2zHcz^4Nkn`Cw<g؟_ͭUC5|ڱ r}Fhm{EI"NByfۯA{u`"; tsgJeh_wzit8,^%$w46.f̯#`_#"}/ݶi܌+4 q!ɥKTב~:CHlTƴY_/0ZÇ'ǁ[.KR/`%[|m[{®(ͨjGl&h\ dn/T[JHNYWl~x@~fP?ʪY q^L`o\UzIGVVWe~ 0K NʎW{ΕD.4EA6;:$ALl%Z"ufxA],ZI ղ~I--%/p dOSP#cP%KM,/)0{靸45XzYbAȸ +H,9΁Go(7I5^.nz>Q -Ҳz.|Hpߒݽ41l[/m}kTq}%tPǽji[,WXN[@z,^CoZ)/d6@> (e4e0^]$ϡa{  ?d!w"RC40 e{Z9r0좊0b]HyD|02~w*ǡ5נT~=n;O;ي"z]au݋sz!ݚtWAj3y+X7}xAafL.L2TL6u@20! fv~fr5ceI.˂@f̉s{zP3_7s c7]icDIp??; jExnv⎚!_tha\=~ytDN-ր˛Y4՚պQ^a@IZA#EEg5_Yn"U)ųy~$0fGo h=Ƙe{XM1- Aݠhimwz(EȿӉI#3u94o9he=Sh{a\=yv-v5^}tFF)X;#܆A:rtMzj8R0NJG#hY![&ma8^u0m$ɩF&6a;D"=wømm/Otr=dsQzn]YĔIGx@ [J{Rn:ȪC <3 @ (oR@by5% ^ߨ8 {(Kb&2:ܮf5NѣeCkg8cfaoj'C6 k9Z6 _wXD k".Ps6sD>6Η2ޭ/QN92Zqk#Vt#1wϢY=.뤨}0kl>yUXa}}^7PڡaG|M'Qezr|@+cye5PN ܽ㉕HmZb^*:ʱ+zk \iרu[K5XHm̏rT_eΡ徨`*?ʈi[Ktj_9+:;kM<רo>b 7?: =ޞ//?x Ug#PWBuQG+(9CGݰ99yBR/̈Xz$4{s?0:9꾈QGԲn`t|zDIEm RF&+[IK⋯,E5nz09-Oq;o|Xyo/:|V;ahBz}ퟎHAam^a29{{8#GQUAoRx5sqEQE=t9_rl` x{?2!ȋ=u &' Ѥ} 5" Z cW43>"E O U}P=5^Vs}]uX]Gs`uCh{ݟӱu8DX޽Xs|@8MndD[~kM{gnu~n\z{r &#-;{\l68a8V+W沖GA!sע5љ`^͉&ǽwCި:*fgݱ"rzq gMύC8ގyhZe EhLKU䨓0` TiVÙS'6*Tyf;L c,𥃔)lPX&~&Q{U\ƀ8!U0J,B ؿlR4^/scN0ovI !Eu8b69D߷Pt1AFwO)Tq*ի0Qw]$\)T}W^B0P;vaZ)$7I5hC ~HgVvvyՊUwTRv rFA@5@fvX@Wv'Vd ;G2dj˰4j=J扊vX=@`c$lg -ʚ|3CLl%pWfxs MXn ntիjz۔[qOW9Pvى++/a2P`3` 01CDL.~ŋ9Dd=[ubʼnoM*P&!0g j| u.69{t!xg,4mv5]gVZ”MN>,B2{AEŪp`ݙٷ&i5^ 7pΠ {d'*#Mzi2n;6{vG&ocmb?P#RXxϸdKA~^2;paP8 hIWI뢅c? AuքVAGNPlw YsPG"rg[h$0 b}?MSW?z

=:&f޻l"..Ur <"$5ݦl ځu| VK}j%YuQg+V#X1L&Da4ir{tz5}.1—lޅHSN)A𴁨&()4mocڿ1vx]"D>\^J64Z9@DD;u00A@Fkx@kً{OD 02!ˌzw˲jԓ67DQvSGԵ@mH ;nN{z JEUyUft(Hw (UD1?PvpAo];bQc{}֝5G?[i|DirE+oW-y5iOsS'WSGp]Nԕĩ?ʔ<'5;PPcY0݅0Y\nz~僤ʉMT i8:W޽͋ߝ8_0 czC@ K&0aLeH4'nM>أݸR9/O FBf ԾU*tKvYG[zGXՇt\H!R/X$׳9FfM_tuu{HkD4Dn~ S?>mo<۽ցS=1)B(:/M֋/XF~luw;)lfUiN[ Oz!Mq@1uŭMӹZۯ%Պ> x?{!]Ӟ_j:(GyOqf= -=K`()S39` %{85m2My}l;>)>`!n_']y/+Йtg&c#jwr{dEaZ/گuv =&,W |9#99ٽ\֪w/ltDe߼ߌqӪkOf(s9os pXeq݌E ƹm8"W0W.@8zGcIyoJ9V;TU_ k B}ڨXʛ?,U[329,eC-xc>t߸En2| ~ogQ [v"E6$8u ֦?buAxtwv4Ai mHe"mŬq] Q͂8'6쥲tϓBaNY+U}^<< 0tüf3ߌW}U eFp +%NеPF3OM@gʔ\sW˲Lj:Ht*n4N0 l]LH25 L8z:e{4lt7+@dрjr21[vvdb`T D0Z`_oQSHŊVD[ 0`XO0bMV&Uۅ%E a~M1 ؅S0Vvyۙb mL &PtIZfzuYZlڪW\ [|/iii;3ROrvs\GQbUp7;; ``*+- F/sс (WA^c/su٥'n(u$bE07`λ+ɪ<w!nyj|!VkKNOKΝj]؇LAifǹy(_3 }RXd 2ІP5G<"]?@ɟAl&]@wU#5#(!O%ƆPrfɠܭMw, k#M#wen9ztcym2<Z<.ڿM~B}W|qGİ\[* WY_>sx\+zcFBLE|ݜP"Z({5ݟe!$rY!{-8'k=1Lׂ,&;jT1sZ]U[]+rKDIJUED6:>"![ ݂ak5~O4z J5]6_ ԕFYGn/]:\p),{0hi$%=_z w+!A滘_,tuYmTNg@<{lBXEʉ_{Smjiހ¬ML{zgVcw=nb=j9MO:ߞ?3K:2 ѦHup'x0^;ӌ$ ڸ`"@=ӆ0榐4X|00p39. RhU&wz- iFcs?)e}yלjJEG,4xR$/5@1~dl}L;0ŇIgD -V24tMâ,I-"Ǥ@js_?,\UhKö5oN{ }"164rnvS+D}峥/i84dVR3X0ZdN4׌U smֱ~ʻnL76~%zV_L bPs_K|C] n/ U k]չ5;n .5U?qGnKub6A#aZ/?ITwik.+Bc0dX2+BCJR߼8e('Bgۧ+OU ]Ŗ3/Nst,YR΢ KbA\/)Y2⩏RŀZj6h&m06=Eg&N[-?`Y ѱ^nBdU9qL#7;D$^Jdx42 a/ ~dC31&;P:]zYok{lQHwSpNaKcQ GA)@9 3Ihevx@Zu ,2TX`d"˗< ˨_7ew`d skɗL-gT(u>1ニwyCNMw|aRۈf/v< v1>CLȇ:'cocn1Y‚+/':U qA&T V/ ['y SMaiC'oCk7":(+۲Kuk_ḿ}pcb뎍3't7]!.ɰ`q+  q:ҽ}bc~˥8<`]ws3WO>n< >z"F}`cp+3G;z7Bu@Ws=ω@N'r;!Sym:]MQ_wmQr3$*_0 ־S፼#'vtATq2_A/R"af}^,g>H b?n0~WpckFfcQ@mxG0FgkA= *Ѩ o.յ8 Ȟn=dF-@ 6^2eb\0cu[C2`%6lݣemffws6F֘m׺3=|陞jp5#uVgUE]fG0Y8tZ5`_}]&;-d9~2deF!h:=]=ӳVsy,1y~=~3;lkKBl^mm~َaA뺦MiWF-G*Lep̝z-*jqAf}ch[1`0`*aj%M= :%#ǘx(CF+FQ8Vwk[dtJ3ĆdeK X.;]gfs3",^0y_Pg{ZPߙLh5]ZU)8^d7\u&srNf9t8֞D2aJE4Mի]owW4~n3l3"1n mdfccTU[;6J͗nNK$Re֫ZOIŀ`e@#] Xh"%ۄ aQS.ful00 ;}\DQ1"t?6(gV*{2/\Ξfynh 1kVg21E~\kSUz; %\s._@3(ۙW=|b# HV|? \󞚩&h\V dIxoY [RPAZ8Ni)*i%(0/%$]a 1?(R=1{6L<9P"+ ]ïc A6sMG&\/#鍂q/ΖڀAS.KT_wBu,}}gԹJd<>VZdiL8ԜƑrqNCk2#(niAH0/ _bÙ۵ I,@ZR@%L8He|jQD=MT88QWv *T_zny,1ebq;`vTC-DNM\\#s+Z=n3'hJN1Suls©'yybU wlSS60MְE2ې@܂8¢Qy!`̶p1[''`9+B;/\Ҽ-77opҩ$ͭqϧ&1KܱdH37J01ۛ%=GI44#Cy⌄ r:jd S=UʶQeͬGRB!f.>-q1S%R-}u` |?F4֭мbW^M̸;x^DD'9^WlVD)Ͼ;4!@w.)|K{;,J0 c.·!2a7'QF[#6O%O4M|kB9]fxWw&VvMuOV0IIG&h[q3MޯvKq\S3&N6Rؾ?l'߉?2vK nA7V-\١VГ-^WvsKXҎ>˓$g@RQUʗ 4gˣ#5I 8@ .5+̬Qybi-erf4fo9t~eo[SRj#LPYDSŸ::4M͟?==ZLy燪 p!! V!G_[__& lyt͑#B!):Y2R+T*ToW:Xk!5x j2v+N:s  fv"2xD-]d:+8{1uЗGp 29AG X"-='Ǒc\3@C7 <^VqOدᢣ{XZIX) xE Ou$ ^Vi@8䣗FòXS[acbK^W'S .sl'\kYsuZ ԺjTJg{Wc_?Ǽ~ -KMj5> 8?:pày\jm1Ur8>/`e9kf VYkd,t 6y]yvcϿbgBY\ c›@1|O_Q?#M'0tLN4R;kc5Z 6^_`rMG5a&#)gty T-|~ђ/H@}dZ !kN diǹ}4,c`JT3?S14$`׮{&] :LЫ*m(6޵0Gyڸ$WO@uHIp:&@őXEZTp%ZGqt^/P_=^ } _sOlIÑг Ƌ6 㧵?Ѫ3>jKD5mz!-I}s5:#U _ .;K{IbVVQw^g~ up6cl%AN Lt`ѸO1ݣ K-H})@ i?Rc⑧F}4bዒZbX;_70O|zٹ XI=9vrb:=[{ k;bXAwD\|=ЊbLgC#vF9@1 2Y^ߗJթ|0K˟C T Y'8JՀJ*;8L u A Q&W XzUZq5\Zu3s 01--'p3Qqmtni(y2[tf!CCy7_^C1ەieiV՗9 {n8Fո]XnIs3 nZW@|7ܘ o"S~e^CEq$|";6Y f.LgЛ xl6iOww[m)A?lk&SԌGI5߮ɆJ(Cd5AF&X nZ##U 4þ NzOk ʹ j zέP>jݿRk#1bQ7?zEmoTf?lA\ wCC , =XD'J񳦸. t_.`a^ FixpC)H8Љ7WO{>}.ok@󨐘0+EmJiU#SR0yNe;U)s>*+dҘAL!򶀲ʕd 67.t]ONnۿ%@H=E =/IE d0+rY!h`8}>زNm)%A gNCoEƌ458-^l_^^ W:eK+%|x͟?`&Pk}NihazӃAî+䙓r |' $G $K3uVLK<0cOC:&V?y$`+G#9XZƑA`t*gy o(㙖+%LAs>}<rоHIί5DOhLRiP @J]7lZ6ֶpgy6a/cN(sFJWr9;[^+Kc^g]q==d[A琁]GY8t`קl^9{q7*bJ^SC~4CG>vA3]wr+(uˈ3;~42-Qs|n;a4~TԡCh-NAl?i|K|xxuV@q9JXS7ى@ 5 9s6<JUZ`IiV1O Rx857", 65Ah1ZBq2"@yN01dyZpa笓-A)Sl|·QAţEGI\T.{W$w=EV0l&pݵ:xM_VTThrhU%,JB$=ZdR4L`jt6ͺ{hPR2r;LD8}4}4 E2UU3BwY` X#NB6IGZ$D N7{UP>yx@g!f80_\ kG|#69(oNwdZ )VXLd)/ Ik w VHzb ]tQsR-χw!RYAÁDL@ Q -d0{VWoq}ٺغt7^Wiešrk-SI4sWMt U^]v'L4aiD cʌ<:6ՇYU[cdsӊAݽKu̘kbI:FQ!Blo+gpyHidÜS/nܸ+,?r03038fH ii~3Ejb[`Lwֻ"i}bh^"!5?zLZ~fٖo`y xZqzgO`׶{Op(93#uW:Fo-]~A&E8жEϣP|DOAYH/*)Q kp`9GGECK5Q AXQD%59/lOPhsa7+6<?C H# 䊇{U(CX~C- 3jR+oZwZxќ9ZG>G~/+׸C*-ȼcJ. lHЃU$(Vꦆx2߼pwRs'jJ:9p@euQv 761nl%j`c]w;' rx!xk^6MwLnƗiҤAWC`\w;!np;ZXFݚ~&;e*Sh]/aU̘w5[)0zt`^o ;~<4 LLt݉ĭ.CGo# )Z_V[Idj+*fyP*է&69q+JT9]hlxZ*:Lrsfh^AGI~CZ&*! K=u@ #c%5fu׼nUI[`)ghRp3PKH{!\Y{uz;s8(wÝP2{<{߫_iany,=~/c7WΫrD&PPZM{H0Ƿf?2`//ښyjVvAUR- FQQk? 0iVXj\} 7~ݣ׬|+6ykmƻumP}*X{'pM2ˁjXbcf|jI^6i8DK^*-HWV=Kn%NJv֤VۙtQ }@=~0%Pl>۵:%baObp4-V<ѣN;usBhc5!ɵay</6ƵB݀@"t jXW3 -pRĆ}JB 8zrO ٞ> I){~:ҕ=5=mK9^fē*$:JLO?tFhsc:= bPYAFY;a9i8&€ 5|Tj<^V?ue-`\38oFA.7(c>Z'=qosǿHl[yvsS'N>2^mVOAP-(8}Ub+u}>ME@̙2nlp$= Yy(Qsw}{RiOfuzSgƏ]8y1ˢ_;ԥgm؄}2#;/I T @Xj ZJ,ld"Fc/&k8q{L QO$S>䬌O?h>eюλgC!J&ߪ᭏&lj$]vbt4L9NNMZhᩌdV۴pYvx XZ(@?ݑʬY MxCmrt]7Ba^[Q83gt4=&}AXgycwW'DN&"οl};X ka %+!}u\&X%MyQyWt_orj;*HҙU@Kb{s}DFl>~a\vA{hy_z `(D毰E7l;}3-~r"QݎHhastEӼ"pEVYoEblߎ IWcEN?`Z(p!Ϊb'Q +z4MkY٘6XvBM|/&pij}.KwaJHO%6H Hɱ0hlm!96 ^}_ G1U9N]6j"d7:ʧ9Zv8raR^_7߬eGL9}.S4laܿ#_2%C'i덯Md| ϒIq=ÙuTa{9\pvMՃI?99SŻ\Ymi{"3W?{") ~hY[\\H;8d :dn߃p=T|*iT0w-' /0^(=!f[`sQG|DH꒟[/E8\pҰ'B<{dKxd|g ~VunI >lۑR?bs]eEL҅q.LY`>j:akk`@^/څ(}鶆^`)7*7P>^ooqoԒ0yCaON*PBÝR "냔oLӮ.vr߄Qv V.`$-@}UP!QBPGr!SF {G%s4)NP$8:cqr8? ~ 0C ?왶ykҘ8UY&`09b4>!!2> #TxzUwj?.&fh 9=d1sAI<;?Q2m6%|ĆP0c@ 6 6B`I&ٷ)!]L⋹eOz|yzzocp_*7&:Ȃf:unU~k%<kgp^n~P[O1,Pb/͘;Ϊ ΙՕ|rt&w•gCˑ7/{\н??r'xsߙ!&cB97 kܷ;oׁ8>rJ;tRPTRr}(RNJUB>*`qN*F]$ZHu,Z˔+*լ}ZRN,`zwp;$r4Nq @cQIj~݌NRY˴#֕~#剻>} \l۾Ci-w ?pAwZzM &\!95<%<9@FfDV~l[qX}ˍ9&q셃bX(@aC"0NNBXrks"3yy~@n@9_#fם)ۅ$dV+,2lU.RuMeDž=XKòc*T,6gaՉqۆˊ&0@AHMacb"4t)2 ӈ=/y i5c&v:tȳK0者|,lLp; d٫FcQɧ3cȚRr+T5{ =Gz˵YU,w@V5 WZ4kocZΡFF7_2w *~$R( Z7:8.[t`  t mŘtЭEȻó3Kì|-*ZgB2,>(ޛyu77a|!I7iDI %YmA͘PS7CW@ dZjhj([Tzw햼Hu_ ̏3oqV`ۡ>Ҟ=< uy9]9E<}̦W6mֹ uֽ[=>76)uTR']݀b%x%]7w%qot!+*.J# EOl1t_&fo>\>Pu^Μvrx*EGʺ[S_乺&nN}ϓyʇ:7UfUhMMǟ6خ z/:$CHq,:q^^HnW/Q'-)۱Z78ӁSG3or['tBTفy')tvyn|~ 7Yp:g0Ez8ɞ]mLvpM3Uas-@Z=wΊYmek:ocG'}KDNӰP< V*ρQEy6m@gtM_¸w_ɬ |i< գObh" nb/4,\fCq݋Z~ѣ.(2Bvf<(vmŵLWGۑf18UMqD{*S(c٬i"ij`l\BN6mcH`ԈhNus=gĄJWhUhUZ={xyոl[ ʗ m]zEkr]ԩ kYOl*G s;Z]h/۪Vp͛ψf) A,8?U(4~L+aJ5qJ_ q%2h1X{`FBX/idA[UɱfgoO2_&]?;'_ϙ|o!XEIP1%GizHK.EST$m |IsJ\!}!]/:h=ꖷs/W nPoxe?? EPm<5̉Mt{LFi%-7Z`GNj/~-'T4 Gg5ڮȰ阾}D e1bѧP0{o:Z̴," 3oډL6lsĸ1U+'].XC94MacfB]ާ؆Nm~3%\'c S%O4e;TF#:yqбZᕟ2c3el%k!iER paWJaP׺d*T:hۑlZ+ Ck8+oBBt SaA9%{NK="\^YLg|XMx9niyR6x6>>%1\>+듭lj@Љ+Zx*bףD ,@[=2i0 8k"i1cA~Q}xݳ^ҩ'}k&EU{2TvRȯQ[?Ҽ};s=m{W'K )M1O 5IjN.jQa0=7_պ+o¨[p%tOGVh3x"UPZf%X6~NU?t,L,p\H\|9_i)-F$QQy$?=n*fEݿӪ oY|X])q*)LP*J\\Y~ @0Sl<͔4ݮ5?C3`|^bJaỔ–v GAS[X'!!*3M@]ۿyuY+\0geHqg;C2dm#7\|YqL)z uVfT֩q5)& kC\Zwy{BћUq(Soɣn K5!Rx:Y~0ٻj!B$vUo"oġ6?yꗻgP24X~" &r^"i6ULBq-ru~rxgudn$tB);ue \\,Mݍܼ'☏j('xKDgzlm_^/k(Q|{N+ܾaW$aئۮ1չr'~kLCFc ؖ͋,'ǦIB>WZ|l.ۜd*|5ppk_}@GwŻr}z :J|>O4ۑzx@A >>L>(U X̓8m+~^ctX53bGƝքD@cWxGO+V~7ѳj5^^2\ wO381af;^NWH-Aqp` 1LVZ< &\qN4 ?[YdeF*jX^Uccm44u{ ZST*G]3*7+~?ic߈=aug|e=+s;}~~֭pX΁Ӏ !$4#(0m$))ncwr8mV5jC5U{ewibD1li>m.o~ 13? VZpltȁo)yHC{n:"͋3Z}UStV(ix{[5 7?+Y"|f't uN/{}r&nPW}Z{iEAD$t~a~E&#=[9|VAS=s xah~Aر\ADU '8vűv=jsiJAUGE7 ^ZUԙۨ؁F-m{fYrF8(C9ZAs_t *XaWjC? X?wҖج5;3Pϣy5Q%ō@|مNYBPps+uK22zf(rnmwOECbH?xW?uȏ,Kh3F*|4 s:hf)ՎH/įRr(3svh/)ԕT`g %\)P-fx9@5iF!.Y(1J4.-9Ůdߓhvki 6(1@wla9:f¶!  t6|ċN'x!F5K_w9GY<4)T=WdxAyZ^%:#q0\P>nwj<ֲ*[ K.M1߻sʰfi+6dvtH0Pl˾$;. U `zq%nꕅ3FMiCKɯɋX9i|:>?>ڛQG5-Q"IAy "g/<5wpV!6QS0رץLKp晲-Xlݻ#=)x(]0jTZt_N:aP" Ź|B~dkmm |LNímڙ ZQ|E%= .6u5}lPо:n.Bz GxwI6LQk^Vf{[]u)g͜q'Q˪ ǽV- E}&L3ƘlcCD]*?vʵ[ _H܆<_\Ž U} 5x;pL D&y4:D\p6Y:? d CNc CcZ3R%{ehd2_ ]MxzxN/izȋEUnA8qHJYܒԉVz;@7|ԡR-gVe<ɞ@preO!Ȥs5g Wt.pY1sN{fpuտ4E?tҩ^mU87@]w+rC9S®(ZCY;ˇO΀wy+u޼,syM6=Kߓg "&U _1j[懳L/ou[]`~^ WG=˴F<~0rv%'J,h0~z_KZtHDf~*){NIrCKgg ?` ڧCq}6(A6.i 9G]׿%:SW{X73v Dg9ڻ_sO3Ug2gW|,J̾f a=.N toX}JtgZY$d#Eznz7auqf gn4l!^>Wbu40c/TQ  UA#zF%[Lͺ=)i#} h>6M\P:FtWU³D3n̜`,8sFnaO0ioVnVqh fF,:f!bvVz<^B~97cmuqE01uH nm q; !qYf`M>؏} Em; 2 Y99r̹=1zp}>tsQ{30S=# ٵ w9üfX&ۃfX=%[yP l6`t[*Eg附rrЙv\2}kq8GБc=IyR|QrނB&vhe'FT/FSwlP~H* [K\A=U+BA g˗<|M>/gIpA-`4 $$;x@]KL( OhKҞXAkA@阯)8DUBJES"(u20W"0 noE,k6aXmwXL; ػSmdvx}٬G΄ڀ/ 9"~CR0?jg-`Bqn-HzY˛c!y- {E kJK߰Rܑ܃)_af/tMFK&>K(!~| 4exKGჳ 4+t!W:Y-<~g58n8&rC/5d:vh{(T=?ɂɈagשHH j1ԺKgt7yt\f=OW-q`f/ocOVgo\Q-& lxz9[*n,hNd2(1I)WaYzmy>&a]/0T bIW3<=A|^G% GM#8Ce^C`͘x~S뫩]@@ !1Hb;`t@&ɨKF<"UZ7P;sUX|*FIFl##w_/=xA~d=ejֳYjԍ.6Ѣ<:۳a2W&;lEimlYµOb.-v \Oj"'s0pi"xaHw[kJ?̎DOo%^7$l5Dy!\8٬:>`OVV'O+]h;mw+]6KE]~~65As]JYBINϏ]fD;uMԞע6rk.}Д]} }}y԰y!`ּI\Ya*yHqU S"g$Tq%*tĮ ťHG'.i d UVGTVCވ*걏ϏKfBv=XŧȿHFSӚ QmSaR'-! @F~-<'%+c ) %sTb>4Z9T&*MF#~v׮L0c杒qQaVI 0R:vy dI(7^6nsc[#:2h!BIxj)z.W|xZl,,,,-v f9yZbMF/No4+sP< Z3YdQs{Ŷը` y0-y -$ql1Ⲍ{W8 A1|klqc1O=_`}꽶{i+XGLxSeC ,m3Kы7k|f34j?=CkP8'<縃zۢ<#_S>Cpzﭪop#Pڵү긜t>]vdj.F3_ts{!l>\\L˲ :/Q4!ؽNsFxj`|ptF JG9c+r=sg,a9;yі>4;]ӝ?kxQr:'~-Cst{ʑ+ q[jÜ]&;|wه^]W!BOZ2ϬVTVG>$M篵Ftmyĉ]WUCG{K| fȈ}7h TRYJ(ڀE^H8VGY9vH x~EB[TqTSB >Ɨe&}wW+79*"ޖjZЖF˳=Z _]ktXY+Gaq*f-Œx216`w:f&A"4 x&4 :Mx |}tVL`,@6*`cyyl y\Kz a‡H@_߈|P|1nA9C_ri(eok Vk0j_z.3 :\ԾO%PLʚxji>wdLȝ!9YZAu|,J>1mh#~Uk9TsrDZkB .QEmfUNU4XŨz$ļ&-$ZDJR BCyE|Vy? 7^n󳗰֩pع+;?ڡee@y, ?N*gjeamkeMv^ ]pl^I4fV,ߞ 1P9ECXC5_ec ~UpLD89Lr, hT%o΄]jdC)Rϱpn c1eK'y7|syL?Mkqѓ!*L)SʎcNqބNOXV\ ~ؖ@a!t ؟$>L!vkSʻ*}Erڗ=:H-9)]` nin&Y m@wNW;r[OZ>(lH ;K:ݳs%W</b|1t=݇F5Fpk0ΘlRв? {qhh\E?w?D?躂):Y+PW/1ߓ^V5zPIoQUPW( ABRhŠ㦓aAęqfwՠݮ 1 w'5珂 "Z" 1WfeF^R8H#;_֗: "Յ\rџ1AOݳPN1VlJzBdoҚ:BhalaGa\JПjNm֗z`z+4.ˎz΋xxB 8*1f /_fv=O7/Js_cѳO1GeOaaQ ekz(88Wp8V+USުVyJհ:䪋 yUChHS3Mpun }p%H3?b% z_vAÇYz8ᓌT85m=-=ҙPb5vT>73笾@Ili)8ttMUE "e^u0s q֩S [>+gTk[i6nxJڍ Y +Es,ڌ{gFC2\krYkmr{qʆtvK̺LS{NtU+nN ҄-{)J L5]R<7A6x5y]纼Xu}_T|ːPJSwDN֞n#dI[ IQ']E7g*_Tcܻ{H[zl\qgc eYsLΣbfkuw@6#vmls 8:Mz4nÎ$ U [n*[!7@o< }.3C:(qo8QFu;σ hE#w09Ι}Psy^gFz=`9Xh<ɺkT[Vmu11@w]ԭjW p PVdMRZ;Xtv,ve2d* i m3 jSguڋwx@_~^Waϛ;NWZŢX9_qʵ~u-0g#%3((##XF:T4MN{<7B2[0TP 5uߞO ~9V}Vpg2{< ԕ4jYz<)7lj465g7߰&kF5TE0^/UsuEY *3֚;[S֭sh9A(F t^i`ATJM X˲vW p{wµ} PKn~$kig)°w0c)k1z'aL<ύ?0.8}υ.$B"穕5 L 3n/%&1S5$ m4i\e?5 8A\&͢^zջ;l;,EcgO. ˏځzθ#G[Ơ3uTYNF204sv( ˛.Ŏ-K2}׷ɶ}}3%z`,\1 f[ X1ԋ16qa8&a]>r< ur\D 6pHPBk0S&yfS?eR\`<YZA7*朵#H-~.O&Nj P]s?}E|'25ŝ!vt636ʞM%/smYl0 # 3oOn!'\—|rŪ A/$-?]'HǿC4 =w_ {\nppޗ`fo5M/Tx!cu54 ۹8:*ͪ y R=4h]R#@Z41JdtR$Tm= h{01&buwCw#ţ$e`!\W~2tYCt{ژD뒃uG = ֊'ZYDd^e¦ӽ>Ἣ*KiPgWVo #SM#'XŦFt1hW3]ZTi}Cjgd9Y9}6dsd,66t=< CnӂdM`ٜ _L8f=~&lO l rBOkݑhm3Xwe/z%(_"k[NjuNw}V' :D#EOP_ݼ8BǺ3W$m^TJx%"бp©6gW:+TtX'8*ja'ieI WBn. ֯/M9[GUݺT3G%w\$⺻j܄n_~74|)pf"۹&l@bZE!zUnՌj΋έz!+'PKM+(~_dG%;6uKt nJf@jfL4)QB<ë\gw ]j_X8l)pѵ l=T|r2/Cf&N2h_hBK`e"װϬd \WGiY?U!eh/j3G--bPؤJ AE A~49h# Z $בI*V5ArꍝnNfu'LP@Ѡ8V0mDyYE5C']WC -&i}X\9Ӎ#KW/Dix0Ŀ 5"Ge;QXSY\c3Kޏ]uM#0`0n9.J53n-~}6rm5:]kMZ^V[Z5JcdY}:L~c@d&-d]vi(u{,eN-1DO Z=XBHGOgÎ@Cݭ-{0bG\gn.9Z܇vSEݭA%4f;㗈<^F(7]Vٛ[\ U) йҳayXcpwP08[|k-R3{c_1'QPs~ =}W쭉䎌0:c^}>C)'\bW/u߮ќv.ƃ^e;\X7YQ[}  !n]*]#S._n*l16QbC}qbҵmsf ]y)R68P0cm\+er|dץr1 enA ]hܟ N9yI՛U7IĂR<(WWDy:+RþW#:Z7sj9&„c\І y"7ivRq),Xk8'+]î_y_MYXlb.(/w]Swǻ컨mL9_@_"DTAk]:SxDG<J 2 I@sQfo=/K%Z]mñ*V>L/ !qr]QUh{k!YU [^z}w-\^y*|=;d0 ][2]O얾|yHk*G{M|fuΰG|~[$3=l|M>9Fb: )ѨD*ͬdcy0h}Y^Ǐ,uYhмX+!,hגg1l(z{s>^X2pR~2hZdka(Øth=|rGPgT- {s s7NEx{ﴹgӁD {aeJo_\ 6?XqTٙBܤ N0A(3c^;P 'Ñ,AzSZ\6  ij X.m?M/}CۏnTo<[Aɴg(֌FЉ~?0DxqmE&W;FodS{WDuƕ]ГRMSQR A7;:#<Oәv&p}u) &;#+DH.Xߦ!@"*1} :DAr N=w Y?*>}T Z4M%c:agv!MW/ubX,9`#G=\Z L9ĊwcY=ǠrǾ: !!WQ |5˾~s{`H,؁svDf jccŕu66t1xTTʧ/56KnLkʭ嵮JyC8uMj+=yq`IApwf6 Žu^nb<Y{=NSM{%wu74h-5]esLz)#79N㚝xbe^^A.1FmvbÔ~m^U1h]#S 71Nt<pD qqjbM`kyv~Յj"N]r *nnzsO s[-!NyѸAA9Jb vN0%]czúgEm:Rr3esW)\ź]y v0*.ߍ(+6vgaBTd^. P1hqLL+zy]ش6('%}p? -6/=oR 8¹CAiO=\ ٱS}hPȄNLb0*$(n5"=e)Q*2uGv.ԧwiVF1p ^>|gqhb@cpY4׍,֛U2B$l^U n3@{Ʒڎ ;'+GB{Pa.L~bH>CC"sA5L|]C`銐q˽C6)ٓRyۧ{@L(h12,_;vVTh蚍Ǎ=1R5Az?8K(iF)E|y Xϫp?&yǚӾ@-^4kw~ |s|&o~#-Az?@2Ҍ#2AIg[/VNDACS]!щIwaM' 릮T^| !IT1n"'Ւ> Ѫ){fOn+' 7c{wm.k\MV`u6uP%?.@d3P^~ iVgyg WP˵eEtDZL^5҄[> i,E r{}IZ Mѷ>^29ivM7Qv#tFO6p=P5YH $`MF&6̅7ى3?\=s=.)r2Ս>+ ]JWI^8m/F@S/7F#F&'u>~mL!9I?u)XpnlD2{K 'Czp7~ؼ/٫!^虿h٩se*+˗@CZ,086(c r.* O>6c%ݸAmD ]޾H9n\OL wԸkt7y!Anx x ?}ݘKuf?i <}b8*;W{ -&, ʁy"pgM(8~1 NQԄ*[PHhBZn#&*K @545qԾ3mj ]{M@(~& =hjֆw+`qmh1%N1]ctnzs}vіuj㘭omqʦm3ăo\}kS֭[jέx~;la~5"Gbs&I`F`Dda7t4P66nzy,e!SDvp~BEEc0>/dz4IU* "w?x6!ydh `5%}>Mjm-ؖ؁# ߲/2Dža]ޫ f* q*{7q58Ȗ ַ&n;*Tc֗\,klЍ9v{cgr2i=m2яn /fi68Yo@QaUպSTV2jvpjˆ ll51pٸw=~c]bxA(9j{,h+akя%ܣ@19 ,eЫbzdmr$6wҠIZs?lGqF4Ec|h8qn־vxUx}`Njч?0k0m9)Z6jR2E"FƄ|a @b4PJmt4rBH*#Lkiee܂9_jXʫӅdR(Jqʝʩ# *I̞%ԨB:p#\ er9~d0{<@i"?>բfcXml3.=_^GMCL;4Y = G^M7zcN/6/ټ)T݉Ѝye-2 /[sfĔ{Rba t{n^d$`t[,nP|m,Ixv0*^.QeiOK?LPWZh,W_ I˓]uze:ͣg5bi+·44YpӠ pЇRA2 @mu$vXYESKIϿ߅j<ZJǹ4Uм?({1<0<T*/KlD\44o3\aлM ܔ>6{O(>X.:rwS0aUblEI{*Ty+sھ9}:[^~^9and^Fa# 曞>'_YCr~ ԙs-7r8fŊ͚vvp :\' 1poY@}T&88q7\B~-jdD5ko *7P+<IkOIMGF>Y Lh,(n~5k@;g|*IF9'&}P%ųc@.ՇT^xg:*nɚf&aoRsiМMsې][M\Pջ`xR Ƀհ\*$jTḷjev\̺)Z,$ɒ%@U*Қˆ铜ٌAJ[K&CiS㸳艶{@ }I(E7+c|۳ub\u^ZmS7Z'*{#YDFO~K|{A ~#ALP 'E#sgյ*71PںgaJlxa;Wp[qų̩| ܅ S XtS{CJ힋 ݿ,/=nw/Oy#!C}0|"`V*_/T~h֍?q kĮ`)>0AAko6k8!}_0TßMbZ ه%OlS!x3yW!E{[~ ~s?F Q;h9׻> y qkq`@-1:uO'C-``#1_ Lghki#»ti cX\|bx`6.Z!R&ʑd$:͆hup1trnܳ0sKSj@Am,%<\[ Tx$ \\uk뷧uu{fiY}cU7yOG!i4})FUn}352Ĺ\svu㢠4ctP#Ӛh_h0,뭵+퓁hroK9w~&#"m6\A$jzf6f~Rny 5ѣ!AP8>~ 5ܺ+;Z~'Yg껏hO;^LI  sX4ج=C&\>O 2|6Z^:ѫDZڵԾ='~֑28\= ֒Y|/f XM^һ=hot!q`ɺ  q.F6 `t+?:H~NVf@=l|cF8qA%!=}#!o=As_߈-[r0Û8fe|D;OZI,3`P>JήE- *7⌥GbAC { 4R>зt˂񅪄FSnM ڋA=:)^@?v ((1uaK\0DžV5vuR4]%=>1~MU;^yS2t#L-ݻ&DeC-~L 9Fa0ANP$"Tx*C!I/X(Slsoe15S\[wXI®QE:i}8Ao%Ԗ :\w:gmͅuأR!ypf2D!qql }™ybR>U3a?o:! 0 _y}Hl/>y ๜z^EŘ/z%&{~>nѺGfGmrD75yXIM]sw7S%_`{\4PݧUMu tVUvaW +MdWWF ]~-ʾ++um~\h475/V;TȑSV墋SPb ѕUe6v݄ 6tRJܕG!  U !"缏O Ed& ׾vYl<&hvo}۷ cA+.;JbU9 i@0M0A vVh7O{7㊺Û$5z,8ԡW8*:p*ǃdNd{zwax ;@ >SYwR| oT"ZEHġSM?a*+W3r-3qx8+ʄ_iۧLmcX-S#rqd"W\(F%܍70S>:q֥Es᫸V錴.!5R4MeWQm,KBl' ҵAt  {:DY!SzA q X&ʍhG̴Oa8avf!}^7ӌ&V /nn2L8{ hakOAOnKMh t q7^kBa7ٲ17^%)40S8b%)T'3ܯ) !Fg1J:-҆Bi Z휇xp8$Jk׎c^J쯼\Jۈ o)_CweD;N%O5V'wɸNr=..ωz|'jUvyiG$v_䖋1 vۯ* vAmgN∉DdZ шoUmP 4ɍP<.`_kd5N uA&@3N i,A8ccɮf?rd.~17upيcc>߯]A&BUJ"^ac(aU*5Quy3 neTXXʷ@mtϮWa[* 9jݭ:ڂC5b;`f[rmHM?nRX4S/GPs$_C/n2ܠO5Mѱ`c cյP1<DVZ]uie/˼\iбxq OK֔  DyB; dXd4Čv$SܿhG%ib\8K+# 0 $4^|dm2>D{`}NŁ!. KKnf,nseUAt#@( ѷEDNN "kYNEhsp#pi兗cU-p~NCu03\>{k-ֆ??\ro0X&JL5nOiir14/w"O>b]{c`y7v1wU;U;EoI.WZb /mlɊ7Ygy6-s)pD#{I~?Pb|'QV& ߧEă9EjGsV1lE@Tgi; $t'V;cK:!(^e)4_e`hɟ$^'~p! v`ܹx:fUʀJ̲s@XQQeoIJV')fڞ21͵)).l~لxG7 CQ D rz4hK͐#WdHڻ &4-pl0§jZ x5t?T[sVO}Lu!'E8Ch`Opө^`9)9[k4X}Ŧ ́tNo.FfE/}Yf3JˎN&2A݈ߧ=G}~K-Z m 4ΠIb`$Vj2b: {2}< =83{$7< m= y\0DUQ7 #5Z޷ڀLY7l3˻.$- 2Qp0<9,y –D _(F?a `N,J,M*pCa@鏇6jJ7ݯE&8Y%QišJFc4Y_5HۍCtu] -GcIf*mZx I T/yH?#Ѿ ނ"?V厘ԢboolZ_λmRf;C *^f!I[&vC^Lm.rO B[3`XW,vMX|_TîEV"d)^u[_t/)PO^tT f=s4'A$7 tʬUupģE{ŁZkb.>ZE8_ U.1+ .oLMg*_}%Z,dlt32@m}ut͢Vw٨祩Nbd^ W4U1Fpm ]T$@)/ `n#u5@@ M{)PMHq++AJ5I>4>4a9娈iMvk UXh xiP~BJpx2fk3~BD4ss%BPt,W9F/ 9/xL3;-Lygلؘ[}}%WIͬ=`TOI }2è@Ք8nFuQ4ݡ 3=.E)Ar _;kZ81n=z% "m?Pf{D;zڃ7?_WDq ]˭PbxFn)B MK77rFW3u4)i\9`= 3 LA#1&\*.=s@R'F4xY5  %ŠNP8t>G2Hp@V4.NZ^)I>/^[G|_ΫX Z7:kY}eaXe;z2%Lj-(4_b̓[fL Edsr;YL8Fc96,]w0/i,rγdwoi ݊r7$F/-Mm/B'5гx\5g򂫆4hM g]1d'oP~O311fS <E 0WUd:e&t-..H@>uBhGpO.c4bTtY%O5PjrypfSP]h}d ㇠Tf}ʘޗ į ,aU6$N%h %rD[d jĺ|m%k=ʹ9 !oOY,Vt֓65k4$f-=0M`,pznAa:|_# 'qy䆟NY 3e 8EacWr_$1YŞD:=5UߨG';MnY]-_OqFF~[}ҍfrM֮  ڐgzXƃπ;;Ca> / ;X?vEA\s_bK?P` p<%A^% t#LwQP`ܺ9~H?(Qa8AZܳIŝbI2[_R|vC &V__J4M[S0!}HrǪ`rǔ 󽀝X?3$1Q1T_w3m ^Z#z5 {=tSb<(b%RYy1J[{f|:ǑKDJ$Nv`Ą! -1j/JWhlG>v +'<Bk^O҈@)P cBA xd78EL)f:3еϹ/9(_[2jt|mۍ!n%e$c2v{|nbUgN6Ca8\ +ؿmnRqFx:Q܀2u,sw`1:rAk4=xa?7N JwJ~9ͷW= L~'T4 'Q.a_;!~>l;5Z[KEWK59Y">6Vka[fw:lj%]ޓeg{5-ѱuqN)LX6ڧ~@oyPxq!E%:,Spwn:(s8_`3C\ i!4zگsuaK [7&Lw&7j}dKqR7R_Sx><N00z^iՄ M\]sS@P@d[Pφa^Zl& 1*wm0NL .OtDYM#/ʐo p zt ژ?ü u WحtzDy @9>2|+MP0 E&2cHnG)`05m6)Ӕ$ c~ ˺fd0)Ĵ҂\ q>((M@SwdH,`_4OD4 O(g[[]ߗJ AK"UΥ067bӧYTܸuʗk1RR}a.ފ.pbeDjRSdg]l R*2rXՍ$)fdo1RLKY+',n5ȕxFl!FXRq0fk,M ".^IX߃E孎 \yaN8%KT2 W|aW`6J=cs̓QW9 jt{S?19Bb&L;rcYH;W6:6pcW)SU9Y/aXv&VG\D0iVlH G&d{q ѻɴׇ%ibI`޸)9.ڟ4JA#zy~yAAZdzHg[ 8vi]3f- + p=DDx|JgJC$D"43Vmmsd)͊wQc{ 1jmbnϬ^h!/KvnNG͈!3ITg1ˮ tYK:!upPVPJn O2ѪܣROD{fL9+RN 0[? -]%(k+[߰NϡHgq_Y}# G#cKTO;ZFz~ßM |gd̂_fDc'{g]ߞmWEKLVKD4K3FeoN{j7y0L]4w3]ϥwA#WP)6g _rfDT}C)ّ:xjbѯNNpEĈ'9ߵ-E v&LE'XVØyqǏရ?0@gB *IlAaoP ĐE3s1gCGJVLq$@`F B`s6o̐Wdi}Bσ~G3}J)a/>>*"~nT/Y QK^w(@ώG&]@r5ƒa>Iӽ+b+*f4lݜ?.9rM1cIpd)qRx?׌;Hۼ+Ŭ_vm#x ;'hP4>l"s|\i*45+s/ 쌩D$ʝ3~j غF@eu+EX -SP83}$(v㩄yGlsM]ҟRaȲٟO6Fk,BIFj 2 Zl1SSp."Y8Bɠ#1H.qNlAyzq]Æ>9x&2x9 ga?euG1V4Vp I,΀ [^]/t@e2?kJ's$9GvtjM MϚJI2_n}ExM" 3^ xR<|3@,OJt"ʩ^p}lpGgTnSyWTO @(ҝQH [1$3@pDu֚ c1sB㎩58͡۳`lB&'Hr7waXC1]"MYZG{2hxq:1ۺۓWf̼-za#zȢh\ 6)_D6ŻL< <[v< 3J.r|4$/A…"L:],=F E_ĥAC̋p@ycg]c{+N0.P9wϕrT&XD >5};Us (8?2D]nu/Ĺ<<24m aC 0G װS7oȥvk vp϶i%<z"O n;A}돱qXqPXxV| x0TSmyJ/@ OyZ{/Xo [iy {_uS|A] '9R!z^*䇲ǠK]BeWETc' T İh:䅝յEdsSgZ%TѫI+U?{; `3V=AʚAB{J_X۰L;WOvthTz7sJry8 A&I!4Cϊ78'%7?ayj3=)˵_Ba˒,6SS>cO@z{}YbTS#ſD\M'0>r>Q0GTcz9p=Kn#d[`^@r1AB.}`uQFj1VHCAG+&RE#h`Gi~wMEz,s0b|~4zUh)o~N>X~u|'PZOɑ6[筣S>Jt߇oѮ -X삡D8"*pCC+K?]TpeS'Yv4p5HL$%\!"t6۪W\?GPBA I\գ 6XtVsdB= 6_23cM,xЁ`&Il@n2ߦ.coEw }>t,TfCUof+@tN: xF0BT["Ua!0A/$HKm6(^X`8!E)x:pMkAXRb,*a+EǠ?=!Ai$`]EG^' O)W)sX"=ƇD1vf8w ̊۴)3yOLpd9ɨf  U`ޠx{bc9?`o98޿ 25#^ЭR+wy zS_Rv/R1֏<Snt'Ollχ1Qc8"p#F*>sSx<4o@PxÏEBƛB~8Ɣ^TDcZj |ʋշu 8>部],ִ-4 k_z'=bjt WCj%B5lᆆEL"ϔ5`$^'ԇP0m }os?˳f%OyZ>=e]_woVi"*Sc=VtV!;\qDDgٍV7V#Q;Au_ mOٞ;w[Fn\0YN&'7V0}{R5nEw/4$iaC?\N+^r5=p:_-+gALxi` /P%)Sdhs9o$o? "g+$`X5 ]?On ìHt6-7D,b؂[I-5VX,C#j7-GJ5VPԦ8R-&ӝfV*SHZYE)Sˬ4Ɏ`.–x mB 1 7 ~1nF焾4cv_ZHq{sP,o;jԄ!)J {LXy,-֢EYFĒ=Ɯ Jz&L2]v$O|Jr}H1U:5cZΗ{YE'O.gS,̩ m?/O\[hq&P\G0:|Q~y3VP\N|߹b/.Xql*Ԧh4=m̛w=Ң0dEsx# (k X> k!>6K.A14CE)iMN#A"EwC/dH 84 @|0_@wN -sKO6G+˃`MGQh7oūJ)TM]%SߎhԠmz|xs~ʟVrvܢ+9Ky͔<Djb\Y|HB_.")X Mfys$Y-Jn4k7Pzޠp|#mͰ+H8J+p\z U.g3cc?jA_1MJJ;83yV8Ym'#W.?z P$lfFxHaE]&l@og<lӺ 9,@`a4=B\qm7 T*N% q`^c̠)<]*O;N3Y7/`ؤGM1ga:Puu-d]i~n8TSB$Җm;*_piFYUVlb=!+(^/L 7uq1LH_%xb>~ޭL&G%k&&"1᜾ӳ l0%kϳbqgd(Azh OBx:jZL9u"W6Wᇪjڭqjcw lw|u(dxXպ B2:$?%wX8`ʦxl!ȢM9`OcF^%AΫ},#kA"!b`-:0(}nV `7RjvJK%8 Gt='2Oı&1CڂGs W\b^P[Jh@b,zo ZX,;cڰ*p+w"w)M&reV! k[8jnqBHCp`\-d7FJfSiQfiUNdY4@$*j|,1], {d`Apmp|AMcYP&7_~aaR d@>1@)3>Iq6dagݰdm?3CG-ؽ)į,jj`b;tuՀٱH: E]Q(c)eXl&hJ1V΀ Yij G@.6DM 2^n-a.3>'O csq~-vŎ-Th]c1CH43Mq/3sk~xzϰ2A"WڬHoOhs)!iy 5HXhє01 v-?@˂!^CjKtT+V- %lJ^I]HZ>oҢ9J0\-֤,rBSrN˝b&V(R.δ( jįT4A 7bwKpz-F0Hu =yo#@^ˡĩ $ŌK\k*PƥJ׆]uE{ ^Shf$\K&hgHjהx51v[vOڈ{s.L1v29 ͞Ki. 9:|@=Op_hEGY @iJ֤KL ) lT@ hbRt@րY,̤({#,dbAijL3x8_եesǩR]@ۏ47|#ˁ+v؛ Y~{G׮-y]Opuv»1 gSc{ 5e?x(>vllW3JjvnŢj<%g8à #AY9hUT$Z5֒>XB91͜/6bNܻHC1xSn$ l'k-Hz ~l5 脋}И`ԕ"EGca4AA$pzm1kC4n߱c0,JێJS~un{62HTE̜e)R5^QEY$Fw6ۀ|`$YJYjώE2+"(N{9}`t9&XnFs0Ոtq}Uv#<>:j} S͑2%Zi$H5=<İL] O;^iSVm$|hud ;4Z_\1^qjd䌇\|GDdŨ\o1 Z9br~A@ 9 s5ȡ-yR>dP 6܈H& P( QZt>P 梸EH\8JKioH2AƠ-Lz|GV}6 (W{/W^tutYC:d}s 3!PZ OgĽ37ӤE-+}-5%@|PPlc? JL(s4RtIdd;yV/m<"čleliëwԓh H< )!ʒ;Bz=b\3#ɪCD*No'GI hqmٵ/4x+:Q19+M$oB ՚h`Z_<|K4bÏ 9_G4}e?7S1"b܉ O"kkl` XG9UFbiu)~wj'G}x"߭\#XI\5Rǒ2DݡH]G [ȿpn!#$1י5Lgыx/|VCQ1~|a*W1!]%\"{5!.:}^x_<ҭH(6.+C> {zXC %j<3ЊO#_BtPB%,vǑڙA?&#mX5^[?+"/*r3Cę %dzD IBD[FFN3K삽|*פ᫫)25"$av[<}zs #4| y1 Whȱ^@bw2|q-bKHaM;V@ AU1A [G f(/DPZ3&9Kc%ZQwqݽWwuKJF 속<4]Z=C[0Õ0>T !m'Ayt%e"*gVx͠9,@QPbk|O6Ɩ;A4tYBշ3]~x<.`{~ZbZo$4Ocp">c,#$yl?BZxׅ̻]Cy kZ˪ak{Y˚z$\@2P mD8ڨDv -S.MY _:ء2# pԵ4IZgYh~v뉇%:/4lVx):'Vm,$.dd5C9n[.pjn"0lk7O?t>Oۇ7?aT0=A: iCeƓLtC,7i UD$>˓ 098Sa *{h7z\wɩ<~{' vy&M3;ӕ䗛<0f#ae/r&0f+"t4lE wv]X9ej]9^v92{v|>Ig𳖳zLKN6"cWs횙= tH`-8mdZM;>s (udt;NN|9_"S<`z=S_Ë``1?Huֹ_]Xqk]_e&6fmZK^ڕS|3_jD:cXMbS埌,nlr6M'ltZ6pS6ZcV2FG"')bLכJ.+nf)_A=HygP\adMH;[}wSfgTT?w@z Xɡ&ޮ7ܭ1 Fh@g^`dR쏳Z, )#IF{5lb RHcr$;^,XrcK[uKN'%[hFbFyV0rEΐPn!j?7ƴau) @b=ϳ])ey*l̩phj2ʆIp͇a1d1n[!zWmQAG~2lYrؘKhHW63|::xA9C#9/KJΚ11//2Y,y"}Я=PЊ,86In- {@b96;~qЄbķCʲ 5w9+X#!ä(g-lf]P2PAaiT7p.u`q% B `ѭ0 c `Ti:L>̑k<;~̘sGߋ~j,ߥk#8SV=#+ f>W aiE_K?lK(`9,p]&.;r ]Dj&f?k#DR? e#Ms3t;SpD7 ~fy@ЩhE5xW F<Vcڽ-{v0XY/0rx[e_'CuuD'F pC j9[j]hv8*yhb $mr3V1[RP,,?B2.4zB3mA?jc~N=V0le2D?噭nݳDxms2o4+#H)&(3i[ŦL!s/?t۠tra &w4:^m lo˿ȴ7> % ZĖQWBxieI8PLv zmZ :@ԧ.p4|LOEfuݹV4 S>\KsYo#p&~ htyv 6|{l3M aug{ސG?z+0a 3=;rbcGKLa_/}%n ۄӾxuPGÇH@'ho:,Ųc,1_:GvC$2 %Y1jmQ,cpeO"uN%U!lV v[\;&h74G{]`AQJ!8 VF )}ޞn)<+ Ie=v2?{#2>|4ܬ>eim$m1_׫kmQf;>ӧ%,_L~4Ѫ14A"S-bZHp&FKS"H-_"&pgfC&+\#* X9q!/N>,"X@4xEmTxgYg£& e'x͜BPJbb~[k.1> 6(Ԍc H Xߔ 4I@:q +!bky@MMß̸ljD$3qV|a#QUfe^ FqzIU#D|XP 𑇦Ou)CU  ꏕ%d脉[尘/鐹ii54Ph ] p<Sx'7o|޸a3>[>[MBj75/L.T%2慎 wqwkj7K'H&"*e s%R/uhJ Gj=AH$8<E#X:JN=k񱳒cpa-`E |^mb$`s>6TixY"+mp<Tk*NDfrmf8>>QrlO!L0 7ƂbگE¦K>8UM {͟Cd]gl~?~Gd ]SUu\Ab…s+[.m"W\BA3N\2{^֧*VBX2zr6zc봉ʆAS\".r*y=HΞ ow]*2uDT7ͿFbMm:&se;!k@rh/k.eP@Ӫ}s3EKkiA}aGCcL]^G$8z.uy=gsDЏ޼I`CDž!9b_z7ԀI U|~[Εr2D{6Ť &042jōkƥ/2-#CdO^ M٬Nπ3zgƳae:|i0T$]gp6R0tPlʖ .2ѵHW~1%ꕦ\5v`CY[֨]`׽~ |Q?7?jI 麶=y.@kJSϔ?K(Q:nlY̚ԃ%DyS"ir>f~.#4Yhr)32 f JsLSIN' }5wtW߁:3рd.EmhczRHF)2M,h_G! .#@'ުHs*%x NU :E5:[3>!  p(;Ho_Y DĖ.0v@}U=z+,I\t%wZsu%J?CJSJ+_ ^8"J ̣OG]яPfv͜|_;o`iAy[f;9Y Xf!eԆA~be&jfNC=’mKԱ; Qec&1Z G]z(^uBf:vD1>cI0a|j(@y1XȠC75ȈWa$ 7Wf.:wFz>/Y~G n%t!V/M[Zq!Pc 8e\IPhAZY0wKg-b#vB`@?IX~dH؋jj?ͷ8vU5Kx`AC5}ņ:t Nq\C"Y^aNs}$o*oۋ$ÊU?X!d>s=VP# }PE%s,yoj ?NȆC[{NF-ćl36Oc{S<1INc6K>`5;Lp]/0j( H`l ZA[! j=z_(uS&Аs.F{v9>*ڃE(f`D0Ռ*/_ҏ#vZq LiL XW?"7aϱ<Ҡ&WwY"< gcX&Zɮɬaʭnj.FMH;R1`U2R D30s-{Lg?5 DZrhg/pT'#c;Cb6%[KP>s[&LiqFsZ:Z+AjT >~˥Zm1b {yMӰgVg:x"|ldF%J @CEKS/u9 H\4#d5^+^AfH&il³?> ،7EBħ1a[̃ZS/l3>[jDFT/A zݠp fflIAd>9ꇏ ` tpTo }bҫ[.޷XPM 7ٳ$-M`C?ʤ!_\w{9q7#AY Gtym볤e`m>4,h XvmZ;Zvc1K&9JPfqL}_/)C}蒯lR0G5j߃V` v̪rB :1<0Kw}9`CpRnuDၰ£oLęJy/XT$LqMLb 9g6BS(tPf9~8+@^~XC$ ` bxA%/[]%M9[ lncd:G?1ܸBEVXA)QƃO d!tz?"8`L|$G6t}9)ӆk27ď d_*{MyNzc{+;Ni;H|$zAFpdǠb1x\,?մ{fYaI0tn@YVѶٲi!l9K%ǹdI16lZmeN&7ۛxg8tR0{"W< `Zr౟p4@9 ;/Py[1Ө]&W4͌#+/LlX&E:*] mÑS8y30a0+CUkԁMeqs_vĝp@nyE `u ,YbeՂ~gHQ-\^Eϊӕ8̀nt@Z\HYxZ&z;HMGnc6I@kb$ENJN;$7œX lчd0=w:x;t7?7ݔX]heх[c$7t&@Ÿצ s̿ Qe.Z7Đu+/H I s8pěO/m[o jtYigCPP0 "4 nf:o>gu@ˠ 3oԵ\3$Pj\OHWTbJUƦgBK4צK B( ką7 Cn)/-\ ,`A:f?V+Sj $H{WAoglaU| əJreztV[o\dx8wi/%qT%e[wpc{I9Z|#T͹䲘߭sA;IKd={P&~(>$H>>˺r\ 쬦,ZP5$}1eoJdG3v򞂁&9Д)<1ܠ'9vƐ&{bqZM" 4Ҹ^a3 Q=T}F4/Yʐ0JثM?"B MbCcbj"S}C=HL+ AjZALs,+T \TN:3췫QW$P^@u싒rs]S04eN!wZ^$]Ky c5hwTI +Q1p¹ހrݪ gNw>;m/Ž6"5U20Cߊj׵5NϢt=UYuT~NX!F ^ ,SL&Dc2QD, IH>lɍK=N\3G?]MYKS!n,ҋs t~3  Ŷ`p5Íy0n/lb˺7p*A_Axof1RsВyނݾ+R:hf;e(UR`ba"AHw` H=Xc*^T)uI"%hj,|A IV؜U 0 0 Zǜ_ȅ:^S׊^]-<ǜT~$MU cT}$&V,a J7{8qOA߰ u΁? s?_p=珄BNtK n{A45^!y\\k6O=adY~]29?ZdOmr2GѡVӿӼ'&kwܥĕJ:#0t"Wr5 QX S[8R3xpj yۧ{1qS9]e}EX9"7ZEBSv?}N•jXWaB-l֌\>D̩q\OE/GP4&Rh6Zq\e3E`mQ%C 2ny2Cy =Q՘aJPs*=n}=&) v6|$ '?a9 /] VF0|'+h+:06C, ׌51VEz^sNW"RqF¬"R-VFF0 sQ++}y">O7HbaH7Έ KpifFiY @!WӥJ?:(Ohu/:qkJ@|а nVtBr&tfּm#sO8SePu{!̅j(Gֳ8\!#8nJ=09pvmFT(4 ;L]xr0K3&̱9[?gX2.Pp㯧]Z)-0)Hr',.8u9&Flqxc:tNF~3R-95D@ *Sfu|-<0nNOzj:k&6E8jO)'L!<{/.p= u{?Q,u Ll]S#;?tgLG%%[ OFEdij#Oj"֙B74 Y8``U8Qgט [f3$-|+kd($8hՃ8<HłX Ï/ Ѥ@dded,k# hڑ2;խIxݳq3%a@σifKQVAqఞ8x|%kL߰ *_ qkx/b0b,Z/hf@c}m%<"-w_8g֙)3an Xo}&*7LUsD6S3 ,MzTeG];4?1.FfceWf4o ̘y>trVj*6鉱LJ#°]f _>ш',f ^ L+ƀ"|\i $-?Ǡ@o}Ƌ*̓,Ef5PWJA%!b< `ݙ(e 2| b.y,`Ojj(EzP8U$`HM}'Ի_7vz~ti)T[ DQIn]]nT''~ba_*F S^D,n<!'{ [wۇǐ HDLA[΂fЩsR.hhIw|W*340 *C9 -YH8c0uMo `S>CR0nL a%As 6g2L}MT;f$]nogGst BL~iG ua-Qp:rFL5mw|1 kvXu%hWY.f! ,{J0/CZRZĤ SZ{3a1͕Nn9->rDM᠄' &6 4fh 2ecEŖ j[TDr?kGsL^B<{a* .q._WѲW0A( 2_A.bgmK[`5iecQϭF_;JFۍK;S8./nHm$69~:u% a]u/{g/}'ϟJ O1"H\fVþOʢBU / R_sh5rH㊎5ʥ۲741-` UB=[dZ1Iyfcf|iYbGǪ0_k[qĂԩ)x2H^`yeTR=@əz(l7 -6aC, RY업PcV'㾥W3-:|o_ȒGO aXk|!z)+7 #6tzMX=?ʎ*`aDg;(@kƆ;玦7 YϦtʛd:s:ogzA<óeq Ŀ(\F|Lu[ևHT?سSOh i&yT4QnF$m`:FTpGtw㥀tP 7X8TH ľ05bɭ"F{'[Yx"弄PvVIwЄӢʳ5w𸗄 ]+FCR&_v;{LJ#o.6Lcq˒잎I%OTrmNW{;GUp\*PN";wOY߸!`ǜ_K NC6+&-QijnQ"G\syD^9N"̒t0U`Gk5ڛ$JOڜD-.8@۩, _#L{)A_JT2)78M}S6P< ? ol*&1?)8&8$xmGM]K"[fT1AdMHәg]Mv2/9s*? >/|cc;bfД1ͦmk,obty%vϪGG5bU^cM$F[AG4&cܜ)K"kKОzN3>jt;#R Ή=4 G_B$A2msz}W)2mG{~WN:w&M³KtF7^ˈZO|+g҂)0>,kN41^y,~>B3[w*LFcc&_~+[H=,;2lO8P)<~&VOVzM=]̚jr1VxǷ\jS) 7iu :@ CdM~Zt uBZ`'i&%ݨ:1*8q-3bPW`(&5)i3^ &Oq9#&D?FÆ2 W~/O^E*[sc=vi*:ӊ7_NHFU>fل<&mGf?S."F7yg~ &c'18QJm݆:(3Bu/#ksĊAz_#A,KRb,{\k-;Ѓ"1]ԘO<-Hՠ,Uw{YzwgFGΟp9I'驗lyG3ŭB&5c?O黶8a ?b[_ZAS~H$c-fIg@r92 4˿a4'nUӠ- {, BD} 3^i{(\'%ԑӸG0(O°cL,` 5Ws<"x,79 Yw. hqa Sw<_I=>- #PpH(x!=J=66%oKm~YP(h0ϑr(LnolW-L( Ia^N'J /ȕjR ?Su._~[BW>$oBQؔ9xQl` JuyX]qQ֓Iqg:כӜ5Ϗ@Imdz~qp|{)(Pt` d=+cmH s`AtqmX%^ ]+jpe*4o|$^o(X!WZ`mԏ0z.I#aqYql۟yβXm 47t,}_f:ڶHylWC-GjCmq'̊XX8*]5{'. 81p) *]ti@IGye \~ȉJljDyQ{j/2$$I{NCz|n ".L ~fԕ!O"GH.dѹxu?/$PA٭4 E2̈́)ȹL{J҂qɼ;Q0cM_|e$[ HL`\2Po6-pEROZFĤz>@1}c0~@M|F=dcӪ&;AS,Ui"s:!9Oߗ^dт4AKa+Kha N Cx Z]a` w lxSV/on-ݪXq$hMNhbDM$ bXe{_x4)y*!NAt<ʜAC^t-ZneAYe3pvu+|g>֞ e吗K2$[r1潉{2_f/m+)U6U=N q 4 T!W@XWS'%`.ji#h۲]sI_nvG1 (|2aSUAepCz#e6sS8#r/>F8 ;YSMGBH;'I$H$ (H g ɍߡмr_Q`!fLxko`JRFKYV &s_? 2 hpCΓ XC*1}CY?AY?a"|LNvv3d.?d+YTnPV KC;N{',ӋK-'~q8}sZ\\A#`*;q{wPГGbgY]\c/*mGMkKz040 \˜!$x {86ur,+\c`ts6ӺYx|J\Ԥ ssυt>_!'Z4PvbX|pwSOw1Jspv?cdYƾ5dҧ!}X$@-i?T~Ml%xC؞ߎBn-J[c Hq?śE_/sbS /tl5,q)iƕ =+J)@:wc.\[ jb~0J0- 0c*0y+#ُ_ 8<)ya9 4%9Bͥ1"M zdUTO$Hk@p]ņ$px)-6Rt@HA d`S.AYt?,#xʔ~ÖsMJH%t=n-wZ792r>l{.C](rr3*wc'\{ptd_ǴxB5c+cʎ+'I8~(1Cw?xDD0ǜ_xu-!}ژE-M.qe[-|:;g_\1=5Z|oήZ :5A QBP1L?& :BGzO]z/vMw}NOwVݦ#e%qxe]  m5yq}qj NEdu@J7n j)j?z;d yWE3 ̏{&7Ծ<@SigeC:kN4|eH%k+ ȍ+Yh7 V;Ām05sˠSqiZ*q}Ͼ$0MJ}#IiE>%/&z48礋CR k^F|@k+yK,<+3$=Q\{wT,;4٥nQ[t<\<jH:3_.wUYAG5^3{-ci1ZEqlVrtrߓiJ wW̹{Ac8 s9H ji qM! 0wvD-jI`1X~H=gp:CpALqq1wV7R}혳u^.ybCocOrx[ ZPVp txp(I"k?`ԁ;=+b?pUUc zPˁER-uk c8o{g =VЩ"P:ԍntUVӘy%X0(1RНס2z ݢ#q*9 o'$Da5'MxA/XEb>wjDE aǴ) ?-ԔnӃsFDhƼv1+ B1ВY5tDenz@EB-VJ!ϲoPr5$ɘƬa ˜D(^{ fX0 = B@0ރ8]Xm~ ІZ1hA/4gq%i&9z'JH@jTN}yrĊD83{Ovjzv iz2Dʟ_y0?ջ-N>;nivfTʹV+Udqoe L. c`(-aj˳owjk}w 4.Y9~IR_xzvI/'o4ߎx;U6Rg/%[QV?W?_A`ȿ_&@n UjV&Ѿzp.}f3glkK[31] 4RnenZ(J UMnI6L)jj`Ot F gty/ a#7g*Tf;:(N aw=w+\x nG&/fq`)QͦIYMc`Yl4V=c:bT9ҮOY-M^9gܲt,9}GS6Ytdoj&?o() {vUR;/Xw:3S]7[E[bc.́܍;'6eA`g[+asOz0P| w W/(ޗ5pD@|ҏ vGs C{J?1a<`7& m0>KQ))"aM:ͨ H8 CQed$Nwy<׬L vYXdGBM %8S6J}Ш(>1 4#YDb5?-yʛ~2kєwC)cm-@r86BT(Pv7S c OBƈ x㦍 ֲu<(P[˘׎>֣뎈FDr0.׏Ia5=-7ֈ#O/zǝFGyA_ ѷ?2yxpdx8Rrtٌ~UӚD!ilxJ@b*hQںb{Z.::lIm" i !|tvVy5ţ C*DÀ."KMZƻR:FC,wslQF=/n_}ʶ b< xg`iԤf1+}k-x/(A#8R?<4,jYg {w*U31픖F?x1^/ 3oo1zd<:0^r Pqϔxp-d sCI{i@IBWN݂ 8YY?m\|2M4Y.'$My-l/mzTfcJ6 x~J+c|7GT*:=/LEs_\C BFcLaL9kˇ3]ƳOxsucE{S `ix(6 Ak?;z?P O'ÃH|ũ= >֬-;vE l%Or4|Mp]9 o`t <B)woٝ/m`78ųB?C>/ u1}Z,-o+lX\9#~Rtr~#ɋݐ. 0ȜG# 5نT*k;.u˵Bu%t_>Aܐ ɩd 4-v -%;{z~I<;ꩉHUR\k8gF LAs=OJmG;6GYZu|Ǽ8hK̭N'Z"gW|ܞvt"w4M=ȕ!I-"Ă h.v>JSȊ//T%L4~=^P18MiY&0>^kA>cQ|*r9evw}^0Qs4iln bƲʰS'uldAH.kڞ%R0:iXfGE5¤$nD}埝ՠGq R3od@B4 Li3Q0gT@&Zܿ4Xj*4iW}F{01bH΀T+^=!%AFuT=,|8)!1?_5 x$!ٛhj)Ы5qJ2\Oߒ]Pb9TAų -u`ڝ*ǼIUywǼ2zA/)v5ﳈyz K*ؐC#P^>XZ)lA/E _l ε8`6 `4Wo3!?uq@P h- n7<Qw^VFg]3Jj wߝ[<Ϟ?9Yr1lv0x x؁~bBن~l02V%纁3u:3;\0!Kܡ<ч >cO{ۅFql^jp>V1.n0_!=wOP,lڄyDm`=*3v6ӥ7\^z3/ֿsEn?Ji/@fUT~цouCBynau;|1 g=huݔE@Y-46rk4-fP|a_8; Oa&*_87T0X^f ү,9D-D;t } W0cq|Ŷ_m׮i_~$FO_X_ &jl.FԚnԌzQ]͊7/U4\԰OV[<7Sjb+ǑU74l#~*uYQ(, Ãb;ҷ;]-*?loEy}.{a@ T hxDދ#9nUm1840@N]3C7Opq+t]1/fxzG[=2J niE$J7 $8u( X䆾 Pn\9AK?VLP^3 (G{GX=~٦?5IgÒD١l7.p;r n%@(>5@THnюw. ;P| z)ݮ R㹪aQ;~a5lMx ?R?x;! zt'zpC.=ƭg^*RZ>ELlu3*0 o yY \#y)W8yQ䞣؄kUl&:d-fKO25QJj?]W'`W?v[2e\:nZJeW9b+'i{~pdǑ"L?类bA  $~ 0DN^|FrTH[h`XDu':/4CiJs=ej-;9eMyƨtҕ_0FE!x C @|YzL{J<׬]'/=1Ӄl1wA|Vh  /F~}Zo|%,6 2ArްY m&@ l@nk]WLrt~֌om{B|e ^HQ<Ef!p}xCl5b'.ogWHAt4p{=R{pEbYG8;p'& ݳ6” P0fSԺ]ߛAKLdhVēstpr3˭!#^3xFmG[=F`n$qݭC$LYjL~#w#:#Tڷ c $A|Ct(3Az^ѿh2d>W>3+ߣ< o~[eLNӗ1N:#^ռy1gtO.rhMtuD9Û}:+3 S.?wuLVRLWCl 8Y5xDSY90\GxX6חmxOA,I2^Fl;2T= 20JB~(1++l2Xs oJYgk'YZ$s`.`)s1B yjSJ?&vvIi~1|ƈIT:P_]=5čBօ-4?bEvA E8:n!vnw .n0SĈcܥ0SGbЃ91\?ojdT#@ k Eoi:aXRaSH;uO` -^ _C B?Apt'/SyOkBP#ЬHtx 0dɌٟr B&~Kݣ*'GR Vw}…[3Q>]PgA28Ng<"&5cb"F#KR(. 7ߖ@,2T Be2ְpxTH#ѝ;'~D: usKz8؜`'PfOF## G|l@AEx,U~ B>=|5|=M2 Ng1G?0m4͘'1y9 WN*l Eyԡ–J`žE4 O(IRD DvsKh {w'}  ^#d5i-ٌ鍒e6// i#HYqA&0;,]=k3\1!5i13H:VvȎc5P}0aAo7!u<簘v LRx:TlG5bS͏C}h v Vn0CmNxq3ɔ oan}~(j{l[MPb-9~)s+r4Yl/RmbpsR{҆Iϫ3v`i)P=M&t0hh=v 87_y\`_^]b;*%}DN(ZE4-:@X5'7/#cMC< @dlj2ч;fG!kfZ]7oσe܌tuǠ Pal}m 9yw#1 H|StewkGtj0|J׮NFe N7(޼ݽx2 DI+2Or4#f!L}_P2WWO71aGπ6c Їc,L|˂9Gg  ʘ u9irx}F-bй[{6z#0X]jÚdHY/I˿f$N͏"Kd˙0Tӄ,NG,~i!k;,قlw$]r \IjD92i+#<ʛDHҬ1"vK?|6~1Eԅ ε-_(һ 0A},wP ~pV"O0C:A|8^uTF[sC(QQ ihDXgXE&׍MqFwb?Aj,Mk-E(pXhp2pn1T)]3!H^0k1CqkPx5KBT0zWv[fv3U.[2u&9)hy `|\wѾ-9u39[W5]W̜<$mYyycH߁>#Qe.ab&1 {z9]2 jY>{v Lq[h%GG xa)ClChv%UA2pWC+PV,@2^WHC销9P?~ewHPKeY#s?}1FP/3-ʍBHf-G{_hc ).HLXxKl^\)c9]"H=pK\  xWtn|229'Z5<#_ |z-loHsz&-I_Te?Yɼ=_|JryV~;œI4-K˺b]Jc<:ĿL3/1RJ|(Qήw0Xٿ> ~&9yOI@ _A&"EpB[ ښp7 ? 7]# դ3,[>f ;ǁ*GWRi>7!~&szg vJw{{18vW а2Xz=1uacš1-}SG54)ZrP|룣OZ|1[? fW;((9{vthq^;>zk[ᣐI`-P[ C:B|kEA)WQJrj}=O-`_۾C0hy Z(` f‹]G1xcuN |ZVr&4!CcM5zw4qEQU&l~w\rUyIs}&8| XYKh,?$^qŪL(! Db߿r`u(3t QynΖΟjOM1ݔAFAjk)>7P:\7R&X~o1kd kzrrW q0٤ sJX0tRTi ᆢ* 1aLBa P&:4}{?!%mvo,g8CIK`<>%:g̥mP_z&8 _GC>`[_mIag! X.4Έ(7ߣ!CL~ su1j0.ٴЮ"xD! Rm=&N"Z 룃vR'G ϻ[}40dҗlj->c5c.!eӗoϊ`lߘ'<5iڳ]ǶO?G^-)X"_&8 NOdUZ] Lf]bׅؕ{{%0#҆#X=ЌI3z`?7+~Ln c-a %ΚOT=eU\v 4v:z1xf^Y lY =vP'0lA$!6qEu A0#Tg(bQٞJ-9ܘ%{A<ɢT`6 θ?%S93ޠ|}:0}ǵ`VN!PhɚPS.Q {8QM UV*qx !pT!.-قY2Zh ?RX_,[hNRa{BU L},h0ps5#&oG?2KtL'm9_+!uA<-Ϋv mzψcǝ3=߀P>W:= # LBɴvEc>a~4bg@ mFJiAcY,7Zh17 9%$n lc10'0hIfr)!s#ULO*" 5`I$q!0Bg.H@k?\U5Yg[$=GlJ59i8&$UT)0o^&8۴hNg#==0.69X6]Gs!(bA3 fy{ӓc1h% ?1?9C9rh6}&{@ZULxm51q˙۲9AzH~_&0cZ1fwm0=i:~$ ^P=DO57F V r{8IT&siA[ ^K>i畭;H$`@Ais#:r#zD LxD4nyEtC;<9-q*,\l7".GxS*绹TMF%*mqjL8Ժ李R0%kjY}s!1hiƔ !79ܓXYO,5sԮ3-!zoӽ ke5}+|]Qw.?&7v_UYWjx5QV` P!VOv~%{Ƥ+M{`goG ŤkjG<Ķxhx҉ҥS6l{D9>eaA ҽgrTlؤ VKz\d4й"%ȭ.@ ÄY&M-єK|)8;,_i] ,. 5z2G"[ŹWѱѢc9ZH{^yW:vf1 v!D$o|Wq3+n V X"ٿLVՎFgyZ H d?V'7CzIR`!ɩ($-gB^x47;8Cr]PԣcYX$)7t3Җ?,d&*D*0 \NTL V&+DF\u<-1mu3UJg3Ak_YB&FL<1+>hT=n`LsM b \>&3Qw66^r6Z:fB':1ZzHBpxmRJ |a'챙6z p-R'9Rhu m6LrP-Mwf 0\J@MeKc Wփpf=MӧR%;6= <{ҢŽ~y`ZCB6Eb?cy6e5f@סּߙz1%Lb:xf&e<'Y c7y Se,/"3@\d,? 1aeh9FxL鹾^a{O6w |ДBL9T䛌4'^Tܬ2쯀-I,)3*h@bcf28O ۾ w}]&;27Aل+ѠK

d]˃ԫ8cǦ!Ctn}y wGv /%hI=%D>J ~VGR}t:F4_@ji-W *ދ{z)gf'cvn{g6D?v`??g'- 97ӣe# M;@daΐB&҄74.P⓵GMSݰ(;L4$7K℁GvA\ݭMӞZ  Bd֐0d_┾ /x]X=!e4/⠺)}wu?.]B=e< 8ڶ6:,`L,{n.κ i9yH7Ƀ!=-}jQ:a\aSb)Ǥa&7b,LVEŤR":psФ>8'@K;\2 g2M̨Un~{6.I˶ӄ`=3ijg}{'I AU5&}J\܇S΁za`g(P>gS12{-m)%E}+ޛ+DV0圦Xhk<xJ v qAh?ey\ m1UBĭ?BI }[;8?智&CC9h o} ~}v1lE-]^b[&7oO0 F"Xմ:sD4/c?c7C~ /Lr//U 6zQcě]XxM%]68Ze#-t`r.Fk/:n5=?MJEd"\ u$D`yD d@.ymPtg{K+>Z`Ih|/aL 꿥LqH4@:U_@(u8%@3leš7΀z:ymD}2I7h8 ~&=f#k'o>z^{in9%q`L̗A`/b,e(+WEf^׵:c5(˯fvC {LN_#0|ݶ=wAw'ᥖl^-_ *VJ%Ctڎ 7B,33Z[:sb/p~Tu@ %A7d]OHfd˦.Sa&JxWuVYlnbEij;sH>1I?Vۙg0HQGt^a5JڊKouYC/!Rp58Pv6Fp 3hN5v9O,a?g-Ndk~4;{_㽻*b/ǟE"Cl ;\+;&b% `$ec g^̠5]_ukzꇂxrT'b̰U"j$5GApU\#3sm~~@LVr$EƏ:΂,hы0p 5F?_$>K9#®#UJTzE C1"";-^/|8lSFZ'a1%ێnU g: Є:#)\s=5xrB-%xʞY+پÖlzؖ0.#n@{ZGDxt\V,>5#ަ_7Gzm_5P;"onZA7BcYR%l#Ld9 _{E魖PIoZf^qDXA HRL6dH$2u됤& YUgBғW" |)A_?Qbl Vc#.zLш_Ys^53H\->uAG~40 yE?t¤B+e:=l+:K]jڣB5yUNI5Q8Rٯ- j ".q{ס,^mɘHqg?K!Ȑ_.)F$XֳSAxh+,W[pl`W~Qۡt+02E*>& epP[=q:F}jv;B4GB~_ G<.֌d#B R"'/h2?59(d}FS5u:&}s3&EA>5'\WQhudH,62d^+/ԏ@_~vvtHXvɵLL!hfW5,iϧ T~ӎq6b6b jELzYAAb{B@Cw1馏m;޷K:owlKJ T=oC>⿱ }E?X@aR_үj'~L}~a{?b y9ڑퟅ9ibmL4_WkCA~hSұ*7"P뛎3v%4]TH]j*{[#idβ Ze0?0.Ȩzqx-ϬYJsb2{/qVP-vM If*SLLxc6 ޻bc ?''&L'ʓs>Tg1^5SCcu 1pxW@c%CYvR΋Xs ^H43!wvj YynA>Rs Wp" i :-)0aZtW`hTe훩п~ iߖMe|ް@xogX=Ke, RYd]l.1=ʈ.+ ?ӕΞ&#EAv7~=_cpX*\1mښqZ6Xkġ/!H èeTe$f :~]S\׻*{ pҾ2FFb31z+KyBQT:{!˘X7|*f=|UdА@LobHgmc9R}{XY;hGx_9]`%6gz2w!ɮs\ /qݓA2`>'~3ryS:W>cw^W53.&vQ]ϵcU;K[^俞NԿ9CL>9wA][3=.'5O&TK* 0|i!hLD|2PpLejACXKNjȘ[i|Lϳ- sKHkB]?ŶYɦ7 3w9rG,x0w?\kkz˺/hhr!$h"p[PQʵ1~@G(1Dٚ|q]Cyw;pݥd!%3>2:]^Ll#َ!&*)Ɛ/vlc 4 A$;`o=\Ȫxְ,2!ղ0㢄cEHI Տc qm|@Svr1inG,l7<ȿЎ#DžP4$[F{bk]y:]4;B%%׃ėAl Mi>Kjٴ14ҢhmaqJo˾$ irsFW; ܹbE g L;,[Z6`vL}j80}R/fC5LRE e0~(4#h7AX%C KuKr<3ĨiQ#QHtݏ?S. !m'0F|Tg dee}vxdQCi:*pg n:t֞QZFWJgm`Viy%>L`EE]0o{2 \̓iUr<[,#11?+er3ݎXy` ΃w6i{K(|?dVʸ}\|r}|+ )&ayP|V>B?K{tPB5m!+1>b0!x#O;u0 ӶFd7ž'>łbvTݬBTg$d>Ⱥ'=r ?|#l$2g%[@Z= #©fv`ojM8pr^C1hs/ڪF v>fٟ8ʑx~"|U*8B[ |?)8J+z F#TҋAv=FOhHd[%0 ƚ w]wD'1i$ط!HO˦jO7 g׹mKT`ՄY_TѮaXdv7#C&`QgyZ̮`>Ŧp(0 s%䊶FTSGPiÁo>aLMnCm6ѫd 5eZ0ܮ+Zs CTXo16RӶl LG/g'4a=f ō c} 90 Rt]x_h`S9>YHgkt,(>1&%~VSZ>.vDhǘ{3<<% l-xo-FKCO Xg^pL& C93=WU5aBlaD PNpZM0/'X<-/)Lx}ɈTO[5 *"0Od^G"/p s -ߺ2h^C8fzpծ95s@4!`/E1}&Ca^0qy9bOC`ʑ#|6O!};=P4#dd9/SX0x~M%VtK| o}8_hd?OMXF ӵ~Li}Z.4%Z}V/WxڈYGT9a)\}C>*mfp5d' fX!kCf@y;ك;y_".E:BkUDߐ1'cV^2`-ځ R]m5ք`fzhҘP(6R&]}PdhSRynyA_g7:wc 8!~dVGTeKlO3ë!a~*7x"?sm\`.K Z!eV(?84I&$"eL)WAF#巾)`>Nl3%iikS] rSXjaU#`zdar^i3&#M)vGhz9swK<IJG}!J֯&ۿɡ#Oaka쫒ZyrB1(Z/2g *LHwڳgXPTU{*{a"He< kO,F9!Yݗ%eWg}ir6~FtIՌͰdj}A{G1Cbi<I8uPr={78~Zk1 ^}Kߋl 9 ϰִP!L_g6LmG_u3:@ZlKX}kVՐ 3ޏEz[L \PI NikNٶ!iZi~I.'dD| h1Xc /oj~.gWB]GQ/h CP=x \Sp\*og?a'%G.=|ucfr(~1"n|QEZ. {b3j|1̔ jb tU0>7R!n A'V́?qAiDU>4SC(Tc|OR :l~>ل~+H019{8L޵RWZ|+r*`9U_аLhULAy50Wb+FQcy]Hd&ɔKN->Y$[ǟ>>h2+s%gyAzK ȥ~=iq˲׽2,y6lOuݐL] Kyf$&7HZhஉ@!ٻ ѩAPb9rH:߾4eyA2gf[!jHXgR4Sس{GmS+l^\#kG8rL>=4BA?6t/'bӥˍh4^=3`0' ^X-x{H^YN]R "n/Ó/VF Z0[ ѯ0E|EۭHޓݰN/;ڷ$fՍO?a|BUjUfi9]"⎰@c)rpf:~K4 =n\/NɠE2'Ya1y!TѪ4O1rMiMrEֽ n353^{}vb̃\:<$$Vʳ4>[5BE:|yٻ' ]؉]k:V\ӷʶ;=̍'1x=K1zG{ȺzͿK}E '4 6rA(Y `+},Bby" (G@PMIN p(X& =M7ԃN#*aH#t9cny5X&X3ge=7vj?}4,JRV,,?At핟 {;XE>(Չ"CM8me4qfLgn Бz` R`̷҃B $}_\:2o埂K}^;qZ;1U qnod};].pr,rB]qՒuXLQb幻'Ccy9ZO_*N2-e<S bDFL7lҜQ6.`"S?4틫;<$*[ å כ΃F}2E@shB6=^Q@0b~qj.9 ~ s~QY R akI!VL#*śCbְz~BY+U 7RId@ Y ggYv ۿ wˀ$chs͗Ŵ6nV>S Z[Qa]Ǖcحh7?a;!˷x2쌣[u7ٖ}K__h.)ljqHaϷ%I>sCj闅UЊp#q0H5Ł7}^rT[V`4/9^Ha9FdcQe̴s&9)'m/dj|oՁl%HcФ[jOinB-ȵ+K+a{jv?ۀzbf͡}[?rȍ3Vp<qH>b1^9NT|I UA4yu__y< AVS`2 xE g/lӌǸ~jxȄ\b&jU8ypSآPoPX-d 15akBX.<ٌޙab4'\щgVN 5GWB?WH-i*ܦ31!@PWEܞڐ;:ï6L(0ntQ t3@0`{6+[Re +{B UV*^NWwcvm=k/k_CsE;Y pu9RG!щ&Rsq;t[nj ~m x!s6Uμ4eJf< F+0]= Kٜi;rϿcs°=YꌁΛ9l)F;?Ā>G?ȱ+#d 0а)]b|*H౿W=o`r GxEfD >~cDz:ݖH-# r3:n$}sA\gJ]'63? {}YehOL& h1@m5&K4׋}dpa FcvGAƠn% rCd&bFFdSxYV>swٰOʗMnc^ Vƶd-Nd? `r٥_[փp2ii2^crQkZ̄;լ.!6ռ`/rjŎ+-^$Y$ E(*j<_"<~QD|b !৾G*v Hh~x.3kt;;J kxNd(k X'ÏY2d]wOQHL2?G8JAƇLJj{6伶 y'3&HvHcz߃3zg2>T =@ײ2]\`$j. k'jߦYu?+u ÇZ'4CA>Mx!j$RBU< j@*;6wY # sX`!{dtBvdeojL1@.9E%J[o$(8ʞ4,S7A\ལ#C<_R|&0a9p>O3Mi->:o:5ӯ;3D賫&1H^+P Wq{`)SPi9晌Ƒ\*W_݃@Bi~O4*V9?f"IcY.'Iqxz)ը'2^sT@>Zr2]m*7& k W( =\#u7aAIl@@!jF'FX@gIB7>Q$%bôj.Ҍ³}K]q46#ʻh?\K23&[?=gWٻIѲ8m xzR7 i2d.zw}]q-PjC[E{X0ThI0dzcvsBvb `rtNJ}& !ݢoq"r0r(D`G/dȺܽT%vZ4'Z_!/"?(FBQ,ر@g?;K7krv$O"(\u"ߦB::? ˭#p/?O^{om2>Y{WV\^DK{3J_RAh Gy c!Y ]K"PF S:b%Λ}bmW}E  *k;{MFZn!~6CGL*Q zT7uD 1TL"9]55fШ)Ř3bf` S:iJ8)@AOv/ΉdpC+yXyt`o&3}. 0)vCTuRit_§̮O-i_xiy&avla&#r$6S4+}=k<,Pi?& c(=!F:tB;hjJy|Giʿ~>BYo-0o${5Ly Ew 4yߨY~>OdgtzwPJ*%cU՜l abX%v.u|||^/(dd #&gI+04l4^n>i)rtu۽.t]c?ؓf%ϩ'iWHH-5I$t(/n; ɦ /$Eܯ'0=d~Ymqo&X̙ה уft !Q1V/H M(vn]^?Cs4N?q7td.15mGfwf\i=ʠf2xvɿX3oם!5qQ~4I*L' Ľ?8 g!jBSNF5&cY];" #ֹ3~TXn> 4gp<53|h;NI?˵fNqJuӶNa%w_-1ɚּ,,”b)TK~:ຌU.Cnn^YyrÐ m2Oy. Q&eahΖ9-qqX6=@2OT0l=rF&UF&Qg`ްNxn1F?>JY xYuw9n2|pR(1?]ZH?ʹG $S,ʕ[ E#mMy ^{ydž/*C^'BK 6L6dL>t@>|Â6Wa0jpxw#OvG{R烫 6\IV!UcLK7QlU]:w m7L#T̵ĝ5D|{SqIo<h BK;{G d!1Ub1~^@3V%˲窒`YjGT>~lXx~V8~DR15+d`1>tW:Lၭ#sJՇ 9!W/Uܑ{6.Pt P4Jtkf+H!;LLv 2HEy$X570' Zt7x g|y5U޵t;.Z͓?=5b)4&sx~- TʇL] 信i0![fCa#Na2-RL/D&)n4BDl]u0Bn=eޑp6uz&<LJK7Dߊ>t`|עiQ| ]]6̹LF+cx6K(ܴMeaξSg#q0_'+w{03P-k{Zg.x-Wu h/P&Jn( bc!v..)8Jŗu?09>03ڕ›^yCy77|c%L[] {qL\kk;,qf̦%3ߢ$x"Rl0J+ 'Z! -ghtXr</AɅfTbm_Ver/<;EekOR oYM&={ǐS\W=lJEO[JgRV3 Y%HL:niFGgjn'UJޣEF~7iOKi'ٵ%ï! =qmd1þǘ YuFDY  -`u>C4l ~,/0*TpI}j)S#b^J?ŶZ/MQCd2c]Bf3dA|}n]A1 eYlX3Wf if 3Ӱ!L՛VErzv뷟2Bܤ71S0o=G޲c͔#}l$9[KPER S~="I,[3Qpɞa&ɀx;9vYVǹq9&Q7g }(@vqm ϑOx@׉G$Sd4w..YTX7HԺFN*])f(U"YhgwWbC2eWh# u<,^Gs1Ke/cۆs|%ZS~|fb`1 u\?U4E[uƗcX_vIŇtPH7D&}.%+\q-l 6FVx'/]i@ 28BpX"6XݶՎc7 *%>qt*Lx=.Ϭ9"۷m =- Y\v獈I`'w}7Aмcy@(sݮRO] T~Hx27R9/%+3~>x9hJ3v??,~$7t q%4,~n~Cv&O\#f>+=IL2ge.l=(gtG.$ӛԙq|[밦4^[.#mJO+3M"^G9KL@ vK`djj3= ;"]A ~zŋ >@)/ V"l 2BdD)r~ ef^Goڐae*W^C>D-xNRURv%kcM&O wnϴ&[^8_>AI4xRlbejub͸[J?39YD`yxՓe*_s3R Gdd.wT-X?a:h1@7SIdn.kbޅOr0@ ~"}F_:uAo->5"~nCo& U袰gPh Xs&7#Ww[Jxbе?^Pw>i&,!QԡBh6fVT=mOF dBWG|}JsX|ZWl$+x0zcVׁ?GMU}-ٶ5w-Yqm˂DxǠ.xGl7^aI1}LN()dnwtYJBZ#uy^EUJԞBQ UyotC<$*nr 5N2nHlqDR~a&=>-{ThYv1 Q#ơ8![#!h'}N/Ӕ*u&3pOzeJ/_+ܥ}q*,lujDn|s/ ܆t&XyKsMgao$eۈ[ڵ\qD mF z&JΫcH03\t[ ß[[󛥖I8)- SWic3%HO^H. y;a Q"- `cE7X\uM7V5 ZeJ9FIolUL~fpP1r6"77{P?;|~C^Fm~aM'*,(.A$b")!kxnJ}}eD`/ =axStRvTw.˴^A2,nוwApᾶ,e.cj:K2VeN܈¥120Ft#Ӎ䴶K:;v 7u"n?1X˱sZ0Q0Ta(1Ka-wڿo'FvM>r+DjeX |o vU| [Kטaw=.P=RJА;ty:?T`HO:Л1Jˡn 'fܜi?=7y/{}xB[gl:=/+G5!洞/ƣ6hNi*MDnws#[tk#mbq~#亖R"nUac'I,r)V}:dP.wځ_qJBwq}tUWU֮j.c廊bb7{.Ja/!F#Ҿ#OVgݳG #-Yd;C]`ɱ\'RɆԦ!2 crƊUYT 7<[F.8k#7tKbΊE@ ޛ]>;XNՙ_>mg/ܬtʔfwk7~YH7S : B6Prl?s/|+Ǽsm?>Ö=<=) /v5(@С&; (#g#JK0TׄCG+wn2s_"Pj%VXf >0X&(㚘6}T3$&dU /@O;#Jm([ZMDɮÉ~xpS[K:tr"*l)|@螲8*{ouOM#L/CR"~emQSC uI a:pW}T EFE2`Qɝ1ɸS)4prl:8Q){d[@Y:6yv^n{JT$\\\)3 g<?~i"5il +%#sd v(Pxgn$kAMbWooh)!~UB˭#oOI=2.Q+Nx^<h%X:g~Yjo{PW}[beseqi2jŪcCҦݯ%֒N⽋٩w`+0y @aU];|p,}wƪ\үx&9='8wkg"e+blS5r` 6L4#'eNŕ@M,zNr}74 jՌ_e1h/`sXIg=[''i)KG3Б4Y8uL} p“R 'Ő+.Z]Krߧ轶Fy^c}X27']a ^gFH>ifDbR&͓QRClE$dnNTN1ȘeS}^lu!KY&(s&Р4 .)8R )~?]ӁO!5R0 JAF&;b/ԪI ==G<:(骪'pCO]2C rF : Edd+J.-0V92mF6Xnj;q\2&Bկi&PQ7A2G5ߺ?Ѵ``0h4qx6]n?p~hXUt->/q) X9Td egzr=޶p]&Wԙ{;%um:L~ ˄+fW*h l1unQYs6# ɖ[FN@{_W[\r|mb2F+L*ǰ:4b5^g)E3ކ0ʏd5@N3㉀^:{.ew;'TgVArwE۳TW(S@jq;7=*> bq/"1G" Dx:!l) ^Gz4@5c Rѽ4yy~"O_"iinM ӝΉ dx+}n/+gP\Sռʖ=ء}^?D;ZMC5vrٞc 5deP>HB3H:\, =dj\<"a(?ۗx~O͏$!:X?;ȏWW,1i0Tn+ªe$ _ LBo8 Qy_n?azZ6) e=7'O%ye!7r ~?ZKFQn8M7< sAqnJk vhG Upl,Dg}ct= sb "pJvqgVMGVtD$)W:n OWU54}T51 'PAGboJe9mgZ(gO# ն}@B}2"'-Yq.pҵoV1g\)msq!1$Տ?Y3JQ*/&\Ǧ1Y1Zَ<@PK?f l+-\w2}*\b9:,|0SVBKJdʨݺ\v#%ZےI08pF)g}`̏thr}C r'X1YSit>E#rGtSM0m߶s |RGJʡCKo7vS0wK-K/._3 ~*۳& ޷8ׄ4ݝ%'?:۸V[K<\'߲Wq^ՙD/W Q5. <::{zi>}4)>ܖl \:VPd6qzTYSa7p ?4BGr]ef1zW$Yeޗ@cjW&hk}FZ0K 0*b+걩gܺ*7iC6ĿCoa328f6< yq20Vߓ oL3;V(~e.mp)UĭU:JezKƋ3]uLlBȂ< MyNLe{x>lf.,fM63f3ݠf=\3hQY/RT/IWmBoaܬD߼TRumU }1r^75"˸ZϦp@s$D?*s{+)1z+*!4#gV]%´FAFt #Je}d,( OZ_vw("qqu4<)@-.cR>zͻ)CRBlL}Q ڙ7"4VmCyQ3b :p5͜1y ,͞ň*Uθ4N\$(|ROJDt`i哔f3QHQѹtN2Ah.ݹ~(v?ƴ_Wsmcy$,y|$|o-=IH`MQz-mfBj{4_n" QΗ>ڬݶ8oPR!Ui2߶ nOo#<|!u1dꃚ17%f{ta2_oco%cpn]'IN0z(tuŅd<؏Dg}`V_!M9*xh+V]D-tdiP[=|A~[06C>UW[x IߣflZ*i닦^ 4i 7ZN@Wdysp }|5qWlL.̄pA8l75[e+ VB$r>:mhW.TlC}߉eӖ.D L?laQ>(o:\Ac8J旵U{l5~5|-wMӗ`RoƍS]° >7h@ۀJ ?H Ig&Bww?Ac[Q`\t!>;Oi#sU>6YN6 >-NxFWޝr JvS ֪gd@w=R16Üo0 ]ܩ &khĹ̈=Qh>ʀ|F_&+]N5qP7fbAkܤ5x7^%zSOWuU{4l͕N;ԗ4(D8Kg [mKJOt6!ds gI^۷2C-ݸtq5f <ύW]?"2q{",>A\E8J儀²HyenΗ|Nx7pYB|6ueSpSE_=w5V~3g#\ p_\q2ieuUsK#sP+6N94[k&@Ŭ1Z/nGdAQsã40$>0X$hbFdɈ{"X`6H&_]n^_97΍q/ۆJ}f 甿4*&2(#Ldw ,>ьnd,EaF66k4ж(t<'/~{SB=D>KKihw9 J"u,%VVfC)kIA̪_j_&9?{nA8;+ dBwOVh-oGZBՖVɚc{10>R1}/yʉ+=2ܴ`u̯#-ar$Ck+F/t/qݵ_1S`^C0G1>A*_mH+̍qre^5 .ҊÑP_)I!{A a/bo]ʝv^1jGn\Gqez|/}2 ݇vHlqyB%kJc4B e }>sM@́#<? 0mf?z?i_vޑsY]xoA[Yi׸k@$xs ]"vaS@֏ܷB秐jRWLǵۚ,sbNnLxMƬo|̒.W1_BT)X\ă׽/c4?˟g1U,t\pa"N@A;0BQXDDJ&R^Eϴ ~9񠻠<|nfw1П09Y=őspBq嗻ͪ ^/=w`|c_;h4V(XS0 ͡-!Rw ̒k(?Vm-L~=,MX8ʩCbi=96nT_7V._>XM T_zB|qm{%.fz~s{+PA~h5΢I MKsBa|z2 rؤ~OJMy#> yτ@[7ElJwi5.Z7 ['ߵplKe^)߱ } @ӒçߺqOK*M&:5/ #aaaj8 )KIRUo"^*ѣ]sH*3Uզ=XvXad%e1?5D?GDgi trKDI DQ}6: i?umVdXSPCII{Gv\9mgWVjb8)CE>ESZ»fGhb$A},=DhXA[̰{pZٍw=l1F]`:W'z*"9})eO>ǦJ@*gɧ 4Y ~|h$yލ7n 6?Dd= kPc7uJUdN8Ʈ(gR\=WוY*;2MPu27y)tm;%AW(^oWOuZHF)SCPڟ{6IYY' r|A_12vS;1T̆e8nkޜ0( A6ɚt[1ɼ@ yȰ 56S^nخ'@JJkL1ł.8Ue6gJܴ렵&x>,}OҾB0:sՎvrR X-:8fX0{T+OCI=ڰ3Z1鈞2秗+Z?dVEb=ow~z&_,G.jþ/hW|p`WC 9n/.d Wi'1j,fU?|]ZasKv'HͼOǺ5ٲMK+KɍRm)֥mdB8 `oy?.-<*]SZ_$cxO-`܆~ 8zkrMzS4h|IZh|6h[Jf=)9!Buj=MTpW?l ׸(z(`oZ4<%Xn`Ow+pda2hf6$WUiɉoE-^6whv@̍K? >ɱ)ϘtR+^,6, >%>юut&al1i9[=e!Aa9/-x휏?'LNWWyCO<ۧYn9!xM!1w|gg,|1Ic>V\eA,>+wex_㬞oZfZg'Zk*]c̭SH :&~ocIMdIr/m++s)]4L?Q2XGć7zt[:v݄/.O-yo, -Hk' g[w$JLJPr0Sc;T<-F5C(}V/Q֢80t߾1~,fyҌ!wYO9oaA.Y?feq%:yQ1fx&*-D|TzbKy첻_#jVsUkX!,+}78$ȳHcv)_nc>GpsvTy/ˈ"<5$m}=ؙx? Z)~dV,Yb-^p @ IcaƼH Scu!'G颸&`4~Uڻ}~_]]nR֓c_R"ir׼)P;Ѷʧlo[v77"wOIKn4GlN T4b?_J]oѥ%%Z\tUP7ROQzmf# 4mZH(7FS< FXk RD8I7Xڏ7Sh=[FhQ{\>WA溺 Α?eAರLBH;1!'g~?vKY^Pc):x5e3.oI{ugq).vmTW:eѳKM<7eT<\~gQzZ> ma_Z KDͮBrz{m^uH(Hvg[$0&Uz6>v*.;^}˰^<1].pk^+[9 Kdd`-stPr[ 3#¸rV#Ju}\!>\Á]p߸n*;S;ׯ v7Xi알:pL^'1" j] `Z@5B`,]mgF=⯉AER8֕+7H^e( XX{uW3Uqܮi0^7 K%Hs"ŝa^c!\W wNthrQ{En `Z _,^fpU1? !^,|T `nHvu*d/D':lRzT{~ԀLwm:|,OYmψQK `?ƬNMpeGY~.ɳRn7DMk[_*\/;uH0ypf$? ƻ xUhzh4?#"C>|-=lL׻0{z6=hU[?/BOCd*CgbdQ]k0`ŵ;\ ]NEXv=k?$O[ZsgP3 |$:β4/}q9/qWN;m-]@Tjp CZ^I,i@Yrm5N.cyN<"L+xuP %R4m؄_ov"B6MA[}̐]D{b+?m(5w^m vKNOF1$1tCC_ ΄z**^-m{^.ŵ'ŒF)֭ ɕ-3p"C廨gAȣ'Rt'bmJ C@iHV.w2jҐx>'[A[lŦspWLy>d#\x /Z. (a9_nh…{'[<.awD jX>O^ra{eKn?]"LX7"X>2nSZ1<LDps+Bz06a({cF?qVks|mD&)fB;+,b8%пA}.ࢶծ%xdUs^`.(SֿXW;h)j*n aȉZlC{-f1AJulX.f6(MӖ[j-j YQу^$hX|W n =?A6 z"V;Ab9;LwJ7wX=j1ԠoߛaIZjR kᘫ _)d${:'~BT룜*fH@Y*I>qhO?Է؟ԘeAqĿ?|,6DB5A{7[G13G󐋎OgU`j'@Su8eΆԝq 98:bX c6\w8HxƝ#Iu>C#N.}x>ܛm:d uh}@axTk_"r1 *\+rTlB f2Rw:K]Fp%Fu`n5 >ϴxr[җ ܓ>9I WP|1|%J]rmq f]6hX`A[C_>^csg< a8oN 6Vߧ?g!_F%iw8)F {k̜$NS.˚\~̬qͨ~RNj1E59{[\n3pП!u4n22>:{c> E$08*Ђ?2gIpb7]17Z9ڗ#tHtan9@!;B%uX /EAT0|j }38 b%oPg#qor}&xQ(aF֌{GKC/j5|DV*F}[=5ɴ o؝msxG*q;WP얃H{}y9=!XODU479JEːSw.DmܤtW: vGO3֒y#&0,I4=i~E(q <&Տ{ic,?7=<; +Wl=+9,bQڵpXC=r\q} qjU]zsݤmN䂝@_+BT6VHRl3qrN)(A~@HTI M\p7H86?@Gߴ; ;fDQ_׷aMҵ2OxDmv l[hb瞔 p/+19=u\ZwƃbCk}V0xRSJ@9I3ت 7ԌALjf#Lbki `2; e.%d3Z-9J򬻧l8i##x_;QFVtf|kpVdb7bzQ9? -~pyj/1WMK >ݷC%&('s;k4MC0=`P8,D1£l3kxerm{g)zZDB7yElh9Jw i'l٦$/p-ב^G+l5*σR }`^ :1|>'F)Ɯ OA[&ddV/t ֹ<te;3|hֿ9hN'{kxA: Ͽ΁F#\m{x՚- 'fm 4]>';u0CN,B39b+iNn㹸Z]SqGMcء8yK{[>ɩՆt1nCy-5!mLFs.ٕ]4y5.!؎ NnZg yu621h| lOXFCs{gAp?|ֵ7<գ?s2FI!ZsRvЖ"3N( h5Z56d@aϚ?KÁ86Ss=jcLصÝ~1 ԗyƵ},++B:ځt<ڝѿhc Q崣5$yOSSSn5S ׯeiw9l!uI ?I]XNhkp4lW[54ER#ytn}"-&>bb0cn7Ѻؒ8N|C ] VA#{tث z;Zkփ{>o0\e'o?gj*a 1UjPT/]qz9($CX㔷54v;z=M9NArXʐ36XWAOgoT5ȱ3|D-%5kY3g=[ dM0E$FB߁ E8%eR%&Ղvv֛)p(B\LJɓkSܸ ZzI%ZZ-ūoGu2:nBo<B;;ةd%u7}K{ w1#}~^%tj?rrkʼ-S65k {#Cհ+yTÄoTzGZ X ?ԹI0L\3# mxC~e *y48(!* kpw|>ԗm\ ż@`ZGaӅSܶ1 hMoP^rh?䑽=7][o8;B.FZJ% )& #odauBkC]e3r0Pq1*]۰g3 <w90}y&06m釪!z5ڞ(@4Yk)$I9gGMjMB{WwV'uFNOZ"Il9\HkIJ5.mt\h!y=wIs7vu>3T+9Āԇu nwjp9Vo~RC_Ax_r9Z;La]nd̿f Td(Gv>c)1ގbմ#Q+4LH u83MVu#TD N ays厧~:aX)8 +ʖ@mPsIOhq^yfk1ߋEgf@xx{BDO} 18AYף^ZZ5bkt0C9u8|k}>+t (s{=B1)2ٻt^Yb %<語$Tx6$V,TVx3Rl{+H-*hfTQ@XM]:NحU}nT5Xa?Q:<|矗!* nʜ /QgBtSҵZΨcU`rQzJQXRNIƃK<]ͷ1  L #ΝF` xk&C:\#*Y'==l@WR"|Ju^7H9^B "S2%iZ|)?\жT5n&lx#ڶ=c91 ,6 Yi3Rk3e=Y58?T$3E=A+p'f`܇DB'$Oghf$e3abĦ@LT(:V20<;Tؕ*UTh~ʦ ;dce*_xٗyWsHc>-ڍ>֬ !h/A:v@FM]߮U1̻qXG KRĦa2뺘Fen|>B롗u03 (c،pԱi$륌xyDFuE :Srpe20+2YB-#A91 ƘAGSp? Tf\l CG?9eKs\fH2AttuŨ_Wdu:%/Dߺp0 xcCs]6cC +lTXnQCucL,^?)cM"Ex)V1 2MFQk+\u_88_3xSz LuVRytہL_ aPu?H39 'e8TД/Nv()/h^d.HCGfJ0;PN|Ё1f˺ j% 4QkJ[_ҿ-*S9[Ig- nZTk6n\,4Feػ&?FIjʪP hʔe(0¨ө^@Fp%-T~vel{cq(:?ĨY-(): - bU˨0j~Vh & F&$#]/` (~,y">-VX|ԟcʺ1*%8D ULBhCvD-͉uIѭ0{fԭ9NS﹬Maywϡ*k,ӡ֘TO/H[p!+W|g22!i_:?Y).}F}X<i>Y\nQ&jH|N[+KH]ƃrY},] 3yǜ/Xq}+5$I5S‘Y忎8B?@h+#Xէ ]0Ny9{Ha>Ap׊Q6 ~\938]8_1Ž<p)1c{g>Gt^8̈́I{;~\tDs7!˶:-x<>^.q~,?.tP"gu^v\a!>;ð?_7߈U8f07.EfSK;V*UڀBD>JV݃An~< 1-i% %PqD`2v4-az7 ,Np Mi֮C3C8f I@a,mr KVfؙV5fip.0)mf?;K5|uj)gUӻļm~F0:gx5x\O2Lutľ=3N:BH<)" sVNC/eo)Ob){ s䈝ީ|U%gy37-x.a6)цo@b+߭A b\iur$[CH#K-FC="}ҩR*shL4FK(F`_8>b/4vfPw '$'`l "`g 0Dj]߲:jnڸBXp;>_V~h6J"D"Gg{1*ZFe`OF!SHf+{]dc0Ǡ=5OH2Kr v3o}ssX>qBFDury&csN!70|Gw'?].!xʿ_g?a|!PRS"PD,qn軴IPWC# +xae-Xsn$!J1hLXM.}M56g}cY~׹S&9-A˻ [6Q}wtTy*gyKv[MݱK1FHG5@Ĭ?ȭJJ EPeیeC\ѡEҹۍȈ˸))% cՑzmBr0B S30e@>nmd8#dG;Luח4LQ̂ىJ_fH6OT[#H 1V*r6\Se;|-6IJl@mfN s7bʈ+-g[4A؇Κ}qUB@٦mqb.!yGXU !\)Yu$9nqD'6t́_kӂº+Iϴ:y~kߧpLbCl'r2QM*^RyxQaMfvʊrXH (\y( U$ zTz&rWxH\K0BW+xz xvf]pXR FUZra}J5$+r\gmO?-UMCR☐cت5'T#YI ,)ҥ)ф$ 8@=7N ~h PD0RhEӁ`˺~WԳ7B=pꐕXA1`Y1~Jr1GN~ߛIC|H͚%R2cZhPxYN \ ġ_!Gj'lфZ.4b"y-dovWcPuWPd}mj0id868JcJnH6hYe\dbHo p'i8]&\4(ݒ4;كħiguz+3m) 07 GIvթ !Rj w Q=Q⃮u}~_@7ΑHc-9vksXx#y4Ԟ}nk{ikb2o]\zc0n-˅ձ P{|f܏b 2r!oj aߵ%҂ ~$":66ddMł#eτ)t~䕻nv]"qY=^N'h>XO>hO!~2>'NEm?37c=E/NNȞ2''4Z;,: ;v?ٸ{Hc'iFFe{w*;1Q7ߍqjy{/ MD{!ђ]!8-~xIhSМ+ۃ+8hM;dU G9/sL՚p-J` O/Fރ'?ɰXU$e4BV@Q, 4QHhk-=NwR_Qy^u /@7K] WOZsZ*2>oTL$˾FTJ"{墣G䑁β`?.V\+^|״ a`4|&)ί0og$%<K$ bpgm3+;k2U(IVw /YR>i(&(%yNRs}Zeg^W<^?(f(ǀCCPEwd`fGEQ~9{᜽aǣJ"mVR1J$}J3DPmCr_ÂhV*KFXH:Ƈژ]wznέx]6hև@Ӽ!T„$6M6x̗9Cñ?KzlV@F3 FqL9O41hR&6l[觠-[۳bL;%-}HF281+_ȧ- q|C.]d;˸hpF:]{!Sb ¾zߙYuGPYVBG0[gk)#ٟ:/R\q͘g}n@0dcƓ??Jwf DVgn`b!EJ|&.W}>;:6rq!T*K/o^0?bG{$]QrHwOu|;N"AotD ;?M1`tw+*/J*-ڿf*!ɤBum835%+FYB?dw{At[i3n7Otv;P1?ee,KH _KS&G5.*Z%(Fbp2,X^èM'i|4xZ}r'i t}!R}dW u1|չ&1&aB8 `$0/ݟ2Aǔ=iuiYK~%V<eȕZU!Y7UѪ5&1-bVN!PQ_6ҫʲ߶74*-ju 2 V!Vu \^x ۅLjg5r ASQ-O4`&J˶r@{"h @ \G$/sS65|9'bE]zQ"T&`o;LFd)r^HI !6dOv_AK=EM'㊐Y}NIwKGlגg;^w,Bc#!Hi*='rntLal"fѝ^|U1:P$Lz}I Pwфww{{uHqHk}|^;%aVrA{T^?{X:`w:" @$cp0@ .R[[QRe<׋ XBⰁ _F%nZ2oXmZtb0eM'Vs2_ju$aVױyU_t;@\a!^DWy'_\qSS!'y*V w9~Iw>Qԁfa3{=\Fx]z$y 1y85ס!.LqďEdLvF$pC׉t|RzƲkK23=>khMbHqm#L&~MԌ˦Y3|0QߴwWH0k9!hJRqyF^,o:LB!^P;+i  |=\ ]\ts8cN5nr8BC^/c;d BgnQ2).Ucaj ]_ yg'[42HycgmYPFIp(W2y]xF zxT1;*|[ a ~_O=#|dVQo1 t( *n?^ňF$▤Vx@ 9H).o<'>K,-mFU!Qx\T*1fv#>?DȺ,lk!3/)gQcN 皴{wqE399W*J5JjN1v{HoLkJ|5,K!sC}"-/m,<s$_Y9?!moq^/#Q&fyǝ?* qgǰh 5.hSm:L0n|o;3z £/^43t~&3?A=~zG޿(d0]p;ώ1m3 nW^@5 [KMTSW+,v臒"Rׁ AJO':)L4q;Y[lZTi|c?@Pkh???QcC7q;:&{?`KcUkD+ oF|[K R>BʥuosJO$nW(ܐ6-M̓C7,e݌.2r&Gy1 8| 𼦈+W$Au3>ǜ\E]t&\c;XwAnw6QёSdkkD^"4ُUك^瓔,DqaM0@@1x My?{,VRcrc T}ބ8IWbp4HFzd9nִZ#}NUq#+&ಿiitH^/{lT1_:| pSyC7'p0to;Ǜ)b12ٲgk,V=vfT%=Wnlҳ/wc?7 ' PcNFk} zZ lzsoݻΡV|LOLוү8{P,fi^ۻ=)01/d.]_G;䊻-uwLG}-P\8U}`ЩNzL ɰ@h3ځ|pij] Nw]|<{לּnCjqe 9}9g䝽~M=ݑ _&ܑAcG(oݧIz,J1v=9}< J ;ɴwS*o!MV=o+svekxG$ qH|sh3f@ݩfx_Boe 32l8M֟+q5=Dn46e:̧TBHƒo(w+"Wɳf $ +R:|B  ?Juƾ]9C[dWw91݂jbm'AS5>H 8=5!5+OҟHMJg S-&ߑ= "["6Ҝ2 $*Kgq/gjn@Ę Y1Ev:dPp;3:la#tL \FJ44C~^/)ynߒ'ږ.]q><#^R4jrЙHmқ/،-?03\f%?[wЯ$ ׫;ҡv5E۷U60́[VE~ 8cU(pezz|5'µW?D"կOoueb~uq嗙 (M6 wn#t&=`0yi̞B?S`3eB-wT[ף$^:2?\7gű>3uaoa< ~y^}:XyFuBP_~$)N>\2IÛҀ*<`&z"F['.i: ?VU"M o*Xy$ԑcÒy_iz Y  5/SV :z[t2ԝ 1%_ %kndw4[z$'5?O1~s_|Y$DW.bc"n&V,{ Xm;y4n&U.RקذsO|#è3Th[ Og/CƑ b?n-tդPe9om&+PFօ8y8755ϊVFl9h$kd3㹹vffx֟CK᫅/@mnOfl{ ߍ&C\s `^6P32f ^hvm-:X/~ "zu<Q>NS\6a/':{Ԥ2p&S:]ʆF{laϮK !z$W3mn+s=̽gYM*h04A\ka=wPPpoxfޠ޳ZIG3ˤ@p]4l%?xBξgôyNnMZ'{΂8W~ cFaiyM~!nBtE2" dXu1As˂f20`.C42!r= ̦Qc; Olbi==nxz^d&45N3o5q2PեSW-B8.CtH% G҆`Ѿ [&$?h ۔Au/ϳ;_{m$s]6oucAG:+(l<djq_h iJNϺ$v`_byC㈎1&l:1ǞeH, [d`=> (npS}~\rL>JՖ#:vy!{-od] dI>q\3 2jEMB.Bb4bZ %Tg-~ϱm T 3Euհ-Ѿq |ěF-^=!w1qfwD{ecdYAfrh09HM.$%\h!i@t4{Z|g p.rqDs}1l_ L,\;OX=/M 6/-  ȟe/:,Fis( #_fh?{#L=`铣j,dE:) n2im(4X 0ޔ~ ;e*\q7w cf'Uv@0IJfiDDLڙd3ǽO?t~P`h荮rUnᏥ|1Oe9t.HC§Q_޽_(Y7QqGXrYj* @X8OYZͼ= SCb5%2:8|FM Ů*`#ڱ!Xmnz겸p_)-k]* šC79/E5x5+"2$ L 2V5h@r9HϥOWv _+|Wfw{:?;3d"G2 b 'yRn@[gzspʼߚO[)])Ueg.&iSBCx?wcZ0ۓ33!fء:HGעZ{(SG/eW@Ni'oK0nף~/B.49"jQsv$w+6~/ ! WI4uyȶR>i/;!$J+Me+V?M6!]< ޽q27`#A$iuH%[n._?V5 @طPNF= M.%VE7k(ccLj I0WSO*f3F՗y_SQGP3mPC2!~$伤ч`NUр:Ƭq| bXjIG)BwgkҹK#9C0N!hb9hݎ'wBʕێg}c1n gqՌϷ$ 4<WN6f ?/4#}#r$.bD_͑:_(!TV W]B5t0vKX>Mcz&вvs7[zu{H^2JWb5k3 {DwC>&&=HPI/$9?_ojW)4'ݔ#lmE" lz8k⌍ʴl_CW5CErxg(Y47w&bcyO۫] aU35Qn|7. {UܬKGKZSO!A]|ޱ<7lՋk(k2c_&arg(Q<}R"L' <@On4jq׻e_0D }b/3UlZfoO]`i5!;M'˞ yKg!Ѷ.p .n>}ăt/yd)_av[}sY>eds7\!'Rwq+RM %QK(2zDnEmDB3M-!cA5jƚ8r=пRXc]𑝶;wB4[*#6}QqT%lH7(j}bFG][W F{:30>$ߩỊ֩rt[Q]t ̙߄"MѦ_ ̓,T仢]y}Z,%};&<<|yk޷3l|mVezpQW)lcˌ642cק*i #dNm+;\6͍TɎ~}3Wl@??_E-&Ӝ;wGY;H^sxw)c\lg?X]Ҙ.+ HǗ DpXr|b=$6/R<݄랑#1$ cY/ Aښ@ ]Rߡ͝s Vp,tڍ7 C3RIch*ͮgPK4Us[\`޲יӏ4̆3=m//i-_ݸ) y:bn/*Sl>8ۂS< ' 5\/y\f,{깖frzfk9-KMˌ1ګpNZ|G,gZS֪e{!T gr5jEaH|֟}d<;!~gZ*ogu"yjVz_~bazo|j0ZFiNH}O/F ߆cde_9(jY]=NYTWsOomŝ?NXsn.iѬ{?(:Q l՞<5DA @ŀK8˹p{J܍(|>Oi%h㾁 `J7ħd`RD-BJ!& ZOc`DI@g(LOo^~Roىsnblh{WS{8㴹lgO>.xMMy_ϓ۬*p>. ]qSJ '&),8gsLR?[FCar3L5RqV]R3V+Q\[hL 4(` bB0c\:L6h)]L,agTIN Ge[LcJ\(] +QE0 |RoBM^S!1'Ɲϧ~]v߿kF9qIU:FКN}*o|Hsx!D /v9d^!柿#c({OY/Od0OC$$>3 xo4Lz,5}5l ThI͑d:G,罴r4?{8gy*vArdGi= Oewˆbq;x֣A@#1/TEHA& > Nj;rg{ӡQE!p/Fm !i}oWqI\?CYio(JZ-R?i qcdRIv.",$]8oUɤ8{9 ,GuLrJcÿ,:ڼitH^j~( T=w* {E6ǙK.fj 7,QmZ <|76(`05`}þ7vq/Xl[:36qS>[ l*ׂ٫G7쵇 ~`^-ֿ:l105JI'q{m;Ӓ8nW#lHz~eL`>V(5GӘל/fF;|K|1%A857[8*N%hb QCZOZ{FCzMvRzZP*w/(U,J6[O` ԅY+~4b/Iٙnƀ7vZӃ@d]7[;&Z : T.uHe)w פQa^Q tJ2FбGQiGl^I ݲ4?ϟn‡gdX%_ eуe]/JGqG>ݽqHvpyD7{cbojg,Sf#6Ÿa Cء{z1+w )}O05<2d#D.EW*oQKŭ :xt,=:kYw7Lot~*{:>.u1GUuO- :dZ-[# x_ƍcY  Qxɡ" AUZDwn(BPzN osĈAP\k:SiӆY|m,3k‰FY>;8i FV}Eഐ?5nVǟfS6}E!`Z th(TGm^Gj o0 pL^Zm;/eCJƤP~pQ u JK'+f̒#U\WBahɔ޳;?0뉅Z l v.RMvyP ' KHE/?zVn;/ |ٻlE]513¿ty_ʩ勋v SYa0>V}/pEކ6b0aӒnF|ݭ=nܮoBl95;K3wWZ ?0׼% Պ5l2T:5K>, ϡKRpY2c$撳&86ωk2nߩAzc"ϻv;Nj9B={`>d&;}NH' A Av b^3w1Ѕ,%6 .^G==)F*]P\ex'}/.ڒ~NmQQmbzWl WL&6]k!Meɸ]&F@ SO{q/m%ud1WXv'\,qMM4%}mT}j$i3GDS"go4Hmq%5ڲ)ʞ_}{DUj'~8)WZOvz\cn.m(`9Rucq9:Z Nh&2h_ڃ[6yk+%+AGQ9(5T| ]8PKHZgS]Dx12`-MIfxiٵƥ#IzPz2Tl\ aP@_t GzaH4ܺ'Sk)Zɡ{@%)O=؂3;g\10}1ߏ  z P15 oBKSP%m,i#`%N. ^R&:QY\D\j % >mg@ܬ4ugJsU@cr${n?>AW*<͔ o|Fl,0Ml 0&/\ ѢwI hޙmk1$Ch>gTϞH똃}=۱K] =u$}/CD*Bf ~U})vyޫDQhu\t~#ɢ @%:"c(K'@DڰTzzWޚ 'І#㯇Z6 {r?]$Է&pm D!m#R(~0W?.ݘĸ͐ Xch!:[?naNdp8%.7E $ƗI砻vӥP){r/9V[0ڥC?q,z8۷_Q(AǛNܽ ceZ.]uzvFoYxBrQ9\6? Wuq/\HFy.*{4׏'{/_F讆|_Om=N_{Fgϡ휐AQnZ;~WUk|-ٹl\nPڪEe*#^`zeE0ËDB)bye(KE0iG.4CbLC54?HUku>Vwʍ>4-لD54 5 hN|VF+P=8_ |0lky=TȷX@ 9L=BJF<&>͝LA}=<9?M4 0)ntވҰ1UڐЪE;Yh 70L绑]/!G~tVچ':] Z]5@p>fOer!<R_Qc1?:)ˋ¦FZYPQr8 +@:W$v)"zSFY9Tq)^Ԣƒ]?ҧ[lHw Pƅ 5z.0.ބT'oE~|muQ e-gW6_-c MRBr ѫ}b;S.z։t4&2[cNgFbbZ蝧]͌϶Y)0,ۊnHTI0gO-:Sv\BAŜERJadAx0G 2b4j8O|D+D}xުx]3[v`x{_.5=l/;ɬThz@g F|xNҫ${:QCbqmӯGrh\Q+?W:Qw!e3!pφWcbH3pNxxwQ*2wSvKu6&J~oznSKw$Ӧ62\`)Cu7U.^L}RZM,Ug_ڊ{|3PFƊf" 3zBl?@x(ÇO2^Ne}W-D\e$Rg5Hݹ ưݥbyII8 # #񠰙Iv>Uδ?DɯR΅ƕplQgDqmsZ/}WbtL  R)،>B܂b]YeI 3H2:N"0ģȦ}st3c;$V_ LBn܆*/\ž@f la ~[ J9LVb‚==sSfOFi R꛷ skf;d vA@1.0٧QdvŎ1uLE!d@cׂ;{hj:LwR5!Htܷ'/]h )B9}33wdR>Ixs dog u==ITEMӨm_|,fnprOw?•-i@< C aВP[ !N6 )SQrٚ;Iס Cå+1ǿ_Q9:EZ|m 9< +u҇v- ͉tX:J@sdƾ[ Y74L, ׄO' :f:6Pl:O%&`#MWpmVlt]я+>w7/]EuXPr{ $ I@ek׮&I隘.rR۬Rc@I|`PI -rg~ڕu~B(i_T'ZJ,lWk"R::$w_+'G4Wg#),W 5LۜWX~/]$zqQh[̰/s{ *IAH h00?ėp c)6*~Ox3FÈ `6x7ھXA<VCh|pB1BrsYԷ68?qB)jԢh ԽX-})+ٓr T"Rp_>X -P62c_u>*RptAܰQ [TQkljJ?6%pֱs0}o%ϲ(A[}_9ffLJ%`K;%3tR]ds鴣D;j@dȝ(r혘Q/6ey5v/^^p04ρy|tb6E+~ǝ1+KJɐ+9:Wj&gCHIisGA}os&(V6ޭ"V2)`:dyfT"w B6<Ѵe c 7yZ=kj8T >[n]w`kt_W[`Ui2KB¦DTuɹ5{1+ǐ>O %V #Q͉"ΖA#1kS׾seηM Y9AYSHg;*L1A03&5\<7GaQbYϼV݆"yI (KʥPZ2*@_k~O,+fZtQ寞A-I{K cN!ͳDOYn+jo#w[JFjgA4J[%¥4nsސ(c|IA@p)+ 8(x{<(i_aKP2i,^Ѓ_ɟqgK|ٴaw񔷑.\Tg|@2 *<iH/Y8~Iiڰm&yF۹qDCM\u~ܠQy㞪E&dx6EW=j%C.N_Kb*D>#ed[aO3frȏ=NÕy~A}%Ҷl3SGa(OE3YVY|'~`Su_xU?U~3`n5 |K؋Sa[[WZAݸ&Y;(mwf>kow[{^YO˞8Mv  JWY.&Y߃jmd]%'f/,u8,#%p.-UinR_6+(s"`b\9m.lkZZJc+w<0 ]G% e web6ʜ5>۽r\ _EYuvRwm5^ywha!LEg&6l&s~^h$">/0q $<jdeS {NVEWJLeR"TI6H QC~b ȶ0xo?m?2G3ICr6IB?Y+otM2y\O_w{(aˏ+k NܙzRQA:=FV`;޷M4H>0&Սa}B|!0z4Lb`/%nRY#CHTc OML|ADQ"7HB] Ww4PxNfNC' NPjW/Ҵ]S:}b[G wf˧Mn=ct0ٝ<7W&?ugny;K795L^n$\ /nocDїejL;f%Ckxm5y]1˕j0s^It񮅓D<[E1 ?=EIlՔ|{?dǍ{~l@*-p6_? dž{xtsҠCz5u)Qi 6gW[ljrl<"tVp缲'O~:L}a2dw/5~z#/[)7X {v5:-!\+f\iR\የ!9*;vBZvǎ;UQ]v{;[.ێstܡp@B;{}P0w#`@f3!ӵIW=Bn(f5$hPK p/TTLthě5ur%뵛z^Nm_J6栌+kE-,t1)_ t=)ۓI7僸t {tCS{38q1xa]nC ҁʴf\ܣLB@k}ɬ6a5dǣg0l)0,,zOq;0f/Pn~߅g{leJwu ~0zUimF{M2$_1ZEhW}X10{Jڍ\{܁4}ksAZ[?z{BГyxe:}<"$E~/J!gd'|;4r\GҺ;g͟_ySoPTgku}XU|Wb/hi^=;x2N`4:!;HcR{_B;;fvF0J*ļ$~Z0][rQ  dV ŲG8EŢ@zɥoD=/eWBL¶\9R`+q 7ȢjGq*SzL}/M=y\Sס/:!a%NJt}#r'>HOT""5k(-Z)4ki'&T1p^;*n*f:foTwl4nqm/NvZQ2ܛHZ ׿%`Lɢ4WNn?ke7KZa.vߛa.YekIVh?& +d>f,e(gpJ?GGtWk8b,g3'IwrыD]4zE{qM/:<{vz~~ U eJ7F?oQiղj١}3 j׍J/?ٿ&RU v/7SУhcuk=.kuXsZ ._=1C%U/!6kZh?K6m@x|xDH ߱H]>5kIgJ:8P ]u MinʒChDcB)S$< $Xfeә 1fmc_g? mCviց~bt`bkaKTqW+-^F3x'awjfud2K=ŷ^֣ @C̕4$ZW6]Ώ-S >lw$(8W)~Gfti<g0nA%Fڀ k?_3/}nf n]&|[^9#i.3H6fM{ JF(MfFB"GC 3XwJ5?[l ~Y%] zscO YGA Xw&|#u@`(2BQ 0? )|}XtB-+,ZL/(4X~8/<]KB&p+~zK,!G;! ڃFC8b76`WE'P :fŪjݫ `w$)?myZWb>Ai!z 0= s#& D!b > Q4 Nra' }JU>$eGֱܦݩlO'aȓ-<y<>(h khM 5-ـXrHHCGi&l[!nFy%XZdzX!דePo cn!,Vå(qzz?=PiZz $c[):tBfɥ0<*7C/xƇ@;π#ЀS޷X2ȑx?s[Ƌm㓉,JQ=Ǚ7r_f':ig 92!.r1LZV\HoƻfБ!(e!D>M>c6"3k'ydY~nŁmX-PmYvM:aXYY0 G.1 #&_DXu3{LMfrEQ= ^7HieK*Vb]c6Jx GchQVEV0 ߣ >pݢX)AQ~nfςfq7{7R?5>qM/8bh F4-yiGq1$T2C3G I&M M"ӺW !wcLgϴ5Q3fU=F.'T'c(+Ѯ{Nthgx dDc^O `V82ı 'ɀWau>:;HXKF*Fqmu}s"uڅeO W&͔H9Ƴ2Q_^Jm=w yRi8]S ƙ f(dpfTe./ehjgP=pemԓ=Ʊ +%[kM&B#y&K8ӯO/2k`FzGܨpTrBzN$ +^WL31Rηe}34azZBSIiҡ#i6|V6I [4#]-Sg();ᅛ-)36PiN\Oي%3쏷@eäH'S 7P0LBxmrI T3J i ^ 6Yws}ռ`)3x4(CX87!qyYP6zgG"KWsH^gyiK}좓Ԁ Vo=@wG0/!Z2.߽1U( 3d!A0Pw#jyo˄pXit fRlJ/{X!QTWgՇ&щ-4mm}Ƕ@g@xQ¾3 pb”ZqX!"wH]UoJTFz,OF^Kl ?z o<у3E,y\/x1U!NE>w!:0ëEL1q _hc$/b]ddV3Uk~ӾQ$A,}4K $X hxbpmp##l"/EU~ t=n$ԸzZi]_>kT0} 5CCun=e'IIΐB'Ofa4l vKꃣp)^e?1U~! ,'-/5m7*$ 7 \\f$BRJPF䷿\fv1t Rݪq>c,-rY#OKNLFEYz'RN%t ]$&sL `p{r _/z`rU?O|'^oVdH/>TB!}Pۯ`_i'd>!:e0^Slj_/^9f8 C?\*RcL^Uwþh11F#jNN1Zͤ4&E N7ɦ嵉ͮ'@kj˘7jcxsyC_MlBx)tY홈' ~] G6Q)A5=1kZʟ/*cg/;T bִ(yM\,ʚԍ߻ڋALtp98$>೑?5%~K^cގp նV*r)ŀ+Cvu(!SӔ \)T=ZM  1)\ sȵ(}J*MP}k412&![A&iJٴ38 +(xM˜ON[CFW׍-'ћ3tMPabs"+ V ˗Izk6NE68j!`De" G nLA~46^G61 jT~ {<כpS)k9):.`לkqucV,3%*PD#SqkOrm+#-k,tzNkJgN4#vR{Z<g!av~K/uG`LAR?Ycjouvyk!҆?`)U|vڷA$ڵ,#x&eo}g.wp;ӉwAp Lf<:pwηy%-*mp]p8SMQ2% z7X ofo3~,{q0z_k[+z@ׅ5 zB}$@ nwV5y0)x7@zVlǓsu}Zp]O5'\4ⅇQ`Q1+T#'17Z|=LXŕ|}x'2a֤/"5I~%e;}HjP3:$T~@k#jE*?Qyn|< Wu1xt5E9WWRBr'658L^ 1s/KݳؓjƀA&._sk1wc_鰖ZFRΧ $[7i*j` zȇ~y0% -H' a U棼|y|ŒԹ/Th;VD~ no&6~%~n|*IV.kբ0QH` Brf|/Py? 6!LFKv'>Yuч4M}7{m#ZCP뒰nu Wx Gf1΄ XlPtA"+E!_ӚHR y Pvђ64V0ׯy SGzHukΧԂl'k+MDCloVE% @5ú.cAB4f]Lv~rg 9nv;ll*m姥 %:>ȚPZ$y q|\Ǖm'=uV9|&`'.,=xL 1 ,<A{/-yM# tvz&Ny$m abj.0\qZF2V slcR1O<`@0+s gh?kx㪽"R ngh=Uܾo` @>B⳼,D e oK-޳r Ms(u}mc-{Xt,yQAg=,"6,5Ħ%UE<^38$^dž1ź u05:rNYȏ2"%%av:?xW8!Tez:p5.ao m/:W TGvUT>dJ~'8sr-yL%%Q=˚'?C qD+BqB ,;+QJ}t!*+qP/ +ZQivQ<6ƘxiEzP_2ftdgۑ7ɷcg?Po`ޡ]~/UC]$^n!:6!f6YdٿwdZ77G礬}IεH,PiZbDӆ?&5m K~ߠaj)|~$`hV]`ݟllfjp:E]YF^sT G|a/,^}oM~Kܕ #13i%6E ؁;o걑qp|AeV>2=nw)=7cWGP ?_߹lWwe2F ν+;EmaIE|l(K],'qsI} 9fhȮB YkILW%pA gpbdۯD;pgT._o;cZ b6KGdV[@I0@iu\]G0mLާC߀_@uհw*zvIIDv ʤ0QR嶨ŧy|&S휍ZtuF12[ѓW2°p)]`gBpN/8sE .0[a{7`m`-/`ѽz@o=jo^=Ut2-Xʤ {cbPOLIQ!w`K4 `iY A+dO0fjۦ\;2$}|j̓; ?$ aƧr b>Д'O/u?C]-VDRrs(iċ'?b*mAz#4]5+L5f; d͋~@ ~}*'})Ё34fWnaDL8%\RfDC_&P`or9B\F-5PVG/q\MhLЌ ˀA- vܗASџzr7[=Gh[teˢϓ!)# K0N₱|[58 *+঍22O `:/炋7c!gݕkF\)^4\{>4(c}O.Ù JtxɰUd 8[pnC\dtnqMFHmuM92vA}|$խNGSjdrkk3Y=Ί @ g]G|c@'\Nb%yHLj79bh.+%|<;:́~Q}=Ř0wSwL_6OX;o; -!JĕkyE*rtKm"Qp!gj|3(Ʀ\ç]9MEYCم>U;l _{6/ bKT#5 L0931\iNw|45;3)ٛYGEI >qTt1mYuE%W{-Mra\u>h;+DO{~mVp~UwfrQ1?ɍ~aLq% *`# ď9'9?4'/ H]&r)NK|C [ukn;A`05$!^sM…+)!/H8 0fCΟQx. aA{%PD\*v$WoєKe|Dɋ%1<Z He*T/͹ǘ T_;P 5f`a"` b%@S TTHϙ%7k|r;&C]wc*#wF[_[slS+ Q*uldӒyt՟lYxEhl_da6*c8 5^U&}ͽ{ ={mg2]q$zєteƴ9?)]x5E.xod4Sk>w韬Ǎp7'> j)Ƹ~jpA̳=o~W//'a~*2C.Jyԥt(H9Sw ס4Ƽzjbg8݆ʜ}(R8 Tn*kƠ\6Y+[ d׬5pʿP7l9Ux2AGrLAblHB[Zɼ @h7o)ߚp[}xrە#>&<Pū&.]˗%T wFc ޫ` _a(en0TEcO|JKT/UI&W|ԑ{ӳMwN|`mQ%-g\ *%rah}{Q({s1=X90ճau=\{3o\sX i-gG͕QZ36#-D|`sNu7ScS%b&*ꟉD*K/;0Y650}tx7sGyZܠ)oX#(v;iNhgJRg~\tj#y-K}[O~AA`K7~|"OY֒1X3Uu٪(&FNb'vE97ΰg5Skɘ}t i Y$se9v@byQcek&w6D^曫^U{>k}iU'1ȗAc7HmqK<>{k[nWo-[}rC!㇠*'( blGBz 隗qe lW+D*}W[7mW{{-TEcPY];ky'XKɉCY.d;qtL|]+HH|^7N!|>U65/ֵ k Q u0Z:X¶[,dhqvճA>o9!BX H0`v3:@ f $nLJ+6p-q&=j QB= ;8֬#كJHJcu@؞v.|G:d ɴEm ג K}ٷzK}O58F"ne<7uEX\5lGUGŭfO7/h7|ՔKh M0^k'F'IB)G{3'{X:C?iuiV_w:mF׌~M,XnNm8kh5w>#ML*CpJf"`R ``1 T,ZzIGC}㧴!x#լ5!xA02t7fξ y˥ ZݷZ8{'=XCKvv*$͆Ό 70+`ګMq^@g aU[L;KWea_$-[fPzA&&XzV ?#QN,J! p/m T#шw+e Ҩ%WRjԫ,WᲰU}Қ QYI|gڐ Iʶx3S!MoboT4Q^ɔc$tE,T8:F5: dge&10nIAbb^{}9}/*r: b-pe݌=Jѱ%?e 㨳7B5}.o8& @_^a v4!xX?v1\IXˌo2 9h6F1x3FN7 ul5@fchH @nj" @FOZ27CP GDy ɒjj5{U~DmJ:5HjB1 թdTVwoeke"mfdKifl.sU;z-\ʍ Xy^$ǒ7[+I`Yy->=7,{,1ҹڤ~Oww Kp[HJR_?^_1M- 7׼>-Q0mn$xY=XmC02ejr\^0?ߡIF?.Df^n~3_J:˴1U,ncTO^vr#t=kJ {c}"kOH%#4<" ֣OXQb1@'62V$y7^Z%z&ym iU/nD$Y!zOw&6z{@nJaD.EA[@ n+df2 ]oI,ym)8&T"ݱ_IC^JM 0 0)%|Gy܍##\yMɨrv jkLިlǁq-*]mBҎPmW#pwx7&}qο_,g"y|^=d%RaWy+o'Ξ+ݓv4;Cmz<.IB(=Q6 c涷{u-̙/ps:lR? 2F5XY${B7d>i`݁4Ys6,:wڠ2wj?ݭ&A|s|IPYyǹ ZE7ø#x$[X.յvBm{77-s^H7U?f^n=eDЖhk/g|*:M>QBs^gI.ֻ^^GU %aJ`7EaJ1 $67O@<±ez#n2/Df tainv[x] {ש6{5_%)GTZe?:} xXlp$u 8.<ԈcBV<ƿKdqaiA9';H}dK@́}DCsWˬn9=InF3꘹@vd?SyoGo$ʜTfAyOkKg_.YY=Zީ~78nͧ㴶pKEHfgjp.?Iv($o5̥yPE Wlklw K"0,9jbH؏h9L.`(BHuxLml7`ǿW<41T)TG֣1!]>kllpF}o =V;al`f3xDca4ǖ0R?ϱe/:nQZM@ЊF/jE="Mڪ:X_?~h=>tPSl}~%cG{nFp\l͂{y[ZD_ T= wMH 0W#&דIfOٷd_ ?7Pɛ8ˇ|>na1ƨ~ҡ1WCHA-T#BEqN *]Aw91bWo~ٗ9OAk z3NB66 V ޤ-nCٜQg6sH~Sj7)ލY, aMrMI66.y&Hvxs'*.@=ͦm{YIj9]2Y}~oW _H/O ˮh h<@-pBx뽉GgfM+L1 bۧgf>UE.G=I}dp=>PnF*7lOpE~2jUMiuU`XhaOTHqOM-֗ FM.^ 8$~ÆDu |wX.BeC07t&y jEvղ]{Guǥ_gz֪/dLMszs/w5DS䑣34:&Mxv92%@'P5tXy(6m0pGFO-uTLE[2$=[AKP.:E¸c% M}sYҞ0t NdRl8sׇTWiֵGdq ];SL D/jj; *D׷*%B#shD4BVZ,n9ԏ{;KzxK8wGnq4竟^[PX*uK7^=9o-Zzh~`V^#R-Dq1Bļ5KDi@\:D>7z'~$g^C!_s8Joݯ|Xkq0v$ ]t'H/ ʔNv24䁡5(]f\Hsq2J"w+6̃gҫ4[e󎡝팪 4|]/$"}"GgWp$36PV6hAYtUnѱ:~PsT|A [b`N0hfdr;fM[/Wlv- -OzkuDlӟkW S2RxR7)r k^[04Fo1<7Cq_>㈓J @3xB1wg)0pYIQ_S% ܴ'F3ia.;(wh yNRڧ#Bn/8e{;Y)A_f}A\YYF21b_7C"dal5.8@Z崱>^cZs\j>xY GNžSXP!AlO2Q\VIokeշd%e^01 t, V&!ҳ/9`/3E\Vw>D$ DbL2;["+C7J=9~<'g N.fgE~$PKM(ɺ/j((&8(x"ᕃ*T?HKƅcoar/iozN& }T:Bf(lHC;( }X-)67"ݱb9XXֿ#ьic/M|;CǮ 63 ~];`)B3}S.2-xFuXvU֯>%S9LW{n`#\6$uZ1v{EjמCbc?8JuS5fSk˗ɸt(wt~;o^NفZxk"blgǍ[2gV3#ZNr?lH';/$β5-Tw7n?SDB?^VqK #KjS^[ݔUxC?P3;q)1*sG||(xFay{1D6jSΛ':@ V92ٜ\ީIۻ\+ 1Ay@Tٟ06}${oM=[s[K Hnw_ǿ/`Բ}O#/|>>HbMhnM+EzWP1+}MP ;4x>}@IcibĪ ]2aUD㖞0 $,?zd؏=JdRNϥ-BujiF?A϶̫Ad+z ClF $jʞ;J?>=]Í ia3Q;3'y3n d|rOFo(/oԢQGȊ+hߔE5J@rL;ނ Ҽgf[NVU˸}_;ht q~$ɝQ%/:;NBڈg螾1m^2ɁplKp8nX{|NLI4b?jJ ?A#>XXRo !ܶȏEZ>/ e< ^JYo``&1Rw5=C(v.`r ?qWg?5gJ6n05 +}B⸈=_asbO!~aŷ2ō-('K1$d=Gfn4.93ǬN\HD$Zd(YXLgQ2χAy̍?&f>u+*Kh:Ls? 6 M%:g (/Ƞl#yO(M&8yyGI~MDU LUZuă[)Neڹ˜IAVۉ5gF:{V;09P~=7{m~\MPG\m4XL܉3yw%YP#R8.BqtkT( >\`2w;*<_2gorR|7U{HѸTڽIDN;ݯ_o8y\ސ~ցM98+|&[<.BL͔[Az4~ckC/Q9qF0lv+td?qSϲUjx?CWn+</fSiz_,nU/Ο;[]2]DT]U Nޣ2pe1Ej$}| ?mmfa$(4ieCB_(e*ҀhinB;ʽ7+Orwi{so%~ Uō?46CJ3.[OF*}xeD2ʜ@~PE&[\ea q@;0(_~*qL5At:!Ӝ52T7$&_zΫ$TV5B>䁩^cm,,W13sW*մk/wĬ'dt[SQK!:\0.^ \7bWrap`GXl~[d{#RZg_8˾P3;_ Bg-ǤJ=D{:-2/ǹn?&$@o OubB1qLKabn0*1KC*c !'D4% s324oRaAOFAW:ѾJrYވACzåy=n"dzQYb0r1]<y3M&e6DKl=a?`f.h9yط%&^Gja:"Vv>_ 7=TiZLJ* {˾60tj9t퓑VX"~a{Ea~{.^3}_*qY_k[<9=rf^/mZDS+kR9Ky2;?ai{y $!MG5rF; .k(!LtA~f%edjZ}㹃e9D]|UJV};psx=hY$~GC"ĒogOUv #OBwL?Ci쐛yDn҂g |d!:K}w/t_ /ȀW.ױ >=@ mrv;'˱$򯳾Zh{qۼT37tR͏ !Kh15wn~[lA_{<$ԡvh.w#CxcH1cSi+wئƯq^ǖG2HzѩۡTc-`h(DQ5ebQ0%@COWL$ĹD<2WS#`#ЪId"|MB8-o*.Ewtp8UL_Q7H?`/0G"*L`=cc(ѐ9)l> xp#Wnq ؈"fyZkf deO+U(/`;\`01Rzc?')2`]1_JxNN&w[/)UJG,u~w^l^X3 wHS5Trɲ J[bUo~(&8":Am&j=gNK8V2{ns\NUR;Wkq9>9N^8]*MH*>Sde0<$3S{tlzqrڹ>8^aK&T\뽚mqQm!w4sK8`/iIm(J AK4@]ڜ )>1>*hMrh.1.D0DZ-_5C/LWH|k/ſz(jL章Nb<#>:6t77~ rgOed9+ ֏E :hVCsyŧZ{p]@˪`$do0 Сxp< w<a}%b-;X02`6[ٹu8^GV  ,/NMF O'D kjt\6 1v]gͭ{~HfR&ej/Et35~J^?ls-8cXY5zY2v1:\ `G]I[{ !FLxw2'!]z~pB,S˯*Nب8;\U扎84 Â0fߗFK"^*_qӄ(êX>[/3بFaD/pVD=]=7WXq*)ҷ0jFb6RXVAv#ÿJ$WB[Cr#F1О|Wx4g}K?0υ/ VS|d\.G} W EC$nO)Ũħ4xKhBq2e0urA6s1}!ǑMuq%ռR6 EǚNs# gAl+Vӗ0)ci)#}5"w)a:'^ sg{ CJiBZ).,|U?w֧#q` vմ˛5y$2lv bľqN!`aTa}&݅B1޷U{u#hGamqf\_+VQj%6k6 $’1;K~JF\_Ś=ཟk_eWPjr_=&.39 lօۅ"Oiή+6ͷaMKA-/"wY)xvĉ{*hE8g{lӴۇpSr??'mew> #Xb4l(n*_@:ǩ0;ױ.O*6VM_V{k,½d6+we|'<[Ɔ)NOhQEp+HINy='v>591/zK:6Fh0CfP3/6v6 اQSɊ\OvF")s:"E N]el!OX/lJNSW+e{tt{k4Ycfb@'_"+.vrƻA` A$@/}l===͊磿>~(/[D@ی"W7gɁԾsLŒO B˸s/+#9U{E^_y&jQXMz: ʩQj^꧙kLzI'ޗ_Afe߾Eb>FJNaWBݍF^OWʡ.?zv>DoD1!:k_%$PhTaD.j vcfJPxX٩\꿂]h^ O2ϛHg0G5 B=B].rg||h2O)uٞR_x7ftxCQH!yϾE~/|~4&vwT߹Ĺ#Apb&\V`ݐ=i8gJIbn*,A@ϓs<%]xE; RZb )S*_Sɳ^ѧlG o a9B3 ;ArQ\$UT0$B(fϐ*OB7S=hgGkm9";N((q=R$5_gX_%xR >Q(VC24GV,xwQ8 !0p4ޕ'rJb;V,-Xn/@qj[ysR/AzjQVJE2|Lz}kORgjw^i w7uvFy݆erCÛQk;ڌ~-sm5ee5U[NרdTLǔ7l's>l[uHq*Lb=X3h6Rh šfE;ur _ Ҹ'+1s]GP"T=|sH =LWLO_z?W N;;Oܕ%?h>~xR,a,'lU!EeXg63h|E'P{k:) e%(~ w:jjˤ9tjv~)63¶ }K$T/tbL}hb^HƛKURw:K'c HcsoDs!nsEj(mH9@cSgqk¯)2q<~<>h 4bvw}k2K@#-W굊3c;Ux{ J= 0R]o3vCzZ3L_n/'r!A%]r+Pls;u`]j"t M&|+ C:uO@~T$knSk_ Ծx7nF9!ځ~)38=sŔ+cI>6j\ !!-57:5 CbqI(5v f+DU&t fy;Y3wgן;aYPAOnȿ%tmb -=,]X ]fA)}]{Ai(o5%I%ef}4 Z.yt+lyɑHDZ/.rK*;$\@t WlnsJT~ Bn3B.5qZ=9,돗.#HB$y]~i |oIrӕ >*zuU-bZ]sRp ((/vZºX[ٻߐ7/חBhtK~vnl{z-%Kb YS,Bd_ĿG\Xx~]ܒSl/j͍C)|jRݫicqh*1ބ8Ft'3؈b I{;)n )/81B+j4S6# PyhHۛ[yp HݜZe/~X|^##e13:ݥ[:hX1\[ >|]TCXnSI6?r.tT$WLVॠ cBػD$ggG)ZV}cq- R*]EyoFxVI~[}t|(\{e4q\hz! = A)姤3d@D07n$g,zri+ @*!ᚆ,1{`K@#Q )YF;<E]6G`nr96Wlezc!4>Qw6{עqem}Jy?":OaU:R;^-is(sЇPflFbO+^g\hom#qo-؞¼0=M 9O4W=gq55Ps_6ډבmcT!Ep_&'qDpҚ:9xwg;VH3)$T}jAעor=ZoQ;Qz%HSнLQ2!c_([{w#!-D_ wΉm<45Pitav(eb8 [v_E p5&1^w&_B_F 0z% _@Txf^TBGx Aݻ&hSQ^E6J[ԇ2s]haR=IeYHo98Q[`8d5 yUqrfM|ʈ{W-FVAU}<{"yfῇ;IqU fɚ<rT3RB0 Bo;rbKHlpaǺc(n?zX=R}ݢMoC=l_EZi[ڟް<$e`t + qIT>J-{<_s|Iܮs}5$Wfƚĭ#a`P0 I}"g?dWAV ڍ(yft7۶[ـ}gk ջAooq]d .ːTKV ^T Z Lfss:@3"յ+.yNE᫿$[#7 5d!DwsMNM:Y*jF~fb?~;\>Ԏ¬46?: { (P7$廮\FOL~?7".ƸJw^9} ߃qrDKػ Nȵ M_J_G E)L,-]g spP=2kbadY918canx qra꣭(AVo &k5TyQU|gM;+cp%>=:A4B̿Fگ.V ^ Qgxwmg֪*嗴Lm;:mkٯ)dYy͚L SM'+pmg}[I^ViLq|:3[!fĝr2ڰ`f^C57=o ܶtus^@6:y??Z'lHм3y/eg# fLِY\hĚ~upYfKy]T 5m3^pv%9*˭U2ȴ7ceҎ|o"]^Ð!k~b:Az :mAIJ6FofO~b"k* 5 ?Ӳ^b܁擾7YDiwaz8qӔ3%Z<_cw^t }rͅ7BPCKVCo/>'GvxF6`9"Fm/H-ʛ40>%#c샻tȺ3hc٠vIGyW?jJWiψ^c]. ,<'w"a8oHh} l"F\Pꅰ * =9 ?a~6\yFKy݀o}Dgd6zӬ"Io^t^=E>m~gj_ 2gٸAPkى/4Ö)𧜎Gir1bn}'*TN|Rxs =8G;`HO%岀4#K%%E3vD uvV&sgq\sB%6>6"7r9 ;./g"󾍗t;4y|noî^c:\Ǹ~D _^nXnڽ{ggC>-V~Hv(p(!ШZn+VۜfEh# |oȚz`ѧggK&fX'cN֖[Iw~~QyC<"(.pj0U!5bi~Ϋt|$QJN-;|YX@f6^#$V=g}#חN?\XjXroB< Wozۑ,2yD0=UHӬ`m=iapG?5b. |-'^ O[rJJ}/ҹHVtyfhcA~R!=y[U՗~WNu"YbՇ*> 8ٍ2O.ͻz_^\4q7JW򇡮ݍ,^IXh?iB!&`XCi6?_̍w9ݣ2inS!K5o&EJQ&缕\},YbEk7%rX5ZmF>OmnS?+Yظ`CC@ duLH޳ßQ6?Q~;'< .!cc{]DOvJ |9h? VWz4)qls9BsspzѵPINYU!1>]V[ʈ$/3h08[[&=PX\cTrlTݍ?FZ%.z9'IJÀjIk-c/P;N_Ĝⁱk*[KGCad0J6 2Og eG8ro9݂v$''{OybU!Z\{XDL5e{p*ަS&8Y}E"FM4 /P K%7o^v y浼|z > ZnETjWK (~dW7nl馦!"t-FDFO&GD7W!堍A.\kk\r^Oh xGѽ˔V..6U/U't \F+_AsWsq6R[#*qbZCXQ*<,ĐmeEے1ٱڹ wDԬ!Pƨ k1d`ŽÑ U{p" 5;rP9TתxN^Z@T:6 + o.%C9Y4` _ZVW[%mUvL0b V@)G Q\%9YidXyAB ¢˘غ A;Mt^b7%B9E.Aāk}M1ح 1%X= je1ȩ Se|ŨY4^7Zܶ!xnڥ(14gQ&~kפ.oh>0nm6A:kѾSTp;b" >r&a0՝2ᅡU9tf* @-!/t WH]SphLޮݛq;#RLzc3e[UO w*q8;dҰo{?gA^5Փ0W}JxS?]lsr.U_#%g[)6mĉ(jM&b|oI06vwD/G։qNbA-|gٰ h]-6?]> .[Y+,0|ߪ/4wŻft@!hd{{,3߆w_cy7_Yg\ܡϚdކr4IF#m:vΑ7 VBfՅ*Swg/XK&6_߬]K6fCsKAp1W=fϦ'{ Nw;Gih]}kӊR]m#D_t%²'UvklI :%W_WA~e鬺,,n}4'NMoi[DijnibBvh0f`]:+Y\OC*ro Fsٿ,A.h~!{YkYuQQ3fG3 /:T*.u +g^hisƊMhwcN8 +0]麓0WfŘ]?Z/<(lkGB/%2 }S89{:bwIWʟL<ѡ4,۵M#O| N!ĶT@Џ}x ƚ 'TOՇoxur&J,sT#WA&;chqK v_:]/ rO?G%C - >-r@AFg)0IH*H=? V3ґ1? =". 'i:Yk^3L| J$CB3*Q\\JnkV Qhxq>TYt҇_t1OZ]o*_Gs3?fWwyOQRW3iW[fu^*^D́4ba堼P_ZKii޿tH2 -A|JxO~kzZHV9yyzu`1.X F+."4U=7NV!wN?pO6b,g )(pVrVoq3Ou\w6:}3K!3Y -`ҋ?- Nb hH=]㇅ uc.X,J֞['4 aԇ5Gk0/E®@3N`bTn\9-a@P#N6h-_}e¹FHƘ/XM񼾌G^qSccqXX$Wqk@I4EL l= 0 c~E&|ȏb2;A[ e;l~0afXzr 35l럒xCP2P^ȮR(LQE8TlsԸoaqmkآLpPWAGn1\?WeYXKZ췒jIhfL?:j8dK_^Oy:+EIWArF6P&oX],NK`26m9ǀy7[\Q#4 -|Q+ό`XqZJT2^!.<: Hk@z_&b1]R^_h+ uwGԑUDZ$Mj/xHA8g-jl뚗 mO$d0(  vϰv3OKݧj^ kSۅ 7{<왑-ܞv@U2ֳE*&QZ&AFz]+Y3" jU .eqoQ(VWu۳/9 '쿄jo7!șOyյ :\sh={nvg8b [OP8n[Pv|2RkŞǹ,Ēsq@ߕ>C~0e\b8[Ǻxܠc5ƌH P݊-&0f}-cx,/oh?7ھ5,>QϏ Sth8(4v4dsA&^^MyP~ڌ#՘[ϝG"_;2Ͽ3s+y.b/G4+K0ڹb0Ⱥ }me)qf*fqs\Gw}3A &H^=!wKk% -?v!j3u5[y{WiS=}}zͅv=Tuwۡuksj7xNeqe.}\~iѡpv1`ùȓ*Bg)ձR,ICY)N!z.7-[o`KNhhy#N,Ac,?Q }!N!\]=1]] =rfb튫s'MSen%// zVH{k0HEO@af/~`4\& w7fuf2e`x^XKV`bՑ[ydH eB`OBsW{oͲT3uuŌ6Wuz,ysfC:8iV5'yЊ8ԙheTb;,,}R4ѠԳykPw\E Yz(_2y=##:0 yH)2'.硪}XmQ[!RC4QUڡq~H}=Z E2+/kˢU72&| zVW"?W;kjjxRoѡ>^-E"}e/ zk !sHw Ո2%Ű,C .}_-ǖ X7jTSŴ(Cv(g+ X!^TbV%w>P}za&y\䩿Is2qBJ.ac:~{:?Zus28]dDvt&EߨQYiv~Dlt$ZS PK2dOzguvCxDQV<eȪ@h< '=mkΎ8k#Crr,Ieˏ1 fUP0.~ĆKnԩ8c7vX 5xXZLz|t?2d K,73dT I 7eOuC/crwyzZl7˷xliq= 0m0k8߻eE)sğUظ>K# fϽ%oҿO9Qt `r_裦frOG\ڀB}4m]x[Q/.ACj"X`][tz:1SdXن,\]G ]; 4~-]U "nBr×r {Z!cF4Ef*X5ߌi NZ Ì-;TM{~!iic2up˓oE%nqHPZڱ  \ U/@}*ef/sgD!Θ\a`*rA5S2$>)cy60NZ-]xFy los'ZF8MD.jvGQrvV "` g\-8PEel[q#`N"Wm~b'iMDt۱a n3\3XcUCu-a?ц\/@:'I& !,h2mI#’#e:^cͼfH B= C'?y?!IVs4-{xbfwQo?Z' Q}2qj'?םb؍ 2ܛ9&3H5YAt'4)2OB&eV15AS a$=X@˧ I2h2X?9Mt|_m*_l~IxZ@7,Vk|Lj<7̅J0 ,hSK׋[X?ǡbɡ@HPǣ~UXBd +Ubvt;X\߱ayf»m~AxHCy,3bΆN'uEXNy6$_1Ӯu/9C*Lhoۡ$#iKf)ștX.kZ|5RnhS/7Ξ0Nɤ v|ƀ9$ L!yme>D]ƥ=wbڠm~A=C^=GM᩺.F^bG,"iDU>*Quim* 5= |`e~̖ya"P}َS^l§Z*л:$/2e\-*݇MK33:nl)ҳ (Za#n6}ޒX&;.N+Ys+k;ǖk'.)BVF_*5ĠTŦ!o1 $^GC BJ CNJz C!~Vp2WaۤZ-5R^LmvtJE Ru o^Phj-fOyXxP6v_ `h 6 큁!4&P!fT{s"z ?śܞJ)A4Р@SOL`UƼ_,pҡ8Ƿ}?T˙ y-W Kc8_jDbOae*XxN,|1a%GAyx8\b9IcpO8CxƂZZ"9KuW]}iΟKi|l?)ɂ9" ՟lhH1(Iy튴 |M4`WȑAVs}Sd/c L?\: wQ=gqJ*^Ǧ ~ڗAt!>C79&0nl" W5Ds?u6 KHb#^JͿA'wYU ~D/KzL/S Bk!Dpäc 6~/Q]qon|e:'!%/R?j*UG0MNH5?V;'Hg5H!5B.߫?6>1rf'Miqݧ^?Ɲ>Mlq.WJd=kγ=fX 󥚄Q |g,\_~d 4vN$ϖe&Ay#!̍lY2?ZS'\Q27)Te&}v̴­Ew~,?% 2{э>!|{h8*q_=^`;- >~N!&p(R s3bjzv*l79nWatM"J*UWe%p4 cIP) kѬa0 Fd2b:Z y*CB3#Wِ#H<Ʈa"ըͧMSbZHP d.40$8FP 0x]gZIooEljp:NOs~i:#Xd(3NrfߚLM&^0X6v]* }lE|MRnmFK޲@x ~?5[6ss82X@x#Fd\atL9#,cC"fdXÝh.R_Вhң%LU4;WݴzL,h;.ӟ"wlh!* ~Y]|nݗZ\.6A$ÛI/,q`TIP&I%NE8U#9w{r?4`"\T?2ZĆ 5g/D{5C'tpMi>~,-3e"Է -\8{<7ffO5SW_9zȈ9Ntu2,xx0ך Zo\<^Ou{sŹ STmT35Y(-gKb^XqSs`-3D5ƛAm.hq?GN--^Ƭn<.}|U}ɯ&},Y*EZC{\PV#ϔ8"&G !j a0jp2IIIQ)DΪQ3<` ҅=ɿhqhm*t)o0Op(k(-faAw]~ n7W]` Mj=j HʺuS^+W8\x %Qq cnPWb>o-B}lӚmt{!{ ҨGRx }7~H[UV=GeɫH0~%}Cw|+gF;2ū*p\F{><1B! ʟG6T7=zRnq[N?'bEAHiD n=AIY{<6HqS1}*`90f DNց[h |x~y) #+o׏3tUh?Zo{D}AuGG~:O$ Oɐ_?65d*E+.\0 ځ9hAYHQ& 2wODe' $Y/g3WOViTfMyYp2̸\Q0~}`Ag/kwظ&h`%Ϣ:ur$q@z=u4Lz"Ȍ4,I6]Ey)Jˋ-t;&VrCD"D&+*u+Lx*0C,hbV-1sHz ՌtwA>˿(+@?OQ5Xdi=HTX?2 .ZJyD3׬^"t/$\0%-SyE]YSֵE2㎉93 sLQRP(wX 6Û KVE^H ڟب >4Maa~& _Wfw'cBC@F4> 蛽zDŽUBCpAGGC 63dA'0M- *iSp*.&20_tӓbGVI($O+g Lf\|,  `x`?6Z4vcmTZ4,>G֑mGB@QL@g.bf'4 !ƴ9adH& Ԗ9jbSxT)V ?3YƩrjܺrj:/J;ctK(wʅ~Pc1&ZC>': IhH3Js4kxzdq(^@s GP;Gym=."W7/S+7 )>Fa9a!_t99FcqaxKhͲmSq?Ѳp3gܮg^b:71$q)iٹYP@ãjSNu:}ܛE]:T>,?ȏuSh1!jp} ~{qcA.Wf3oJ,ev;iaw9k,3 d`2J{{NCEs̹C6 rƿqWL!P@ ?Eb 6_"ҴFNSt>#} nϝ7UW~=O*Zv8pƓcbdsV<\u8cɕICx{Gse]mcm iÕL)%?Jx:{Y `uyKWvϹz0x^ ʫk]&`(FV~qsry:. iˍCũ5Qȓb>&/>liWEW*VO3FW NEO Znu=1M3hkh)m]O >B  kt[ػo f;!k2aRMQhǟ< Y]8Ϙח4Ur_oȡltx Jh5| ,rnHm&r*[/Ow%&ҟ7RWaux]+zg(J1KC0_"ӧB RD@wxFGXOKlBאFu'ʆe JkM89Ԏ([c<>Cmly9҇g/H=vjhwd&pp Cu>U帼TlP?caypƵMyRy{42a8DA9ȫ?gqk%,2Ne vBx)6M딐I|IdK7mgwD*o{~w<6]~5??)|EIs[s?"0Y]y`'ű~nW`Բ16C#'þfN@ga &߫6͹Yjܤct#>RŢK\WK OlYuLQ54>k:-ŞטWn9l3ϹM;]L0=Ң[KviIAt\د;nNy"H1Oq@pa@ k J&qjˤ%=K/c?1ͪ; ~3ld/n%-qGbz,?-gXir_SA Pr F2k,RWػT*Kɖ{ZLsX{8V}j3^bQ7f`wN]bDȃiseDă(/'j#K ֟q&2'~O B}$V w)PfZ)7 kw a|bZƧn4:Kp<}F- 1^1IҶe" Fk8 :^8vb8@L7xHM#,P" .Qoh:n aAN.)dҬ-uqJtۉ =3!MV q::E'dH-H./cC'K.P>?rHV9[%I,, ^|L@2iҺBMll͒5q^ɫSx­Ǫ 3W| 593_&}7{ކ_ ^LCgIK]C}T›v:*Pw`JHc](J t#U%oVԥIj%|4jm]ld0מ?;7 <6#ʂuz_nKF";#+SB3~ {l÷̰- ڿZCl5ޝ>gnLKrƒv@Lw`z#l{7U" Z3c>'I\'Gr{eSoyty gkP-7u{y5f& rt@j@GhK`9(11,⛕_Ƕ7uŧ>l@Œ'2,`CiY_:=S%qč?G{BL$2uoJذxV`mWT $a~|>Wo.CfѥGg~5&yFԑ;}(DA=lrBܪ2=? @%O/^C 3(]? Bg<\7ꢿ{I7~ѼÐaG.?oگxk+9GH*9iN2.;MJP]q .MoL]Xτ&LC-b\%~H.lY䆁.lfW u%`7k@;Vg3o>üL o!Vv١+aKG쏋Z|;bhOzIJvK:}|(Z]>I|dC`Q?hң4}i:muݍWd/+ubHOλq7ŭ@ǀ( p1.4zL/#7%VW=oՃF31 ,։\I:ǖU`ɕi{ ۶+p.+/>*6N2-j3r0+Vүk:0 'f!vSOH6˵ZGU #n$RTOÇ'`w]kZǯғpVokAWe?w7mmޯ4n!2];NU3E{ߑUwÐ()]P4{S:2|J8Ia&AEDd%C9ӻr>C5CujWE"EuF>W R# È߆C@b5T+z5310&Ew@H4o:~^ij1iOcs뾅3/#XUG.E5Fe! c%S\5!{Qԭ<]?w@ ĹvqB9>acFhho>1xG?Ns& 2 '>"wQǚh- zPwŤs%F0n!MR*DEՓou8-֠Ep!Gda[?_Rܹq+XkōE4$^$ ,ߙ6 ɍe5shq!en%0fPͼҒ+vb`̩6g8tv2[ynW~9['pC<=/vRqf]ex:b0VP|CPX]OH3xqlx @H4Q|#KlZD^b}S1ysgeK=8 naer<[~*~l`ԏjVj9$33O.mg*q*P"/Ar{nN6<]0`Ib~*݌ LEFh&8s=Mޮ@vUȓZzPg9*R ':- ofYr>wf}G8 ~m4C&ocvrqAw}+(s}E%Xݍ!9asů~^ faDTQF?fƹF Uwxģ%f|[ y9^gxe糴Lb~A0x)Ƕ)o,jkov0ȘH|͑TxIB/Xm,Ȇ =lʙa|_&Q=7y3Q[ꡲpL,xafbHwv@D{?j*^%F$9 >?ٱF4Aqd|,ǤKd 5 a= He`*Ԉ>^ATd." NK'dw36zU^̛$H&Y7m;-XHwߒQ%&>!a,5egԞ (dqXT{vFgb[l [>+`nU0mJc(q'/{83 g5;.:Q-));yYs:bzᑔ1 ui w_$}x+:*9ĆJX`\.4e*PС~,G,4OHVDVe+w?yȂGE%C]yL8}4LSgin k4z-$AV46 j]^Wrvk%=r#|n .gBCWF0 <{ 2 ̗7Fe$=d֩;vp(d6~DŊl.Qv6 e 1r^U6 ҼώAXR*/DMw|U{ z!v*'0Mv[03޵`azGZܦ&Wn[(ZF@NR%@WŴ`fX{ 輸X{2i$*-.t Rm/17!o[ %{>j NH/i4oYm]s ;NjvA~k18H 4Rh=|ueOGc-+2}AGrct^9JQC֒4co?_).5 ٪^[jDޒ 7okTU6=Lr]/=/*cK8񮥴b U<'kdCVQ)Esy~yj5b]WHLP|SQW1lѮOa|jL)(`*gF]dz<~c7}f w29z2݄ %w"xo 7c=l; Ph?8}}$<TJl49&u% )26iд:a)}6Շoeb=#3)ڍr}yMVܥAg:bԨߤɯk8b |}G]+K:jF+Wf ]~ٴ|1<$Xv j9Ex0-D*\F9m.ތZQM\[rxmtW;o(?mq=t x%["̤y̿f+;P%`},^IV/CK/qM zL_KSx)F I}/3FG9vD"xঃ;y;6op/Mk+Jur  :U-?5K<$w Gt;,?S[Unm(pR=؊#8148.| ZUi;j&& m&">_6Wfoݗ+ⷕ%&ܰťoX)W$fuQ'|F%?f׃W.Z1e~HCYp`0dzNuY#.w!IUM\ЖO`PB(N9巿MԵ=̉wWrha%B_DkP`}yDUO!s ruqffw; ?ʺ;{.[ݠ]kPWRTA xb[*+\L K8?M6YYfO_F8L7(<7R惎վ16'$*c }Q$h$|a(uC2BWcCpN L]GL1+\sdLid)`eoTz;E6ý40(#SKѱkhd}jnxf;3bN|b,ƃnfsy`MjD7TR]z*߸)SZ'<7ػ h)M$w:!MHFf^H֌ 1ˇh"27=@wQ2whEM'* S[TÕ*){F:d0m?z+Oq1!_"2/ (>$ N`!|&4̷ ш6id֌&oN9-:YdNi{sڔ oh "#Sk!*ЈG%7/\`479C!J#oDgŒkrNKV;hZ֩g/^NHL`}a<~6~DMFiGC:TⲚbeMz8> ?x Ds7^031`ePje}mrPA'O']Pԣ=Fl%&;Dv/#kNp^ j@5zCp|YDk&F7"|TGq'U<(e30f01֧/o\9FBP{xWj/wk\h`gqp_Q?C`_.VkؔAss ##k\?&1ob. 46-$\A p\Re3~F0cӌ7o >DZ¼v }3*6q.qbǗҵ{oiPCF_QGhyx-ױ-==kѰ%|gd.k}:{Mu<=q u(fgĢ!v2=u/ G:&[Ԭ$c|Ia+b|JD#7{'Cχ}{wz=@7gҨeS_-߮<NkqdҪ>{ 'e_} A֬f^i=r_bz4cz>IU6 e#eU`lx2miɱ8q{U^}>[2{&e;u ?-J_!L*_{ j{i>ڈՙ5[!yC |=7L}~e8ʑIɧZTi!֖_*١0Um,o&'2L]W㠳VjSHUѕ ڪ9A`2/SWk s5N]QO)RM#`ןwMvhv JFsCd2j18fɸ|פHa)O:k JL gesK}s`` @1Ka7Αo=ʊM}Ҧ}Uug^}PP%^X-SL.JiJY̬p7E4tKZ%=wFt? ͦ={dCXgQy{ _^l`%|_ g 4zԕSBmp-ͬZ2cڦ3E\#JVZtQ:_A+Hu۟ e3HRjv߈f' ޳LꙚBj6(?:ouoŭywJC-y$Yo~f'lFr1뽊|m y j|nbCAWW: _aO J%M`]+9(}^8;k_D83?}GFA1Wӗ3~U5jdiD'[Жzk!ԍxUGEX=Mj/D䞷kpۡt,9ꀉYy)kz)Wb~oa{~h_Hb4&+ Wqq݃LHhk;2#-mV[.s݃oA?x!>;"zgs0+Epvd1ZMSh%$wB S_L`b~jÈ^_}1$?4",ZgZ}ƕۯ|t'od ~ aN2M̟gWf]"gv~2=+DjKi(Z{x `ބ/VQ.ITRç` %V?būRS@{N<@  t{>}Qa 8 !A C F m,hwؙll#[͓_p}_xV4yq>yh}FPl!dLjU *#R ¥ ON綠~_ a8&% Pz'Neib(폚]|?!ѾNHUZ`Z?e=!A1WX?` W n0' xppjLTE߇qWy ćLx' c5<\pX% "ʕ)mw|sĊ]%| d3USnM99xr(5Q%ofZk۳$K&Q;#Zi& 欜Ή˻H2bLF=qEq('(GTI/@|?坂z5S.xyr0;ZLD!. T|CgB꯽Oς"Jt,(e<0 'sv;l0BU+ \Cc>;U7[~߼o_{ۓV^B ZЙ֓h?eK PL ^0pe-YaR ?0a]W"VTjYxukxrڸ6VLN;ȊQe<_yFΛΫ';7>9wZyolM|۸4txf=sX*7 wT"UC!1asyd I)qPo;4Z*ș5K~a(k0sX0/a@^%_[Zz0FĜV8?vaj9]ғb>Rz$C-0~Y3a,]"0Vy\$M⿋Se[ sO)qP0Or?tֽ?kmsPi32sms䟴~NTMsz[,WZ,Q :#(M+n ȿ :{:׌1x+5HE 5MZ,W"z9B0_ pO~f-URS{ cs֨Ϯݞ"إ>r~|O&}+YAb\_A{n"Rcf[ Ƹkf\4^\u𮡡9 1hg $57ufQEsDC+l=i;]NcWƊ7F}`kJ eΊ&ٗe2WuJm&2gzQ'2sz1H P4شmkIFi3?d?_O2 1+C2|pd-؀dbegi^ ? mos~OS?۠!B |LyLqsb䢉&ul\YEg]WvçA+:e4AS||,nv"q]PaT[x.qNFk`F\lt}ӮtV͇+p/Fn`2[IWWWy',+}*\ڎwjLў)w}Y*8TQfGY^'- vf;7݉]>{fzv](ZVY]eN+A`[e$LlցdK i8(OȐ@8<4Vi\ƀRYGWL!]zhj8)_ȷg̕!vֱ7D(t7Zvd^谀P꛳"i;v6އʎ`=n56?X @;Y0|B^j#2.mw鹸ӯ}h[*~L%9`173u?ʄؾ0|y^S'X]G7}[H{]oSw~yF ,ZThYv(޾1hzoΏ$Wd6+Js1fSyoU W';o|F= r 1= PnW2r k 9tk RU)߁<" u!5~c.;EǷ1o^Òi&#' ?3"HBX] KLj}{?<<[Bޭ-)\1I>q) *ܻc- tj^=FÁ Ǎ{(Żp>_A !ܶ?N}+P)yA8zd?Bت5h.їAC18/~ƩZ:0E3GqR#6sL"r8GF蜔L"2rvnM <:j"}0_j=I Ɨ".i`61\VI;qLf'/ $o";y/Y&KAoPk lX ƣܮצblkI՚Dh2g[,chsr6Un+T R Ê][ iGĆ#i0io l'3${23[ Tq?dLOOuA~卹^xk:6] z%HQw\ ~j^ ;s^[Z>>O8]ig6Wlߍ?s*L:T9 vS7P\ ʖ7eJAwEhbpRo0G#_̠#rD/ Bt{lViß1g3)>qا[C]xCyf Kd_h^͖ns=b|rYh$?I%y/)| =#كf~{?ك4Շ췛@e!OuOdzsxh#~ nUhuV J25+/8do›v];{QMǑ!,ML )h^[468%f j]e&FX*fyF*@KdәNαXvU˨luV/j.ervLzp|-]jkX()U9Sb;3FXE[ofqH&3Q/1nEUcjBMd0ðH VeAv:dyiO/ ^d:UvD0 Nv"2FM1apf3](`ڍ7١:A!.Q!!ydOoY,_%uK8J^O\$)( '_BF]`T!z}7Do Κ| Hb*ތf78řsxv]9_2D8UFH"tFGr9>(8}GUIxhyԢ]/#Y9xjVrT #|dP!h ?EyaQa C0GfwĿ~٠ǘM}]&h)qVyl$ b|#B T\q~x'ЬCfL16Ϋ^2'=;(h1j1^KV', :oGЍ%4`ҏ2jһo>qIl?7qA5YHȜZLzm@ G'H>:Bi!/|䐽3VV+/VD x5^!|` D“jkْ짇B]L2%EqbE>*W ,".>o~><.<ک(Z |SLY%EPz@W m)A 2Po(NRXK>rЙ|i]ۅ? _673Ƥ^ 5+Z`>Ug^P^ }o}a4bsBޒjC=-cIWo.VƋPEOT46@1N;.m` !fXI{A.Gl;cD ݼ+\7}oT-G^~7^;gˊ\qB#Tj!WSwi%=tftFk(C)Eݰn320R(?k؃ c2E]$b!=`yf:g /}5E2@߆.\}+Ynݔ R`1 .d&{ fpn IV0BY@;c0r)1P:&p -\I- .[N/ʀc GB]+5kEs]j_qH7*cF)Tz>RQƪ !o^!/F sK: ~R-Jeʌ/e-((1t&둎 AŚCs:~rhC|41@v ǐ\%'ͫXopDzrX0x~+Vۺb)z((TU|k~ʟsW6!?e%6ROus hÄ;Tߓ_2h=RSa'əHd}1W{wƞ>QѠ +PY^g!ٳ]D v)k@Ttab!R<&h+>yYFO0.υ)4y϶%A]r5s2Tvǵ|Ma%~;+gt#| Zc'oW:ibv 7Y%lP$R&" nea!IJI)W"eI_ g,b~> { ^IL!9U?rZR1 PEDVNUi Z&_&oR\׋A%` jX+W&WP|ZZ[4~ Տ mf l3:);N-ϺcHC=ˣq3Gf^Æg^u҈ ES|łwp(Zh[<-0_xއQp9}?aC sm߳^8>s |b !p fy{+Xc#+GgayzѥK4g,j {tqGN|V_E^d>!@{ O2 ёւXa$\0&[5[O F4zDس++ְ@lɘH~Ac .㛼[py`?cEha . 1c[̲qWV<ǻ,APonqP!xK~e`$DJ:k0iD2Y{ cv#kA4&Bf#'Ix=&1z[Uq:"GH0S93ZzVUjauECCE.${l։" =*.UK 7`/솗@XvbxXrARzh?s=ZD5|M o  |qvLFbp8`2z4L'FюѫhnN,6yi\!e_g.v߯?j!m+']>[ds(F.kEHk$?G\uL q=&˯Kgݳ=sKlc~♏9;>vՓO:=߁0K^= 1=J_2a.H+1`2B(6 A߱ō+m]k3ML T߂ބ2^a*| Tӝb4o õ Ԯ~a!UTf? u5c84WOM_a ^ nכy@J.E1[ H;/MBĀy˧F4_m_scU~9 B@( }V9Y"vQ311D ʈʩGͣVlTqB:qh(5\2,aIGy3eK"2`ACA z+\8/ј^uf β-sZﷴe%B~.tyc++ǫ.x\q]olGc t^')JMEmKl[ ]P5w+@|򞄆&+xm2 qb<;reiّ3|ޡi  <ȗ|?{hcUp899 T/.w^Tx:Ωs߀ͨ'1AGlߍofJB"b~Ƕ =_[$O;jLV^ }`):$/M`uǺ:J@{?]FL:D6so]}7oTR97*jճzM qOz >y;5x] bH박PLO+j xX\p SX;ߨx$X-(ٟau n/G?\v.Ո `,`?$ڌ.58F9U )v$6K,'2 _j<f'B`0L GkB TU-s5=.Oo(7Wyu;QxyV ֤l|;gOKT`V%5pXů-M> lWͺ>M9\OS?U˹f[֏Lbq ; 2c}'Zՠ =^K_/;Bz9?%|:$ܭY4|΃2:;]%C /xٹChѴ]Z'I@7:Xuj/=8_F^ a.F3Ҿm49cC͉keaSN$SWYz]ʓ54_6Ѝ6_Fv{gtoW=a 0xYgHxUw>=Q`>c H<)ɛuѽ1P 4p'lF/+4^wy#q`C+nM?-ZQ{0}|YJwV;]̺謲y\2tS9+P]:RuH\lV$ 6{;5ܞns1 !ބg8 +sVY-?xjƔ%qKvJM^Bֱ즞%=U O.% ͺgMX`ds ( u؏OwXAHP,!sN s4 ~[)DwxI,΄"(ŘJDzu.x%T=hܔ*$ENIcNwXfUjx!k=SnwRZPpJ~yudT怗UMӄkܱ4ˋ1te C., sC&M&}V/l`a;^YU)! $NմQR_8^wITAu_l,^w }RU3wKۥ(7ko^K0Ӑ(ݢ}̃ Bλc<$sjL"Ol PD%zB`?/d׀Q2/)A%^ ;XNAKNf7.߾Et9pJA"K},689Y\YAaߣu цs+>g2풪1D9Ggi'v$j}=uy5 4~')(\'C^Hw)X`?& pr0g 8=w֢ S¿kGu=Hpë$usm[dkFO;zW]6˛޸m[G8Mx ^o=d8 ̄pF>wC˰V(U{}‧@rH@Bud{ʱ>Lg 6IVnK2,߿C-_ܟ}-ֻƮbB;+^sfi6+} "m!IXCS !SbRi6&4u HaES(0 "PЕ'Z}_`z~ߵG݀zLJ P'h-s/}_6qj4euf'aުzk2 X"PH?ͨcf}ٔ$2>[8@5vQE}rg t{F 禩7|]}N)\\SP@)gn˸ PA$NT6e!o]89=%=N y.n7G52n3[sZZ"pi ' /K6 !0Fv+gUJYw1i_wˀ1Y,X}TzI*l<_:o[jo-3+VS&ru9崙t獫ۇZ"eF6R>z2K|j(uyOo.Z〉QW8R.=wi>܃)^t A:29.:>tɰ] 'U Y Iي:ѰѸ @HA02<2W)BN]e(㊌sKޒT$ba6Z&OsH._Vd7'>អ΁ە~=7:*q]R;8M/.3sCr<%wGu6g^bkvG>.7[0}dJ29*=pg!uDƹ}Zh pglx"OhiM7|ozͿA l>ֶ&DX5օwv(ph<׭Tl.mNcoougQme,+6z}nsi?KE%k lC:(fs݅l)C[8>G5XYQ zWa$Y59 gH Lx sֵRdq&ytʷG^^;6rݨkAvX5e<̶k]{8#]`P\&kwNm_vWn%=5n񱱡v̰p~6DnmF񺄐2z9 L` C#gإL`. 7Vigm%^z35_x`dx_Nm)|1[S9хd<?O; J%JU6 i@x0nJH̀N  `#a`uL{-%i,4i}mxm! c`%4RX{)׾tܬ?#i\YWwlYx@d.e`ƱsIE@ ji:6F LșJJۻ ^뢑b 3EģWD YF(,v|qZMB'}VxuJ"t<&J喝-/d5t@Za3j0=pQT=2hETؾW)L3dzk*0 !U=m[tXCbYvCXW ,Ri1CKk˗h3㝊\oAP׏jcðǼS40YUl&qy@D^qq4'~zеeVax PN͡0 Gad)_Ȱ2 K~-,,_s0\evkŨfUhGnsj{~HƸ9'4]3u&4sowpn\pxl;P#'{1ajֻDQ2l4REa3( Mח{\ %AgSDȷage SDqe7HXX#ʾַys/羕п)\oM}]v1Ij-{fmqbgCY6da5 Z>gbgEJQCa#cdy#|ʭԐ4i U`=  m(LHoٔճTwS7 pBM#(j+J#9ڧgطR).`' 4%?iwc$^L.~t?ğm?Pv2o-ٸV ۟#E3i /]?|tFOR\eE'=2)!$.m3.e؄PHD2zHk N|2{lޔW晭J_[2GgZs{Ma bnbY֑[)-1m+mqs{P ;'e00jRF 7*-ii(h坟/ #HʳRB^}i/ -xGG1d]/j}/h6W`?27nmf$G[, [dحڰTsca2֑Lczu).KR|B-'%gJ"VvMxI{)%iJg@Յ!BACilxͺTem,n?'bw>}f@\O@4Cx+zU~#gaOZGVB?*0³~U)PkL-7vӾ0N*dp?/ً{ Zbx_v#yMw֖݇l?5O6Gf_Nb݅FÌk'v 1Fl( xn[]ABx)eM~G[tgү/^=fXmv+t>g/زEē27/ہM٭5SF 1_Ы}uՈ(mygڕZ4R6x';zc)O޳ ǭi? -yV y d=EPKGvɳe`Q!h][<1#Ff>IB5`Ҡݘ M(0A1dĭ!Em(MSPt' bbv\R~NCʋb)3zv㓌:AA;B !DB}$QbϽGs ~6*,R; ̓f`j,lWي[4^bILo kɫϱ]r<籿 ~cVÎ0>ooʭ[}0J9r@(:8ƘffD! |rc.o=Q4<"W&۬ dI3dS,>Uc ZS޴/VG7IC G2v{ྒd3_@xD*AL֢-/M?⬝A >2g]H-۵=-Z]>pDrs}arYaz2 lWҲfi|խh͟ϑEkQe53ı J`i/BQ!"_[etX`mγUZ-5H4v $ ͗w..!*9% l<~ĉF m5k/rWsssW> M̡(ոA ),-3p7ɪL&Hdl"$$bj, 'ʑ"tm% 34eo۸*yKCٌbSBm~mO Ƥٰ$kҠMz6Z:Ő/@zCD(oAv񰐊,fF VY\:DIApa0.\bШ Qa= eVɔO2lz. +W,Tm7IA๥ yxZiP'K0U>FrnGJcʢ" #FT.U2dgSK.ifLY g^&FqFK 8:̌;Ǣ9ֵow>;H N*y{1l#o(}a#R) C7L`/j-GyK5:pG~ZMuϩ6$Ǝ&,%3NҜ QMٙo7Lb c+\S@Df y}[V+O[oTuUTUT-i+uP*r-H VzSRcO&Bf4ED^Ep QpPE%J //ҵԲ}A=qqp_KkߥW]jF bema f.XE<ۮ`lu= O@%ap,k|'sl%en%]ßu.rSk w7{9& =_7NXhh6i0[lG-8N[4c%^oN#aM&~)9؈}.G JS^ k f7]Nh#%}?jz@ա G9:bb5,331-ݫ;+WYR'H}|Ć_/^efPZܰ@t/ޡEyY{ ]BbH#^_@J(cxCE=#y\jզh0ᶮv{ G:K*45?w 4e 0P^+a Z?]B$dBV4jƝ?(PǭJnvM<{jY&pٱGA?]ArLJ5t.8O@}#.M A2sh Ϩ~KO/8Rt.c,?i;Oٛ⫣N&[>[_Z軣v8֡LOGEخC#8i,Qƫfv'n"ռ7c7f){p,Rs>^iic&Wn$Vتrf!"HşEISdu5wxfٌVK&/YUD[Q{ZŊJ^}5߿WYx#]1tKNL tgP4id'<͒z ۭN#Gl;Wt6zB׀y ,Fh|~ mWj%i6qQK]Ͼz0a}f]5^KUwt{p#QӥU/EP|dٙqGSE„] KS)%AZz,ۜ4ȄO-~tл3k(} nМܠ" k6ߐ)k\ARJIp8Kns+|a0\3?^]`n;FyDH`; 8sv'H[L18RkSբsTc"n*x2YnrEւB@サϗ*lW1M`HklBfJ' j1xZ֥Bj fjjug s(jS84Lǵ;M3C{-wg *5m6 b7&de9 ʚK5.5F̻~R=#Dk+kjqj$a$ 3)[]WcydrU4L`y}.6- Z+-itYٯoVWX "lD0iE:fܶ{"N}$^1ԯ#6{Tׯ#fAJ 4Ke鸽Dn.*V"jjӍĶU}-+V両>H$^7HU. :32v#*.&;Pr#eHD$4ؼ 3ݺj4YOZ650ua%[cpծkVO t} -ךD_Ɗ1 Qu6-aA6:ku䮭xkؼ|OsLl`S{ X^ᵧo41Ubx7aqq[I{^КHVzrN^6Ek6n"%# WȊ٫W":RBqc%JRI )Z$ZJ֎dHk-CQ<Z4wrRGYPoSH$gM+UR`X 8hDJ–ٍYU=8'c5ӌ9*X6P£~v#p QiOsE4OiqW7zɇ}#b1|=n]uMZdpԭdk}iҶ[_~װVOqq UC#22dӻF1 I1eJq1" HٜyLT&$dk4h»{ - uy ^J8l,n󀺸YMbw}V *īch[<0qT-zNբxO1ORk jiVTqq6qG 51)%wsyZ:>k; h5z} ,ʩOowY9]=vVz`@T)@5UR !|`@|@}:@ }`(uh`  $=qweQtp(-D@WX.Q{πP(wА6^˵'wڀ3#6 T(P.Q(ݯ;:҅A3UP.a@S`xmX#psw uU:rnp+5lր0D@XH2Ptt!us4*ĬcNpdipLcjsiJ(uw6\:2Z47*jݸ(d65m`G;V30[im@ LJն+`YU`9C۝1*0 v˰DAZ0;6)X34[im M}@À[tY;@4{gT=7N/ /@X>t|gǠmp|GUϠj{ Rc+Ϩ|o_@4(0${*}jK[{{%@PYLw>ێPuK_6OgGT_NC| y lx$>'GF|} -}P+;(@_8(|P^A7>7>#|%{cR3>GCv| ʫCPG( dk8}=,|}<3#>}@Fz4 <{wF޷vw6O o8w7C|z@çoMx@<{d{Ã]@{CMV9ZKb3WEa@7{${57 H|>PyU@qIC x>x6нP#=#Ƶyl|>@Rk;>B {K@/ZG=n.غ:wG|=5w]+'m6G ٦j= @ ;k,ط{ ]os}T6^>؝((Y=  v+F )z((Hz˘gf[|5{@޵ufNc@҂-U]l> vU쵷|ޝzyՠct 9)9;2P|Ffi4{˧))KMj= >6^5S|3| tɈ}J Q@+Lj𪤛g wt=6X ]*Gҏ{D}!֢|XeW)Jx(}nF( Hq)z($UK⏍ G(jh|UTEW }7* :7 tx[MX^г}hį(Vρz@=< PE1H&- rwekFWB9UT@BLðnTUEl2-TBNaђ6EMB@kk*7\:(%lM,HU6bZhJRTPn ei+m+CV-l7WHueчKCT&mUK*F8-Cj[Rfm\)Tk݇X e3p+dk)mCTۻAР%EEK@u(!@]kh[VͤJkU -jQh5!MTK1LlmR6åT+[JՁJ R4P l4 ۱)Tm] Ҡ T l" `437[64 Sm5:7`,@Ë;pttT"1n` iugFUT;: [Mq k,T@Z4fNAƕP݇F9ͭ#R%LLa5jnijt705jl&ɡbm㔡ƀM ;t3Ne C4t:lT u݁;`H3Z9SshMw5ʹ#NG@!)nv'L`8֬j՝l[j-w)dB.nm5dtVk\ͨ0h$ ):cnr21]t&ݪSl0] Prhg-![msYʠ0q5Aha.C;`!Ef4 4e@CCl@0ﻒt{ 0np ÅPéh @ RT 5ֳCDdP9w` )B:t ڔX-UP6ʰPkqʃ`RJmVbaΚ#6rwfƆ8W]QS.;q@܃0 A]Jqh 0g\t ቁ-@@fBcIk@r9kF4t;eh @:dH.Z P,4W+lm"@dhhhL4@ d``4ʄSA0  M!@444& * @F M22MO 4ha4̘`#JQ3c&`&2&L@5045&M0 C#@Lh4@ 0* M" &4i.Y?݂mxbVNcutX0]X\p;p< X:HӲpt u@0$$< _[ ItlL:CGyɤ6x#m1 _(,g:OYYBJzsY{K; 78dz_3>N&L:m¬P3N v+}vR~wmb\eLuG>)|ef WpN봞 1 fLϺvq&L$ $1 4#ʲa33߷z{ޙ:)Xۄ!|,G^޲g@@@[RIw2XQ&c0PaSIC!'Ɉ7޸eҺ=\ Jz LM1lxF"Yȉ p]]~Q|/_duAJO"ʅ{~sX`fNH" 絜l`/'kv$.2|7j3IC/7y]NЂeƠJ_ڍ-vX~/2¢2>{19ETxo )1ubinv)EW:ZՌAI6Y&vYû7d`#^ֳ ]kv5۱<1 uX#@vqm^ 0qhtbFMǪnZn<xrI2fa!&B&fr߄1qrx[qYL Ğ)Gs۔91nK5978f 3`əZntAt]nŐ9Mak;ծfXa5k1wr~.E8+YkXw׭*x=\78ݿrmB'zPVqƪɊDev2,Y*ʍiȵIGi &=#w8|>{k6s&)L^kV5S(UsiR^}+߮}0BllL 0I3 Xm01@g z}>+eE+e/Ҧ=[VKg'?KG{pU ܿUӨf;Z_xaqwvfvbrvjrv59===9;==?=???YA?A=7;A9?=?wCwyw{y{ywu{W{wy{y{{?7iz\i6>%9~Va=/M I鐘RJ2%Bf+uq{I5௧fh)vYVc&d4Upwpb aʭa+48ĎG ]v6t>#\z@j6kFfj-ݦy'igzAPhF>x)(P+0trvp ^Zԑb{kUc;|3?my\f0 ɕ+=rߋ}L]VWŒދЇ9qL!28 4N!B&ކL< :f3C[ "ge۝~l,6!A^a=hzS {Ϳ%Ͱf650PsY:5s<32xzfٽҞӞ1y3&d̘ 1c5kX1cֵV6uixvdb)yH#l[ ]2sn\A:.WW9|osC|R >"9F20A8$@HŒQ0 &a0`k p#u,iys&bC]3Vvz啕J B&Bd&Bd&Bd&Bmy$f⩃V`\v;# nݷ^~|̭vbZ KH^!J'q#2I%Hiӧ;(}h~hd%W^غr]\d=epWi#%$ծI5`^?m/sfZ}Qn| dz{S8%FPFi$ JVcn9Yr9EƩ앏\ M_qf!6ek!fYϒ5Dk[MYO V-ev>b BȲ5I !N^ٯ[ǻ0/y#jA ,;[Y#fB K ŨcYn1}M˒ջ=cfc5{%oulI Hh*dko9ܮMGfn"в,-$ f@#VvmI% 5#6ԯG;amR747bF*yjhO(&Bm ݇pV>-Y{aCһU^cAmi:aa@_ }a|flc4r>gC3mj$(jLV"VNE ^>Xh+j;{j AVФnټ.]`s@՘$#n0: S)l >]g5&Q5c嗴ʵe)sN`Y+&P~<-pz*t Kdk׫mYoB+uB>о\k .KU0yx'n/X|0Hnfƍ:u#~Ȑ5Gq?W1k20afF66p>.#s.s\8]!bLЦv P0?D6zcfJ22[X"a-+$.^e 1 83@~pWKkze\vrYpt3T*BxR2aAXV(3%7l.AF!.-Ci^˦<4UEXc&R݆S!˾+Sڳ&}_;7O: =UhPsjvnia.WڶY\V  U{`Ǜ}R3+ 9 KEX1?UctUd93//.0 CaGYJ!%ݝI;0(J@%>ɞsP|E7\RP*q *?ƳZ-˽p\.wigKT;ᙙ 5/̀4.9H[lZi v_߮c^gg%jZZVO՞-ߒvW31RGg+UٯX[DZ*WWWN+RK ܛdÜhO)l^Wؙ YYtEdpRcz ;?͡vE N`mu#?b"=CA؏[K HVklN;54ti\4T>-=I7(yE z8ji֍*DOlli+fkیإ,$w}fRθVb2s̅Iʪ/.rs7(ibYF&n= $II WuYz{rR&V 7Dl`C}q7?$LR@Pc؀ p/sYDz$3Og/~l'vO)0B:y޶eæ61LŪt*@eVRRY'J51*ѼkG9YrP3,9 bKog%mZm Bﹺ_v\~@{?r0>ׇ|O8͔MLQ}?c?+gRSYo@0[n6@`-iX1}L?UVN9_BhuUWW]^5+Pwc[J9Zd$N)KS'Qco"ԥ].?4UjZG|ZϹj9Kڿ~arwZUZ{;<^cvF٘!t:O@H_F'?J,Ew^5+nh+aF׽ܖ.şucSuF"<њܕlfn*OcǗF.Ak)[Wɢ{"ak16u0l6f #s[[ ~;ƴLv]Rd Fzwnv!5z7])Nyui8Fgfe_=ORQbDQE0A1AK2fA0G1,1P$[qwqʜ~߮jnE㘋#-C?Lk9i$" a#hcx: TCMK塣z]BG^@/⤛C76/fCIg\{;{\YmVuTDx) 5u}z Q nf/ƷQ ˤ ?B53q$mUy轙\BM7̆WQϗs55Mγn? 6GyWRU `^~st kQ?*pz@ s* ㎼g9wSvI S͗hTa/@%n9{3_I䮔bXrV;nug |ia!%a("o: 5Y/{X -~|QP $ hXbs$ $IGk?2-n3淋z(;n'yCN@c~I#GsB޲9~i#&}\~$ Fb%2S16pH U*/s|0jogrr#JB9w\LA} : Nܒ ]WoKe.[86fYpW6Ѧ1tS>@CƄEX,l"kH-±7um S:M(ν(I{#ی"i(8>߿c[w&&Hzd3Cs߷򜅨ՀP;PuavS9 jt.SR@_ A]D1~rIc^ wf +6_trf{0D/׵ =*mr!1GLcbKk4TT5A5=p[aa"1TR $7<}9O/ˎƨ0-ݵH_~SȖj[FLqq$ѬrZ5|cֵV/+d?`=xԩ)*OlE*X%b^I |Q#v2׽%&Xd2jgusF&Zr (#aP{zY)n? |'n R"D_t"7ř聦_~QfQԌz*ACņtC`t_ErA'@:&$P1C4A 2ݸސQUT)wƞS]}ySI Sa] ~T0P/bu5L33nXRIkPBL&I&d&BJM]:tf9}$@!254k'0w`F{{Z֨K?b0\Jp*!?tӼ>GڏS$ęexNaj֖Y? X4*y@av[[\5O,Yoy}$4U}0bv5lݑvAvJP1觯\)ll'i;e]Jz}[LKQb-%d OLa9Exuv"4[`1" +NhӃv>tL48*"8t!h1OT_\z'8c1֝z.܋vhkbf9dPst"c@C4Lm;P.;3:o $ZW8k918646[(K\UcI_TڮidHKVZo|I]:+ -c:x)T'AcaDST;*ϭCSͰj2+A9L #ABbU6_(WJ$4f3R~1HK5};Ƨ or#vrXT૤avFGƘyOCkuԂL)RGEdJAד~skNtM[ݾ&%&XPBbS.i"S%QM]*kv1\- kl[2f&ӱؙ7?$ݓ0E B5ȳ!>fRg(HdPBdkR&8تb$ju 1rVq ~V@8`#F r vYl>v]zN)$2,+H h2$fi$f1V{\ơ 1 U%,UFʰ†Z !_32AюRTYӱv2`1-^adh-$LCk=D!厹0,ꝏXhrvhos N3Pװ@6qfh0Ce춭^-J.،,%ƧIMс 93gS8*$R8  E?H 6 woUv 5.|n)86} e"Xcx)yW8S|(fl ZeļDQXÐVjg L"Z8,% a@RLHPA\WʂabH%.IABSNXꋎY %P!$OէD% @ht/))z&rV,ξ`RsK&ŊPڣ$-c*{d[쑈0-IioǥD r/fyv2!(D;5|IyO@F= ܤ"R(Jb,J ^@۵13VFV ?Uv} ^ P1INNSs뼩i $xҳjlԶ49, ܮhY^'U#T-T42;Oq84U\>|( 64ܔ˸ @p\h]EIv*-Eh46TV`"tż{t<Z*T{Q'3+;[fQ=I`KR:#Q)-NOԒ"(2 -'_bԃda }[LN_%G1 pf8X#6Ly| KG,W7riZtphc6 8P JRőJRu,1``Kĥ,XR1JPHX9Ņ┧uc5 )1 `JR)Z, ,``K b0%!!`@`:&͌٤f7PuѺB/21D]v'74h?$ /u. 7e\gֶF)!B P!B!8uMyL$A~2CvLTqnld!!>@.Jȿ,LsԘ @412:ĈfdL֩`?}陚6VJk$Dt!BwwwwwwwwwwwwI$#3J"k2'Ğ!vh0EE !$I$"J)d4:fpwxAB.2cH"3wAI dh  IA; #+J5agIfH Ba30Ǹj`ՔSL5F3h $3 a1unL =VnϨ&cL vcgLͭUΦf^3TI|2VډZ3Z %h *fjN& Z5[@"RkcxEVT ~0@@3 gJ)H=PE$z#=)d\n60ֆI j*2C{+]4nġ5DIjBeGВJGT!$9Hgq$tЁ:Ȉ$I$$ 't!!q8qӹF$&3H &LBdȀB"F$a'b1w@;$$B:N; rI$I;t EL!wwI:Bd % (wB('L8@Nɒ$Hd' Ԑ'wtwI$L%"ą"R%fL!$;I!Дdh @Bq;! #&A@ P&I$A$aL$H$&P& BBB֐H#ĄDU1!@MJ}9$i)da!wpt&BΙt;$M!;"I(;!;!;!Bww!BwII'wI;ŤpL$C$:dwh<<I$`(N$NA$ DCqa'NƾZ$vpQ!ƉDd fAF9xKV(G!1ElZerl8Z%o9cRRK ybLbU*uicZJVj3m[*vu+Nt"]FTf--fSt*Ym,KUV{#͒vUFJ*Y*U 56yMtce8~ :rͭɇ"!iy=& {h /Qff`P/E.,4X娌pҘ0 3P'NThDeA1NvIřYL `*@Q"%5j"`o[f"BMbq@b&bZ*f* 13;UpB@ 0=3 43:aܠ8լIf[@0G֗rnbw%IɓiɈi&&`D5Aa76v(%&Mq! 0D]!ǰS@Mةa *r&&n"Raj`Hyl | u`9GIØLLк32 kF bYH6TL3T`8Q cS 8Q0Nkb4 9Mv HfJC׵uLA6*8 e<ڨ^ O*aULT& 9bZU* `*1RLa*tڎ&J5$"ML5ì I5HQW)& 0bXOw #B*_Kb`f܊vq50)b k0 b>;ra40SLe SLe@ x'Zts4 ozKlR6& b;K LAAcD h#1HL\ @`+3apN3ppg 3fq9] %àXV XV(N5S :[IT[ -p_r='jRz]Or}=FN=mK3[\u -}q}h9 5Fk͛(w协=j,biɧ&'(3.dך,C0SA>0f;0אS&|L @P-^ >1ڈa&s@Qh!~`: 0QfLYpbQ33!!i&3RĩxfOZtc8b51 (ShQba  A3C _= BrW`;aIQbYH Jf “Xh~u_韢L1DLU R4)u Rێ G>/ z1!6ԉ #;]9a0&LY )0 xc6e!= ':BL28jfuUlf APN $Lʌ @kH/Yf_+Y fX8U3f#0t Y"3T)(DFA 0D` kjS`+ RS bb 1:cK0V@+LA1#T4TOF55H]vi M&PkE+3bkWa I awBp /D !Jav9nz*%%` ꭞTc1B@(`(P'j`%ZbkW}@2`+#~uݍyF myc{|=_o۳ +ժqO$@lpx0q:}Tg Aff&g f0Y:_ND"(3CdE-VM -Nln;t Rӌcլ/JoEbYb6.Ɲo 5m*0HnqнjjQ>|5N1)bR[%=֫[Ly?O[ U'Rj9 !GGOXz4g3J.{lG7X 404GfI#eTKa{ZchMSecZ dj$Q671Rrg;o=daʋ ?ٯN5OajNzl=v4+y½[a4rN pmq_ys)+s/!Zر6SRKx+;2qu2C <ݑ lhB3KI1 Ufɟ۰-y$V_j-б`\dm.vƂσOZgqxvrm'iAz.)֌ =g{q.vxk/_Ush[O:-B!== [Σ30AAnJc=z4TQ%4 m0BVu2AW*]r:c푠=-cW4-@rAͿ\ˇeURn:nPA:ٛ*Ƚ}sd`SP%3l*|YTgGoXst@HG , ևa$Zr1e9}{C1U ]ph̑TAeYSS!Ҥ?|3qdxYl b5*4Si KM8eYI8i&~˲贃m)-u5t.7s&4q4i6excUdC<%,fw~.jhf*ԇc+5<6Զ2|>r͹}umL%}ZP#MAN @?ر!)V'm IZQΞE9!& Xs3Gܺ3AIEE#@W6y|Xg,͔wHi^EtHK};7<^RK4`Gi[k$l6գU5r; ҵT}Vj<_ 4R@Qzͧ)T31U8=$2gYwYƷX[9|||XTFV,]+ l/\qt1 nhU'aOAvں>az<+soz'k]<70<8 +ufW%19͏yl8ͣLВ ~K__!Ua"fc+ijf$$ٜ&b/7hoC$1MYc>&bbHi4c巭8¸t0ӓAL  +(Qj a ó0)͓MIŌf&DI6: .fU?\c(sY(Mfcc`uI@k%r2 36s V)kH@&(!1_v7-v&fi cE&&DӉf[rRsϥ3g54`35PޯIራ84bfiie\b0u( 'fhG<l6Zē&`@4&YcaHY'A!錾ufif891Zw" 934SMM0mHq3pCllN!&aNLìp bv&a[& L#YoYzO aAf$cD4 ]w0135ހe47c2vM8&jA'R*mm]4oU¨Z3Uvc8bIq(#x"cL"6JliynވSMf5(i2BN9t nlCNNػSjkMYH")) Q` LA0@Q Xts'ՠ7*))ƱaeX^aQ5D6%8cS)9fѤ5 D$c MT4 kl}skO Vё&,C2j-|I`M-(QPmpɆ=-yYiaY^ ]Qa1gP=$_RbԊLoR,QDYv|.L A qIiv ft2`xS52L;zǞXxY ↜8Q{P¶`&l@f.+|+qʷfe1Dq( P,myS;KN/@PCPUV#[ZԶ^r/TDLUvӻ(I$!I&B$Ba&B@${HТz nE"mPfRڕ Ep2` v)DDb3!%Q!N*]D}EiCu(7R'uvH'rW8+ŠhO~#ANފc]0.3J ʱ_+*3lӤ9aLq#›7 wX @S l5"IO7۹G)LE200Y/q&$b8"jJTLq5@^?)f` ?D DL$ BL2LC 3$00C2C $2@C3$2C 030 3 $3 30 0$0$@02@3 03$ $302@$ HL0!$0̓BLL @$$ 3@ 3C3$3 $3@ ! $0C2LLC2C$0@  3$L$2L!3 0$ 3 3 0T53T͍L"o vf& 3~C`LPٰ ?dD^VħHcL۰ m$q4鶉{0K6^`g}yߑgV I<{Ń 4reHfc%ǾW*2+ද+KI1L+F|bEe0٢TcٕB^pfbWIPB^uhZ6&A؝+LPj&is:PB[+TC8  +1Mϰݲf6 530ĭn!zj 8#0Ջ/`` ߚc]dlTzNSd3Ig/7ZV=r*O{r0^ ǠktzLƁ&aEC>Vg>?µ3erlm` Cn`5fftfl55k4_ ^fġhkxE$ۥpb`bJ$02H0$L"2fI! L! $9/IoHa]`fq S&7$e œvIz=f1k}酢f&5'=-AK `C9By>VZRڱs)0D"_W!99hZ*~Q5K ܜۉPm MR nT}q1)sD*n&R44̋4S@@N{5ę:%7qK%u& SJm$ρ^ }g`H/kYgn6aC[=rm`,p]{KՉZբj`f&fiarVu4kj5!&Lrw1@ ˔gbzTt0Ԗ+4[_A1 xpffi3@,VDMȀ|_07g sk,j0X. o`2kL fSLBTQ`2֥OΘUЌ 6jǖt5Sz ,=4|c hgeK4: Q: "}yKϧc\էB[Q-&$)xvje3kj2B= I QK:f߳a\.`d*cWDŽ $=60Gru`ؐFe D8qUU0°v"jSbF}?Fgz5)i0f"& ) cֽnɫtQS/p"2sl/YFb4,w z(.2Hk"1TڣSd!V+3 d`؄̓ [k{> 38Y/5P@cRb2LQ33k4 HD4Y&T*D1I6|!JfL0ECk RF!dUML d]7j@R&Alт8E9JWfJ 0:30W),gRd4@L:>3fbRىp$BR3|{/ Yw]l>=b!F8 ԐZ| .:I"3U$~3h ^ -U^=oȘ͌I$S%_VwB %+BTO'{'8<$ 8w"ό;xAN9PI$$aBQNsUHI%CWLx-tnQw@rzrPtQ tJ ttPR(KLCkNEOL!C[{I#̦KMQG~yQ9,SI|35wC,)p* &eW bntG&E~V[V m g!Ӱg; &{L:30鼝ưL*Mr+R⡭KoJo}ǻ PfænKu؄(P]L79.E4N vөTU˙ Dꌰ&S-X|BWOQ%Z o Tqܺ^oiI=<+L-WEJ(v(e~ R3D4Xx5) 1wQ՜*ddL`l$F>"iܦ ԑG =l-I^AlF38i)ƅRN5|+B v&f2\mu7j.A)hq8얶[)Ppy0]ْC8c/&fh2=^%%W p -oJW"HObS -:V(?yhGz|Z' Ε%-e! JOWC^cاdV|c>|kmb& -/(%@+tPS]+]Tˆ^S~ f.E#&+g(S;0BW`("fAh څϘxsYEAvZIRW#./]da{0(v`+ 15W]K6к)dc>fWq66bZR3l8=jf"jڵ~g lgl#;F %#z@*v(ˏ9Wk(ktFB^ːWa& D3{9sQ!g3dS"XL>F> jɿd34*g@LaT1)HW.v7 6%3QC1 XфeZ'O +D;!6ނjͽX33J/\{419Wغk zbHbG aM\/80W |#~_S1b+_1qa1AF$ 4cSfi3Y~\'19^S%vp[.^;q 0ԐxCjL-ޮ ΙU6$Mdu10kos}\ [7n31_v!LC0fa |C$f)&fk|y`$gWȼ!j8v7X SMPHL*gL5{aWO}IY Mq2`b(;_ :Y6*1R+*i;fNeٙnL;Q󪩉E^K7fuS{Ay$LJ:1+uM`a(݁M`vmZ~ < )Ai7fCPIfCOqȠa 4g领P~ FL$$$0{:H"NT ӠB3˅5MW[IIVeLb)fb)]`)]3 /+LX Ehn1kjG3}Wa0TC:Ց"bT .GػZ]`[L*XգY]f`S0 ӈCXH|t…0a!0$A:*.3П&j. \fO03,Ά/A A3L2B3 n%L΁?DΆ5:f@ 3w 3`uYGft+WfKXņQH< q$4["Iݕ'fO"<4I"fdpá!4Bwf"tX`I& Hf= !#AA:@$ç)`a;m1 18u0àgC@èp"jf%UChAC6!t^>=JrgL æaܛB J3=aL(8N! ~gLML:Si*!43kBb nS3$ML&Hd&HdC2Va!AD4DA R\h4j&dHeI2{0PxBHMt< ONl( %#rvM&sz-1bpgv$FYX9fXjIh䓄aN Emڄ.+UW W&+N{H"15..𱔘TxdXNْA;⍽< o2i26 H`LBLٖH+u Zp)mY BТm2[CI5t'3s;_-w)n #t3O!tvbC{Rl *rT|jIj_54vu *ZmOEp2jQPg&7'?X{p(1Ф Qٙ; k< 6d}$pĦ)9jңc&[o% $c1zbkRfD!\L]o`[H$V;ŷ .jB:D U,@ff=[t.sM:I $9!*`t$S8#6 88b0NL5rb`{S6 мQ7zXHaPCY&갦{BlL.ȕqQ&f6#fd,2H6etx/VVOMU蠭[N$ ;!;`Z"c I  )5àM&)-$D٘DZf_ Z+ Y/i3TC}ѥfh90H@YD^fjJ)Vy073RUy;|tE.bУ?cU嶸j/1@ -/Uo mek8 t%9Ep$Oh kEqIAZd0CD6M6g_௛^4TC3l!VF5J BN ^C6p~G,Ǯ "?w1,;G`UD3Y;8!ƳVHBsE1#Y8юLdһz K TNEaLǏ +e[A]rE`%LOsfT%_vDD۾pkqPy[lɧx2mE:lv,Cޛ wA~et15RcޔCЁzXl-- qkdp*"0݃vaS.~l0fଇ 9gAmGIhLn jf)j{$Ph6ck6z̰%!mXE6R"2Vh^+ ~l vjXd 諱*K!)^)w\C=QJ:j+d-l*#Yc> e48$F}77rXs4}|?y{nE{T n3ث4gvf9L:`t3)AqYb`ZPs2ieW+5V#b/AmٙBU`fH93,J){v P%vA{ H&51l(ev1q;:A(@ШdL`$gf١ |*ү:H0P^]3^"ƯL։)LΐL$ࠐ㻎&IfIf*$\wa&a!&BBNNp]FpSܮCRӁK:LCBWi+1Ȥy4ܽa&_qI}Y +j¦ 2/)Ӥq(c\læ'}Ѐ[gݹ.'= )DɌ6g .,0Hjg HPCdvow"~:P !OHBHI&IyQ.\fl;N 2v%[-Ne|w:"f fg9!5 -D`%i#vnxikyux0o.%󬘀E,Bom5;ή t5ccE3Ui\aw`7q$X&'+4kywLf +Q_<Ȉ1db`Y D66ę K5];]iR+!ƽE6ġf"M*fP9dq5 "q#|YHN27iWu54D S3UA?gvD~`8lw1dFI,*$5ㅆ AC<1Y#]>!PsBߊqVnr0mei/0:$rrR/9X= 88IDI$- tI.i%1WJ0tPwt wt:I $$$$UA$$:c=$$<8LL! )y ,S[r`PvY|9؋3I3M{0/-v OBLqDF6Fτ$okH pO[=.Hf+D\ެ{#e7 &,a5Ybc,"f\+0|q/;Hfzfa&(5cm+A2W3f6YݙL`U5Hu 4`~b%NWaFB]$iQ"2K yd36XV/21+ @vp`1i^e !WJeB j qHfح&A:Usz7I\oZ @Xd Po˪cw&QL$VmG_Ym7 A΃ Hjұ7wqeٰcl'$O'[W2HvB7ȱZL7;TZf5,$+哎IUVH0 ,W^~4^>jTt hr`8+4]5#fr:͍F"aTvb%Ì]-Iл CW+ ["&;uhS7`Z"{v>9 퓋VQ7 r~L{dE>$X1|BHgE1} 7djJ*|tr@6Ʀb}:jBV–IFDQ]]]|{iSHij-PM- 5[&&V UqTȻ],:w}N( MwFĸSL@/6aTA*Kݧ=oYз غ\*ڹB(Mʲd" olΗBݤܘf'* /N$Tܨ#FrlKe4UHM@R&.y,50Wa0Ap,vZWʐs궲7 4bאgCE3 f A,z0)V$_#67!8":pLQQJzK 9h M˭P`Jt8w4>BBUXd [%)^$aҨ"ax dچk.bWa53To5ؒdcɄ*$Tv*wgjH9d<\&v+Xb[mlXt}nVQLZ(6d}J<4"ʱ٫CME:?{?=b,"SyLW`t]@/dۮ]\?( utvoa1AHa2`HI 2&!Ha&BdI$o^RU1ˣX,&+eݦͻsvk67$8LؔU B]4n6Ak- 7Wß 9RC5 o#^!eכӵ}筢3|9}:{ wBf̚ p8%p5pIFb)FԢUA.Y_^^Jj,sk_K@t {g17>/ æ+7c| Van/$71lg[Jˡyvc0V\. _+Y$pjxzo;z+̬:%o7p6kȦ4. yG"+wL]OwApڬWj5ˤ;F"i* w6Oک-^:_D˱|ׇ0G|,&8(n|:gp+aԮ~5Mbdֽ'AIɸ;l&ȢYdXswL[]wCeZ0!|"H1WOa dzKH4ˆ5Fɥm xs]Ӑ,&Vc>S-U4,o,;`x|1teóᲐbJ:fS'ܾ>fmhHoT?"RqDbIc(}_:L-cEIQ+5D5eCN=)%rfk&|g t_aSZҒl._Ys {W{uwm~Lg?]m۽S@wS&ޯo3]k-.|K\?kx٤L!Ba/>^R_y߯;ve;݇:mw=O1ׯúZ]kЮ5 %Ԇ3Ij f2`h Ì&`d&``a0Ʉ@C d0f`5t̝@rQݹ6b ly@R:G746 ΍fGkqsZȟv2oh^{ߌD_Yk<}CY'O!{^?]6ZO~ny=sw_fRխty{?q=mcys~ {ʾWSIDNSl>u>U%M_|hi'FOK\M_MU)QYwyGoUSQWMe[{r=}յ7wJo_Sr~6~n~GEEC3?IIEACC+?IIICAGC=CCI1GI;IE=OQBNQd&hhh(T43t4t4t3sTtsStT4sԔttTt::JI>]V;I;CCAIEI;CIGACAIEAII=IGG?EAAA=I?ICIIAGEI#=??;I7QC=7AmMCMEMEGMIKKUO}OMIQKIOQOSytE[]'Qy|:A@Xl xpC6'S7ѱU,4 F+ZFi[ _(vGj𧓘'),FuƧ_[110Ǒ5ӿs33֓jvlnaȳfG@' 0 V({c3L:ʫ>8Q)H>ِ(̽E# W@ QAa4g<)!qk^y9(B3V]=,վl_={ZxUS9/.mVk:XAd)fh7q%}f5ޓ9fm c[35 F.p э÷ꆼs^9?yB nbgS(-(}צ£bO4:-j4KU=W XgEk^ɹT>=Y+ϻ(Y;!> B#qL/GhTN美>Q>ܯ- mY~H2dNj{vߌ:np{9 | O k7 6 ؃/[_6OKĭngptb/wBI_ D3*A-4'չ8M}NG\]|7 d^5\$d=H?KIs3TN%k>"܈)#i1X̎g|_̯zZa"=MyndMKgLJˎ*sʀ,3ӊa G.A{2 ԭ&Wl#%V *Gۢ]BĶv&q Vʑ%~/{}Ǿ" >!4)~|i$#G'w*d.O|<,q12JSuv#5t9He@nvX7zf>Vu$S"@*caT)>sԹֳBL`^徶0pkJ֬ܺ%qn|S.~;;30]S3 Lp<)F(b&[B6U}BpeS 3 (Zſq"@#8VFc0$12\P' xPݎV68|]C25lxĸpX&9e/r1[׫Q0M ,0)le bTgD\nr!mK|DiS5s{^uN˜:8 &T"^9Dm]sY=v]^uKSv]DՕ˥c@CޘN|s]#6^+CC fhpe} 5icp߸}I3]78LYe gijlm@|`1zKԵ4ZkR%Fhaizډt֮?pXmaR*o>>{~X4eؾcs g\T3-.tUP:&9 MWB,oi `֪M%5UY"8mdA+`tHE]oؖ5][ٻj/+IK9.R Y3Ƿa4|8?iHp·#hC&ɯ}2^ng?e׶^k2=i/O=^w>[&?/KI-n=^,Tkyy8UEUKFĎ%4^k+^E5X"zY.apnw7=846iZZ<'Q_M!$|r`Pe[ S/+` 2:17]v{5OޢnV8qՄ|6*իEypU~Gyuq|<%|%O]*)'<=<'tPFr j @/ àk4VNÖI6{LK>Н˼ ܓ0\uX(r9S& Ce`IP-BY9I1ǡ5;APbTq$VI RW{ͼ!*ZF?SBx-I84>Rrgd\;"@"ԶeXW1c̉rN7S jͿ}$rs= }E1*FJH/\[M3++nyԝD;,~H6j@uF:K: L[>Lr?x_U??Tz܇Y"hR`c¤> ΞV{W0TyDɑg.gHh/K}T<~,dw;!>/| fX4iGlq}crLBmUKS{qVZ(#Q`  4 l-.6iPqs񩶝!׸رφιacFI_rwxQfb:ae.y/ѡU\K= qe灨gIȟ>ޝُ#xtGjV(bK\WO\ .s@&:.{#޷W\K[_!e!7<)ZXӢpZ(YwƷU4f-9,,R41!mK`@H)SoqcdwaSDuw*O ӵqML=NQ6.3!Z< }!SگWr̥r-DVN+,GX v292-xLĎ]cC~:#6:PGG7pI8SAn:InEtͯ5N^,j葫c>I|G|:q8&AeK,xRx?Zu輝!\ JŽ?l&g\9y%񪫭mbcZ63W-Ƨw1̥OM&Aӄ4_N-!mahbJtW L U֝]w>l 6 zwU=ަEМuתnyxւ>qoPh Rǿ,6m}Eyqzʡ;dx~W>XyـO9{-т(2hW]iy3nC"jѠ#g/]ya.weYČ| x;.AVZWMQEcMyySKo>ѯZ{zvc@Ք-~\,1-Ջ^J D+ҡDmby3v4ra!Κ~͚"`_DQ ߼[=x\,!Io-23B$U'"d I}Q-ց IJb2LQn .+Z7'uyq="Pk{{(] "@T|`nlKe:؛]wde&Eմ4ρ? vA[l|J=͕`ŀ4V·3giΫK."6'4i,>VBvà+`j&-*(6= h';ep))CɹrQ>={[3ҚƭV"IS[X"oAH6K:/!<ŃN: OL XS69z Q6e uyuTqU}bJm)To2TLo J罜¡vP8i:x788+Pz gb\8c9f~M,TcãjJfB2hhD-s@{?m^56'erE6d|Ͱoy 2ӝ:݊H8pھ^0|M>-,[WReTIIl0r` $J\տUz: 8ên{! cZ_*/%ރis+PTeS :&^nANaDo:v竖zQ*8:ܑZT6VِDK -%+fjN|{t5<CBwrR+jecEIl.mj-벌&n$1/yޓ,QPrT@ P;Ƴ%G}j\M7 mjLiewFRҏQ,ʛECÊMUixҷ(kD`-?1kb5#{^jx@q2wJO:{zx5/GqnlA c|7`M KaX2sւv]T#אAߺ.qǮ]L=gM5&1,,6KXx[t`;b{D=(wk A\ e] ~*lv$ TR ᪧy1'^u B̨-3ƬtD7%X39s7L'9BItl)'pRRD(!Lk*2ex+NP VpOif!qWAj5y "vp"`$>ubRZ%9j0}.f<[JF Dp*ŁۉQG۷I^}uXW1㝿x`X.[i'\變+櫊oO ,ڽOV=* 45\\Yd[TjYJK3It3rѲ[4d))wձJY[f˜h~fЕ+ Q3[5xȉaz\}CpUSMyTYebTd{ދ17ɿZ29XFQ6~pl[ }78R-))B|FO'PzW6 H-Bmm_O[W5LLPud5 }q|36f(9UpS0{"e {f(?f\$r׫ ? u Q1;F(I}uz0Qaz{oA5f"|7qL] j+:ᯊ:K%Pd7ܧQmtG/z nYMVSҮؒC+LZ3E`jbdP@w3N:iXNG[dCvms!6b2_GneR|xhٞ5鷔vw/t@Šͧ_J˷IzC;ϳ[FD:z(O5ov*]{ 4H]޸ u$]΍ J-&>Iz ]/BQSq uqٮ{rgC4![;i0 Y҃vպ޽XxWnĀ%BC~B\BZ!t4o1.*Fp+K;dddnLX{͕eWmkGreˍ %%pm:Te%gMaO_rr{ H$>Uz)]E]֙JNڸT՛d`b^הWyj>ٜ E3 پWB K2q:c#C\Ew؆ϓ~v6c{X?Kz޶7l/wcb-2Ѳ(̤Q&+}iGҢ,Ĺ QՆ꜀YA e?z7-uPpxM"ʨ)Zүij& sIK8~iy[O,9p'Y?`n> X84KP%;LwMi{خUm`aVtKnja^\|m`-N'yC7ѐh=tǢ+2Y8(|VgtYo+˩%<$a?D 2Y)/=YA$45d`EJ.s}r m#zLocgttV uUdU7ۺw= Kʘ6O{LP=~!l,H'q< 9!w<;Ի_$PEo<{I hLa,+>[Ӹ&!|=*% iloq)BDJ5jۮa2;6B)sN[>򤐽q`3Vn"σfH#ˋPnQF^5?dREݟ^ ("Z8.EVXh _z7l>BQ(@ҴdGn{%_~f 1?k/AW$@vOm[ *-p^cZwDu@(q2'P.B -vwRΟC*C2jO}w5cp2)?8+);*R \l)20)/Y1%,l?`,\,֟N]/ %"m.:F[ YB.3NJ{# cټ=jT(A/5yXujn7ꔰk3¥ӊuh1Ͷ%t?+<ߋQfx>=7"JQ 藠,Y,JHȝ' @u&[jr m 8}w?0BW(jTC.˪qFR/,`?NF25@}ȧFӅzT5Sn2 ZUJofYYw"wȲ D7tzntVu.d Fgwh}g-<'$KkpUSFyheے_ $aoUi--xr\a>h9DS}C?}s MF{ͪ25O)偧칮[h5y&BpU\P_,l?*CkZ4EJ_moCt[O#Ԗ 79VuCR΍3¸)^ &4q-n[>M V ݒ9 ^7ZW%N!h&ô Z.8\{jƣsY{ _3&~/#fR+y =  -?#o{sQ, Kt\OdsO\w|OjWRa_oE0ŅU%\%--5MM=UUWY[]_x'zͦŮ8 Z͓LYTVZZ|͛6lٳf͛6l٧f6kٱgN:իVZӣNZFZtԆZt8qqqaEݡ}:kɛ6Llwop qaOvyv3̔g!z͵]ul ShxoԬ "}3Fil `?mU~ fb]ӱ`/5ocU\6516qli׀̴?8GC.53uYGa׆x&mLޮͱc6}~0@Dmn!3si=D4Ԍޑ3yXpq12׃5&oTlP$z0̙CkC > MCtG2dퟤb cv ˢGz$wϘ fY`!7d̙ٓu`@ukppA&>6>x~L/ Z8d7;neq_pb)2HnmPЍ㰮h ^ }qLڑtІC|,jჇd̗7ɃC|'YAP<`4?_kcEXKc? t0kbד/ofCi Fo3޳σTjC6Oc{7lM1yVPks>ߡ^|_[x7m1!c~Ýlc3)Ɇ < 򊡍4Y翿zL2S?M;k5>޳vs[jTE_iyX>sz)U=昑yRr\?_ZLKX_UTmuFI/Sh9UiVW>=_9j\o5c8D!B{x ) I>f-M;+ HW[PIsZv3׶<}rQ̅5 lo JEU(K AbahλÍ dFOxr6C8TFznۜAQQQt΢QQqzt[+T'ggy?)v;<-p f">b{%.)2f5>!%C0žRq4837y&.1Y \\\YO񱱽Nű>../ccc}>>?ݍ.Gۑd}hn{DuzKyꝬVrcrkN,m3\qAeKeorìˬ2|[fo{nnfffffffffO땕uyyyygfw ㆱ^ċ&K%G2ebBS YӡoܱTR7ɇ`j۲-6{[xy=ɇR]7^ KD a='㔷@u=6L/b/1ӡ`!L L!$&isr O׿߾}],ח{C(BBD1 1i#iBxnJWlP{$+cW7Xs9}/< mgP0j~VRs(˭.¡[YY@$,C7㢂aj$LTCq-U 6 f LX๛o|}NwgrUHyV<9&_'w^;F!dF qi7gih%9Lǰ =?2S 0'hz4}wQԙ˙AsxP;O8ص`jtG^ , _v'jj`E!V({O3d[цyYkIF37m+rb2ځh6/ǾZVURyы_q|\߳_ad[ HZq]R>js1>ZHc+ZOsJNi'AZp)Xp?<]x' !Xu7wv΂J?RR[J̇gGU]ƾ:罷3Q{{u~`SmRJ)KPP)%;?^, Oayc Bۋ3epҬR˾Uş}N&_#6|E8kb>tܗ!jut/X'Q!8MVř9-8d?t%Ɠc?H$8^ ՚b(|mbmO?.k?`klHNֶ`MuJ-=XFneo{OMxݩkϯOgx۝A YUhs4ž9):X1O!F/Cc>!tѿ8C{6s+\o}Po^3ү.XEqo?-*cJ}Wqv'7jr+ TOO^ZEjDm'Rצ09h2}:m,czm{{Gi]ڃJu|~UUw>vׅ.׈HNnC4E$W*}Y)RߛnvzՓY3=K*| }.hh$В!7_֫D)}a\t63NQ#FnT 'k, qf[[:>܃/ݡ$^hz'r&鷥m=JbZ[va%kAk`hO> ᶃB4zn{Ͼ<EzAXr]cmdipJʯ╚MFKGgmsYI$fTK^uTr,=Lr:Lnpt{ )"2T)*S5{-)E5114>$|2تT*gt;k&'Uk'&|Nzv!S .\z[]`/ƺ.kc26f2O^';1^0 qH깃lnԥS_^$J-mWuxSNPʩ2)ŝcSꞤh?9x G}W쿻 CE1J? MJ"YDwŁOrQ~kӨyQ_ rںR( N;aCAo$vY?s;Y du#4h9xUqk~ZMZ 5  F5a /Jw7ME;h  +zm+bf QTR8u|ҫrz4 y.[ַFFȉ_h<&UeۗQ%cfUPpItH32=E,?tXs_zsla {ۢއQӶAjLKtXeTbRTN ൵!pKv.4veT/ eէ$u]J0wBZ1}{BuZT̯ffʿ}L2[%!ߪ۝%=6. 4a\$K֦5aүgVVrC'3E>f;݌p7)!%)UJ&gǝڇW5'D %Rm"nfĈdv Х'Մ]8 fKDdUYCuGz k C| H칉5aci~%a@}[M)]+L3>C>K'mrnHu/3QY0ESɣ(-Sټ׽&߫oo|*욗 |Epn&as65 pK{8ZPzsVMRx _)*տ4g['2w^ 6 v͌%0ᢞmz,cyWoީZy3/1oj=ȲB5%x`JCȺ -Ҿ}>8.DL-[- )f5FtPr}}Q^~4˼V)Wk"I>5<Js %ާtrK[AwD]Ʀ7Zp~A!&U{'Fs1ӍvFc¾:xvU-mƒLҋz_{]oj{ώWuոg3IfbRgbOBС;RQÂ:Ri}}7Գ]صF7"rM6v~`iZԹ53(a,5O+w l V%YQ ]g}YaoSei_~/WHX~db{48n_*3_|{Λ>/+Xajk0t^n53iS1?7W׌wDdj*dM613y"gfDڼ ;Kܾ>,b$ǰWfBcLmim^"y:ղ`Rʋ1ٲeE/ 7_kAGͻ4nED1p֮t |4,ikԟKtבzM ǧ>F d{׾A]GUG|e{q|vӬ`-X_SI$᧏QVx6\hd\k[5Fޜ"lVb/ U#ߵ~d1}O|l!BVŇgjA5-,4Za)د`[/(.Jrƾ'tu||54\EitO\#FhۏqXE1>rg\ٵ-U&&3*}paVF{OExⵦ-)_#s@Y@-,n>,Dx3"B 7Wz[@o[v+pvMl] 7zk8Y`iޔi/PHQ,xw#8 ˿5~WܽP|.-|m۫Pwlr9Z,c]z*/uyJ|!2&6^-iMO%gd Awf1 yl}A6\ʹ^ՖaeQ 1ۘڕixnjo?>o|X_3ebVH A`*nQfjy ʪ۴xng~ҥ˥L(-*lW/ngAfLUF(2v/l&5BO۩Oj\Q%[m_k ~rփgffZMOzV*mҧ~$dJ8th;o~*57#!=hc-nϸ@U5>o*,8ӾSO(О1*:VmXPOjrܵuC辯|=1SU߰݊뷟~8eJfK {wǩk5܋="]!GhjAI,r-Y]¡KI_yZ(/׌, VÔҖc.pA<$VH΃uN}1ung2őZBjR6ه'{@ְ?( /v>R`.NBOw/o€56jz LgG2a.`yʍ@UJHȑ=MSֵ`vCjs}ӳ@PX6`&%ˊݰ9oϭy$y6q44ˈu+sUf-,UE&$U㳽rqbyBə*;c[y'jKr˦qozϹw 8WhT?𙃥#bBߌ4btucF(%s2F(s <Қh[F\z /bw)nכR㌫ey>%ģė. Hv˶CB^{^˥eiȍį^(l]S:|Pf:}%`eB L_UlJ*6 ' 7\Zkv*Q u7ߎ_޴$m7&nMvZg`$ÐQ>>[=ہځ;p ւ/BΦKPp[sL7"Up4C0v}K.TՅ !{ + ƭx%=)JMj"]ܫ3}]j<4⍚ᶶ$kd3ͪ?aC4""V'%a/[ڹR@hx.gY^vnQmzCf Wܓ-9qEތr=Ɵ]!8w &BKq6YSj<xz@C;U1fI-|s獵e9.gnO[?nn%'.*:CpT%k˩pI뒤|X9EQ貱 :ϢuJ%)h5.8oN)+=EBQ:&DL\дLTiPsi6kCzMjl1݂ g%従#$&U۝ӜU)цmw+$ۍRҺ_ y&UQn]ep($j P56 ӈXM`_̌bc4k]OtE\~^[Ǔ4cAqLX)3SQʘH2+0! ӳyA"]YvŌt6n#N׳$A^kyqu5v ~ iɸ0rF6sz2J,^8az?vf,La[ 2InԒkj"YS!E՝c^ZK$)cS!+(M"t蚧b Dub_Unp!̱چBV@}EڷjϪŬ>At{JQZ_;N,\^E o۳{m։Ck S>1]Jk-Sqt@yz0G3_5g{@ <}.@h邔HS?YwU4JB]<|ؿMb{vV4ܿ>i7BR潕xZ ~>cOBЃbKL̝m,Q[j_. pGT/J@?Þ(89~}Hb I #  0,bCSH-)B#0R a7X͇˯Y?w};7.aCx)Uy9cvxRĵu1ˆ_Y^AVLoAKr+J2&K[Fe5!A].x߶\g1:bu+vnI[;h $OE~|q \.+72ե Ib" /qPAW$@=+o4(w䴄ڣS50($K"~YLl]Oԑκ"ҏħ9~} )FWk;>E0srM|rY@zzL bQ7@at(z&?`G?Ӟ+[ }$2A6qҠy;٩5,Bg}kM&s+?dt_e@y+tS$!oa6OH*R::SEX.:S.ԉj2Ik a + `@`L2en!!5Y(}vHW|F{ &q ^M$p'IĖcd!~o%;ci+&6C>:I%ep,LVW2#iGi .vMz۞Z = v0T7 ۧ[3k ZD0D 8%]kI ;f&+L MkGk=Wc.*l1ִvWT?|2 , m5p(GIv1 ~b`= tjBSϾ$U7g|G0:V5[s" ϰԈa~I?)ټ+?R{m( dfRc҇EOYDn{gZ(Vry`#,A&P034kg)͹Gȹy_jKE]/57Tds޿W6y>Źc>Lw;[OSy0Y{]W~~`k5cx2F_)n_p B`V; D@˽sdžܱfT틧J77(Vر11m1111jŇ7v$1E2y f1 yccbbsȠ̔ JA(7RGC7Ehv&7'4yf2%nVlk#F,;3 :n:g]_0Aw8ͣG#B$eə&\ϝ> .];{5zwzϞ|yQAE˗>^{aB (PB (PD$H =tÇ8pÇ@ Aoo,>ZE$ @ gKؠ_^KZ{'8{bS.K V(-3eyg?i_`uܐǍƠ=)on}/u}fӚoT"g~1ҁ~2+zv!**.>U ޗ!͖w}Y =[q 1o+ AtGG3Hcu{Ldgbͷb-<.y'ye/cǐRUa8`$̓1swpeLsMr,=2R7^.R nF>uVhgwaBd(L$0(pzD 2cwf y;/ُq䐄<^rT&I9B#al0O%Z*C~Pr[sуbe4V:Ya5GBZUVjjL@67~Lz\|l v &t`T T({^>8bA o l|fT}\Ѡ|/nOj׾YkM<@YMxxtU"P JYo I=* 's,<ۘ*?NO=?a$} n;;%M%@2G*Ax>-Si!%VU{tߡ0JBjdDfýի$@Vs0;^]gOgmW$+ŕ>ArKVdZO82Ys.o99`K*6(K=SUL"KD l7 ZIÆgkh;=ZjOJTOpUyJ-ChSkONw/ZWq+IƼ*~SC&B1[lz)W~BԿ5'qb,[zY ׮ʩҝ,I\ A( SJJ䪧y&ֳ|%+t7Zˀ< nEĴ\ ƫ꒢ sec++P,u ]ҥ֤K]K$\GR^ɋ;;u .3'YX% E+y{ ՜vbo .]7Ydmڝ~34yкߒ )T dY[Mv:A (gNw] ]K-0 *~jOB<نD ,̏k”'ytw,lRdAӍ\˥_q$7qAtƒHRݿ'ZM5 ) M%I%^')4#q=g޼]xfضR-6TI]5\w"{&yhϳeAkM$faTP)#U@YGov j^ב%En\ܘך ^ */ "yj,p+w ]mGRӡZQ0陫3Fd\rJ5)Hۦ1whMs12UPY ]v6Hp*l33hUW25ʉd̘ÉmV^g +NXu>y{;|x;L119ŗoX4s˷e,T[.MfՂǦS/z9+w3W{*yV"M}ḮHlgC-: r,,f*ۀ5ʜv,J>r閦ԶI պ!ج:\XZl o}Ig SUq 77G}!p+F^%ʱ/O(h> 2 ؙo~fM*:}Rԛ^󒢍WHVnΒbƫӽp2EE^fr4M3tfno!$% y71Sw%/_ՈKR\U$Ko׿sj[SڥOTm$aXRW?ZUw,N᨝P1l1\[ߌTq}nvik2>15,Yÿ$}9 Og 5}x+tnCuC[C+Sya2! BV{VRI88B̲fYB&G5|T.Ֆi3Ӊ֒e6YGh|YZQ/߫sJTI 43d?N+M<ʶF8[̓>F(LD:adzΕ&蕗R'+А.Kf<¤Zw3xսLgƙBXTj;psXU65bm |c4 Ƅ*{6L:Vz*_-ԞR0nPifIK겄IOZ2û.U{Dy]L/5nE](㓾w-;fs0эh/D9ஐ:e6+)]sih3L EEuUR]"pԽ{쳳1I;,?,m(0-:=O!H|ٴy2x$.vb*`zhqX_f>Oe cUrJl2 ngN9U@u2Aex:v{ye3}9ȼygf$ڷl6j_pΝ zDX%_V"%p 3km[v*F)9"JTJ.Jc헗P[Fj%HDXx {70e8}N"d{M?~S0Wn#YRǗ+אrn5L-rmOT~riDfs{tlM[Eş^L#Q_CYi 5{WD#rc։vdL[FϖMpd ~aFUpι;i6ƚPk;68ӟ|gWw}ڐ7h1ګqdI県 61$RFL]k4lTmȅOZ3YPӚIU#Kq;=?[f:l].aˮV.ڨUܹ~˷Z1lqg04,u,K%.j8^޽mU6'/T(tVEٹz9b ,}!`L0jcw(#Zup8уsL|~V⩛(OLJUxRޤؗ%_<>q-vHN0| DD|Q%~N5ߌY} ea}鼻=T-W}RXIN?kTh3h^TWS+^S|ڌ%V41Rjv346P߹͵!҃\17c Hjf(r\./3` \rٻ|ƥnl ,=S/`OTOIs9)yyswr(\ǎ\;,a]l@ 8Vꀒ8ʝa4q)Itw6jwýq&=j?iWK2嘼ʉM'6~>[SV I*ԑ.NNuTk`bNKʐNs\j%,>:WԒWn|P̬LgD6 סBx#/Z7aUsהlnˁĴG`}N[afzA=s(n'ϚJ  r1Itby6K$ݖMi Zw,^aV2J3~Q%<͛bLgnq.3#O6ۮDKװFk,Q m W RQg{Il*.9v,3+r+7V}W 8`օ^1nV:DpCIexXN|[% c҆CK@QDItL*.NlyV- Gi]re9 ߳϶cRV@ѭ+c9&/B`|kxagez2[` WB0 Ph7T̚nXSHM颋}ĿNR[t&FWbdԸ͖P{m:nD 2LK6*uqK_VhFqŎ. =4jwEYuTaLTuH7R+baê22 +hoTXPN!XnW},%iABne@yϷ%" y"1%ۍj%5f }xVcE@zX/I6S<({dhUPLԍk“@+4go\*^9nlo/epqbt3VpEC"|o)p ZY{\4DnZ-iY߲ߒ)zDq 3ܮ;f?`N䓃M䨗C~3\űmc\ڑx,٦Ch+љ/2$pYL|0O#}ىQ?`!vguSVpӭܡ1 "w(=Y} C4L$%^%8 RQ#PF(P'w2)^d ruI|"&&5т"OA~*r ~Z =Ci53! cl ڤC! &W0+7#.? 'aZ2I"\;SV^g;eS-[[Au$Zg 'V.tɔDgA 7`NF`1vu8#1:V /:'rBx A.@ҐWMճ|p4 zyUGyc~L^]_ū,& .)qs_[/Ϯ bk{YP+`]Ak]9=Ií ,\` =.2̻'ĥA\^r5nTcv ́:;hNdaKsv퇖tt\BoohLdBdnO,Kzotyy3tAXOuʄ?mԙAMVC jj'X\vE._Iw_6'`85:8m*0*r4vL0Sl0R1,luV c0j%V koxO FrK)+˧zwcq6 e^e\!DfJ\=uu^[xvQm1XsXP|L\Z2դ@NҁZLwdiSlFE &HfIڔLDL\ :zҊ Yy쮟psSԭEkVp:pZ7 ե08v}\Q3XԪ$Fy* `X2C}aȕC8X}b?>`R"_HLujDIN Ra/ rMrud>֦ގyD&HGE|uCF j-v`V_؅n-u앴|8Iv\]ohBW@.zc`'SO]aͨ~ ] `U*VQs!sjyuxŐ 1˹Yީ5^zhJ @OT2)|d _KQMl3[C> unEiwTHAːy>_bHE<+e gAͽ>X>d#Zﲝ Rl܊ߟKQª!iD|_jUÎ?M07slJ??!KξY6b`c%9n5o =8![_e\TK^'N'{8:gX%aGVEk8Qeᤌe&\ȿ\5#r^[Re}*IAB-%*[Ɵ?n c[٫>?'wH4D×Qm: 0 17}2—DW:(2ywcdؼeFvn莅uzK3a2&x^}߸x9 *w*|4,=1ƙ{jɌ#Ongď9OY YYxmkBgO? x凃o̮ gU?~ +ȪoI-Rc$2Zl:ME&췐;L<J~"e٤0tlQ m1ho  G&xuM`5za3w."4Y6\qׅ'1cazy!X({K+"hŒsh 髺x ;́'4 юkkl/f>bv> rĵ.6SwnuZ*aBFΤlƌ:c:u̗V\jэ-C 6QDL}Bj6XxUe k1Uh(7uXLzanN8oD+8 Sl =ץ$:l``Sƨ[ŅXu鷾y"1wTd,e[ Mct6bܟGO7p?&ؾ^zqo$-Aa͹XT`{\%kRx c$$ gvtᇀoAU=_xGW}j'N \N:X<C9OԨ lh$E7Ls??@ XYEʧ|2' z֩LdL PZԊ5yOfM"BZ7S2r(,aD7q'Tx]7vjl[#ܱh [MMn߃ʕI!3b-Ynm:K-CMRxٸsuh !u؎29,`m2dڍ5"T4,!{0l7ΜtdL8`8IMHF[6R{knƃڅzmW)ÿw5,=0  GerXD8txEH@+礹m @aK^d"[A4FTJN뎡q{02 I'2I48zmum^=S=%[ӱ)*y[~Lӱ~9k#EP HKGs;\q@X<7qĀw$ס, 7nW[rzNىta/فM6NbgogF@zqs/ ڋ TXjaGnxA[.^=cr*C%*x)f%m-lgWJqk]iII%[mbРeW_!o[c<_y*mW䮁K|R"*~[ nage]Wy >S-YqkYl~ďAXu8F#5z>(T U xM i05&Y$U i+gXb֞K MZZ[E'Z̜*<͵>KCӄ{+ չi\2n[7(}q{=}(ݍ]GT`"i@RƂ[ޙ^u»Y2%O)O_B%C3Uƨ´#: a{j^X ^ݞaKK 쩦},6.qSZC7~lWJGC^SUg`RB9{RNMTB߇mZwsW&؟X[S4OEIn%#X%2~Wg4=rkq޼"w=E̞`os&VՀd,A9LJZrTp3' T:R&J}UϹ wLHS82Ц+*l?Mt|?K5mn_JXdX$wYVB̛0B {:>Bs遼?NO1]&+/;y dk[t+ҡ QMUFԃj^ hQ>X (hF3U\k{hO( [65Yu,!Y *+ 3I3?~c1Z{ l[e[({yE^rk 9<7 aɕ7}N?ڱ -bPwwCHFBٮfh5DMj=FmF=Qob3B˫X\^BW3ҙ0f8*3SgAS+YvoK7 pjFVq!Ѫq 'ⳛt+eu>\-Tj3i4wʄ}+H62G9F#S v0QtӭSn|^taV0Auh{/XZ$lg` KҽiOu\<wjZ$=꒥>-X_PiV^}  iU.3i~ =3SɕG13 *'z OSPR^jrm+arey5Jڪ&bwF8ugqgkP8f@ooms rZ1Sp 8e6I{<]aIQQ+ꌥ0o2Wtp3C[ꬵw=JQ}2lUJZBc3zBF 15TY}rk̷ßlir}IQo4ҷ;M6&Y=Nmz4OXa]nK$C'T$WQOVD syNM$FwpP'-k4(^ o~]&Go."gr6B3quf}kn7tUy@bF>$SfNbtIiu11ݸsI#5M#n RF 䥍[+xw|i2<辀 TW|9d >NRթ}eƄd.MIVǧ<$(1ߣ wp>]pѶMwשTl8C!{]z]pKq3&86v7DBrhd刺`P| !L+$ۤE6甶 >ԩmz_bq$V^ Xe6JVa~-Uv\ݤWO4G3I&P#sI6G}_Cȣ4J63f-ո+w2c'}JuYm+(8,X+Uֶ6C{WYÂyPf1Q ;$!pIHW >)[2٭l/`DrAOuFw3ҕpe=YD½+ ptƊ9]7ղ͟$Wb T !&h)D Fi*E5A+]aeS3yT%.A+kkX-oGte3L~_~?D6Irɝ=KH$Iž]̞ۓkıX闶dō%vָ/ŰYS3K6V[x\ dYSd.{ ~9yztn,TYk̫JBɕ|-sul #x݄4вUyERKޔO . iK98%=yc,zO-Ss 4fWW\jy:dkNbBH[M]dZ2$tW6ix{7V; :q5 ǯaEz87]:"=38o-/; Wx鉵ҥVCYxʵqwSV~c IHIe#壹sgSHmFU+.HWd-lÃ-VfgdoU{C-Sϯ(>MԩDtkS͡'ڕ:F{zڴl!{RE!Qh9}.kcF|=k/D9J+dt׸US|@u&:p0w@ƩJֹ۞)0% #l7/.&pI{zY\-i -,Sb;dgc˫Яd5Hl|â -g;q͈LcH}y{712>+݋yʑHZo RRn}i2 c&rFO-"մ]`ѫG9.KҢD3W ;s xw^n|bh@E DE]?D[>ls?x~/[} CAk*H^vǙ5KՁo$*v_-Wgj,c`D-x/n n)$]hܟc.fJBYbk?.Fv-KF1Urz:&K[wfa,&ڷ~oĘVZ X̃H1Elwfg52y<L|}LHn@{ ܬlă\6̇{put&TӍ7b)hqTMF|fXs]%TpMs_.rR\+))O7SFQZ t"5*mkvm,*ժ&@7i74sѳdq+Z# $RB/V-ϋZ@efZZvF}e|Ų)wQV2zyL&ˋQcmR 醛"6kpoBS7Bhnr> rfHZ'!ΗjFl V$uG<.\k?,Ey(ol692"M*o|f 5ytu"9+k)v7H zthfpYeDՇDO p IP C~bY8Jk54&0xI> ("{x@a7g;x${AGdrV(k۟.m{ NyKoNI> 5^*KX4q|*U-i}1wgQ/Qt4lL8!b? ^5s.t9r.VuW+fmWӜBD_FC \դwWgG^d,u.~I~ ̬NқO1Gpr*r G#dtvqd#K~p}T%z$vdN޵%XI^vRUfKqdOiu"Ƒ@ (n/Ϫf~y_yCPAdV4[kh:N9u\mq)!7<> >tUI${*=>;Hl3Y/rb.x[L+ٸŗ""KJ z-Vj,~GS{ׄJЗCOb'LS_[lOb.^^A" sN0U-S]^_/9B_ݚNA `OjƗtE+sey>n@T^Z⳯Z+fzW;'ӕi&wþkP3Qr9=SoN/CXazɎ~[ۻƋpW#&}XUỳ :a+G&kMpWW9^gG{/ݭu ϼa~k>.ta\^< ;h?֩SٻC5՚fLBq\Ѣ.4$Yfi]/x:Ug̕ZuMFի4J/zoZro_PB (Pk fЛo 'PB (P@ III)&J*TR?S՞zn6A'wU q4cD]lr|ƑdS&k~3:uo/"V7^U؛$F2ś2 -]~.Pg*cl PVV]=xR[ǖuKz˙ RqPi':2u/e-cɆdY֧u5`Z!z)9>LJk),Eeslu'd-I6>C$ř#3?K_B~QK龄|,"nao]e ]QUW ˕VzK+ޛ&w G>-4B'/3'jފؔ׌J*g@Z_&ڵ'm=_tm=xM)dYA ij_Ѣg?p;?[&',uD^r[ 06&-ۚv#wrGoD50E01Mi;[ 3٥)yq4Rw4WLOS8v~ŻYˍ/oK0FV#0c?H/Jw͗#{kT$> dl/o'tڰ `c~p.le2uIg z=!ޏ阰yg6K* ɐ[+88Q+tЉO6K}|5ym̧+d!/FqVPtofiKt [t0Ŋ29#nBiLuAmZ Ejey8pd#n:5PZKWLU{zV"NKg+Ҳx6T,'Ҧ\'ʤQL/~g)A~Wz8n\gh6* N?__"J@SVQeiMfj'6[7bkW-jٹrlLZE!Kz\)Jp۞avL%hqZͧrRLښ]`S '&wf&A3P5~JQi i('FhI^M5_ņkqN-.AIՕK͖I;&{Hn{ߕ6.VD4-Dy8Ϸ9ZZ}4wO1|Xit@+o[O^Sn@?JjHbv*vo jUr=S>z|HtuUkpy52z<>DdkpxV'ػ|ط`fնGc՟Ra%yym'ss2({PI]3yaÇSsn=H yl~\ bo} Q_}]inF "׋n>L_K]30dF/qi -8t/'g3]u/~T_LSsgEE+$;)1*H\->UHb5~~A|M$}iدGF w\[tSvWjw37*qy;a:"mz5yϒ+nu(9ѼcIP=`[7\rY5P |ZQG =oBZ#LZ΋+'"(S$z0˙\y=:]dު^_+ͤ9ֲ ZdaS(eBsnBr~+ENܳR>Sc XӜc[dkˊlɤ w͵6NADK2! #Ic*p˿ G,塪[,qFW^?Q&nߣJwy:h&E;;mgT[6j$Eh,cZcSZ@>t-(nG)4WArN&wxS l"njɵv#5opPz+˦ vi"N3>. "#ճgEc~Run]x ^v{;%-8W6k(jn]8+-Y >}YvSlhgMx[Tz$w*Yh/Goߍݟ~_%׵ ձnXm|;gG-F62v:=} KQuvS;u9;vc;dϵkT -K1VBj>jzL*kO,*%]<I {lJ:re8QM40}' .lBl SzլnU_1kJzdn7 =P-RI-5NQYeOfu%A;zoNSb1M3 ŗN>mr@<]yޒw56/U4:5W)#xCP˪2Ǥ-~bTݏq$8ux .zC Jؗ9G!Phɻ2*M: sY*AA Tܙ+U`5j0k"k/|jhr p2YQ)|\Z{ނ4^S<-WwBj䔬}Ц6(_S"0i۬1y<}`w|:QhĎ\Ԋ[% JI=xm4s $h4ʣ́PsJc^(we2ї^$X:f6nt msm.OdM}3CHT*ƔZŕDRlmi[P &xƗ`JҒ(.32MZ Y(X#} !& jQܲ>U+[#O3x\M[՚qs+G3} av. U%g{sF3p(;h:Q 8Kb/ Oa"]i-ou:0Ǥ%ΚXq-2g+bۆJn͚1L 7K&թND+:mBz+eCMȩ![cO.Hʦ #0^{U;%{9x2T"qշƛ@e9+WXGls %_9پ@Iu!rXt~dGDži$q1H;xŒTIuL3u&^@&:hg .\sekYk} P_P~YkT3utgSTӌB˴taL$B6A]GmR4v|XEl\42q22t% q>^5ki&vdS4G^IWT6&iupko>KoJf]M~t)KeQe.VKY'AKMJބD:{n$ЏQuq)2SGLLt댮z2y5*2[Xs}ܘ5YqirяY#[QQ:JWCnQ S}G&Kǡr9 Puˉ&iEHYϦG`dt6<߬gq|Ф%){iհճ_ξqoԜ3WIHw!l!́@i8*Nj(S}ѬMIU|:UZCϱd b>Huqln5YMIlz8o]h.j^ښI+ɱLD]k\c鈎 GX=".-ie6s])`7ʂRΜg{=H0[ vصýL*VV ڝ&s:A\3ẌBdLhiEY օF|aFքwwFL;)oqh+'FLNс)(Mlg*JORn{O6Y2 jMʮֲtK P9qg~ci@x?^(?o35'ҩxYRY¾3n8kjf[L)ׅ XBmW50tZ8;@ cxNWcT DH/V&ZC; B9qI1VXE֭RJ) Ta ٟ~yC>T6u7AFiIf|IܙEPO5 Bn`P`j 'AYP}dˆe[-"2ۑvcP7#+wzܯ3iٸYbJlvRb0J-TA2R4c%sURQ`r'Wc;ʹ FQ?!B%ku]'&ʼ4&R&1*gdq< 'ַ6+]V"9(X309Ttj(\v.%MҒZq|;Uj̘>=Xe fCĩaaqWZ ҭU}cSDkTz] rbiNbWA\ 0v-hkݲer,\*q6 T*cdPtM)ZD_"&3wT[ƛulYe5V%ȭKdI5Lk00z;%h4.Y)S~+-_!֒S}vFAk \rxPSSP~T{%,64='Y>5C8ub͒:6oA0|CXVS jB2RPIO4QqV`f6Y.WKܣB{{zD-aJV,qc&[(iH.Lo2q~~ƞr>m4^؍vGwCD(zQ %5Iu5mxp}4ق% űZk&N#VҚZ~YQi9vN}p,ogHiiY*Ep=ddZ 7"T\Kd fA*8]!d҂d/#U̕g">72&+)wxe:kNnkQz2m-fH7CN_ܲ̆}8~9W0,W#*@hdF|{.G,՛GXb*VߔЗO_jKiOPV"%E%Jz}ɮP1H5Sd%Ύ½74'}@ NS@+/ 4frSmD-KKəgı"mq[MK]1O|2&:'rt*ΦwupN7vQ6T2aoWz'fhޅ1b8fjdc]7htqVw(ԭsQ+ט;=~*6Stgʞ%( ΗLU&*l+U1Y<U"+pw82 5u]m&oR.5w+ˌqwK]NƯi ?|3Hάrӡ/h("ZN+vd {qMnk-E M8 uASYv}ġ*) C5{1>(\?ٙ p8DgԆ^o7l 1yEUy;/xF:"GkNGлՊİPi[$D%/b+llb]5ɪۤ.!Ǚ3q%[k|MGj",p b_fV5˹;|Z^.qnyס>b!ZY.C:Tb  WiA(;i'0?aB*_O~ƆiC9NXrGt񇴹6>O;;ȆgmOK߬ōڟϧ .8~ }]4fsxLzwnr7~8oc_0m.YLEDX}<3{ Emc1ۖZn5BKfH@ތeE?%Vi.>WdU1U2w .حЭr=6~Ɇ0}=zb(jKKY_3~w@ (H<=˜&wߴ5t^7-m횴\޶c=-Y }X@{:]cC0۸uϮS|Ee9bV44X ~G]szNO]N_}m׹?流 u9 MmK%^lbv?%d6?9SY+#4UzCح"\-:OQW|]tq[|o3:kKmi?,Xǝ˴ ˬrDsM1?= d!9311R#L-ܠ`o 2/DžI<梩&BF_{m?MGWa 2*^"s^Wg7M/QUF_ PCw٥@ ;ܴ!SA_u9_ :p?bk,/t2ɓ/^I%]Q/ c+\UTԼݰ. >`,!ߜ S#iz*SoID SgNk:n$ _¼BFS u4~D+Еo|# Ƥ=J>ϋ$tDY/XfJ{M}/s]GmͦCZ[a{"J_ƇbuBɃE@=ߢ/W7/\T"|`kXRƪLsAX˜-늑;7X~?=9dSX#+/sBv2к) zJz֯pDb@g`^nԜNlUjKY7qT5U­vʗ9ceAj/Io%&d FzYj3p{XC:"k[WhUk(-0Mh~uYZ0Pe-W)nRzd9kD\i}dGp {})ߓc59iLV'8[=787HLP.{@Mtm:0'H&?-'*/e칶إV};[fCzkF#2Lu`=0zE|v', U &4%¢304:Fmk]Z\/:T'0?OHHc!7[0DdHӚȞOś0ZO+<[ L)_]z=ҙjna[=Mut xoR܀ )=?o˗p'fXzy,ۮsD^\A{t]G^g)&NQ)U*G&۴R;@4.XΡNoLғi)#p7n1-Sr(WYwap{ ≁y~mIWڿ=@֔HÂHla2Ћ6gZux"+R޻wIIwhTkR}~*v lHgygҤ˟=$5NFZTao :m#HOeZ#MVg LkK.6]E>Si=*9KG_I9e-iseupwBL-?xr8!eNm4/Mf\3K`Q2le*٘Ȇ#+TVS3|ceXmd>Tx^ʭzyɞyc1 I'O╘hP.wK]W=9k34 -V!}GB?uM&_N]>TU-U=([sxʐ]%aTNj 6Ϊl'4y4]/V֐0YfVc،2:$-GƭW|w5bƨp SBoKLVj9ߑ ::`!w_׸1uv_KW(ߺu7nxwc*EU-UlzҬpM,lig\^ SS0H[[e *rlŽp8m 8zm\9當&z.6{h<6ҥ0o d4"@(O 52A 4954AuԎhX!x-n[m+ ?D)s]ۨV3o]K5^=hR+Сy<-h2!뢨U8C-Pͭxk κ {hGΝBYTA(؜W`$.B!]_di5JIN%Ʉ[NlIp'%E`6pvm~T'3pa* ne[frbi<2pwopgc;J|e0Y]Ѽ|\f.|N8F_*+ym&5͇*RК@ Ff{v-rܒ0!T,2}ZLC~;L#alS@^$ Ox Y\d4I%U]$ORySDzgsR9}:uf!.3kuަ]jI?#K޾uB7%m?7 wS8q{0PEr=Xe:X.Qb@7Ӡ8/^\v,)|-A6mWp&+^'=lzQ+ H1==!z}[-H;0& qmu8a4m1˧r嶂e6ŎonZȜaxUrk-Zw>ٴnufi7޴ T#_<%\*]~w=ڑT8e>ڎyMBgv佗oFjb0<l i#PTl3!kl+%cR~ۊ?_&6$(B;`tylJ y&m&M0љzqՕ__wF&x" /I(oҶ]x(e.unqYS0X=\'F9Q+! xp ~QJ8Vb~SAhK_مXѬ}V6vR#~$6ZRhFR9NU1{d\2/*^i1-ɝk4 깙_r*˄esH}ՂپMqwVwo6B&&fnm3XqkV);gրZ{NJ=0ߦS`v_j%O ڂn쨳 u_1!OILZL.ref}\aPRQWdb/LcCIzCəy,탗&dl&\-:&7XXv|Ve-։E}GJ$ǑieQ-L9j[I}tej4&`s[82gQ2R<*'e*QRjt_dJȸrfa[65;rFU2Q%i|Ye܋7>WinS 40aCt&ì},Vt \<O+,buu8ynjVY𖢒6ff@ 㜓ce&ɬbAoPH"L/E'#Qlh x wBpRfgسvK4wJב4ZDk;5k'S_n(ʆ=V<߉6J9;kJE/ *y!&}ogI2мMF&f4jx]PĨ$Ѱk e3Q'OZRݨغ~ \(⨔C H88G"몿[ 'Ubf}*;*`,dqObzLHc!Zj-p}KdVҁZh#pވmH-#,OE` A}'7ŌHOqdnץG˛߳}0띖ˬ+Y/+wχ"ɿZ:84 Tج8z ~$1 vϺm}Mg[{e ƝѨc;5fjpiC~er2_1Ha\ɢEIci˪ /]lDզgl簙*|TdH{w"Fd4Z w:$Ve«FMy: Xof=᲍'}/vI3&Q8,F"e)S g5&?`>Om:7=cS;/|TGz6M~=S06_Ux6lJoK>5aBSyaj`u@vPM.b8o޹r',.RR彗ajloV4?mԳwj?ds,4B9hZ o7~rDs`-jN'¬^rAn?lW+XXJ.t^$8` VhLlO;7]$.?PBK'3$ѫth)}n=_G\n*YRXy_:#'Z4t|bzg?S(Iq ֎jƖ(.s6<#0(~$4`z$nBR>Td㠆szlгi Z!Ef^͞S$*r>>sPF[C 1WS44 ގagd BFCgH(V3tYgLgS.`Io٨9Ɖ%g3a_y|\]k2EY":8U$.@_ĦO+cmeƮ9|#!.AiѬMfUtxNRpTK&<,[M1`zbŸp|6UQArIGY!>3[)<`_ўVvfyxY 5UeDN&DAL9.$#X!鳗(|4V%n_LuHLnG\tȞ!='LCƙF|6VsAUܹGulT4Hj}KA<|&rj>)ߣSw7ΝC{VU|8O/ý+DUL!Aˁau%eWv-[n7K: /: GAsm1쇢.w;1':'(q8&'[uk2Z( P?";{H(t9Q`~<1w7m.yqUG?fxͦ|N7+0u7 # z?((`(й?<_E6mrKV9og4`㜲WͨpO=u$VX1AE>v8WlBDiݚ *þ:NթXm}5ƉS^0I"ֆ*Y5C@>Xoay3 9|#k<;5zdHI;dCӲ]ok;ݚRD R3Kz- [5xE!\~OGfn]n˘v4NV|lTt]$5M̩~Hz]{ +:fN52d;xOʤޫ,`BvX,GX 4~=l6!ZPk=='cYo#>sߔJ]~_+[u/}b}u˥AVu.X*d.O Y&$RMˉWHZ [)ص bgUg"'$_JGKhQzXwo} xX_04H~ptjW_U>7Ax$L? m Љ޺K}܏Ja|cQ?N1?)eo7j@uI?h\Uu/E Mngn\xbߟ 'O0 r?? bќ9$Op}ԛ{Sd[SJwqRU%̒Jy_r b.Nh^-]&exB|RUdg;-ep>"Kч OԜ >rFk(mX1'7} I qO@ӠEgoOX:'qy8Gԣdiw۰fyӃP3VP~g1s F =R7 ȝ7sjHW-OS 1.L^pSLxs8fxeۚQuFSoJg3~ Q*/Z(nLc*%f֊=Hϳ3نmkGcpE DpͱoђsTv} *Q&J$i;߳0rhH"N{b4auDQ,SS|UYCxKqJjBIԴKښ`Ѧn0vil+]5 pbis }T rg_LwHyR6/TFJlq5l$n)D8Vu 'PʧM<4T%{4ؖn[7TP]Baf0o:qТ:T_{$Y_j,pj L%]N;RqgM+i5mqgZ;F\kPVmMSl"m}"F(2% MԴ$I,jaMoEɴ}Q-LV"VzN/s&v/ƶƠ:z] H]Tv^kjMi"j?SEz:VxbJEkRRҴY|㮬7cMC,Ra*L\oz6RT:X{;J jpk`>Q]hݳU,9NG;ʻyU˔=`k=%fN?'enLׇ^͏b~Zw(,S-aXʥofquGıBihp.qZͯ] 4zi'i}Un@#7KvfU.g{ Yi둦-#k,\*ϭ>t-;ۆm C RlvR0lcXǘqӥs3WJ&WIx="~U7Z8ipyKU "[伂Y2C\9S5m[}XP.D<Λa&nяX y!i_tkpY,(m9Ki<p'q'\R3S-.1(i:SoQuC(> NWq:{퉥{!C$- M58͊`R𵜾%:az-6=WioY I,Q  &çb.slF#3;Ne `]KnŢ 8~4>7N-;|ꕢ15knB둛C(h{ׄtYX":^ HLVDcJ[(H&ҹ:1Y;r}LV$Z0aKmC?b5)UY\eӲSҍk(kE:ihA#%H+e_K)YHQ^6nNq_8PFVX*S㽡U)N%2c6K،f%1Uc"@1LJdtYYLaʨrD џUٺN#˭G<ܝ}.a(µ4_yT•b]N ^6XoJ#7mQE9q)$mTJ^b Kd&|xxf>&nͽ[BsV^jɪ#AC*ܹlMRKY|RkU[ Pf؂0ҹt5 Әӭ~vI@)!]a. i*Zixw>OJYmL4&'Z\o- 4-Մf&b<qy=4(&ͱkх:-ݷDtj`,:Bk3َa IRm^qp^f)elCQI|HP;MɃ2?M] P-TLs^ @k{\{;3]͊PUU?YG@ВTzˁ%PحuF/ᶴ_:,@NȺE-j̍cƬl =sP߹ ;g!L{|YmG_mc&moNIPIϭ4Uycj~^ tˍT$fS1;ٷʽK>ݼ & EN.ZANo ;ج6q$30liYΖCic].)FsʦT96Q<\W ؋^Lڤqpmg|.cxIf^5@N Ώ-ӥ'qV|ylM8vLUQ%VΚ6ܢe6s'kHYg..'c|^SX=hV4dajN*ld)ܛq:lAT4Ԙ#d>x^n_e!-hl}]}t]D+03HU;:Uvr2X{iD ; ٵi"L[6뫂]jGd+K:VxiC&3|蛔{T=2ٻewR3k]Ɔ5&KC-I5oM..l)3]K˫)f*5S{q鑔s 3_[do1C0ʻ"j~ K[ȮSeIy紓UuM3*-|SLm?iI#ܻlZ wezNFF@cI<]WsaksDa69ߌ)Ħ:9X}#[1MŲOxF|sdhR2DXhRFƛ9Q;̎9Ғ0b/u2i )&0y>>uU,?]Ho@/bS6{ V2ד8ǬeW::M:kݼޏfi 52^kEn3K*!襥|)b^[O䧯O⦗4SPr1%OFԖd#jEhG=ׇu. )ie#ʚ_<&XE+OK.m">BF|sʮM[:h2TJܑ"yP\Š{Ц:1n8W6nA3D.Bn.έ!5^ RCs[u>,<<Djc3vcΠѯ#^װ[q)Kne\]m fGqW &>|WرT=*3J26βe9H]iL=dG/w3m.*l l|nzƍpaU-l\] g%lZ0CֵBdyVJ*K3?e5Lna{oLVYTB{OֲhHh0`rwNKќ+m| q^4'h"&|O5x gD3 IُlPSwnZUIjEYs.uft6Zciu1n6HZ*$oFtgwhBBbkZdFԁj{n<3<=M ZZKgCxVXA~( pngeȤ -%iTHES6e!j<ʁG[*c$3 15)z9y; *K$7K#E7}$y9Ó(O QNz-lQxz i&Sf):Gi "ݬfXϮ F's'a^RHC~߲BCY(awjO_ϬmZshb4{w2%i`Gt=~:zԵqYlpjXK/ ɆyD+.$R 6=`[$ȏnƴM+ACOVl!eoZyC]K-]p4Rwr@#C 99cME6 o ] wK;Nj% 2oҼ&6WU 5lr8+ /,~/;sRAb&)IYj6kN Vq͘^*0CE}h]0OK r0냢zw$ZsV)|O|yYb +M ״.a51wG)͗ݺ|-|t& =~#-o9st1SA{R$l:a9LZrY9mA;7ky h ewY *M}}ptE 'f9/rbފi7H;ǐl<~ , ϯbWd 1j4̨V̛jRJT[Tz|i';7锾eY JBgǍ՞T[4|Mid3Ψo~;} JG5ڬM|޷?~g⹍H~ %r-/kTw@gQHTt?GUY?vG[ 3w9}[f|[ofۧ69ɾĽ> ٹ#ÉՙdH:! `ח& k"cq^Ǎa]o?H83c^AQCNpr߽w nsmeiI;3-*f5j+%жvl@: d{O_m9XZ'~>t`(Ho:<Q H9vҸxS~sJa^AgTȳvQqZȆM2 ]wꊉqd҂ =(G['3Uo<0{%tu-h竈U;@^݈ƪ?7T L'j|v5*)[T#dJ:YDवǛ #/Ҷ?~/8ybErHK #\Zm*|*R-P΄~.-tEfӆDBtqL.Z y8I|1ha/,Mq7cM1ݳJ'pbc.+O f@^G{ '+I!U+cqX|ٚvϙyU5GY-gbk`b{۴A*Ozeи P[ːl4J`ńvJ2z;;oƮ-I HZZ/= ) Ȱg;⍈[o\(a4y(fϰ )0_> ŽȠp||GN歲db@onN[&(*$å xڈH>`)F}.lֽ3=k^NPt躒b´QǤ 08Y@  T<z(c6hTQ-W0Fύs50/`,GgBAC4u+;)^oLnUt@ºltRS:sG67$< ZI8}#|xxJ`R E^o 0[v!4cqQ%G yBCj翉KT^yI;f91;,VCڞĚ,d [{N RK(o7LneɸtH MXԏ(#ZE*A +5;Wamqx4nĻL7)"Jb5?+yPQ1twpwf;HF~c䶵AW@ CgS4*H?v:+wޞ-H! @ PR)(d]5IG,GhxlI2݆euy*n9ՋeB0}5j(c4 c n} $-bĒF:}_tc:bׁ쾰*]S?dm]yC#8A<ّV㖗h DIz;<5 qkv1Ձ*9;Cᢨ=EgUGl#.M HFm#~^L@ D'm>I'Q"jPûRy1 PB$$0@$״fkDΙG74l7>yN($C((8m44학}(Y4I1vi˯5O~1tK75R)h_pP~{ډSeԗU ی*n L"PyLb̊K^'zTCKDOqՂhy<{ߒy!O?q;jH?Nv-:Q<½竤=⋰nw/1f<:68H>OYO$W4vY_L^_HWy'|6څ9#f_QCVH܇ ޸5Dş_sM=5ۻ϶c;f~ \9UBLh(YSdc 8ɖX&JXN8\e00'y:ζSdvپdpET󪭒gw-5q1TJ<4=|3aJi~wh7+jeb*x\?)ʴ+sIݳjp:%mI4>^R70pR$gΜc fz.&NgW3 <. q~4LuV"f8uy/NQ$B#7YؓQ^5V&PaST֒u|>d B| "^ FiϢx[uS/ &c52wIb<~uz&W&a0LgC0,/.&d'CWk/o,NߞtȻ"HJ[l=qN8׆T=Yb +%w |9QdetT9¹={.o Lp4 M޼B4MT˧َ ƀUf`Bt@0I;qɡpVdy(5A425M&CuHWN{n{PwSViD¢^?7)T^GUILv2ňc~MxeBMِ] ;V Gh>!h<6g'lc:j X-akʾ0mVлhe`I](+?ٞS}loa?m,ֲO멉{m8?G۞FZvz5+\ +JP`C=}&;-G_zLV9o>]9}yӞں%krݛ_:{)1o68O^o&6]P `!Sd,? Pؤs7;,ϫˆ0 }+ C5m ]3llĆu A3"fc\d3\` uSk.r}c8]vʕG*XEBj~PG q0H:\69Q,=_?m0 e&='ϝJ.bm&aʓ- ' E1]4us8|&'kbeU uڃ+Eo4Awzن`$2`I$ax9D&HFذd$xME̝`|nwܱX}7pb *i/?I==ia&Ӑڀ 3)JQ&I~k$f=]a#3_*z/,ǃ}`u=y5ȐNELowgJW**Ki%Wa1Ebx&y.`ٖB.Qq~茸t T#tnf<-cVwl1 6V\ق*R {l;Y)9keXdyŶLXq$H9qoK[;xzP<0|Ѱӫ*Pf]-+ ڝPE^`؃ɡ8FfIjfǼ4̛҇F ψ*\F]A|Q~$wKvVsbn9w j~5<.M U- a ->1)aN ~GtuS;8=5aFLO(O/ͲKW$]l(w@WEGkPJ[GW(Ǻ^L5% ^t[{*-~yEH3O]m %?! Ug.cJA2Xūk͡G_ @l/d9 fںBO! J+TԞ#ARE4=$Tc_2;ͳ A%}* = {t1$]>!TRsϠtT)Wy~PȓU r7T0xb?7 =kP /8[S~&.Ϫ푗:nis[AͶNǼLjaslz%&%.7gK6KG@ʤސ;RV ,j0X Wt93B^Yށ^OQ4ܻ!:9*͔ *$)|AA[_/@>P$ :@Xd(Ețdt7egx^ߛ|+.p7?ItSL[>ϴ]gq۶>&BLM8EQvY0_WqiĦmoq92Ҋ@'CC0S6y n->?%|qx_j+a+E{ljw] k_DNėZc0ڗ%EyCjPQN^!l]%F܍,t 8,{|zrhr^d͌{yz۟{rzPeJdڼIN!)Ai<:mbOJeҙtIE)M%(ZPS +%.);Ħ;ꔥ%LkTGL}O>~|֭jӥjj&-2*[l؄ 1rwb!!bR)KJT! 2u(BR *ƭhDꕥ]MJ!IKT(MP 4iGDBB=5Q#qLBC (,m;:BUݝc[.3kd%Wb{WP]+V8  ʆcGgRy)goZ\Hm{ex+* nZVM4+tV.hv0.S yu qX>,Y;Z:%G>jc>^]öޞBL7?ckvjf嚌aGjn ,w̰,=,aˬ7ird5QŻ9oCZ^IQRqz (m)xōG݀WT;@]j>+O״<+~>XQS8 1}ݡX rV:!c+1g?J9\1!Ҥ iav \(#rr6{ ef)uPߚS#G"bam35Xm7&ZMITst6*I2 YFz28 Ly{ GLT))E# j}}hyso>3i@j{.8 RԨJ#4-(6=WAZ, (K"Wc@>mIK~ӡK+oZEJ䞔T8-) ^,$ӯGɪ_[lОtr (c2vk@fY\ 5>l؞O4t]P #հ\ېbXK{9-m|\6`Y Nu^bo 6hOT? 睢>|.bkZJ<=2މ?9sfzW1 "eۥ \ns 6oCB7sa?9?8E8ۗ꿿n7i[G]kz;{K9# P}`P Ǹ-' ^x;JrZ.PMn&p2?ARFQFo#p[#.k1{KLzfR"MNT`~z )Y]f(Y^P0JUN`D 48 w9[ݾSA_鷽+p6xoJJ{? souS`Po7w_EoP̜8(" Xz\_Ά$bvsl 2J&^#+Gޣ|ڭ4K\e5HaWK0>LPC_/#nHE:N|q@u>&z"KrPdV \=_ (o%Lߋm$]Ij R6ҁd<)@KۈM|F6v ;[%I*Yf`IE| Fٹy"Lsmԉ=܏~{ 0R`E+Ř\b&sHlJ泵3鏇]*W/1S%}=&ZyhW9xNhy`X YA R?*u\C<Ø}=, %J3ft \/F*g;)mx@=?Mkտ% F]Y2[9%2ـ:R!bYSK;~j.rv@w%I §`{BWZEtr?ؾsTًRHj@7nuLT\i@O\/C֖D^܎ZΖA;>@-ΌM fSS؄r@ӪKbPuР1ˌ^u80eӟLN:`ђ 7Ǵ>h_WsB.cȓI ~F@ʳ4t?c7#wQ1uSV];z~NZ>Ayಐ)3Ň!i/\|~^/>CV{w>i"'g%/ }vu7ΙT:C=gæfo݆86 Ho:l[ 18$LwcoX4|gV~͈њ&OFrcc>VI ̒A(B_m l8:T6ף%ּ_S?Λ 9Ctwk~GVq-wֳ0ܘ[0|q1 ^tO5j/EO2!ی7,^͍+l| tÙU,|7:e oCiE."Ǫhbd]bW~>ùkmo HlmrI糭Ɔi)K"~Ҁ ʼ1 [%H3uBً7Xe1X51~+*)[}:yz_'ƎB]o}P;>ssesha\QoѕXxڬyEɾҦƻ>gD#,]_+u})WMryl61s '~~8dXlNKR'iC&II*޹+-2ُ1]HCht,ϠJ0.h̙wЕQ?f_֨rv'],I DE)ZG:]-!^>Kӌ"5u5yFR=ԁt[d).F'gL֚A :Zǵ0d_ zf J &IEF^j ZX2m@ WxI:*05]leQvoR1_mu݃O:%kCvqnkǟ [QDdx|Eǟ%?*f7e~ jEknݹɏ ߥT n6GC((/(b;r0GZJĒ! '0 ya te0cֶdK꽭)]܉9KK=9:N FrcMhl#'D3,Ҕ@VϝAyǴ<}>sѕץ&dw:nzym ] %˙MaӁ1s{pM͘S2Pykڷ2]ɞHZ7nE@>Dr%񐂅h"}hn"(pnͽ q`Su+/^~޽zoOwl5pmF2/ )ׇ&)l϶K-i&LIGRUW`Sƴ.!sfK+Q|w?}\(ڐYf43 //J wס \E;!ap籪YMiq8>4ԛܼeM ~ŧhnXQGˎ\Y̳<:ú?cH k}e5;sdwuuˈׯ?t_k[uKr70"2\Py+iuM5B?/Rl@\Y9;v;9aȂ+w(-ˏ.nt7޽N S˽yG\w {`V58p^)(/Çk0׳̙26h0Ď$8pJ? ;W:c U_3,/徭}ʓ]PnPIQsuˑ8]vɨ@^޹s{|8gUkp(_85kfA ˺.W\\%X,`O|jO48~RC%{ư=[X s:y KThd袗IIU cB|Scq[.v!?*%b\2벎inCg5ݿzL»?eR3nMe2n˓&|;) t.Ѵ>\r#00` YHfa_KW] ֛~e䵨Uv˺x=zﶼ}W^Է,Á0`tm諾~]oqבur'_K~][ԫmn*d6I :r7i{_l!#Y@r 4xq 3͉&6˲0`ڠlVe/U nu*04']*(#ov͗FWS3{fv"p nN9z<أvqV$JCx073\ ?MSMyzMO&+!=+'#q$*:jx/ ԷzZ7LJ*²\D)[ kݰ !Q,lM3Flul_17ըpsˊt 7Ϗr\c1ǻU(?Ck jq ogb7Bzۋx캑 ~l57Î|Ͻm+MXm am91ʛ ysyUmӬaXqsyF.VaNJd5ږ s2n5f=w}IQn5EW0:ٳMT)h[Rߒaڴv:Vג/|KVeLВIQP5DŠ׿A 4g?ͤ 4I,&Kf1$c̪JhtQ_k?TF;fWeiL8 /E j[XqޅtIb HO4:P]60z5k8:n8p}KנۤtxFnVT?f-Y~Vl9+aƇVL,je>Ձ #O  4Ղl0_8)lZ2c~yξXv۷F=ۗ08ި^{GjB^CK'P^j=0z>rb?XƆ9/&[2ՁuCii~T|5d&;Xk̓,n?/b9rVLr䋓&,XycnjxY:M^}0bF.0`g&6 -!X} ZZx"(sg:<ܹqw 5IcC\VR6⢊(aq" .rZ6M7^Qp٘C߻8pm k ~\ 0`K(zyU˛Rw(ܵ-s.\rl{<0$` 9Huנgcʨ(-ry#j}'s`헴veZؙ(_T u3?eJ7!g^4kݻuAB!юmLCѺ^:hëM$H^ZT>Gz]n{l\7/Ź .#QHHɿpO$KEn%Ѥnɗ˙;û.o߿.^x\D>!ߚfڇÇ7ιR;f?ɵvLx׿6l٭NB(!/@ $BH9a?VQEfQG(FU]S0ﶼ˂˗.\2y;{vq i`hyeV0!GzdMieaq-k{L1XV|NZ*OvW%ۓM/7!pxݹpdo.vmbT6ܗr:H[Mps N2'Wiz.| 'eO['@p 56\\ٷ1ҭ̄7mEj\=2шSw=*s-ǵו]2vaЦ>N}SV%#Vg<6Ӳ0dPowy4Ԙv J}\`` Q"?Z3 /Y=v۷ne6rf N96AJ)Sއ$҈¿#! ~WrnZ2 w)`|1H4 nɻr0@䛑h@gZњLxF)8"~?GMV1QhIeEbGw:Pbr"&0HVn30#>ڇc AToۚC*@&л15HݨEK,6GB(NNT4nn뉗h}l28a1޽n^GSZKxp}^^?S \ݛq~x\ħTEkDQFR@w~a7#p&tx^G7.\FP[ w > !bFy!oz+栻e'}r\r1+;/Q޶*GCl1:n=U뫝Q<RY:Cn.]ig.9fӍńI5|6*Dۭm.^( e0\ [$kwLntlƔ!ڵLApA 05 RlFO.0iM/z5p4TdUMGaU~s~~/d[l`_QpͧnF3 4bE4|C[؟rw]YHPn+tMOGB[Tz,I&b HzP /TROى(* YS&*'#Vf! MO=.dl=VjQ'KqNƧcEo6n_*i^z7;wg6T0[fUBFCeb=$$/۱jM1̼QѺvB"*I$ԍZ'x|1]mFR7~)EmR fM ~K\T]vl͌l1,j4sHB2qǮeSD803l8 ;BełfeԨ5;=ѤjʜaR/!$utRyUV´ %1.Ґ{xYŸxhǝىVLrJ$-Zdr輛[Vk&#aZPld-N"<\ϧ?0VAH;W(T$-3"Z!ci}ezԅ$BtZgzBM-r KTA_Z+,"KB{?A` оFQZWO s˛TT@4hŴVjMDL-3K1p^n %3 = =ܞLӓ1K.닝~RB` :~JD|a:0N\n qHG:pݼkHuv:< Viș'?c O?ܿ{ހ61׷jj߽>/ Rarh&/dhT`je:UW}ecC>1M 3om]~4FsK A}Z]3$mFV㺅Rv0r}$LS4.[ڪ \hybH@8)*3\԰a>Їw -X!-/eR]j8.1^fQ~oei[4f $,nޢ%r>X42?q[h糖~ )^#Cw5OɛnS3p]7s͇e6|ykmP\䮲bx!Ss;p.  _l/H3 tN1fnL L2ed|(Y6Hog1cz` 7B=o&QPy/FLVs.wj=+0k܏iQ1`:.t>WU@ie*!BX *'2tJsnMߚG3DN{ns#S?5 ϟʤod Vp&U=!5ʙoME0.o՝\(92R_{xsn{[o3UWSۑmn2ߋ :UH}dZQ0=eZjI199)JNs<~^Gn<;5k?Yh9[&cey#RGJM(h{rn 4@ICJ|MkI$I$I$I $I$I$I$I$I$I$I-#I$I$I$I$Wuo08o 2gfgfA9=W/C;0_g7MY^mL%蹁t8W؏ْҕ=^]A}F?Ԝ-3t7 333cpݷ{9rӯU+Ert='9]"o$F=(ø6\P7?Ōq>7ܫ8|#7vo79Ca㿿ny!ݿ#w>{&::68>+13~aj6 6ns\ff{ד:+:urt{ D|廵`/ؾ^R}m6'V^R2XJcs%Yu-lH!dVbW;rvwнcUK>cgr:蘶 7;v7&@D#5S; skг8cMQJ]!"qHp3D[6`&P&T90ihSx:j BC:0H /h D1 wQL^P}@`0OLJ$a3LF^ &cзy߀ pu kK%/I6WǿA2*6*5/3o"~SI>;w;^cT47Nj,cAIjvG²*%7J?wY<X;ܓ_% 8/BYxT)0xI31tfD: ꟏O]}~ ˨'͞5~IY_Ҩ ׂN:ֱ%Ql7YC`KƢ[E%f LWH&!d1CP3j4D tc߬xtP,:i DT mw>pdfYS͛|QO#V-B?Y_;;xȉһɖ$=2*ĦA3߶m!hm{C|kd/y!^vx/}Yw`uVHr\i$*n "振A֪бԅ&s)&RȆPyQ;2q1F2p~TXQ/0=juO܈Ԩ ܭkJhN=6grh=]} 58hQ^-Wd"LGmKV=%'Hh4X(};ݾCD n֕Dͱ$}zjqz-s=n.8%Qሿw񨸈\i 7: Yd>}"2%nP59@S9(EMݫΟ+\ؗ%FE]:(& Xt=UB'qS+44++]o(D@*2uݍ`(. :ԯ3-xb1mWs9iohs^Ij#uJLb譅G+B}: {&?1㽢7{2$J9_I1Hj6Jiun]-9us(Ü5 Fz 3|+s#`'m%e8LSúC۔`Ee-悳+޲6AJS Ŭt1#06coٸ+Z|+s 5_A1͂^+zO`3(`22 ai&[Ѹ1Jx1fF\"[-Ύ;Q6-ɾtGukaL4ZzJЄI/*Yp͝"4Y,*|"Ce cKIrzb;d7(K}Q|2K5L'?ǵhzn{~vʽddfcccaB5hC&Bͬt_yv3,WF7FG]؛a6cL^ .%L 0%ĸ !"- 'R^d߀wxRSp|}A^z/E^z/Df5nXmADm;IOf L1‥1 tGɷ67^u Q7V:v{=#1u|mF6W>pZm  v;=c{80{8Fnxc9[k oTy߿р}ŷZpg3'}EiS=Ku@Z߽x(ӽA='E&&i7P-B c*0dv <[H;[ڳʼngp_T)#*cf<λ\Qv/ޢncU1qy j hx }X6403=VWjM֦_@)ǫj1]^kgr}dN+jl RPSLtv;T~ܼ־pqJ+Z8Jp^F~]J(({MZe 3sz#z&كZ}mHaGdOOjnh5۴q5u- E; T0]B; !ϋg! ]ѧ~037w>뻸!$$V;ґP>ke x%le4`m֢/[]_{is6OWS"W(HuμU^?Hz1EkdQ9"d $$YĥJ]Ӹ&V/jFGa=_loF>?cMMx_`ˋ=6AtFF16jBpyPvgnKpz'Aҭ'`7 edp~auΊųo;2j@b'Q.FRK=t(a.gfO8x=%E铸 k?,t-HP.׆"`>we<1r%HtL*>|?p'jTJPQ?70 ΞÀ{ 1Nʮj*kTڷ3(h mGqΣ6_O~sec [Kr/̡7VՊt5|ߕc4Y zzY/1*wIյESȅ 9a5 q.Oz (f[HQFgC}9-a@نtCrձĊB;+;wnvG ;WG|?2PJ4&tLHh.?24ȃ6!VќҍNΗ0 4?j/זyY+ BnGm9'Bl22+iLR(< r>+'xK9-TW#iUvk֓fX/)V1²5/k=܀I٬e0]k)?||ߟ!:?O uI9$l%t3 ׏+oov{?>ůx {uov>Nw]Q;4~v&%d (s{w7<_[`|c|lͰ\Qfͩj@0vLP5 w!6 `85M7ú3jF m M7tr݇l7.Ҁ/; U |`ܕ[ǫGfy-#2\*^vm_KP_ZY%~7}L֭U{_lz(-o1R֙}fb]'rp3#{: tɤDy &%M=4<[:ilok29-% pd<~!6!4I7ipuvKmi_LPv{.׬2̱T)SM#9찛T>E•lA=?ZG?XO\?= ~zA\MZC1?c6L|] &+2]2Lt$'HcP"$z0?>2FLPMlOc,gX{!wxnfb{C!.sZ{Jf$apzx7Cט8ducuS(,fb,-^eDfYkڲ"p>]Y{̮F!aTiK̤O kX%]y%C7w?sOV?V!ShrK*ܳ:ڠCc:ۇOC|;p *7M3,X*"f3~{f׼8<" ;!(U }=D~:cOxQ! x4cT=I ZBѤ'Q/j@nI[S';q c_F|NVU E0"UqeL&A4O6H&׸[ZK|.7TճB?Hr6 1g- ^b(v/&Ӈ4 { w) ˕j_MV1\o?Mm=a/ܥ- ԵF~{ 7ޓDR Wv4wǹOR=~QHE#l_ϥZ 8m|)qv/h ?eb|J; ~׆t0Af@/o sDq9[NukVËx9 ?(M^kd~3 ;菥WDb=Y@X풀3&X]2~&3DA#|r %+#Jk`f%dL>sQ4x=VCQM]malkʕdǨD)UC=Wd~ȅ3$<{~}J4ީ}ϗ ũ/Q-+-t#J{gr4qH9Gf!5 c1\H/GA{R(<6\jN<MbBÝnRM#8kess^%?&v[O]د 0 j[ QVj}p%^ R+M2T%רi 3Ž19}C "q?v8ɄEq vShOSng2bߗϵI-% ȡŠR۳iBJ/RS3_FEaғ)${p&G 4`ӣ]DɄƞ=1<_Zcb[eG/䢡0@`ş&?N0R02?; #sӻ]_zi[D(bQ/`븣QgWΦ˦atseЭř;Mg8c-J q; iW}锏e̡pѡÕU>Cj <Ou{6U8ƂeFgMUg&ޖu"gu*(mt ^ףu7NŻp4t QbC3Tb5Z߬ڎq}z2Ǫ\,o0oЗ2: #aHV>g P[Rr^@=B|VK6*6'-mԳH~ƾAy-T3K6[ [^m.QR9pj7>6<ྀde:|cxLg_^SU^>aP]f}JӇ)R_jeuk%~+ܯ~H (BNKqTe/N` _.W * bW74W;Xh+N"Uq̄>/;xsZ.kq* qzf,ixy4RNsO\ /_^5dԔM5ͬr'۬ԳE˵$̲y|>&6 Xÿcs̃WAl0xx_fcaNMOAuk`/a0}D7p(rXxf/~}Z<{^ &q{`demM` .ڭlW_!mz9353V`Lj:!0!h2f91?d&&wlM|@P\Epƺ=ȼ',yr( 8IoɢWUU8!:`J[Hvq1t<0ůEi50cb'FdG\ً6fa'IǕ L!`.k;LJDg9.C'& TF[aW?f#9S E ngpY쳄}qR7kEbMlIφ3j[WII>=IK uȀP h=0Q^q~  ;^>(6i:|k o׫Ue#$}n/<$FI1XvvjRti=f9Zw+hq (Ͳ99L|I#߭JFB"FlA@~ȡ%aU_jhuOds`1۰n䵾8A-z ;ڸx8'VdjWDx_Q =څW˾r,f2@D#/4~+K}_}2m4ef4 HwÓ?/i:m9%3Vf{l5i5gͮ7BY_sղWKH0Բ%'au+G.{tAa5)'V%D(jV#rL-ȻNSyPx2kSJ.C0c+0H)[:Ш1SʬS1@Z+FO++גb9\t 0xO;e2f-6:ArٳE3Vj]oDU 1LwC,_v{'$69|'(Hshu'ڨ]m[tn{&͵-|9Lz7Z|*ii]Aqݏ!e!'Neo׊iGcf)1SKvSK],iyFI̠X?p;U(`UA47~/gbp0)Gٱ{Hb=kͼӞO,UYwUc"fRпnQr-zՂ&m$NK`&sov] EWr7{ |:#)Z{`;y\>OȍȜ:dh?ep;#{MOOl=GO1+ Wg+=nAƒ럿/>/>wgglCjayj~@ !ӴǾr/0h` )(nnj&"/8~^+n@ϱE,s[1JTݿl*t7ᰪ8Y x@Lj[7-ިsy+6xI<' p7w/m߬6u\v_n*Z'oȮݧ?LaM:տzB>j= L@vvMޤ|8*{CϋXTOèN0Ƣ,-_%Gw]|8H*]}E]pݰ\|.Sza>=D+[>`Z@ج  f`4ؠ K>{V 9C'ny'/:&ϊ}^.Yw/;CAzMl X[losmɌޓ33} ~_;L|vl3T!: }HaW/r:aXib7J1Cv4(s[~s_μZf"E6/)+VH_EA)9~ݿSJ354vcymðzK$׺;.%o.]e|xЧ ,Vܺݳ8䛯 P[m(;Ɓm8:rk8Vxh&2B"C9|GoᥓB|o[#;u# }zOM62- fܶbJSe݅DcM|mH M#I,c*H[H%| e˘w0pԙr!b?hG]CX$8<ɽ ̰k>QY2xΪ P<)g g:v_`d[x{_$ל.N"WөD] ^(b-y޲5R 'N.y`"ڹ%-,R!r+?--"д٭rebiR'-~WJ 6qA?홯r">v~/VD%R.Q%|hx:L!{cwy~C]v7]͜6gq0d`qlk I՞3ep.?Aٺq=M͇[rk3I2R",H$ ӱwuֲk{t,pIq9%|?~VSṎ Ꙧ<%|Ӳ"V] \&)nycv]  ,vX h" MO.`ǑWvR 6`"+83Jg7aZ잕H_v/C3gcjMKKRWs,>NmdnB o~0;|2#( c[0.{OisTTqnqly{qFywm}׺ٌ`d!Ha oI ݒj K_剄|u~-XN}@Y-.:]xτܚ!g*LlY3tS>M3d>~~$瀴ݠK1+6\X n0L//`Y $ z\KdٿaZox(A~?N/3$;ݕ{yj_~gc mR~D(h,gz^t@?},^l#m jع( XzcO/[zO]C̰,Ћ8qfpzUlj{k/Ks_k ʏ %ֹ0;XKN~9BAihCaygخkww7֜-;f܏SSX2@;ziIr+վZONbNNyކG2 laoyn3p\5Ǔ#?vn4ߥ'yXogbOʳm"{W=}f'dj>Z~f7w_?uG1wm14$Lnaܽ eoJ%f{s%w[ +1ˮ7hXeuˬi |6Zoҹ( p}E" P6e$=cjbb gϷ(y맒ͳD H,}M]4'UDAms&53Xj}̈́suuoKːɝ0 8㊤#+Z#Z9b$nH%7i5?[{ U-㲰 *nȔ"y̷fLC ̐$$$âT HL~bQ,a&tl^)oSҕGؽi'CAo򻼁ñ]ml]L&YT͵[*dy(7A3y4w5ؕH19VCd뚲-%C#8<>;!zY}63o>[T:.|"*{Ev&݄Aw] WM.Z_k nLǑC˖ZL ~-p'8=Pty?z /ϠY4竁a-<ۼyn|EU s9=T4/dȆ 6gŮ+4ѥu֊2q5yEI:O$<^w#m?’7H\f ę S/۟b>/Y G<_\Viϴsr*ٲN6 {`q~yT>vgm?KP)(R)Q 0jCJMX[fu&.S\+R0v5Ar?oo9;=1D dw/EX[lutxf Ŷɶ~^q;F@ mod𽮄ǢoW?{`aPPpr{x fтnt3GcSÉ#zUnIzQjOLK,(5r P?W*y2xwdDw`FM5!n?XpgGdy.2fmze6"j+Ӆ}$= Y8vb1pZݔ,kve gK8oxS19rxG'rR0PH昂[]{P o8|$ +Ύ zsՍ!xyl{U\4FA?KH,kտNI$48S  φCE񻒄X_[`5B;/<\[}}\,< 7!wV OkSĴveo߮v~?O>ꟐoIIG}>nKov6BrNi}traGKEOf.r9Ϋ1ŷe^zsy~?O3AmiH6„&K4͚f;34_k^]jd>`ld$!ei@|zN)dm_Do]Wš pE  m^ۃ뗠8U@@#?Kr` X泙E_Mj,t`FWQECLP<XiKk7PHiȚ򧂆ɪLWظhpҩ}2~(wN]7]~ Ql= f# VcL4rLVfUxbz*۶]ᛗgs q''=ܴr8g"2q|l:`n93fid!2Lay ԧJKun3>SQRWN/ d,iz"kJм&JH WYO,LmMm}E>;YΗZ]OɁ[$%p42lO7ۯ)6ܥNW|SoUNUovA3OD 3m!u?noMAS#i{Io<_B}%Yh<%9\=,mehQcګ$=3$f͠dzK%?Lers?ˉ¬ɞN9DcׇE+`%OvA]rp ~׊ JRox]FmRċl :7@|ܾEpP+v3҃ vjƗ 'Vfl|H"ǎ;ӒP{" f.$$\mL?q ;ۋUíw#-vOgT]%ND t_y; 0ayTZ+ߜjxejŬżpV'CoKMΧ hq?8Q02leg3}j{n8)_ē 킩9O.+!e*(g[)-F@^ꑦh#_b6 C QE?ֶ~1E <X-O 8/0m&8o/'| 鋢:,KBފ0Nh C#gE4LEf17 h\FH6϶Ɔ/B1!V~dVҟ#X˘][ZFtn2g:֢pf' wVٴ{\T$c۸<նb5z}}yv19]u{B6w/QmtJ7 6 x WmDb@9@ErdozcTxιG0Q}WΆ;T\͜#ʣwܾ8޹ս <͹e%lVN{?Bgvdx]{fbfPU}}ֲSDJ/_mqm/$&LYAoV`r2Ϲ)ܢOriƷ~[cҞ )H 4:fɁlc6d,f5?0= vyhbH0s/o" Q2پ[G`=Rà-7A~eF4,{9N,c%tp<]lKe[Rl>/.Τ֔礵9&.ro5}mhOc<( ~‚P]}}"fϮi?[ rcAh302IݮX[Á\,3`ݣÒFT>l-s|Jmѧ<`o\60ځ`"*BE!.ǔH U6fKx``Y:o}y亝caLk^-a@O*:4" *p?淥.L8vʛB 1.Q!|VڙP22 Ø~s]$寇89\\ wU1 lNJ LN[LMǪw6rH%7A2?M˓:jrjEÚ;.#mHuv%&r|hI~Fdfڇ$"7S6Ix' K~`@g۟: 8$-ԗM0˘~̟ [oBtvijhM^dZʭgGV}2oY$ j :;fgCƠ P[EA$eJOL5DlƁxnvg:s,[|oF7u B'v]ffK[$du'[J,SPo;﹍x*v]BE/&?Zޱ0DG_|/RksC<"pD01,Ь2hb=:7ē;ǛI>kV{P$A-0a tV|\z͙7̾s_V:]UTGCJ2=>>X[;FIe|\9NT9X\y8w/}ԡhTS7<9Q!!We @=X_ޟP;mk (fe}/8"ۛ-MW& w _<o9nAp{ y6Y .X4/jC/?&Qj`04\sO]h5< "3x]~-d`hP&ki8n' MDVZD'AǞGRTV RݽBQENhif3j-oSFas\;)(x]d*A0Hkq4ٚ I+1`qwH%q"az齬1B? } #Nw!N$< 2L Iq?L&!ȫ}k/D'#a!5,}qx:O}C=1bvS8rF1uÅxBGM+Odu[Nd7&Zads&~ R}e+q-GBOLC&<  4*4WΣ9sk0e} k'LKly׀7-^,~=>{vT?M܅~Xl ~b';8҅/ma'rP\b/"/ګ%<$m:!ľ~7{ -!*r }:a6Y 3# PYE41(*" >uMW2mz->>)~ڕIRod|5~30O_ꎑ|"låKW=ڇ 8Jښ]u&=4esQ1Ñ AF8> w [aPíQ0Y1q[ۤkxϔSyzKwmd;|ŁgGꊼR{+́JkʷVT%yI)ڃ"Â1fom݆~?%~KOż%|e;5Ty ! X8 8 e %oG~ϝ8lu|bųnr"`wMZWV1|C\B=^y J}9"ܫjXYMi{M]j eOP8 lI,Pq1a-28oـLz(D_mG_X90 /Pj]%ōdϷtG[ 1ye,hSqG#ϧGv3Ag^8l9LXW؊`fLCgL 芊*X@(] Vo߀F]y؁vwfIF{/NuK|Sc ta"a~<<8EPqK!`.G7VW@xYɳgx;U 2J7{P~d$YKj= 49xA>;=iL|r-f_DM!嘙5x o%}զ(ύ8TO"~!#ڑ(Ln*X cR?bm7 z,RNv9ny00@u+|ZbD~k'-͗H2a]DHLwhy^@.3La@KaoΛw\ׯ_xV6ĝ\+036iJU.:h-Gt 2[t8y,NQc0/e}KF٫zPp/|HBxXʅ961q%ɃTi[FM{\3"ؕpGo}9ytmξ\*&XJrd.>g}Rh}Ou$_W 2vޓ/p dkpu_^8+o6m Z3FQ&ϢQВz7 (JyVpIa|u.Q{ Jj)<"Λ>*:yn޵oE޻dl/gjVJ/j={3KeK{w6W^ﶀ(9 Eb08`"|~U퍕ᾣsO{ /{6srtd8 +Һ((UL{# =:ͤs\4@m()pu A)#:8>m{rZr`m7ۦ-Q [̏5<ݙU&4"_׬BXL4@ҍЎQE{K5sWL&U6kf%b ?l/@چ +q,kEQx'" a3^lP:jt32d "uA3&h!XCNOD&i4σku'l,3wdL sg31ff(;"(ql B N}Ky=7AX!K%dIx"8 BBT".O&+:nE,]4xߨ1i!y]فpն_VQ&湀!̐kO.I7wL8h:{~LXTrk:ž b\ wGI%{;5a"-UUv6ꉕQH)Ƥxn0MHn|>9;ŽWN %˔RSG$S f r :;VKUB˞/Hc{{RC]>nS5M8ll@{<}F~ȥQ֞lj购~`bv8\? ~pQ ]`y?3'gRjouMu&fh"'~xe?τx,|tjz! 3iU1&$Ïo:R{P RmͿ? $zUJj1VafN}$"]0uw?x9&/}ʠG{-.&tcIofLn,&]SOB_ܲ%h28PNUf[Ù_Q?v9_x++eDs78M*l>%-|;Lj-BGa9\4+Q G]Jb= }2i.?һO!+f=>Oe[5_FGyM<>w lHe!BlE,0܀1[vZkMM4:8B OBpeP!PSnTYΦ$48tqch;*$N_vQw>$R ,5| 7nĉH%(ǹ!Q\uU v}c,Ju]PzR@ދ⽩$iB.!Ydal݇-W4.Qߏ4Qu9m?i yl!Nr}V'';r=>pszo24G6hu\#O#? qΣ gV 6zs|Wm:e15˨+Ls "'=܃|o$0B{U/"nn{e7W;H&6/ =N~\S*B-k.C6= ^g;K2XC8Rԃg@, X,}F6ي>ڑ0l7ij7dR$*L_+4f8Nq'8pd5EsrBcU<^*Y,'y " Xh2ĩRNlu ~(.>"5V {Sgy>)eqrxaҾI'<],Hj*D0yA~.{/=NZV%I-5SecY?Lo~CDmVWW 泖aQśML+ڀ|w_@~3ysK˟Zc8c]8s\dozS틇o\Jx(*;^>k%|4OD)zxyѿ;?O{_?O2!(:<>>6:2;sv3^cžvR?I-?U  sqKȝb BS%ǻwr>:nĄ7quni?ώ|GZY#]@v`;Ncö9aa!;3):9;BfJr܊ Q]Y mQK'0TJyKLK?r/L-h^?IC8Ruj1kFq!Ox߅#uǡTcPrI$2O7`qe8j-F? Q9~CzIX "w'$>idS!0:I a$ICgw:^w/$(,c i ֔&p?ֽYL NܶAS^ Kd nV0'IKFAa]!^cKwb߀#jIqrK?^Fcs"^/XnQ}ik3 L  Hr(ܲaWzZPi@0.Z\Zw:ZKbΧ{sd4@e{5*\Yeה#o5 ]ښ8?$M {2ݴ7#XN>>:vDW?">F>kWc S&ԎQlw^yRoh:h07vxҠ6`OɐschƧHA#pV7 =="Qo.s=庀>|seC6 %H9n1p$MޠS:[|լHQD|2$2E`fk.0(H^io0MŹZ-L̒awqE›F2"j !܇`I'S7o86IC$B+a%U'|9N$'5$b'4@^Jrsu+N>f4?>AX2P] |݉BQݕ/wR](8=JǒE_?˃?uBp m, 2aށ݁Bo7&YV]'Ha9":m <OH OvSY4sA^~%/Lrr?TB|$ B|=L2`5uԽ~Mo]1`xS_њ$G?yQB I9iʟ]݉>phX!W:>̋-#컄vm:^vjMh!Gon=^vJxE].\AUUϧ]]GaUH7GA'sУFQ s $ \60GdN(a?#%5_916 Z%1:;'p^2,h$'8^R$0_{3pu6_ar`]h ̤<QkЙGi:?)=;PMb S ڷBߟS-i7ͫ-6'q<],vTaōKXL:\ΣQ { ->q)OZb'+GmŪB EXzQK=f-v:}qpKpߛ+9> *>x v\2㘌4vFe_%+wx ~B rL]7__jb93O4>,6Μf~"\̟ /:}!OmSm&2#uwﲯ3wzz'i+eQ/t(PVS:3$@fvt!w+}}sF;{X&t5>Ar=i1jI+ QRֽm. 19!ׇ+_C+*@^hJpЛIkC?d:(1J*[bC2Ը0G*-0 Cx% qO{BbqBB RDxx3y,j a NO١]%H=1F*T~̒{KKשq/GaqUޮbCS-Wԏ ܌5@+Jrv!j3*7"U-~aU e&]=;8/ȹNX(¥yra+\N9@!*Z- |ە1ˆuUP֪k]M &BU(V)KtiV/' —E>iP^}($(!e𥮀EfU%%7cSL՗x}eA0ӱD%(DG?"QL ̄Li!1PT# x'Q)xp {'5[9'ÁEƉB&q5:GE46$C/>n(qZoM?=7w|@Y-f;Z"JRaRIT\alՠzd ' R : CkU}z`ûS/pG yQ P=gNhȎSY9[\+&J;Igc'Y\ _Ϛ^ZwrvPqA*&yX4fRaJO}[ן").$=l9H=xX\!JMU)\ %B:}''H:ጦq9,.ї\5ly$fl^jq`cdBOr fYEM ;RtԞbĹfZE(ad42X7fҸg~' O Xښl#U_.M-J [׏tN\.˵[,dklXIN9c;3XyrFnZ\Gވ3nFxxQS!M00 3-X`J|HyGNcS!qBg^ W)H1Sf :0"]ƌrRx9?S! 4UB~RnT.ƒb@I3c,<x9$*6r)+-u9Ý)īJ#wF6 /&K?Cũs llJއf CiqM`L;пO |5ZQ|1T msd=q?~j߃de#MOFy@N=~?q9~GK_E=R&ATؐ#/qH3|>!s_lܳ>u4\mGl5V-99.~bK+MWS3鴹}>ݣT?Z2^}m`s,+20gm>TGW~2hfSY).IJ(;(1> Io5)r ,m]vy H:#Eyz,]/3_c`3 %ݴMu++K-m[oQæ :D# y,1QғhV(ہl3S!vuLplrS.fEd+[VocOUZv6ʝD2b)ALDX|Brzs\tNcHOlGCqNP:W$\X nΞS*ZtKu[`",,jk/+rx#]Or]VٍƚϚߛo ( =ARb9Q[2bTciexqjs -LIqy3g$񧄕Z{>NU^O{ =8(  =r6=!_roi݆UИ2KR x.&*eɿN]ܻh)';$X0d'ɶxory=~jЎfUf.N>bW&~ڮfE,Lai9AuF\]$'fw1`dnTHA 9& Mġ 1ń 6r-a9LPدw}d6b%żf,X\09 ǞDr(n C} Rgog%X@Lt9k`yzͣ܋se[:Q`LNC|^}赭Q?C'B9L@B.C5,,ݰM]IKFKYcc%+>aL \;fI$Z֡ԌM &#ފ?.IV]oi,tsϸY YBj'|`IyyN t)JM'g M"i{`%|xBD)t|Q>!>,&1 :\9f 37ޏ/}/s]UkT8)9u[nt9$],^xy׭ZZիEb\1sM0dh?FEzx #'U{Boba۬_|'Tsj,kt3xf#\H.|ckK>9RV>\kHP *{ejǙ &s/l<ecrFGkZMX7Hr!ٿ; z<5ayw,b;ӼMJ/R,8Ȗ.sڅtSkH??. kΓ3倻Ns[4kҸ#&n9].7L24O&_Zy{8{5"sfcvE~7|!ޭzhMq9']Z~SF9vD"ǂS""#۝,v1AYדX}CU|^+;[k1OEy^sCoLqEw݄ύS*H}>; OSz1#Nvn/p3CG̛^&BDDϜ`~GV)kH=>3TG<*\)"4dABvr2##=L?]wW5c_Bwrd/DB $%Rf\k0>>& [f{eoJ$GP7~QuB%M QAֿ4;/;gFoF&C`jU@9UGA15Ɩn#@[(3q;~T ~x_@?7,]eE#u XɛR=Əb `b|-k׼Ѝ^uo=bAKh1<2 >^gN0aTj)zgy)9ߺN'ԫv{{J Bz Ԕ +A5VJ5j8G|)k(sH p \w_Z1uL$F!q\i/G#,7fsƺ> :@g({Оͮ$S{pX@ׇ9"|ch jQc-Oԡ >vo|{'11s5aN:TíjOtA!5eKG(o% ` S_{@Gm^K8E4)'Hlp$Q=A2s :d.Oki;O@=v#ahI+PոI G^i#>RtY.YogN,>\P{Gu9){sa  ͟]2+iy/Vg,8S*-tYu7fzLhdu3cs奍YQT)i٣!}Ȓ܊4'Ijo' 5=c@uXj>#`uJ 0]B ;wMD͐;Z{BX/Q̴G'@SH@'ɯYz miD :MOCDlyKKi"Kw Tۥ 85i>5N# "(hqeR~^Tfr{I;a 5W|v-~[mkW|OZ-ƒL<H2OƚWՃ=n^r@MOE_.? ?XG*GZÕ4c !}aKh|6u,MӍU}.^#kֱ>EJM6x+Ƿm]q1:,6H]hmt.ӿ~FҤzhhߥ-ہdTVͫ&^o3/9rT7-՚J͢"ਣ=7y,d3` Pw;2 "I2|tCAY& 1*lRDUGWOod6KyfJ@uHw%ٳ_UŹQo"rM"wn~5=^# IY|31gLH#f%eiV{A+Qo@1=u\e3NM®j!PK[F\Ęk Rvy˾_ vP\F!ly ڃVg%{,rس->NS;f9Ӷ[zt@:% sM%m:xKȳ Il%Cr{ -cA7d䟇X- 7QÉH !MU[Ym\t-"73HF^*3VUp+; k{ jt$ VZeӦTK=z+3e!`4ҧxwOI$3TLd 4Z= veʦXW:{՟48¢ֻX^hyҶr)\'oR4 fHwa )mF5geΤv2k't)y4$$aQqAXW?@OC %OtD]$^b^)6*'kjLֵ.c7Ndn33gYz<^U+I_FCDn8sdSW78j KU/z!Z=O|{*߃ B5֖l33۟k'Uj2DE;e#5e6vZ![0N'd1u!_7ٍwaql7'*XǢ#\|[~n3"#`"Ӿk"3Gd_R̗1ԋ1DEvӼ\xB3DmLe4N6'YsKzG$0ywy˔r"&`rQ.sddd#svxǝ°{y\ =i=woDk"S a"]J] ,?A!}9rv$2G! cr"3iBgqHr~d:jZBO!8M"߱ܕwC#2n㏟Ȣ!% O%_[_˪z">ʣ2>"!b'K:b*}44sѴ-+#J]"#6;ubbBWx`٧ xZXfn%ׄ Z'3l|䮒r+3qq&BOr6IW[ҨcԅG&HBo՛B)GUKy.2 H> [k(t_()4EV5O禑2;,S#{n),iJGQSXh2})!B.X:!+Ϋ#n$o³CC^ːZVOU8LMY%Wc 1&kpT DF"$UXL̈>}4q!֒%dfqh̝ .cA#\zn-)|j""UJ˶n{l-zɵX"n%`ֶ /ݐ;ʼ,a+cN `Dr"f0Ny얆$47Q^b& vmRjC$D@*gu6gWN6븥-Ϋ3oXkza"ֈf~xŕVBI)Q)9^;rG[43x“jDN@n=dg5*q}w ݒu1)Ոh Em[W[_tE !WDZkÞ a VW+xk/E28LM%Ƿ*<\GtH\ dz?؁/ye+̗ KD"s!E jv^{~YpB6T*s} :;b ߆9 !ҊnT`qtºVHL%ܫ :&B9b` PǷάpP[kÏ8"`KEr]JE[[v6n$kwt)ũڈ`VBQObc ] >?6KYeħ[` U4@kYƎ ;4; }TU| _jOJD`u,7|,bޤp+f%+% qskSq`{|}m΋~j2  fXyd*+LԱ6ڷ%]7uu}jZ{ˍc:aS~{. =og'اd#o$u)Z?xp4VGh;z#^{暯N64] 9|J[sOSH@Ųub\T|_NFoN@X >A㖎pzn< F&KŹ2`9ƞͳN9fNj!uɰi/1DQ@SPq~ \GN[%ٙݏ:ǿÉ(`(W i..sWz'؞XY6u_wp(@ 6c+gd}9p/m&]Q+uTtYR_ͰR}a~.n8" 7p, `‡_Euklj+BDųbkx]YcZmeDq:#l(g%ÿrk{>+gn)fTK\XA6KxţO ["\\*/9VhĐ=58˯ù =n -D}7%nސI~}}7ȤjS Ũ:qթ.`S6HE۹{냸<5 5Jp7QO}ykDUI*'τteaҨxQhy]4h-wf.Zc6>߿-g.OyW{o-Yz_o@12CNW0shg jSVk2o@˲f!`2"00"JTR1J$5!@Ru/Qok]i;2bqJ{`wc\|#Tֹ dssn\9dk!<ӦN3]ri9k7G6g1uUtf3*Uc&S:*WwcHu% ;+#Pꑜ/UOB$B3f S3ֵhvj\bi9"` br S2ƎL^ BK8wWP.y|55Ή8fҠ8Aӱ!_ >%U-,pPy^%YeyXo&L?0b>Fs,P5[Jk]*UEv2ѣzpUyM#-6+fN/ZjtHO.q1 8vY"6ʥ3yxֲX ~G~usul@\L |WgB!XoBvB ^>?aگq:\9XiO팻WGoŵ b/U ;Cϯ= )K/cc;[⾅? 9k"_sZ_Ǖu QY>0.pʷ8i(Wi~䟷_ͣ'c?$Ҫܪs?98J9^a_d.:lz^ +t <@rKy$f5)<ųcntńӢ4:yRˢbL~ږKT֘%1κC?Xx@LL-:'&WmJqb1͜jki zڔD| FgTfu˂ڑ` ^Y^I&CCQ}t-]-l i32-QPϓ0YbVLuuӰ]( 1 O>p;3F΁6p ,1"뗹 '\V8 y!h7Rdh`vJPsU+[c]a9EwcXr.^oib7sX5]1s1,)\1sx.1cfdkNzqu Q5'l]I&G15VݺgsUD'88ceq# 9{Խh]$y/z=%G1DM&s9YEC!P{A+Uk1V#Zc*VW>@ɫ6i Z3m` f} J^E`kZֽc 6eV/&P9k]_Ϝ*`/-BχKeUcy Bj X}I Ȫ(;~⟶DD$v5b~ӝ3fk[隡ĐeNk\UX˒UcZKVmF9bS830Vhs>v,Ձ vryBGns ~וSu6_~ma"kNC"}6|}p~1TM|7<hFzoCo*d7_wQ#:0n !9- lO^aw 9ag4Dn4ƠN[4c" P.n% !.W 5@h;W[x4t.ڽ`%ÈSr e? l'|Z߇0n|M*-쒒rsDur1 bs{?l-l5^;&rc>m3fֻOe n5gˍi7^㵩Kv@@Tа["sn:n=]OLY6:SqV1/]ٔݪOe'(cx!=KŔտLmCk kXs/[*Z܍OZ!f>n´VV!⑪Nf0 b 16<;s5Fq}\{Xk+K fB7'r'Y1l3."ĕZ+ ADq i)]绲4ͮNI7D}7T6ٝFe҂(RDʆ8Bu乲&ڮ)@ahϓ1P2Āz/-Jњ`1٣.M*6dW$&P-ޔ"bb:Tf::W[Zi8{oUk Abx9YoGU/QZapl<$8@\ֵr#7(n"iUHjZ))j<>:OUS'sx<[`Mq: e-hkܢGg0c ) fxxS2"kj8R+ss3ai}s\ֶ6jFqFfn=5QkZֱC,㵭ֵPy)C45 [2g5hwEzqhn̓/FlV }ſdNipx_-RI"7Y/Ng4yTA&7(2#(ЃiQ_`9 ڠ2wga_нz?`C@l@s=qp%Un64"2Fm% "?I@*p72 JjƚH4 ԭ43̈-T­,䵬;L!7PONoABP ]L"n 8 B*Z,s\扮0R;oԩF4^[F1khR&Rwh/2&hk JQR#TeyFdFye1@m}Ns(e{<'j*P4J^4)Zew(xAa(v(<үK5UVGP)X Z"!0A(}k'wQ8"zȬJd8.49AIF!4{rJlp\KfpJ-J]Wi]D>ܡS=`Xv ],Sq)-|n  '[4Nr3\fzS)Z_7XD9(̖t{i|`#d|k{;4̓Mk4-j7\8̗VicsQ-Y_nSuZ3nBn^upekZ܅ؤ=øZJ]Zɚ́ dk>ї"3aNl}ZIf6ǒHXl`͏۶yTX˿"А7{vynRLbFf96}]iڙ >Na#ystzA$94ےf 酇,еيhpȋr 1D9?RUO$2Ez7ˊlz lTU@Qy{wBP5~0ҬdARSɚxe|1Wޤ\[@Wɤz솩8ʋ(*˰6zDt0:xz[ 7-- e=cBYx͜sV,'\ VBQP+kW_D7s /eo"p4ǬϢX>,}]q9n!0I^bޏ9np&8@`εV2P܇d BcEnWQn: 1nőeyO_\s1Sywq H/+%s{HP)o*Qv=+Rgk]3뵹avntnר68*/jsMb~_XoJf,z>~Dx,nƫޮ{`+^& w\w 5Q 2]$F\81狚Y~s9nF adeˉ^YWbmwΛޚm<;5vxdb \=ep|ޘ.?[{K]b{lݦM-{q0+bl/i:oXݽ_9wt"G2a\\Y_ CS} 2~dT˦+r۠oa k,qGpjoL[SMu6զ ʞ*׼]bz ,7aH€Sz-in!5/KjkHw;]o` $Jδ:˷:C."٣[-gDJfɄ&Ʀژ0WiQ;T=x4Okɴ,ݡLK2SNZl1(N\n u}'ѺDTsuhEKoĉcug~$4KNULW"r6\Է K/3 *؆į_!FNsx_btxn5h?qjG[3hgSLzܠr0"9C+0Spoɚ~2#P62횊SPt9=ȕ~ӛ}v'uď͟3"9xd~=Mrtq捄Scsqr2%=ɲ.KAڳczY?gP;R W䖪^W[u= {92#"3Wuu$F9meYeQJK#3pT4JJ'9VNr7QߎHaf!t8LFV @8}A) x/a1h0$DqL:x`Fl;ۦtk~=ȍuRq9au0z왕Xo0~+~a VU1fV(V.rW6UOmiѤf}$ )sֻhȈYx.5: !zys#"s|N䈈W9cʵZطgs\3:G9Ǒ3Zw$L&;VC"qHoYo\k>:mYm.DZqQƈ~b49u79+_rhT *HZz=[AZb| :н䆉~+d7_Gik99ΛӘpG[N""8DD,'-tq+i鉭k&vMv?!' XlLkZַRх>'+]dsz_dl? tZט>/ 5wc݊ <.x4yrFM9I|♭"fj -UR3`R^$:Q#V_>"L&hܭhFJ DO~'Hgi"w]cך"qUōNV6Vb7suK5p<ּ xW0SlU)slߘedӹc4A1k{zXcZئ45KkICyP8B?p5k%?u(Vs}k\_ffg۬%8G-@U­Ypi3ɛ`|TSޏ1H7}^t `9fs^Rm*R51T-kZm1$TsgueVz79si\w_v̈́ffFuGxk%5k[+j?xLʳ3q0Ta{5!ʬМLqgFFl;s˗ XLɥcBL1DD'5.rd9βPguѱDp=UuZcx۪g9~c}῔3P)~Y;/S7<EN^tjMj]ֲiOk*ۿs^FޠO` R?a2%c0obCh4;2n"}~aU z 9-p OX["xaT=v-_n@NB  ͢[ŇXsu=}h5[bӊOԞߕp`-ŷ1u>W,Ǯ);Gp7 iA[GF> NJ$"x[:TOf˵];hf2Upn渫?av#z6਌İkóB!ve$"KC Zܵ> yRf1z ?\8((pߩmEieh 4z~nzpk^}VƦQOƉXWO]Tc:A4q#%-eE?5Nrs9|՟um3^VǨ ]傶^m_'}ό?";FL.yp`~wCSlZ^euOn ;iSw&Om6Ѧ:jSoޣu.Xm[3g ~[sxEZ_wr\T>W0i#`UZ6vN -[h]:&bm+TEOs7a-=ܳGQjYSū{i/%̏65)%ӒR_BzX9`)9ױ_>hlm+RVO2uI@| hСΓeX/ݞŵ1ld#5S0'*䝵i[ILi/L@{¬N; dUW[w[,?-tU+[* = m@%t%lM\̻l`3o&+ڲtɓ1ab+١Zv7'ᾐA&{EY{/-O bNP@bq߯ |w?>P+ M(]V`1ёxiƴx,nXu]0('y4u8hƒoҖDG>qϞ#v$"k& F1:t-*4)RJD`I&b8ف&h,iSJK*c$M23ؼg&Ej/#9͘ kKsuמ:dXխδYĵlq233:L+eZ5F+sn?!9&):L9=]U.Ma0 vxYkyuZiL;%GLMuT_"cIw#Udk9Fmw-s9xֵ6~`-lXs mr7&4 TO:fa1^ ZUt &V6:؊~1k&lx7qָ넳S k\5NA湮wb RfLʪ IVf1d1-O7mu)Dy_gD%[]UkwD-MVfe\hZc32/avx,W=GARc k#$G+Ҭ P4 ́cvt`yMU+vXD{#b ;1Yt]FdDqOHs]v48f.WD>FyH 3r.Akժ2|O)b|hȱGVmkjV՟mF1ʗ|7\n@R)almV{U:2&LU(hi5(*h  10.2 CCFfuvd3,q(5G$܉=3F5ZVas5[\j&^/19w%VmL5v+0o'J5ffga^a܌fX@JX4Ll¾8 Ǎ1ahBY.tkw! ~|cY30$qdw9sz& y{Ǚٚ"G -2fc!WoD>|ϟ2{)*]cEf5KkZ}‡c8z@/Tٙ3[WL9c2&eY'{5n5RzM1'VƱf(zspE\88x{o5 ^y^]𛯂tOo`YX_5wBk^\W{6<hqJn&&׭:|9v y_!ɯ 뛲qGzIOIȯ(O[, @jw1±VZ­3*9/!Uq$G%#}l2rHSy&St;($ 47#UC>gx8"{t૬O4w$G6< :o# 1o#^s56;X2N:^FG+w +Z]z+〩}nYXzrlVԽ~~ NOImS=S<^׷^P7wtC $fA30Ak7<_V/;|nI!&c+E9sgjLf(]Yh(RGZQ:כovexyENŏTӬ78xk7,vLVdU,B@ך= F.4p! r_A܊h!0,Gm8.&2 >=LIL_#؁%;cuGiwMu;z .:Q3?G$bd//O7=^v=5j_T.gZAjnl; ibH!rpdz [?Uz9:d.gj_f*,ýAK}/pG! A"!7ժU@dyW_hv ~%%tEO19|?#7wLҙvw_Q15o0 ]UZKU1mj+.Z0zd @򗑻8%әJ7(;]\TTGN8vFӒR1s\"Rx|}\ ~ߎmJ|"oYt0i1H Ȼz&-Mk|,hzܿ>0@fWxFzGqӁK&Ѿ#Vu0d>umKB2ȷR2hi{#;%xoڮi4`wY@k=#Gxw`5t5zJy-:Y#st_3 d@~2<5N?N!wtXֱo7́5kK!4fIw_(PdDE| ABL!@@%` hdLk E F&t; 7Ugc_! .3{|Luk~^{ /(Ϳsk֌ Tֵkvw[4mwӻyz-W JdT9?LͦGvO"ʿsEٶ$UsƱddxITZ837.ò91sX+usc[ܶOܹkXm8adyLkea\c sH8c"s/cZ5ZQִEY!z.#33L1EtS%BӌQvpV=r&M ScZ5(x32f\; <ֹsX2j~ [Vf2_/♤N'Pc߾oq0Bచ^oy]~rv>?.LƓ󥡚^%[!V1z*/Q ކPOeR"/0ߠ^KԐЈuF(g޵6Rˌ±H9n%&5|٣umqՋY6խƹ|t&1V:Y?}(tp]O2+35Pr_s9<PF@/8gx+S*  7ӻyY5+]Wc LiA CKeXt}>PIqzW#':i/v;}{Blkcom#!{$h + z_3(ge@vǕsF+LY/*fl^LD4+e-4Zw{}_ZS7珧_y I|ۉn_QGRRA|pT<;_^$;9f;܎Gg[N}~^44lv\_yfę!]w37C_oǰX&6lWS( ~UQSYD)WP`+Uzaṉ Wgt6o^A!W滬Y7>&;Yupn_g' '`'pt%Ds$dZ+&?uR 䥰~QcQNpPŠg ,YRر"-+J:^52a5RN31wY|t~{h>x?؇i JA+nk,-:,fS-7jԤߡѥ3=.:RZj6dK\D5C͜=V_tQY`,e4m6&&D7G^ BlQXȱX-rLT8-od~ꄾ3<O9ij6ZOHIԌ3^G]MT)lW2[t+r~Fܮ˩#z/N=?"< wCRnx 6?12r-|ɂ䑀w+%qu =bł0X `_jl{,o,uĢS.^/.C6IlsH;>anwzY~`ww"{9w$I>G(kqa.}lx9yǞjZձjb7u5;`łbư^qd[tqӸ+$Wqq eraq5ņőh yu9$Ec) k$0\3 x8;"J5ajE8~.yL s‡҄3NlnU\ƹ몋_`L:O<ۉsQZP>_ nƶX* F2j`GQ#qGh;5IlP[Rٛ3Zهf;)1pfsmq83T7\[롾OK:Dۍa1kn 33&Ip\;rc/\ݣM][ֱKGaC6pU̩5Y-{+ec[Wy7Oֵ⃮֓{:Q,wcq~}o@q19qVc5iGZRvK LTY "#8F|qkB0& qZne*qyѳNJ]^Diʦ)&O;s1{k\3xu'33k|/6Z [eH"7}WiɧUcbDKƷP%lc/l(^u~a1m5\[X4kq*K|*=*2᷍xx@N\Þf;bZ^\1#=1:[k/|xo9n@iwr+P*>F~;J۟є6-3;}lyAP8^uWO7RA.ao90 ˸\b>Qd}&@ SePa"Qsq; h#S#v Bߝx:S_5JD'({[Zn+.Јdy+w &ŽfW,E lH/;bMuxk©Hʹ6r.M*vNK*g\-tڵ8V2 Mc\5}a[Ƙ`(6ZR6bS' 'Sx~*{{éT1ߟ~lji< gXYo  x I׶1vb;VUtEr'bT!hB%6c1.KUu~._Wcٟ󷼟޾;6[ X4L!?F^Q9*JB)3%Rs!ϚFf~rfn`e]UrqK1!)wN.gA<>V^9 o-i12akjnrDqk5͒`mNPITTpUʾt$-v\5CojN TU]ߗG%[}{a 'f͋.j(*QéJEz4),C(ދj ǭಟO0œӛ`-bi՞cwFp!%JdVV 9*et u0Ml ,:]#HfBuSe. ا-f%D+ԣ͹ ZiŞM_m&'<Ԭ52Z)]$g F*0\Qa wˀoyP AR<6CDF}a3f͜,2U\֔[AWzF"9\I|a=s\W7 6sK#"q4 jM4|.M+mF5*\ַ ZKD^?~57U+kɘڂ6Қ8Ĕ55uq;]tk&~yLs.[*5ϵֱZX-DxD_4sGʭ`Fȓks\.ki:2U9Ҕ^= Q44%]:T급_Pΐ b7MqM >P7acKR+k3l%+U*2fUv`OcfkXٳ 'ZsŬ/c &ybs ZaP3*ejI'͸k[3XٽxYPM"X3ݲVRuYVfdU^]HϭUVjL{٘]P3əThܡ Xʳ5h).;&c\ZrֶjKd&8r7u4o4r{wQKBըXK9ɘYlkOQ*לyynkkqB?0bD[v%z=/C'5Ok=25zn$fՙ1L$,ט9ZDuZ9y k~dZLөUuurҋaHձmk@ u<박連jcy\5cZ;F k[t$dYV8^^.bfHm3s@yEiXkd5ŭm (rE#tkIuZ {|+j`IQ?(DۺeGUި;Eb.sޑ'8!cs˪86Q16k{r ђxTbF>s!@ p@TŽ~ܥ2҃| w Qڪ I_^`<,̚WSG/Mvh4A\Jߚ ʟzGQ]+iSr :{)}Zv_Oxv0!la\Hw@U2Qt}dlj~3qaD'>~=u'VFsMssڭ&*q{zm.76˞EO/X3{ qi c^hvJziYg??5l >\N ?>Dbާ ѫ2YfZ8~q@t#mMϪsռodvmd`#D놺÷7`^̷&|u~{]53njVoYvrY/DE>a0]_,! :M܈~Ĭe'6߼DFACGwT=YN0\,ҷU|i*[`!%f54-S%>loL3-k5KKJsE-SzŶ@IjףRTN>K:CrF2ƮvP+,IkkhYv8cDw¸ʭ喱S:>0eT+!+TĐlP_yVOiU Qbxu*RK $Ԅs)ϽB KpϺ7ƞ_Hv66ȷk KV:<+>}mWH\A%toKvapu=I1 _a 5r ZˉO/[7q&U2-r+o崿fZZLY2c+TOa^sNvKVݕv\N`ڭs_fY;8zIlw`F+`LE] rg칺Np V*E %UUkWzʕ&c7[ɞJnGU *Ο95u؍)= DLNsmdDq)|=Z=!hI"8t)?$uX{ѻPXNApmCkDkf>K/]%)_PQ+ 6 ‡"@¸PrU -efoߏJ+N2 % _ 'iL}XP}2c9F/ry KЂ1x!VS1eBڨl?ea_i5@D I`^i!t0]刄?2y~!^4s,v+V .욬H[uvrEB^V_N$O~tIt]d&tnQITfDMyoVazHֆj b}[WعUl“vř3ݽ58[<؆eHoZ„D[87.Pqy%y^ωBG=?cAEs^J%  Vyrų6r 呺~2ӃPݩTٻvMRw̫wpy5L䴘H!Ru)lFJa}Ol{<ǠJ@k|ŕ<@R^O܁ C' >yQp |1~s;-hvV[k, k\k*n#RZ7<ʕn4.ߤ+XA|6+Ny[= [A_ 6LWQ+_dbL(Ŗ/S`?~~*eU{{mG[5LVYRqE P13V lSIh[u[rj.qԸ*;M,\{7nq_cVo_PB.(N)0H -"H3)*0UP%&]ݒ5k6@`w"##"rd^S{i Ml6{1~=Ӝ4[43r7v4FA9jux쑟0kHd&9ƼgMk.k\2aދTj3&Wz<|1ƷjƉzf5dֵ͙i0wヘl23<"Xnޡ}! l,Ec s2|ן|fFlorkZ숸fƲfmǎ0s3\λ3s׽CGzKefMU3ī2xrnH##kU{ƓId2l~+6lyoeN=O\ssqZTDj />P2fLʞu\h7_j2Rf1s4H?k$Wz$!* >_dFzGa`"_"#{6"{sq?AKg\]Ȍҏ$`m5Ȝ|G"ke Ws N3#aVr ^эtk8|Uen8 ŨYiues~˜H J|C{ކ׌MĊi8 GsbN,mPt06w ^+Xu\uʵȬf=5DDDGbkfkX8-W_ˑ9"m9+c9.YVsҙ~|lÄݯ'd;j=R:RWwKΪ1lgy+[h} C&7 ]f6S9z5k%L5ojO<9h_[b>LP4'ĉ 7 }{vG( Ͼ/x^πH=k~f#eut ֏iu؊שvW|׶u:Os<Χ|?>[}#DfN:S {/gLkA.ʆ`Hp#ozfrU>EHy[m/?+xoXGE:Chi@58II+*OA㦽r# &;ݝYLƒdbnUAN_Z@A.A]!ndܝF8zw|ܾr ?EŌV[yɯOέm C q;к!ijZ=PXI*Uϻsd YSNq ӨkH MkL BZ"cW&G[?#]GRVay]A|K}pٖ,OɶAZ ddдH3&/!s=c}\ěf֓6C&r۠s aj;)&F#Xbz z 'q6iسxYr!S3>d1Z7*fQϫgd8׿i?C8Dp}l[oqt`8( VpZ4_/x\#m5-lyz=TwNa'-ꍥ}y#=+#Ru ^7T8y7Huycqή iAA@!$!bI ٳgOKw=1cT5Cq99g C^IzPNk`I BS8}|v ,5$UEZ`-eQP6Mpw /1.lƆ uE_u]q\T#uƸ뮶|jMV[.ޫUeOd/plkX]1{\zEb|b zs3q7HIfGn8mV5n.^?uxzX9ssMh^ι9W @ni>ޣ9u9TM xkZ4ìw^?#{ҭ8vR5eq9c&gT7TRRVUXvgNqeyCMkv{@K'q;6fg滯ƶie³Uf4f+&\)vkj hő]Kt@og oWHotwJ˚lw Zs:AJxE,/xxa+_gxW|R2Qĭ`V Wep>g;G%hGCQ{jkRșr A/{CG%%{gcRbǑWj,ާnSXa0%7xF/TY1LAR@noM1_zP_(Lp4eFفY_iV ~arS @oXTJ DZi䀷6vRO-_o1~QtEU?S`:{03a}>Sh&ssCG]I+q/7?,}NE1=_̀`PB^Yk Gv3hǍK; V ml؛ ݠV548Ehݪ:LVweZ3yJ5Ʀh kP%v<(Qfsڗq5ƸP$3Pq"#>&}6Uc͓5ψDs :Ļ65"ƭn0cֱb2qLqd^FU1sԜuVJ U"L =L2dv/*4hJN Bssuü).['h_ycXֱL2usbqm-Cn#sL3 ,2ˮ:9kmHo^7C䓕9&k77=95qiKS9vgAtsK.5+Bj3]'“&hfcokٚ1g5YM4^)ɦg>G]q9"ԷhQcXnrֵUH|_qTfyqYO zw=V._QcZuC_ Fw:1(F/bc'5Y5 ^I֯= 55dqrd(|DŽSp)4 *Eb۷UFe[swRl62.=D2:I֘%q,Ad{<9)}vԍZ\AӰ}&:&Qc%19q \R]+gL&sխ"U+VOrw c)`S-Mk6`Sƥn@c^%\N" I^5qj3̆`MV­Zbd.SʭWBq |lsro+Xٚ"`:f9^ c_gUkt=|Q(4cxL14UmIY=eVi3.ڬkqT|}\,M5j4Zl(^%Na7$A#r:XCIk]걿9 DvfP;l=RՏyRzݶܺ:}lM͔ypRbO'Z-s #rEɷO{Yr\&/8"Dzqo\.0+u{)E ǎu3Qݯ4 Bw{\A c& TA8a(pE!Ο#F 8 otEV8l63V]ky0$'Y ű@ ZM~w̹LrpC} 6;mKmt @!85g Qܗw)l[3撕53/1!me]r8fwx9;&M^B8];ތ&7)QHx]4D WՔD`P!@ 7 l w75 x XB舢xhFtSk[zO,SQ Uzy>Uuiñ^i*m`~u7d/\VzwfY|ylv.#0 0p{s[i.1;~f`u.OMykykh;[7}@WX0H zoc;vNvR>!ծ=9IUl?/7I!H>_u nU%J&EN<#uk#Q0iu֕45F\eɒZV{)?;%Ŭ-T[ֳ۱1 T|Ŭd\IpQ 0,0|h@ S㡢nV5 ,yJ;Du08Ӟ+FmvmFRZ|o#aWͳ|+ZhM%,_ԌĈc,RiGG*<۵n}N3(Ho+sWխ7Xv_9RXxf0ٳeEx1p!mq?^`vΧb>z @ƹ/gRE[} >ݏԇ;ŵ(OCJ9E܏\.yE1^+i{4Yf| <}P^_" ~Ycվ|G![j:ȵL:=- uY3=|UkcQƲޓ^;~Nc  +LvNrR9s GuNa;=cZ 9i4,k*f^5sll1["9V{dLq7= k9򇽫cʵqc;tEn 響kmj`/q1c,؉"&BW_㈜q| Hmq=75s]>@D[]6 s\TX^q]jz(A!Cq\N9XV5{ddh.Ы4C"#3Zoq5Q5F5e+a۫FƑC]΄5crH3="")JSs9٭e\Dqp /N}&ld0j]kZD?CcZ5.bg\kYAj1㎸㮲K)CuZ>l\ƹ˱j$N+ƹ9HLeYU̩5I9dWYyZ:C+~$V5o|Dq0^W]9kZ*ֵn$FY՚n6l d̪2ֲfK1c&fMA \k8ZcRյx83ϝy]u+1qn@ֵkq@v2 ,*UmUUR90)e8IP阅I5| R# PƱqұip$sjO^Fjc3u2cjַ%5PaRJjsPhDV%'=<>` [.W[&xs4:V9Ҋ4݀s) AsպeG9|/'܋.;tӠUV˰As!j?erf17^0kCd/x]Y6KRZ= _tp.Oo?ѷ%`a`57׸C/8U hҼiz3Eѹ/iQY̮hĪgFNK=O'[\~Q]('"']s)c߈O$I{8.]_x- jܢ aAVYrqT tBlҒ 8ks:[ , z鷟؅?jjbTT|u[#3_9)]\ؐa}Di]טPa{2RV.CVq_FNRv&%[qA 7Sǒ8-)Pxy r`,)4`n{h[t:G.kG*Ṡ$~hӣ؏?T^d" ! 8GRL!: 9]-@1~sɸ~"g>0+-EB1K%g.C;`ZSM4UgCЩ7Eq`o{T 9U'8Эr6Z&Re9b+Cv3=}BZfU @,evlBx"*a낗wgn'xJ/2s#{6!"$iksG`$oNs[`\޵]ǝய{ըq[|/ \1]U?;z\^w'2k]>խ5y VI:eyI:x1X" $+ۛD2n @,eϷ3[i+VjX}&"1|?bnlm0SH/Xly# 6OA #ު}ڼ#qE/5:s]$?--L"i1K>c1޻V9uV<=J4CDDVBRc\/ Ȍ˪F00MU#ڧ3ֶiW9WaON!ƈRD.9)K TVDͮ;<έ]-q#ZUM",k+M)1IqD@er"o(\z'#<=t\<+_}{О~»[\'w|v\Jډgnq=_`f~ct#Gt /td El/$\B70/qژRq˟N̤z=-T)c*!#+kʮTÜDMnmҔm2&!'D§va8`S@ensv\aN ]DgmqA!aZ/Kŗ'2#?Y>@0?{AxVQ~G\8+<5K/$kX˦Ӭ*+\4l0}`T6ô@L+$0ϼ44% zb~t/Y*1P*ƻQuεj_P+y9k>mָ+-"5l |_w3"#;x\ Z$"qUFpRD_~S, F74D4vRźNk;0V7 UCR+$"CLnXIk/q͐uρ>V[ 21lIъW^#9ze)c*ړLR`h4mƼ*Gʫo{/R sֻT+zۤ9sQkZ-7oO=d:y®e:mF0B1m८3sƻ($vPUm#<+}fuy ۓFWýU&]vHk,M ne#2,DG \IDMwKMGpƶf5kn Xk3`oƵIs;Tޥ`;gX5o z~sP6 @܀ s,5!ë=D^^d.H\kd W8h:h +Iøks͂m"}wkrnI'Si?޸{`QJ/о hn8Җ`ھsBq4o@ qp @=IRy{qbm!k.-fS?P o;{sc p~=úh8aw8 w kAC ?/*`xޗK =P?G»dܠ ~,b I7Tr= upAZ@w̴=tn/;#vz?7cY=~P ;Θ4a; 62@ڣ/IHXSl#|&@qt}tZJ) FL֋ +PYDgˉ=Hfz6up2n [ 3Ymmu/&لku ABw/5"Ŋgyĺ;H<\CO=wǏ4Jv*۵&"l徿lAY7Ff{#Gcú6jPHnL6lz1ԻSہ^z)؉nTW)·O,kdVqhbkŧ'_c}. J3P ~z2& -x+^jA^qoqCldI~-j{/% 0`H6,f3J0Q*u;?7+=m/Q<_@6b[䬤s7aiRq7|D~)e4/όc[mgRF҃˩uuטA)5 cXA 8ձmk2\]8q\ אN-jv_ 8ָ eKXcX10 79sV<"k\DbӫRΰb&bqOV􇟵6ehِ8lN# glgn'QD@wשk˵Wy|gqd:r xO:@V^-jRavSo .TQlYYNXK6pQ30,]%-gwgwgwd0iaK١fNAE}MjkMk++;;=fեRfL.'ݰhO6 -y)sf37j3ypр]ORaޕaTFp[έR蟪)vKW议+W^ETVZVߟOICg+sx &a!F]o77*x1Aa :m@[fՊњόP`red[IXKgBa"G 4pC}SE$ysi 8dD!_C:~ڟ LCi/%Y狙ãDY&!4*6y tU*U[+f4xa  b8vɖ\fJk`VZ%jH!`d")Xh Ĉnu8mLq; 4kƻ| [!egoz7leVL|kY&d6+y7L湮`i k 260J$\t?dDY2.4)qusUeF15Dl"\^_&U| .)JȨP(>e._sMF}TfR xk.@bZ[-adDDDdv+ʸȜ渰&`rqh\!_IeDK`hʹP=&F1:ԍz[A8ߝUjZ˾9a"JZifRۯ]hi əuLUzC3B/|>L&#t~ߎG%2uK˫Mo>Q`,`fk&kfK'k%1vLa;W*,f2 kֻ/ZVg5-[]"٦c]P y9"'V ~fyPjX~35W=""i +S'L31s&EucEa=,BDi3*zb6j[ذC};3l֫c? \jDx>Jvp"x (Po|~%='/IL*6mC)uU2rӳv;Si>Rh\1u\#~>?6Psf5}_~%t*D>SmhuJ=o|OsS*K 'c6& ޳@N2LBa-~1mSf`߹!k.6,XGX"XFUs 2y8^)][Ox>TvH hDlDrYyY$vvmsy &sA!_ԿAn&H; Z5z333H+/3cC]e^?f3KQ=z2tȌXu7/+h"&)Vծ={D44$_2Je"Ly*/gRXH-S1H`ԩN:u">CHY'Bl40^LaE|l}YYt% _7~iq~8K0:G&^ `dm"?ba ȉE`ѫ{?#i8LH6k&ksչAq5kZѴckx{QGF'D Cs]_ c7kC#Dm:4BChD]^WNaC?ӛ5w8I8/P7y& ܽK&3zoڌ[ޝ:۽МmkG]~"i0Z7y7nN'4r4H?chLdCPDCD߹1な_wo*0H$ d>VsiI诼H"S/a1td_7믲ܢ{`?j,݀c&?{cQ"X"4Ӯ> 3Z"1GX7N'KO[Ȍeri[BsH_/Ys]@Z?:i4eP1Y9va Z*#J:I$tTNә6fWޏjAIZϡұ!!E-W} ={PbAtBDOK뗰^bȪ8w2cW6i3٩Ԭbs$Wf#jg%ܝ)B(dl2?H$Ui@,GE"'zfd2mVBSdV5Ԙ;Mbev]33̸Ծ_8mV1wMZ]0zP,\8{-CD})`M4fiW J,&8gau\=!H<@,f{5my1ns&sl["c[-O>_ai$V-9ȫ 8]\5lv{+%*[X`^ߟs\湸5k/E3D4J^N'Th 4>iPF-96ѲwX^g'7;UzHs7푚  +sхo_crtG7C5dƸcG؛$#^Pw6>~N[iи|y5FI`Rϴl(f)hס8 1:"E!_`YX'a+ \ja{VAIh4eDz |ܛ䂖l.k=͈d ~ݗܟtUEeaS|2a=v}f9lRM4qUѮ3rm7,{xMX-6ɝks3+e2&;Ҕ;k`MWsޝ'0)./|ޒۊ.EIuzJJއL?3wUwe.Z~8uʤLrwU~a]lǓ>`ntG?d/00sW%.4ͷ}>{v=7' R`P0*Fco=u`i衎[-)d#uSo (@Wbo(4.^X7^=$duTيv` e[id{lQxgK~TGc}>/PdN-?<080;YZڒ9ɨ{aRͣwncxJxղd3??rl&`Yhbf&/pFɬQbؔ/(PamU qaV!껼wļNP=1_6b.;8Y_JV}0"IU]EO" =mF4BO\vriN ֶ=*QV0A^W\m^2*lµ`5K`Pj &D[{Sz汞TW>Nm* ܠ< M <9RT_b$VˌZt)'`t˩c,\cHJ `[F}:%K\$٥߭ыdpM,} 0is#Ty7ĈM1AgWšznFɵ~;l.} =WKA]Ђ"Lk]r =X&0ݴʩ,ɕKA^Ӈ0WUnI%F۪ύo}iwÌnu7yd}Z)ubp=6 $-~7{)9ŏ^\9뮺sYu\!IaU + 5r\{#Vf5(U PƱsZ$ y}D4COŴ,ku/$N_{1od.?q8y>a snǐFGs̊aWNaW>@+uOS/era}'\.̆\~ser#bV=ovmq4:kP';opR[Zիׯ[P=q\oUʵ*իV%,i2B`II0!3TL>e8VլRtνKxgm0\ F6CxnǷ$_ 6߰H\R=+1Ln0mP&3MHăki"3"C?7| 4/t-i=4|# o!Vf(֍nS-5 zkz|@d1 B)Yw"'Cp3m"!"8v#y4}4BDO1WGFL22q*ckr˭6+r0)' UFtzσ[F3;QLFfᥲzdn3$uk6; i ^6BM"+0k?"""c~;(r_#*V0UkZ54Hw7&ƣޏ7STxlh,NBDd fNhiycqOFO hc`"Y333=]m"+LR@xVN3$k%oEhsJ`Xe;ʬCy{MSEfA3YvݭZuC4H+1%ơa"D4OL+¶Ȫc'gyK dǯ4CD3섃CgÑkXn$T˿3?;b(fM>nt#X|X[Xg!<<0?wqy#q}ƅckc,9~#I^smYgȘ4[;&ʬ 4ӕY{,={̏OD_`~sH""s_cc,*ՙtΙuQ۫$8W}^>̄ߊ4>)vҗ j"fcֱvoPoUasU6S/[y\)8eD* 9NjTt/o9ъl u ذX p|e.Hs\soQk{q ;lQ9>W5v8Z`X5^I%;Ƨ-|`.(O5-'sI]$Sy/Ý-#¶NЫ<4=x=,_>WۻBϭPN9@?Zv`nd›S&!Pe+L!y?UzY^B,oFkA$hcqYΥ҉epbA$J=X2Knj,$Qw! 'ώ/ub~*epI\vR?co~_UK*Ua$<+.LxBw<^Vx`oԿpDL>4żY2(RI^~ٖ!?Q=_-lS%`'U}TDdø;-91$o$_b"j'lJz$WTjuH5n]a4B>7xtIbWL&`\j.3gd2r'Wipؾ̬?a&t@mr;Q̏Rl-an@@ r#40З2ZcTrk%QT!ٷa4_ .ߑ`43Վclϓ=D0Tgds2yLK-κ k}?ϔ&xx?x}}ø$zmp9[jmy]Qb૿Iv E<>hP7wN/OU>U220E/+ >U`* Nhk+?,߇cȾ/ߣs:aA;QI~}g$t!Hirr&g'[? u1N%I,]KJƱkj+fƹΨ9JhcXƵ g6ͦ3XV¥ZÅ(k̈D\c15fo`rGd'Toss6WOiskQ:4hX1c&dSRaa'F/^9H8ϖƺ,&z R B(pI$WjPS244V5};%[Ve`mYx]Kn@z=~e5zu'ak~0|cL IFD2BBZ J tS7Lf,W!2C!A E2Šaa_a]ZFMl;L؜a79aaak"OD'&Ag XRT'h+6Hw=v922[-?vhHp͌1k ]_MVY2ix):\ϝa9DhxPHm6_D3D; Ubylk[d,n?꓈DZ KEАnej׹cɦeQ47ml|6Py/7qخ79vDϖC}d'jہaiB"w'R?<xv[==?1D/lNg)I ,_U渚8վ[Q5f@6i"`EEs,f+`^xkTPedO""#G6}f7-kμ-*::_#*N!z0cBJ~ngW,1a. ~'dqpV4'&߃N dh֍:F_u1A32h?[Dr[Qf>GP-\LYH܇pџ~cҿܰ9[hKM$D$ƎMaOu!832kO+C!Y_컦[7M2Ie{楅UNB9/)nv\n[w vLJ^P夂V[E7j41 ә8DJD[iҶE&rZ5M/Jܭy?}zҿsK/1Dx:]/p^ 3knݐg7T6~ZW\}[hxWiSfaǰONR"G_(+sRjQAhXm àA5Rb-\%FI6LZATZqqcdM)٩̴ή @ Rpl!),߼axf*jz\\5)|&u5APk%" с?,N.HnWaۚT3wjZL0rKVވ0a^xs旟001 bqDi2D1=afo $6ҙ";az/ekcJd4׉/kLy 7cnstΞ:) 5XQi)=g\N](<\7p ȍ|Xy94ՉT!(Knf =2Tӭ[,텨}*kz\mX0snXJi8zx&ǎ!6e[c" ,TvUٗ/ef|1}.i?w{Ouwo Co͌+vM`߭w_yYX/s |=&0ȘPb##|wX tss^RP~j} ׂ6 qg1bw&d(<2ɇcGyl\3QWF]םy^~1$Kd8pX_fTdfV]9|sI]v،< <Zj*fu ^bcZ:=M41،5k-Mi?h 65<є_yZrfn[ZDG8jsM4 C4tcKQXK4CDJU[V "qKO-C)ƎXB_HX[`"sa)[л8_ z-f{Ӱr¥QIt•e{Z7G2X (*TJJ<3$ 0 $+˳|{˿x@ęo7БTcc\hfQqCXq!~N&8<&LH6 Z]m|<9oJhl\^>/H6=oHD\PpV %L";fjc{w.&B87 m)O{rc~6Q31Ä!Bմ f# .'Tv`v3)m 8Fw3/]ڬkX.mVh$!5iTԛ&BYem{WdM 4;]iU_7WʸBQ5ifAh*j51UKݰ!|d+G&/l2AU{CI݉5z=DUk'>aӕJ,mF5LֶaceVMU˰,vkS6Zf V%f2}ʆwSpOkDJ2vk7W{.ftNO0 CzqZ2qjhvޑ5[Dd&qu6<{kFگ͑a0z] ƍ GB> e#<$,&d㒾SUeA֫.X3&v ICJ+>&L5MD4{_w75-p"fM ;q]/KX6-㱓q߆)լ.5kxG:E?ܟf*l`lK0~I{^ӆRuL^0#}|e*'jYr.τ?KH᰺E1,OE-D 4AVg𱼩( )WⱅE 5: +.}*JB:21zV^_${ Y~:;s3<}ۓ+ݛ$6p>/;:?_f1&<ԅ33=[>$@n"|c,3m{ 8 WQ$"F%ϨGcViS?Xc׮Wn9/§K65ł4cBkev) Hj`g"ϸjl2ԯ{-IfDפz/%rUA]y gɻn-j!deEtv^57g/ $=`J/ళ2ohAok ϞdCYY{f͙e=7^SҢČv>o9WcC Kѱ& x +LW pZx׋G|2&`_~SEՓ\DDaT \F}}X7įIPqB0)M X -aaAkUuFZwy.UY|M[C4JuV8wɆG05V;!Ƒc1Tig54vZ2Ymd#fs,c}f\ⷘoEWMaa+ɗ-\gv *x3GnjǵIN'=- -lW*Uk[=NDGnmle˨Y-/T{rhu{o&FFDzϏ""4-l,rcjgy잳6nyMt/kC2#Ck!p>3SȽHZH?2+S9t8zR)reސ#fH'rhhUX(vsqC9`c* ~A mڠ աRc܌fzа3ƿ紌I1ldsIZT,py d*S*Qh5sƂUQtk2lx-a)54)PKlNJYkq؞rHBL.NQR.i]p {0P?$Ȏ5=NWN=zpj8u-"!0Z홭cXځa=M DGA"W5͙v¨UcԵfFdz!&"sŎٵը5c05 8k6Ͽh΁u숕PL23yO B ÙXŤmsHS68:$*G jB սs#'7>L&kTd+n&Fia4Ϊ!"%P2^]S23#hXy Ff}IuÊ<퓉/ jQa] 0cW@iĖfv i8DlWG֡G}fcB8rF)+yɇoL8nq#6^'NTo^f?j+v@$~EZA4rxmz7@H+H 3;Hs3n׌ftUZ~Q^i i0 FrLi v$>~@dj"W;#+4C7rI]6YqhA.~u,Byۤ$&IƪA3ET޺2S^=Nӻ}Ņcx_xf5GyTȗ*8sKVxxM;cѭLo-g~h.w:kC-4@d͞ r).P5IiC (j`D͡v eg}ܾ:gzAoQ?9t(+S&V"l2i)Ps+4epKI ұW `e( ws|+wyIO}1|i&dxq~f~|XcpߓdoSנ|yZժF~p"%ķ=ߒ  xA+-FHmm ogKLr&zϻ$5OBb8&q3~K4w# -(~ '_Xx WR@+EK&a)Afi)LSfGjU2/*7=:5jԟc*x6Jil_y4 |Gj[phrC 75f*%TYK ͷ`WW*&ZW1%ChWߵcؾ͓żfø/*iJ Kw̏!Urnot0(C>vsIa'=Gq=HDME[ֵfq\qrLa~=§ y _ws9te4)>|0SZֵTֵkpt/(// u,!=!UUMů.,J{ߙ_&ҁ3kx2oK߽ƈ믡]_ oG U)(͙s{MPGm' m4^V0!1 S5|3  N[][[]]]Ђ! 9%TFZkO.s5Zh^d"mk(+$㻧q;;'t;;wZbogZkLTi`c$ F!!$uBZu*ՙkcJ$%" m/6Cv=L渪0]֍hw7/pC0/?±DCDMhw279uFfJv$LN/Bay\_4bN"FO"K{^ -c1L-cLfn3=|pD81ķZd5$n2^u,J !FDV7YI4itΑ5-գ%Ua0(ѐ'7p/i}Ӫ?"33_% 3E/Xbyb|#{y sdcjkxAXŌbn]2D~peRww0}xHٸdP캽OW0tg#.@=q8Zy]ZG0 UN&{|'*]'?^$bH6ׯEqIkhl`}=>| f3< =+O7bӴ\Mv4/"&U`Xf21-5{/KLjs 螎w79k]3j ]Ȋf!mcfkZ֍c.B  :Q pᎥ9:]yC+k{ O&)cX"`K ,en4$*!cJ0s;D!.D@3["]#}o/i^|[c)|lub0|a7pjO.?$OKhʃ T\2*z?rҞwL{eH"ә_uAOf%%b4ռ`F +{V@urB. .5A?]c/UNYa-,at6V ֟Sj'KW]Q\Z`񖁡AQFGˬslAԑ׉uC5(rT>_3boVZb?ƨs2aϱ˲E.6.~ٶFΐgi@^VaT!FD~ }A L[`=Nky A9]3gT-0g(!זO־21 tP< /B;K`s-ԍ> `Y[))yO,n@38+1u:|aT5*8+0YA[ٻgݓBׯkmd#os<Z0?|L;e&v=Ԧr _*Bl* ىkR>j$ٻa >ݬw]"u$6ch?r/VgviKo5R703XsM­^iʭ2uyrhZ}5=4\.ta_Zi5 щgx^뚕 v2[$AwojӪh'SuF!v9.+U":3׫Ȏ.լ6YehVwWpNM?~/BJ+ꗗ_>*Pj )ȿ)t1QGޭ'f9IuPN$-=)71VHץKqw;o+Vyw!ѡ ruoFc g`1sCjc[́F"hqדqX2h _?]+=B,N̯H;pu3cEcSjzN>&48 8 Մ_埗WCF?XxriFHB=ʐmw/{n1nv?VM##6ncfsO`W-1 ;1T/u2YћɳZ㮬8ɵ[1 k֨ <*X9ݪE@(g9>FF^ٶ}f-CDC~GI"!U,ZykX$!jWx"kIt~4Q-*y#_V(F DOE^@ȍ[/| C)-Ap!w"7ǯ."ij至̏2{SDM1eMqt<`(-V(wDC4hx-FBG!zFWưDH'^?hnJha4LmP98.sqLuZ>jFfPhSFls=&ڕ3Z~,>W5s2!g2Ƕ yZ ܆|7]p̃|TD#4j+)B%T2#!N cڳ5bk$f3^ÕrXmb,}*wUh$hx&n"#u ZȌ-xGdLb2:f1Ψ7./c§n'3^O-HY_?,2 g ?¹2n)I!{li^]5"G4dZ>hscxJ7 qz=rTt:f9aTRJwW[ 3V7/ `j-1mըDH}wMuV5:^|9s)fMk,/=L EqsV:9s`t8&"3L$&1sZkTбueODnqEXI}h"#3`%崲#YgBy#Ukj3acyѲygDzs\9Pʾ\Wj1&{Y׃M^#?VJs/Mnp6ؠ9N"nޕ vE%%2]YߙAq1]%Š@pc~YG݁ueqa; c>Z~ ͹Sà ,dh&>Qdeeٷ9#Fk8)ڷ32=<ĦWܵqxmK<+y[9Y}@!yY 840APc1m\&O'XaW5b[=S[};ml-캓f8xz*YHr TŐ{xY -c؈$MaÌFP ޿LnjPb"-ZC[[]vx]PݎG[FU ߧìvO +As9o  }2xeæ@fraQ-C;'tl);acAUŔgU(|Ŝr%_ en2 ^,985z{+*7_nՖ}*V|^+ ( 6lku$X[%Lǚutb5JleQիq2ɦc1X/.-jDkÐ1sR2k0w8'fY!f/$W|322!ys$n6jCopf 'FfԘʣNcsʼ {c18jq5㮰mk5}\.Ǘc|ݗct}sCYURQ*2Q^jzʷk%;_4"=Н|RDC$X.E{4$DvcmƑ8ߥR&03:Y#3}c@^-bCq~=eMifArݰ*TgңK 4SaL`L sAYxV~~ÀoaǨvc}X{>ӟM{߇T<=i{G[&Mb߮5XvS3ƣA 2Y\7Ӳ:1#G$\:n':̌ݥ`x2)kQUϊƱd a`>fW|9oPD?(8 k Iw"#$VGsDCDM@hXcDLqy8&4*=UdCqi;Cox cyӛ`=CŤ%˓\E\ < o#3d ţK\l"#03Y eYsaXxXXӐdq8?uƲ@6 j9sjJ-X95Θ'\E?s9 }\\Ʊk,V-.֡H %Xٚ>UNy32# ;6 Eu1k[_4R^ii $B4DZV­Zj 턚:2##ph<[K֑3+*RXDr%w 5z9Ef0HEP܎.kٙ`}u!}CUdBĬc*-ۢ"sB1EƱڪxQ`.ppTʠ!tķ u!y[bq^;wq#5H 8& d<_,Ce|يA1@a<9}|Wbn0gFg?w z؋wiFqrϿ"$p\ڞO/L~+ f9wZ ITu/S=߼_(>:=oqܨ\/6j{,U}g8:=>E'aizԘ:5r 򵂂0bP>EZ.Ul4{PoV_0|){yf<mB@BiX{m,׳Z\|,A.V(&&L_g4eut[tRgOoUrx&@}ql%ׁLǂP3JT /qj%lU"r(%y"øL+:x㹺Wf&{Z8WOOZjgw]WMu{{3_1{*5̙SS+tm~EZ ~NMq.en"I̷<+|}$'Y\ɗ|yJ- v<>~# lcr~Tz0^'HlpAp;–}: ~߿.-m".f>$P1-:( Uzsc.BO~aB_ZU{WJX#5O 4@"`)zwk.Z#V[[55biؔj9=t)LV-iG;-Gk~پɁtr'Bn:]&F˅²*p<(gB7;_ \643pN\+N? 8l1<~]P,8~\H|w)<+m~3>024If&> L!bflz`/{]2IѠH "L%b*šm>סMOڟ |Hym/n;-NTlsmvmԓbCFVbokI"ac2 k׵#kQ2MRiP`ؘk8,^qwk`P|!&E|Wlf6lrLʓLU2FLeX2w33#楱u4E#{sD$GQiLg/5WFi:t+q[w!lJG!xãwd9Ŧ^O"i4ҴIcSͤFnWv;ߦLֵ_'0+3Zhjz}-搘2=cZ+Z:jkl;͔nUk& XRuVT jSm+ozDYNjyEVu쩀ns;P17ځT̏Tyb?}ޏA$g1+#ֶf5h}S| '&cX`u^ȋMit>NК1ţCG"N"qj5n5klZ{ݑ- '.~344OoXBKŧpdic=(@bTڱp+;"QL;Y7ʭLT#ʆ%VzLk\EC2yyvzukF+V V}xkw0c󴕸fsHZ٦k=_U |m%YyxVzֱkvses;({+wHfכT)N.wvY VR]_9!^q'8 >N7[ :xazq½y[Xȩ~"\50/I8N"t; hy f[K>k\|0^Ewy?poglzכz{pb ^KT,h>CAd"9 7J/VjUZ&YZ;SBbl5Y΀l~éOsߑ1EepAao%5 Gk kZٚێF;fй[s?2DF-^SQg9k{Tä-g#{:RĜ5uzv׮eMzɩGβ\5k3-?jl38xݬ1`%Jbns\}K(( E+7NvB/9c\nnjs-LF2板-֠gQ{߿M\UsyFm3<)a:D|{r+u&p_)9.x~>$͏v9n7F KAd_߹ S$G޳xI7<&a_?:MƓz ݏ|x-D>>@-%#/Q}#|AK`m~{ ;5?}P]vsox8W\qkQOdzUR Q?=ڙvPom?8͢"[en]pPh/h?זbr^P0zZyV2ϵ'l ּ΅ً_g/V٬+wS{Bf6 Q%gI48pYS@^ r`b]_/,o,Wv먆D?k&Ô2e(Ļ0~ 某^wN\|;t$y6̛hZ||eHj6}oNZڝxy24Ƭ[԰#N q.8Ʊ. nc:Ʃ10Bt4G(A~I4̶">w>F55^L6Vc[PD2M HO#R}+s.[a_TRk]4n8:'8^۳N9s_N~H3E1uZaȑ9"qc)_Gj@^汎vEn]3FCDE5\!G#HϺz}ǭ!gǠϮi}LdgrMGHֻ&{oq$Q[ {G K4;A%F2sKdD4("qt;(j|n^\:*Lʬd̄_g٘6 q'ҹ?c"CCG e+}^ɔgI8 Ʋ۪#9F n.i:޺ρ{ݗ\Sa zRވ.c&3*'NuV1ѻMq^to^{HDѸ^H>Jﶽj"wmG?"ҫ=TM]m.G>FY}?aÙz:O,5t{;IEwaǕ`WC4FaA{&"%K :63q+r9"HݬR _ fg7QciX9~Ҭyp\A$d^L".x.|q8/s9c< J/!ĮFn#6Sg2u7~Z3>h] 9d˼H*s1zEHee2+Ƕe#Kc}R<-M9\i' ߾޸L nlg+[-M+e%4f:f܂쥋د=߷Ks7FaLklE5͘}f2 ~s5մ_s$e n=Fr_^0E,?-ݡ1Z.߀H&NJգ5k.3ui/Wb#J&vޫ7\/Pv.C[5?.k~^ƉkE60 BCl9nN"a(me0xTv@>B%>j0mM?PA6yY>v߷9;DCD8ʊǕ3,*^;V6f11'&#oi;qǞ_κ-+c7LdbDyԶt$&yGujcƹs)c!³yձk#,M|͚ Ǔ?"sH[&AeYbqCrdNCƼy\;K0y?/5{<t:y[E!s h'y~Fl3:-LJ2~o"cIw ĪڭcapZ|^'ވ жWDD"ōAvDq?pRB^~ѭcown{TŘѯ`fx.8;/}m"3!s^|l^7Alj#5a H`q"/!4V|3 ָq?KQhi3dg3ZdL.a#q-ԗsMJBZRD"=0V34N#_ 0FhmE8C##3` ߯FP湮s UyR xX9=\1?OE!F2lҋYdy"=¸-X]J0DƸ\4 z\W0po;텀dnqGi -<9s8lՙZ,K{Uo*R >D{mИ,gV-٘6Uy&spsIUeWAKWc~ Pw2i\3[I;9 Z`sE@;ڸAL/$Dݱ!hY ω@~:fsJ tskգGʰWo!M僁I$C4NIATA:GޝЍy;e>K? (l}~Cҍ7ޝkDZ, 42cTiL C5S0(O6o{cJaY<@9H!yC*ur$2%(^V?x:[[\#mv tWMBkKҲLx;i&)ٕbOQ=^Uv /SL5DMLkC $/[ǽpؘ^(]gj=-4XB#l:Cq?֢4!3c̵(wgu$Y,gʴ*Ru|M)'i /gzxߓ=dI;\"D(a[P,"^ȑҐΫiP+-׫ؑ)A.o]hTvZYZHIuf$@ %*mJ)$!MlMˤjfKVWW^ܒ6YƩ5Ugzs!g#/_q nxܜi{&2n$gQd]{2lJ.Gm5l3:QZ*{1F l~4ا]tvlO}2280YbڟKHuW!/~.h\E0i1X'O <))J RoK.)YeIFNt)kAO9;%"kxܘ_a}{}^9p~9g<DqL gʻ&eS0an'MVojԏwXZ'+wGB7faz2`URʳ5GjvZFjQ)8llHpBy9s0,rqu!ɄsƩ%VyJV2|Oj[i9\/_xBZ,KR$jǧ\YH fhڙ?&vP8DMq8:oi -2wiNL:{mu~~z3Ӣ\#:#=Y2 ֹ/+k[0pF9g1l53{~Ra`C"Pq ɠgعE< F[9-KQ|r˗6k:ggXg*1E!-Cj$޺*6*;#U-/ُa zL1ܙIby1]6 }gv^t~\tXJgVD0R>T aV}襙~e%iQ5gR"1F(Rbԏ]яdkYR_~e7M['~3T.{{\ʫ\ӓcA.Ə [Rg;!KY[[9{ů9MMW?u<>^Kg_q99ǞӞ_-t[У/tnVn>>kJA|G[B.1c oH jo4^U뚻`%pi"ʼn)j.*abǻ^&6R7#&JE`ld#\+2J9!V. u457Y L@-[YSdžZws}d$U:7$vi~~z,9αOV#gLE"h&ڙdL(pQkMDօC /up5ci΂faCiO wZn P LziSO>=nz`ګ#9 kY8~(w TW\$L9 BoXk=Ɵz5TbOVm*_)7XuW-i >+Fϋ KkDR28k$9+eq_@Rɡk L_ܤJ 40eۖF}"F&<:/5EL|qM1cȳ&XLk1Bi:c9C+nx(] 'nk2:[oOZ;[~+MNtg4Cz񬮃цCioZKtf,8C_",`͈]eThŏUsnz8C܍iA*3 wǼ=e9 7t]{G ^}\1U2Msl̨7uJ23i~=kZS#q22KT*UH~s7M'~ԝ>qqe8m!꓉ܰ^V6a4y܋**DP{2 ͪ܇M@*X Bv;_QN6 .! !\o?C{ͯv/{p[TffvrCqB$"o)?" ,["'}]@ǑdˣhNl:=G9W-x=.-dv2*p.tf"Xn,5V$lV_Od* =)ZxZK?Ax_u?񨦮뷄 zX3®cOf֜cY%z }ch1A3֏z%84{񦤪kaF<@3 5Ŝ7~Yaj}|p83 .Aw|vW) S{s+m(R2#3) ƭt5Wpqf0{҃hld~EyӢC"_öKXV5nsZ쮈4W}1_-0|)Epz]XX;<W_HfWhTy$e[ .dUaFaFf\4 G=ǐVua!>N5KAb}-{CǴp7%XTqs7wMcLm^28NoY4h#alPޝ8;ߍj YDc"v줺PL+=1 #/ YĤO%᝚YF8iU|fMzrd׻ZZC;]7|Tt yX/ ԚVQsx(R#7m5)9-_hǼZ ``8Q/rqZ!nca%{!=v%-+YMb,-99ݦP74a؈q20DQZ ǜ)S7}g/F5X%cMZA\Ig64p,PK 6T%U%ߘΜkvMjsNE+bܸB7QBCMPiR**}*iKTb{JAheX)8~Rw }4y‘G. [#O8Pyoӌ;4"ھ,T$~˞_+;[}bMS=YQ?>rnы%c( b3)Ƞ^ !!i+1D.]P_>I(&o˧B$PkYqzοs906Мȱß~\oMb2,ͧo s{H"|]zuqHp(@})޼F.mSjoS%r[mRff m3hasrIgf#doW>;i 74;:o`nԶ-_NE̮(AqL$]8Z3뗶 K@LZحwtxoeB=ZRnsbdwnw60~Y,ӂ}B  ׅUu}\&cfajSWח*TKZ0ÎJx"tnL G]O ?w9%I쬒hTpѽN A5o^_tZY7ZLSW!:\y=RG$wF#ݏ10ٌe| jkZnI2zF/1JQ ռf 9Hs| iqB@oˏ;zKLBj\.VQTnF^]]NL ,.~,R!&Xyy%}}' Ş.hg}n1PMZh8x/20exOWCHFծ t4ĸÂtDU q( ACenh6]2@ g+ bdӵj^^c[e^&NC 8V)S8,9z)H"E>bR%#}ޅc?+ϧzoN]:QcvfxvO=o = TxCI[a-Q*SyFd|r;UzqX&mv/?LڀyIc D8QEc"'znÿ|6L;~.,Ni8 /mߔq0k@mZDN'T/ Z]a4+;2,R~a1Ϡ@޾Sy#k+O^ݕq6[L6U:ɣn?_ 4$C7 |{edDG!y3Us4#gߔAM>7Zk*={A2:8'W/ݎSy瞊 ?}in37WmG!=8C 8{o~A Ds8|GK[7%{>G`='^x+Q]F1l͢U "iX8P1D>׽U z%*s\5- tV7~F $k\gw$fm{Su#j ԯg#Pb|ޑZD_`{ėn.[00V08Ywꁐ|1l Fg-ZR&gokY*<3s0/.d,m""uCrifOA 7Қ>9o6)iTlct#="UcZڢ{03[m.>a%zވ~Xc8Ʊ@h]k7^0pnfddS XƵ5O8K9Z<Yc0{du}` `[V!crM̌mF2l1;o9lF;|k:>gA\ܙ?EbF'v&` >4A}{-! Bf>ڛmx;,mF7-#/= HIפ&g$; :<7ESy0x>Cm X^%uRX,%fU%0*-UZ@֑IDLHbUhسfC7YiVD.6P g491N)(UWMޛybh,}Q1&8G])6Uf*=ᇸI6N9]X [gqklD7@h!feJ'#$L~oraʇљ'1RI6"B YEgH0N!]S@I─Q1EB7j#LHZL,9,jaQ%,^YG(9X8jn^h+6iH *K׆nxJe?俇@&lU(-9< WNQeyoC%sRӧ040׏h'!ԍ Bw~Dr@zI {e\PDƺ 'ơ:pd|m4Ik.\fZ8wJ{-_Ӂ b{|lƔjblzt\Q IPod w$G2>"K|qȯ  C :T֊5 RZ0ŸCTe3g7zz>ٿm_+xpmrx(o"N^3c$!@`|2..Z )"GƮ:cc닿|j`9{N ,21Wy  5˴X}ύ 54JOX\Z9K:!s^_oX_)\`3" ꫨ(/ކ2`pOI0ܠcl+B% l^TspVn8['ba9oRVp2mE/?יs.3?N-t})r/Ad*#f8.u!V9~J_yzͮoom/n͉kNk=n *ub~B=TZvlV2xK  ]OEm]}_>@r>W 3(]N#7I򺶺Ui[ WJbtZx f>NvcgP:LgSe;n*q h:?֪ၩ\q׺l|XG¬.(kAkhvem!aVs1U1JI6.Ũ*ՏZʕ2T=Hx~3)gҧq?Vf:%J5Ɔ>^n.xW#nATiTT wZfm^.$2v3{97Zڱ6lSOD!Y|%w|X3\=hSUUΔX:Y0=oԁ sT*6&k땉 v'| cV5mM5q&ܯq;{ꡣqs\ƹݴX޲:f3~9/-ҰEBc"199ͦvA/ȞU#w`̌zt0rVU^DGI纀V}8b1}'Fu*.°rπ?w>ٙϹwLj?G2Fַm'o{6h,&~hEy{B<(ihu>B!'Zz{Z9 Hٳ`| sUoWLV`s3' 0:fFfvWJDDDDAkq3/#KWkZֵ{ƠHN2 tmmmZƺjRNḙOEjg0H;ou;Q!cQsvzk\]CV"{uAv3A̐ ei~A99Ls,鈜Nnw0=]6#ޏ‚z|m}} ~|m F11h>\-_]_ 7| U.}ו(nя4z>;{&F=U^{O0lsX:hj}yɿA4.8<`\HhNC;{mR"q6GԄA[M)6&F# Y9'.ERsZؓKJtDq?qmJElkfkx-' ^~GMH>.ݥb󶑤N*M#:,b@Fn333-m>"5 -1%s3 جu0[3&k[0u5"8x[j1n$Kms.qg̜DywVnswg0uMJd,[kazy\y2auԐ4y  kV,wֻpёWAaXʬf7,EGxZ<\ 7nCLie$QLD}'T&VfTpc&Vf} pc3_3h9cmX1Z"*RZxf܃cMR?Yuy,`|,{Yhr؏qzZh}vu|?o6{smZ;Rbם r K/rNU-fKm%D}ӗ٥{uk?4'Fڍp`rb!r9Uyîd:MڐR"V*h~40,yw G;AK Rе|%yC2)JRQB2.1 ň U+ܕ @Mk8)ݕ(x[±RUUː ,8qS_$0.xL":`s̱xE'FTfV°42%nBK` Mu ̊QfoS'/׍:c v t!Horq Xr`?qʇsI0o0J>q_|]^]a 1ɇeۗ IXoO8$ cv'7?}wV]z.>ei>ϛ1_ǶC:9^f.)%0~+[%*}Mz_ڮOV0¾鉁-na̼\ ٰV׹ &i~j_Q`NshWI[Sq?36e}5Q+y6&|_ӣSNGDz':_D7ٞu>%09>y~0F"^&[u>*.|oxKl47yoj 4SuI aSȮ>T5*ڇ`ճ^'.d\d\6qwko@ŨiC,w6B,өWDŪRe -DDB7v"F۲BZ-U[e%Ayh/%[O,tҡCF IhYNXS N궖bHyra{ֽ)h%F|h…C-ԅ&׏K_i+yOOD/MdFR$-K'lJӶJbCKC}Ax| <}w/'w<m ՞TBO9vKV[6|֞dӭ=q?ًy,xq1>NY34| mgVw LD 7tmpvIA+u18[օԤ뮬c3\sqBtEX㎸w]hsJG"sϥ! ƵoڣW̫5yAcfkfw+赿3蓔w-cߡuI4H6MM5s gH]lk"ֈLsұlK/ @MQ hr<:T+]jMVk=+qL9w|ͧg/CCCD[xb;\9βtzq|Cc/aT{ZV@xF6xE 2`4 3|'vG|1l2jf]r8:RkS2[~kWP)Is.9ɓG Khԋ\x )>_>K:*իVT+f`BBL )awRH.EiFF9/6qTmíŰS<>Opƶf=TQ_Մp|&[YĂ b^JTGnf[iN DL錭Nqk/UxFt?uH 4UX.Ln]<^'0ǩX8s;Xpf׬[Z1h$fn36 ]s;+:Y&I?(P…g&iӇ&/[1>kBCUowՕW{ix}YmKH#M'ccusV5dk2x*sv>] 9p8fj%D[y&{:>*tIEp#HO`K+k)G,yКK)D"G̦ ?JD-!)S8ư[C, E_K4A\)L%2pY [HTg]:cPAZhoAK5v jсud!3 D$؉qV[*@uqoR_FXdB){WfA[?́^0ex*kXAg+2 eEDԏDY@~7?rZfE~\U|ֿ~aUX|6*FXB)zȃ/G]b~'@9\:X%tPǸ(Aqn`UoaWYn/v~+p@48{cQK+7;D5Ws]"ʚy>]xeܤfg> tH ZxT5uG8-DS&wjM([nks)ut4 y:/:]I80r>Wx(5Q5|þo3e5r~SRɿ-mq'˪o%GWY6ܷ&&kO8mWg>هxOZ\+\"#kĶ.R`8O犳{7mڝ/e קUhD,0eHm%L^_@7ΎѰE*KnK--Kg/"*n hLI@J< \r(*_~/ÃUGWt<0Y9E{I'n]VX۫~nX:jXe/}ppaT'k-&T}Nܕ hO ys Z)9\aB|y]ƬL0bֹ?&^2kot*mRD̚6[JUUVg6-79 /ڳbqS$Cc=mސ p_C3c{[L۴,l29Ϗ{vBڟԞք! l+2)M‡:} Ũ鉥fc z]/ o~H,zs hWzf;%ټhFāj^qxm"'9E3Fuc*^ZMkI#ZZ4vUtigБyw!$Wz7ͶpT8oįHcj:h"wOED9H̏]0^̱kqdt'4JZ&=ulIWu4CYcmҌg)6ZhsT4>le(D$gBr eG5uZEg'{Ӻb g[!.$ LZI04EBXs:= %O8yWu H*W[2 7# ErE´f-KmDn9{m*.8-} &%ؘ9HqWׅDOp~R c4וb3 i\eWY;W7WΉ3p|ew*6tcW:ZW=1c9aQI1'J :@Ǖ >=py)uGsha3h4,w$B8[+psHVptA,<[ki#8mXofW;N]Q;4ix-$G6Vo"[cZJ$̂dU@*UTL7}7s:Ps R~fg4n>ĕU4TRjLˮ&=kЙ<ٲe˘,8LGNQ\+Hx/_r8U(ZFG-_Q jE9|>㚲h{[ӥ n4*CҢ%~t0@D"1*oUCZ/iykLӭ@H[Adz6CߙKNڟ1Q{]ze`Uތ'iB}Te['5o/tt9Yנ9)<"s ^9j-׼'5^Ю٬f f۲S"mWp&z<;8"'>t.kqDMv8MȞ"D$D; G8D^h4z?МDSNYI}_*|y{ۼT|~Qhoy= _LHko+#3qޙ r{B;;oUi#IcG!F0>Gq|Ⱦ# ߐJsX~v&ID_4^6dir 7?!N:++a^}G6w}Q'D]ݻTMwK VK^=a WgիVcx=_fD#,;i<цO3G^ ؍Bj XZӄ ` 4V{ȏ1]33pni4{+=w3h|cDYMgXWvsL5{C螉i7h<=Oo)*Z?gQD&{mیw6񧢊'7eUa G`y:Q{Y _] c=^}FBę~6 hz@م=kZE,}Ed|;{Lh$s+ށ#be2\{܆hh"'#tqVzAK|;'1"Ñӟ yDq%]蒓Ffgrj, >WG\` #O SII3 XŋEAM Pҭ2I<\o/h-%jC4{ixy|x4mz_ z@CZ>Gh3UcH@4n~D)+#3qZDjw0| h {c9k%@/ɖ^ΐ טZPr ^gaO#ވfZ,\,s&FD9ݍwOBU\< 2"5We"Df^a %clb8$!2shDxoW'ggn67N//H5J+"i\ d"a9Nļeiֳ]AOan՗yX>(ס<]/9^q6z5.8s/+wD(=>Ir M[Yf=۞PUJ RQ8@o L54r_@lGN)p- ISM̑(7NjP}oM 4R*خr l|_sJ6,%.ll̿ rj8zS!JJ&qo~% 4lqs?֬^+TK=*2_V =Vo?5ӺeVtQe콓+{-=ۚtUpdoQQȹ+4yЋߩ-9&/ytN]Q{yNуCθǟ>hzW kfc[SahʨRH9V>!fH5kc0eo6jZx8)O(rJ 윥6/1񼳥9ƉI\k<9oKՏ8BCZ[x^#!b_-s\d2!]4c= =#{8wJNq8o4$OOncP7 6{ޜkZ.Πc߻HB| ^a[Yd=5s]O((&ѡX\ޏO.猟\ yCOc7[3227! @(XjaAajXXX%8qpF5s+K>_fC_/K!֢V[s\w_0BC4J3~&8D"/8_o'G?jc虙jyf3\g DGG1^$dE<B1O E^azFDFsRy֑Z+|Ln]H) sa #Hj 7$!<:ϪdfMI;' ^wK0S)jUc0^E.XxF8Ͽ4$X/9]#{ОqhK1c>)jˬ5NkX54Z33/hZfm75AؒRH- gz>ןܫ@j֭AphWq2 y/o!h#|벺4s0c"S1w44g:GFg`qW7(ut3=ef'AkƳ8u#'C+9JWsPCWQEt[<8j)ӟN}:T3ću j"՘SGWЮF7 I74/Lm;LCjuD]=Pz櫔CcTxq=xG[X5}gMU\X+ ͏b|8}!~_/W%ʂ xCEѹˠb(ψ!uNUAC XXQD|X) 1ܨ^[d_\E_2S X7-yyflj"io*kBIyg#XRU".RWǛrn|ūd!F&j-cGB`; GA|w#G{3ՅEÁ<#AGWi2^7*6)s=$M@ݗUVfbƾmo[ޑD'"W|tovR%IQ/im-39].\ & A fa/ }nU3\e'n<5^m&MwΠc^U{Ld}eBd"q8ϸB; G6,Pzhܸ`|WէT:Z-t_wNjʯ(\j)8Y2X6˿p~>tY,d*Ӊ~ޑZuufda-95ede)MnD'(HעD޼hu^w~Y]?dZQa5r)CbXWB zYEP$`MP`e0%(PS^[0?=TR:ڴ 5ejtçR&~K 樜}niubG6n[)5f25jkg6pkԠ#\6:./ԋ #倴|ga,2TTzbY)<-,&4En,{]\}2-ll6+U }i)QU*GMWϽ)gف]4?it'd<_A(R<Ҕ/F+ŢCc'L.aKp6@c`DcV٬L&1.0ƴ9srуfڰ;L㔉;]ppơ|ن.6bE5<|*r^s]Ś!O^7""X[ !̉7n=v\N# 0xl#3٤`3@$ ${|LQNZ?~ jR/+B0]<- < ĈD v4G8t-xy#{?1Đ "2qT0VņɘƷj}|! b~&?[++*5쬷V<_HIȈ.Pv}bL^Jz= &dM3,rj)/_#ڍk]~Ѕ=j+QFgpgK-Wlz(p'33sMV/ !Bxp"C36;`++9D3ʪhXs9ΙVc%kXީk)5cjBֱo lH9nkm#>C(a9"ʻG}I%Hl)K{7i7vNxMs7!WG > 7$\}$8\q噺zb"4`=Lhga)@{my=}qx!={~$^)&Hr)\{`UszH&eix݌dEb>w" zyE' ~XĶ/"3-|Q "8HtTpK=m=e'!N]8s)[J@ 5 !'9K"J1(?uĄ3+kB]mmc|@j,!]tZ%Ǖ刮u0޹:^y/" cx&޳vڋ)a'Գ?ws|0]~vؙ?/@օ:U0LݕG|)$N,@\)bFo2TB 3V !6;\[M[dʁ"A==c{<#`A}6IDE'MJl)׊7=5<^\ϗP63beztǕF,]lXŗڄ~5zz_\KS~ aʺ߯UKNxz ;N{cٙ?AZ݄P(KE.6_5rZm޷=K]ng1Y{v8gc3@͑9LBr`e4lUl^x;*>}&s/zZVsen?64{Td_,{h;Z9hr}细(X n5Ty%r$3dRnaZqY`x qLZd2fsQ _.&ݢ9sƹق & r&<`]sM9|/.rIp|*H`y 36 /yo0HF1`l3qGY]\/|=/0,^Gi?BBG1۫88p .{iLΊ JBBӳ>yw ߠ6DMk ŅC {ӶZ>oc93^P_D##6w}Ќ̶|WK^{Ҿ]Kf(>/c'A/” `զFVh{L3XBQ-FzFfv~VŶ'S3v FZE\Ls+vJf CGN9 >4!mgEax蕨0f8jpޠ*jPZ®B/8 c#Ks3xO *B0H{3xοZzZޖ3W2GH>=ta?9a.FFgY o>="Af@y 9󾜥AȥS}tg3Γ|gחz!uoϳ6VVy VNLvtID9^>@ahY`m0#-V\6H?U % iw A<{12sZZYNZ{4bB7}aA&9{E$ R E8e87uQSG/h Ɨʓ ͊9q5hgc1cKHoҴ_tGns]qh9^ODg•OyޏDh >hHė1vrkѯDOj-=J~){i&Tc L1ƠpRy}U DcEv0*!~#C23#>4-].wi1} vphh vFf~dɫBP;lAn,ok^ma?iY"&.)1ul׽NR]53gm_V4Z GڝaZ5;5 ˢ'6rzx!AV5HmwSڟa[KlGMz־^2du~OҨ3d]QC/3,kD+d1]@g(xJJyئj@;j< 1v#!3Q$^%7ZA7/!gM_~fC݆*̹F)־=f-,P);U>ŕE~ugoLln[.0Z ho !Zġ Y#W NJjP R/6&}L+G<9óc`4ߩ |)sB+2>f]\;Xсu6u\k})auq߱L1rOޕ&J&8f4P15"3G~f)SG x8l$}}ӗs;8m x5}K)ݵtQgz%M:q+ .C?_;;kKq#vj#Cujםn}7ƒ2A׽?r]ԧd'ir Ȟ񅙛N wn0lVN|W;7s0$;aMaNjӰOPav42:W3kǘ7 H̙]?kqG}iA/8N3q 3SՋUK?/sX-5meM& pj̳w͞*>#8:[UUk?Ӣg-m=)=>F#_պ€PF9sTќA$l(D@ӥY$'ObIL.uw[JGT1?MW9}jyZ|YmK$2bT%mO%FQ([ H]1}kbАNko;1O//߯YE=7OvZϧitB;ofsVȇ8R%2+3RsX[[1;d>%;61ٜ/穿/dv3n'[NFP]n"!=Nclqb~@~;v݆dI7nq$Rôv5dojO sq#B0W %oݒW"kH[ܟz;֡H{e]Ҳ\vmEkllmFݛȎ?6<iBBrrjy?>R)`W%'_gf clZB B  ծ13li96VVV6ZŨ_pFD}^Auje,{CC34 ,L"9ƈz+S2Rj|y"%^CyI{bhYq5~UR>?`d_BD#4Iȱe;CC$M c__$D$D]^^Jmk\:#kr r=*߹Tz4dWhLMd Iصc:Z{#BڍͳY`q!{4DG#?Gk~<3Y?Bf~7qw#@I2ȥ33,2J37CDm]N\fp[NguhC*\]k|A͙cST"ߥ-9 ,/ۘb1s":9HLg#8UŒ ~m|jl)ا|v~K HJfDxmh`jedډ.ԠSsUǝno(h|N`3t'vԗbk, +igqz;[SXOh}g]*q5i^xnҰA%a5hG|MP/R=҄E1<#0mya9]0H} 8b} т0 砌p\[⾐YnPDc@0p$R .BIpmC6ּ>I cTMpnK|>cOnę3dC!Qzjz%%K,%EcB$oU6^o+dc.X0~kvz/Goգ:UsXEMܘC[ԡVc7Aa3r\2w?iifO/\&w]_sɎ 칯ܭa5bhwr,R_Bj}OpRSFH@N[ ^ YEAKBs % .Z\iz@&G32c]me.5[$*5XR zي*tH>Gi6z9"C9jG;[CLX-h绾6nM922>W0OXa:A9%HA"@uji j:ɑfثY6M5[ %e$jc͂eDsdwqu+~Vj1D!Iص֘͵}L }j8/f\Y6ao&P9 24PHblGZHA$a5`‰E;Ic(l/{̍pj5e3dYO'ayw$lnj=o{9^f~X~\5O{}:ӻWF--,9Κկn'8X?^'*1{lc&@qk.y""%>qB$DEh9sZi=i8|7nvF6Vn}4X1tLjWMOKYߎ0Ŗ SN:d$(7x:x#=CRn$'mlZz^ -[ z<_u[}xΫpϒfoDfì㢽z׼3%ܮw7 exOJE\}h-uA xOBy}tk E}@HF!M$ξt.ho; ʁE )C+/4 zMrػ!=7:ܮ:> WU-iQ +l-kW{*Q-l}2QAŽ훼%݁2 O n]ns:1>>4.kS~;lgV7C꿝z!I"FQ9C`'(;řq)DCI{t>Gob_>$S0BrY;q|?%jM24(~` f'=c2WEʹ孊e8wKFЁ8Zդ`|zޕfZ+̇^fe6 <&2/%'r<$nN\y_u %:`"Mv-ڻUNejZ"4J:oźi)[~ eN͈ו訙:IY;MjąyҚLN,*Vzzס)8޵j6_Wȍ ǿ.^JTD#楥 V3궽Q"+PbBڈJٜCb/9eDIkϭ4\\s 1c Y{}8S6Qv,3_d`-$ Y{&|TՋm`x^.O,eeeEc\kX:yk4o- 4{^{BH^Oo*!"'1kk[3XֳUcg2U"'8bQ|'sίޏq.ҟDK7#g[˞M"d~C9k{:tQ.ݞ^ExD@+>u#}_bq8ʤXa}33a;5s]7]^t:?>1c9;hwSum==M[.Rh(uW07[loDDWLx 4/ȉ.yon2SDa=dV,cJGwq3T:\XVgv}ZP E)w8dv '0H9c 9"%Cp(oz=~>89s}8>/( =h ==ewc&i~idFW"}/hHcm݌j8|!Q: i{&gT%F/u|Ƙ )Bֵ@-c HE֢[vQ;qCg]Vly\K@2VTmtD (YUaXpvccY"hIxCOHHҔ&N2T VXxs;{cL%~O+`χaL!KMӫ+p AWpI/ĵKF/zA!A=+c|j~$v͓qZfv9 hdyѥ٦Ecp6ũU}n#|s㤃Qt ̬No{ie#=!_:]\-}9z(Zqc5gc鄄}#B1x"V%y-t U~We1#oSWH{ƾ=O{]gM~A,1cZvX+kWHH9kU*b`G-y(m24Lvְ%=>Uu^)>1 VCI8ݝjmF'dysnuَIZ+QtwDh#Dn#!!r&5]ܜDD[$1tstLK^bz=s߿KL̈Χ[r2{}j뱻ZClkׅz׺9{ĝ2#9*~ǪundUc&kXru<cG`q~5Wh$LS\DYVHkc\ֵf{g\oӥa_=(Lt>a@)Dq@%-3f+jYɵ"MUC[a1F(W̝$Py73ԯk̕`yԡLU/t1zZ{5ru'~wXm(9#u}{t!ܫ4Nx2Q%`vXk>P-B^ɣ(~[ bK./@.nF],]j~0.{$gβRhjEALZߛc-5|~D#7W]6,H/dߐX/>.9M:wyWf "g=a{9">Ao;5R#?7}W(u#Ӳضd(]N^5Rǐu>=}`.SimEY"đFC&èiyt/çJ4+܇,C^ɥA=jjCjy'u?wgz=h H3fwoQrr>ng\yLUm3˂{=׋(j*jr9iȚq`MGv;w5U᫷\ L `(Êu> T\럭 X<5l%~m*ŹÕuK$ֱo [ӋO5Ɋ ,s_ٿp'?!{ F9}ݭ=}G{|a{j|Ax92?$O w6}O_x*_%RPd]ד2/u$(AHW_3\ ')L" H 'ݠ],QES5h D.ܔ]uH1M[Õ8ϐC2$Z禔?ʟ E)` P) @zA#+Er 8O?H TW5 qN[ \\$'MHri>>W z#~3|\L.gS^;Pns=q= 6NΧ]&9*e'T s[Ej`iVVZՂDz8eGnXI0ß t3}ܴ!Zp7i.N(wGfSBnCG/*w~5YFMq V.f?ǃo Wyl`8Jq'Qg,`'a^"p[ Z8p. PgZթVgjA󏐾Y'CD. $Clc`;gNH5ө/gvCwBM3]Λy->?]EX)O9\ ߢ/TBw5OgJmK]y:^Xxr9iWiNaj;r^Zmw*"'gX$D<}\ y)gJ;G$7&4SMΐP/^GyX-L"&eRY&wFhfi՝fFnq}kChHs2| S OZRɊY+>/`3UңC}6<6?+}da3eǔ~+j”Ec ƹYZlnTZ J@6*]+-}dQ~#>)|jVAN/"{ PdW]+"#S t@(oawfLYQR٬=JaXT^UH̫ovwkS0d^ĵDKe/TjoT M*{0\\|[ьaY7 :R<@1nt#.L˪eN=< }dA!i SHz2no6Žpt#yF [z/e7W 3n+h, GMSDO%}! FU;AsyԳnddujv]wosyl 2vL Ëd:d dNp#e2>ְ~C/C?CFL)? ֿ_VP|> wѩ3h[mskNN~bS!epCƃFk]`P745;pK>~v2Pq3/+!ٛ#q]o. s襯Td>xYYmɼc߂33R Sؑ~8XZKmLm3 ,h}wzߏ6k /ЈPCi9r1oߜSRRh |Ś6Y-訵]j:n5>HBu숉qimN36W.=DB#4kV7sSz=y5y̌Cϖ;KCp nȌQ%Cu~Jy<=wyY1=!r;Nƴ|?m}[;;;;;KKO}s)|-&"x<[UiVjհkZ㗱r""s6ӭfDflVO>wc0`.”3Xɮk\# 1CQ , 9 {zgBzYl|0~zm:j^N7^!Aτ!åoQS>mƪ1R1=cl2֗?F0#c#d?lS"""m]!n؄o"{ߏLTSڏ/MԍF1Y뻭бrx=偙Τ&KqB`6g~ME!r?׭^Sbo+G!ucWr>GOZ֭[/@'f8vjaG[M=1;ך~׭^µgm3|*ot u(> .,~NO<όuU:|$DDOG߀Q +Vϸn//#No3zJvo~|'w\i%"Tq SB +IH¾ƶtFFMF,M)P(D5|X *M{Bm-xjxBy;Z}|!C  ܯTvF !eSl)={rmO`}6ΰejգ=os^W jVZ̗+kWthhuӆ][Qd"#LCm̘ z zjݜ{S Fs|a<}@ HvX]URya'd}xJ/c V|UWBϦ:z^e='!U+Go"#c-MyJ5 HGZ,|ak|bNmKy9H)B6l襰RZ-(DF05IF Ci8=NSىEec)h s3'-BzQZcg* !=eEe!ʚ=GwAiyF1x=Ay)~^5k+z?Ude'{U$>| 2#Oc-|uNz=XBM;OT8+ׯy:^bCG~Sw(Sί^z+YjdT%xB']FFːY汓3 IDB~lEzAlV*9ه5c{] gu/!!]ax SC@=+&q&Zw"ڜ/uhxߘ1+/eo5Y]PȲЦK9Y{ju|F *ZK!v &ПMU>- iq ș*SH[k7ǶK8h/d֮f\ZHƊӞSr}=q#h3?yU .K3WT!Y 3[ 1QJ 3aCp[6@^_Yis `st(rx ݃o(Kۼ^gź,MkV.ԗ2Śˡ+#}\yq~@.陙˦)ɂ>KVLŲV&C-ծG]4KH_rկ.U/pZCʓKh~}bF)Vl#.*"(~9WFɚQQ+gz|. |F&s"f0L?'#7#Ј× ߥr8D |dŷvf|A^r+TWW٪Phe`All+5!kBƀ5oש饻\k_t2IFp8iiWQ3-^6K ^Y&;v|[d&"Uz&ń y@Gy]W'ke d}yk^_w^CsrhU`Zbʥŕ:Iu+ VmrF/{;A0+;?]t6_ tfF:aCa'>ÓlVHivo8a!RSgdצEqwUukm/DAY 0}x5 W{iwE}egCHCL`>~)`z-7vd0wv>s"\Xsy)]p7QG-ݛfQkRVY!'Gtu=m:ߛdK5[8!PֵONf=r!D O+-hᤶE0tHeQSAE2r{l*g3YOLHm;W[>Wc;矆F1nђ!{̺| 2 -)z=r`oC{[W%/zlОѼB7Ly㾄immc[ X7{jէh`~B7|B0#>5 h+suqנDCB4LG//g{Y6*R|E_gk`׾t {Q3{n~e(O:O#nli8ݠ8.ǝaPyk{QZ5k\16;nQP%5\xFxcGކ%1WZ҃1n5a8dfw{ҧe"j+VvZW`:W=7oΣ֭DQ[Ax_OFq'Ԋ#:*VmYi5f-#dt)+ԑS#=ǰ\U$R%H%LjE* 阅%N:tՂa/a`C${Xu|3c֯=zfE]iV^ui>0e,k²\9OիQZctA!kB0a_ixfJc.o[>~.g|7)FckE_#z>f(ĪK3F |2,|y\[cf񭕯_Xeg}ux255loi=k[ VX}x6#⢮V1p7Q-C,[@g`>[(-倀1/V+i|i1CƋ˲R Mbiv̲UžYn(X}nZ꼋h\H"n!R?"q dFNB5j 8wbQRy!_OAuxHj̖C&Xn #%U߃ Ơp ֿ kfg敝\XC}]16:{y.Zh@SuDžĐfE%;jt:7,0 3WsDﰌn 1藮xz3X, g5YvOC? j-_Mln^\1~EɫH,0qZr%䣧@j 95 ^8z8!Z"I{5ǖWY#,#`nȂҵ Zs"r׺h6e{ϩzRȰ0Po쑕џH DY~*!~'ڀQ-c-ǶwUX- gLT8 !~M}6p'! 9f*d%[Fs ۰d R-QN=My6!"9u6=yPlKt0Pɂk}Mͫo55>R3$~\=|aR|:mjR@gAծgɬ(8!A@Qzy^#:˼0d0էY_^/ٝvKU{\|TUt֞[վNٝQn;j2d-pm_5ؽZ%Nk ܀4hB\Vi71kv/gNY,FX`sc'՜[>E%%$4vzSomBQ$)d͙kq lU5vj--# v(WꍧدvY&]B|H_8aiZltt YGKi;R[JL]gw\]0lըe:[}E4i#Dc_ %qa5WCx`$ |WjdawNzɎ9t/>"XXuB֏ WyGDy&)TRCDŽxW h K ߊ]^A/Wݳw axl)%o3|CX9L\=OHp_ƿ{vY9"uخn=KҢz'x­(L2>}ʰɸRTDq;{dh UWs"xy9y>fSAy=pUftiN\ֽTYqՌN{=Fx>1t^Gߩ)1{ߓLn͉Ԗyϩ5q9sDGmZỵP/w իQZ,7wGt!dub罹.E(_d"gZf=fGWK`/Ϝzz {؆GyϮi/t]YB1vo|nGfh`D} 2wXآ_rO (z-QvtV/qķ>0xg# 4fWY:Zգ=VyqzAhfY]Ob?MMEjѢz=!gṙjQSZVX{/D3#qWo3 ގµjOEj٘cF)ۯR{F\p3;lsƄ4OE[ J+n2ֱbav&;מ<_sm(_` eOE#q%ln_sPsHgwy[c: NT+6f9$!!bCmrghJ@"vL"T&Mmq,$ҌcB("DէŢY3+H?|_ZI M@2/) C[_wOL|  HzkaߋDoC^jիׯֆ%00hz׆k|Dwۍc\W"(D΃i.[ $ZԁA}ed:,u%d$LZL#dP Y~ HyAo~6"Z7 WОy<{ͮӅ֗]#V,B5i8$BKo{݃~\O{7`h^,J3ui?'3.Hʮۙ_=U٣ވS&ʤuduf`$%X>D|1 f}ЃC!Z> XTYOEQ=s( e 7=urǭk\ Ƙ;94=Ku=V1½tYQi}> ,CƊ(nk ~ioNZFz'Q7^]SWXuՆcGqCՌQ^wmb<'k3\8=9q{&87.`<g8Fyq"=揶+1t[ =zM!C9;Q ovqw매/u!TdDapM 65$4b#~h-IIZ FߖwLZ$ԅՑ`mh1[|mX^'0826p0EdJO8<[Oi pz -PpnV:x[$2ˁo-d;[?sE~ξT# u[ѬPYR1~Ec{6E bGD7~a_:MHj2b.e+5W.xx\䮲TtkF9/O'sz#rD6ݫ \ fG4=-xA;0S_G!W^8n͢# (3۶(5kBڛܒ˶^VEC$igeܿ [do /S??ͧW'[=ޅVO'x´aCTԾ /<(QIb `-,Nf? a0q5j[ѹ!g`:2|;ߘ~Ho8E` YYmXTmSj ֓GZU'ت]5ٺOzcvo$~BOi;i7!w=^}ƔoF3Ӵ}KrIED*'}݇'ƚy*Fg] BR9uUA$BմY)ľDLI3ypk }PPxo 2Ruտ=MB?{Zv) h)yb_V:McW)3SɫRfIqU_d MSdRp &қ$g2?vk@G[\H%loϵv=y5玾Uab?=."BEHbg`ਮgց|\ g?r):z:yxkˉ%X>|J 7iYxWZ{+,O&`D?o6Ng -@ <(Zu5 ٍ jN]7 sdTj?3W(}4J%x'GFgN~<ѿ-o_-/r_|K?cܝz5N`9A,j3Lb^a9#?ÅC~5z{}-nj >Jeypx12f3ѰZxD"L$M|\i23uiB u>E)uo{?F1hvUfk0^sNgJO""!w@ͥ =c r8&Zw`4:fT)?""i1h oG*a%Wyy'z.%DWd{׾0}HFz4zW _t7{wDMY6W ;~c4a]Ra:$a?SY.8I^Uv>yRSDG9 5p)ͮ3<sv 0; 1} {76V[?Z>; RYD'6IF`I֞jՋ8׫Ƅ3#cH#{fpb_)g2680#cp{}ΓiZE({9EJZzї$po>ϛl9FK%XqB4`IACu8h!tA ^5 oz־,٧.0#3+ liP.,fq's2'-c;GGFiv(s8B!B )&A "yw @hù:v^%:~϶m]Ъ*"<ꊒ[(huP9kınH.i'eJyAoׂ&5D JֶfLcZCo`}fkfkZ݉4T#_ˀD")s $`)x=_yPl Bف?'OĴOEzֵEl}tFȟ1J5#{BAnNiԪ܏0y #}kQ!lo:\a `~!ה63k4͂'2d#<+ BoFQP+alcP8Tё,gednFc@Wa~# s>(ᖹy"&Ձ/5bTW~Wh:Ӟʌ^HbUPS,a)|'uhԂw@ &t&{ B2!'zup,0*XQ!nH J;So jd;F.hxWOX$lS=1&o̶„q`!9H~UI[×Ϥo9@βLr-.M WONjD/̱, \I C~_=~>5{Y7#?)o"g۱㳂"~lأ\O'[ǢI׮ 8y:Ev`B*?ơQJ12"3IQiMT߆i?(:q|E }Gtt#ld[0k0j<$9>o#6`^%Sur ~٧)#u^\Sk:%&f샱4>}辑OЗ#bD(oz][Elmou͏7;wz?/H("GxTD.3)ZS Jmҧ3l8GVw%=* ȑ'=PI(1S~j9'הWN+:_UkeR$;m:vٛ*OG,dzōp;@Y5lZ='e* 2d0ق*3M*?@/;{^P"=?$O78.{7IV=]f(= Fn&9 FpCZ&v~LFp$!;F6Ft74P ~fBe]4ec@dI>}7?c+/̌,8\]\VBB8ޥY,/?ֳ4 +(!4@"3$}zOWp#tWsx8ipުCh,3+`J͹r-q\QACJIqmo9=~XH /NEz„|cW 2C{w+.x9$QA^5p_#H-YS:;s^̚?p񴾭nIҢy֯]:TX'U'w-vC:3Ƥga`c5(s5s~;3[闇!)1hcY?Do*2xO;B{MZ-5AD+~ e袈QDtrÂV4xS=QDi<3".prK3fʒ<.E}eo{2+,%i'Pf'g+Vq̭%qrcb[ܐX*{ޏGtӓK-~ O 碎cxRxG:Fh (.7#\Fl1fͤ-Y ɞ{ ןi/`VQ|a<>-u[ izC7gU%@hMb V*>0#wđՕS[Eyj+*xsqyٻӡ-z>V7RAs_k=$xOnc(*|^! {8ht+n{?Y3EzcPx?k RרUW%d){0q9QlS(GeX_Èe3k8–w0~`!$`pQELÁD@G>0>S\CI2,_RXJXK܄箁x'Swl : gɐi5ݦ$ - q ]15!߾Yē`Ȼ oEĢz?$#fZB@#zT8$%S ,IG$\ YY$ժ/>fB]hԟ2Y̱u+f14Eg͚3AKem¤gѼ8SPGC,2lVC Y6Z }`p~ZYY6(xML{.>-.A;#җR^\AQy?sė'x~č0*{e)v('`4eRGǨL Bm j^A|E1=SP &FG]@mV ؠMzw7˯ЩoVhgF3*uut!&5Is}_L^$`/(Sg@wV5qVYF{ +0+,p`h6ӣ^%!QBͣ!1]曛~ ~V_Mj {^e}o`q`d\_2]XR1 ?Qf^"yڱqUů彞>xɗ4هa.05>aݷ#Zo_5`\/_mpM͋X+G}*s@Tl=nAuYaz!_n&Kj jnC辒w SB7RziR.a 5ȞT!;2K[95 ӳܰ#!K5[zxrgYe0_ ?[w' ԫ*,+-ӳ3۶{d4rq[5HY+,=s7˕]=</# )AֳGFY$+Wml^[L=Ŋ;UB6Lcù&Iv5o`";IOH4EӋLлgmV<՚ Vt#/ў%fY|8^9낻6Ρʀ/<(8*|,H>ajXC7Ob>QS {$) э墭Գ|7 xY.4gO3MݚP]f~!ޫs1w+ɴT@7:b?3Ϟ^p T?<?xՋc͗9p90/#3ki+DEUinrĽqf:Z =D{ͪ顡85(\ĢuϭYǫ/ږxBy3>\ބ{oG.$#cyWPc>( =5sЄ!ᥴǘ|~h4~+Arsf7[WOu$vefzocG|!&kȔ } 9_㈈KHBcKi,4~w]'b;qI܆UnK*Te4{v1*ּ9)*J]v<3|!eeO;ьcԿԊB~@[ݮ24?G<ퟳ%#@%[oE֭Z\tTY6vWeceduc"K2k4'|!~ϱ>dYtOEjի~}/bC{Wc,#Dh I!廎ϭ%j+QZձeŸաZ4Q[Wrk^bQoy|+(+B0a  ZB%J"bs AvHҫ_(^Wkv0I 0c$06\]$NrYeq.9||Z%fb萒&I -zVuuuwSan^v!EĄ~B/vexEz> eqk^\ U#|! XRs]Tw~~AP%߬4ȜDy/z)Uo^I=EjմND~fW!ߌή_i)+QF22vRJ]VX#5߄]0.! K XZDyov%nFhnK~8~tN䳸 U"mN?0k`!ϵ|o|#o>J,ffmrV[_,o=h/ikztK(RQo{k56)E1V%DD/Uo/bR+wÔ \K,)%W^x< Ԭf渜Ls)le,=F} VGOJ#F68 2OW{²\E#LkW#3;s}pYstIbp^-Ʃhpᒴbɬ=gBXh$G"mG]/y={gXs;΂_׵%W'M՞[8[}ݍ(IxE._7|(6}n㹀XZ euLQ )QEu,X+9'8r-[e6LF$zMY&#-Mogj!:&:17Ĺ蕶s]ՆuC)|m .|ߚPb spF'}-XuK^39)AWu%hؔsq! _V9Vv<O#n-`j5:OrR s~Y|=@]Xk1r"nJ tb _lc‡Ã1hR_^JKc hJq 0>GP 3@ę I~/}`@uq4 > s.ŵ@@EA5W0 6sAh ."|qz!Ǹ|ސ])%DxI( [9ebϏZ>_y |܈ y/ʇ<12YӸl}c ;.VORDo9}Č6 Iረ\ޏ.%:췍amZg=[9ML'?уQdgm9-YSЊmWmُZ(y/8n/`+o5)=nfBU4ނ-hN/uuULVkwo*ʯ]Ϩ5Y5rwï/~-n]!{LPcYZM'3Jh{/gq-E1>WҩmX,S. ٥DUӲ;lɑcK* =08h)lk~m1}Q}^4p =c4q퀰Ao7:<#Ӟ̪̇쟛(6;1AKR@ }|&uDk#!FʊNv?#1gڬƓ[Q__Ч~f W8ۜm_P$b ,py~S'':0FHfsCݫVjf0 l؀1c wh5 #48s+lA)7p<rgAH0=+겳aKn}</}~?q!N!z;0?F>d"#O{[[NyPE(FKee@IXyWGbr@vp䓼Z>gb? ,`i'^>ؑ{LuAKfwXHh7h v:r! 3]^My76w9s47>FfN"bI _諸3=c":4J=}۶Z#{|\CٍCYOZVNIGu9#_Et+΄"cgu:+G>1zFzE-F1"}~\GOV@bV7x^Fb1 #?gyO'u;<5=ju;,|F/z%%{)3< RsN2Kqտzzod>-zΓxpV+AsFƲoe+- ]뇴 IIka1?pzQYY0c6N~pW]L`zAdxhOЩ?ITr/bk:vvZ+KLBdA$q'86uǙ˸# b˳Ѱe!?|FQjwD_6K%x˘ȈjBo|5L%,Oqi1h~0;]1uV3DF 0 ¨3:qWcEeuEjՋm'{PIo Go@ C_ qq3!+o~`-mq4-Y9}ǩ ,c] `֓\!Q;45}Zcq\Fwܓ{"sHmgHB /!7kO$]*<9Ц]2tɓL?=@Buh \%GD{{^$ U.ŎggЬQ^˘l1{Dl 燍1'ݵOW>x5GfU[q!Vj[]T !aNЊ=eF<; #r?}_(Iv]@{[zy:FdvMS8*x1gu-q?]O)~zhDDޑG^ON |@'삡ݰZPF w] y: (*!4n<@\&HP7u~mBq ,F#uopL-8Yjә5VRdc-VXsc)X`*`10@R"k Xu1TIC? gPx'L|!?qmQb/8 ^ a"[cD3^t}+'YldT-z|56'oMZ5WEPz}t}Vbq!#`O1y'k'TW }NXK".X, t +c X,.̢b&­]w+uob @Ǘ`CDksD!Q0d |u (^'\u~FPZ.CKeՐl E!U?N,09?qg Z=Ygmݥg+M+֜PՒ mb>R%ǩ!(M=!gKʒۊCaM={um9i?\w/t 0 sT u?ͪSu[/8Vٛqcw[W\nMRn\gȵgԩ"Kh;tNjBR'Tdd+R_Z_45RR+OD'ҵk;pOLJV[1OSx"ۙfHZKwgy&!)c!@Yൎ ؏2*癜]yEgUH74WݮݾEXyo/n>hܕv?H jCB Aid(3+B~&64!A /k*ҹMd3smaX*i.ӌYVN~[C/T{" \*ݢ\ ~Rl],^U=!=230SeeF=9X ,Mܥ>ax4_0oyMi:c!rG8VH1ȩ8?}ji@wtY+ׄfl#;7/ ,(.cֻ Ʒ;CiDGBע#A .v;sfݿG K>^{ȹ |;B=߿cB1C{z[N¼37C>Oya_蝉O Irlҧ,n#q tY \O?Ful#Ao ~݄Pu@eKc -w=LЌEo2cF7}vYNl,+B1mG g@:\OٰֆGmlѠӏ_CF0/LE~3#1cEhEƜȌzyH+;_"inOu T#FV'8iB"'umܼ.U^?L=}DGw ~ { Ad'LDEL;t"q8=MMLՏu!2=ۚs]}e{WJ1y1To8[ H/l#qzT^f.}\!^˗Gϭl8Oh8],[*=ď{v+LkIz$! ٹB]*όcĽM_Zpyb; z㏪U;N}CC2sQJ8g;afӪ[>5|ׅ>ՙ%a|2)Sv`7IL2dF9$Њ6by g fL.}@Q_M:ߖd=$lǕMv%(z) @ѓrEW*O!i |Qʱ `k܅wp 8o1`EOq3鞹"~-yO> }[ӻRX5|Ƽp] f9Zk(%b~2Z$W\-zfls,v|F_AABիv5T(55B j`):mj+=b%׮|\k}C9 vXoNCzɕt}o=<~RxEWhq@0̙z[yXHa-P݅eE` [O\>6%x=YvSER boF%A&IG -Ód'IvUKPVT@s7@@pgxwdr@q<+ gh!b {:?併k u[˿s)3g`Ɇ _R$:9S#̅`\<= RXG\ ײ-'s/G|NxQxSRڛdR OYS9rXT1?%]_ JDkGj(~bJ8 )u1a=+nZC@:#fzW:-'sl8>7f9 ߾phOyڪ*y |PHͧ⟥MW]ެn,ݸ X@Y+ o1UL+}ZZ1}Z;=Ou2n(Kc=3k6q pkm9QM6ȿu.% ',A]px; rtJlEe^ PѹLR.DC)a~? ώlc)]v{ 'BKމ$Tu5Rӟ9ږ\tIN-z45YV6· Wthlb ̧a6EdՠoZ>_q!LB{VJK+tyOن&"_NS7h"hFLX'έx: vCF8ѿ)b\D:r/[ӗ Ǯ'=-|f.B$0p$HU^8s99z*۾rV72Rqu֯}O* OHKǧ5yŭUnMݾf 63{"I&pS0Ҥb)צ`{ Һ:"I>uYB׹T kG88.I/15 ;_/\ת~&'/@!`Zx>yZKLa,Ps RgmyzȓVc[0,e99Gɗ'F1:Y7Ts2Pr(Üֹu^U _)u]j{otН{ZØB>ax`|"!Y~""qjvkZ6owۓdf]vt%! L_w]KfffFuknÃM&v6㶷=8=|")w>SAtGO-&Ƕ4"zB)F9-7=cV6Q#`P<[=o(ɇr."%y> TDj?>ŧxO;ƺ|EM<#F?Ys#vG=:ZϣF#k'fOF~yOEzvDgFZ B_B0uj'٧'!6^Zb˹c;-_ډncd^k Q=jծ3+ iev[ID(QF?o|Bp|1ReUsحWd22#1 XHF1/9B|堮:KmzlkVgb4֕2p|R8hiiq qkzSyojxgv[%Q<(ON+.Hg$"a]^_3xDhz5\}qm7ߓY{٧d$ N>Qq^ \VTڟNy 2뼆]D| ~^7= 4\z#BkNzEd0~U>1]8PW,Ha2 0 ++++++ٟ|x$ԪիNߴI}U{j֯Z/aXas PAl[Eh#<QB ,ycHezW !`}w5Bpkj!yp WCuN>l.$e#V5&ydcx(2QdVH)5@SeA7+) gL1V0Pdu=镜q[:q@&+^Zgg` # el_,r |z:jtN!wu ݯ\T.0s%ZC6h%(g9/~_)u.9͆9ԓnwŦyHƓ4C^|M4Td$JS< }ϰnP=wsW-y' n>d.' = SD @vl#xzB_~݊j"Ɇ:H3je~_LnW xvH|81]`^9@aFB879(6sn?kyCзLXLQQZ t8j!afe3 =\Sn"dOZLk`onE"+br]E!}7͢Ԥ:aUu 8E]c*RIk,O e}S`Z毗TFP0ߌs\+癆t"ݸ̚%M;+ 0 vF` D jœeȚSvhEQSWצa0-dF=Hza츩Lukoܛ{< ZUga\[A^jVYS &7{'w ϶Mtxyh#'Kx Ĉ6q`|kV+K# $wwX%,1tˏ$x"t)aL<N7Y ?xD}b_o&`2eһ1|:4.g*۸!hm[ܓȅaﳻcI<疉:ikv-EiITWZ]El؂^tI.r; 3P12<߰X{ʯg<𯬝.m^R!{,> ¯LA YJyR#2qyb>͘"=7u$xk#Dhhkf{3U,k0w+ZO"4|!7bXDk (d'F}I>Z{7$O5Ec8\Pew95!XtDDZ U? (h]`J٤cTn9ގl`ϵ^CelkYV?Sc#݈W 1aG};y{YuVw9ak4՟^+ׯx#k\ghZ+Ng:AxX7;Bfd;-u 2K5"!a1}1m {l 2L#c^uh$6[lݔ"j,c-AK}'_h]r^=(ZO4yxw|T=޸MsMRҭ!5E]fa|#KQŌ P#P4|dh㤽គ䐱#G9$sV^ E݋G:[^𶀧ZƤ#Xe^B<];L[+1s#-~XJ)+uc6kǼZ<0}]1 HYGq{:zգZծuYm,!)yQC,:O<~TXՎ}Dqs76"zVn$` w qbG0w@+dЁzIܸv$a\ސE c#|0 :%oajJ_; l[N$\C#-ˑ έ>0"n.Q2vYvyb-+?鉒-]\-5ed2)f?/+{H ~Plܛud(?؛-'oj&d46y 7DNc)Ԫ8 H!zH٫g$;91A0a{|úւplb׃_05v.{=1dw1d+u`o.oa^./M"2U-lY_xg8Nϧ,{U0wv;w-ot֪1=@M97 Ӿn&9yxTLMVdQS X;Eu系7֟fԌQ9oZ~lcوry;j Tn"(0+-Lo$m혾p7wiN-ۧ0]`qM68JFvd/P|Xb;wޖfv;Xz$F. 3#soGD; 9mτ0Oό_}0P[9~IH|K¨8?6/f[ BfJB+#]I>)8Ɍ ǩ#ig 1js߹XwKicݻo/QEعY. g3V_-#8BPWAy3m0eڴ}tÔ:'6ʒUBvGtgG36r@ZFJAj kx;X1%*` ٗPX'Q|`Kjj$o&U_g5<ɒfY{Z]"}]Ӣ]s>l_#Dbc Z+Bqp_[am>'~..NXEϽ=qd9cJX KJӚ#ɚU6<\VDih(\l]x:0(&9x8eQ;QEzs7}Xn`3h/S̘R؎Kz-$oᙸ5z.1 +&:5R#*W<^OBI(_>&xE_PoI9 iR0a:rֵ!8W9τ! v՟_Apa3 `!)|}|12tcƹםp4tWIV>F3]_T![eDkH|cwo{ޯcK,%ߚ%4DK5ʒQX9"/Gn>LȉGi}ra YĒ ߦ }1Z:1H?C! ~@#%VA&{fh4=Q:}k>DcZE6./%ύSD!E]C|yϱc˽6P'ԟc;GV2Q{P]"a}1o$FZD009T ch |+GX<Ğ(?f];*j"1c%L*DovsRsl$sRJ*SIfUR5mgu҅}-Q^{卺v:ڇTvO[+֭Ev>;Hk Xj3qN#pCAM.<^z#gHXT){Gi_]dbI9vDc3쁇im蓢S| 4FUehIވ/.{81aQmDFxkAOGwy?jwI`(*[~Dh1exP*jWԞ0?,}q!K_| d3ަ7I\qp=SԹ뿜>#O|!OC(kUu wQpV4{CvY =GN%eoGz3]|{-A[f)|c~_u{)*62 (c=yLTqz>+W#7"!#ޏ`h+븙y ffk1THhs$f*95!J] 0ȯkZ}/BBP)9q8GTRbȍM0ftp4:,X^ׯ_:?O Nb 8[ڐ(&o&9CC xzijir I\!ⷉl#7jlKTgYEkzu몽ͅ%N#'btdްtdM-͎2v/q \djs&*V9mX_`@j|?T6 z'T^6GMs^DyW&׍ʜ(}GOG#l1 65UmMece?C@p+LXk:R2;ʰ b|w\CG<82MSH)O3!#9ʅe"ZI'|pn;1e ':1_' .7-}g-, ,Z`) !YUTK T# $JxTe8 4D>+Czu]͙) ]#?Jd0 hœYYX7Cۢs1őSxFw4fine_]COg$"cG݊^/0#H zNԪ~8(pI ˃\~favRo朿[:j#eq@@ 3ڭnk}WXoutu womW9M;·W~g*V]EEI02>F}̴޿ tp 5iIмpR __w*杒s|fReX +]Y9i$= ߵm{4F?NOha&)_kbO1q~vY@[XZhi_R UbmN@MuׇY&Lq4 31 V'kƧ2k#8npӿݭ$ HيJ= l/>ϯ]k{}ݽFrR5&boGX3mǣ+<\,F.$TH-ғO% g^DȜ9YgY4uq@m kGYc\+t3~X,5T_C3f#rtE,k?ٿ[BxGM ^п:M yc[=g!uWA ^Ci"8~|ve*4yj̀ghczF;T-\ChS8g9ƕcPk?N;xrǎ[BɈag";.Z 0*bl]Ic-"oGW7C-~O\;,nWKzL|jggtAQk4(ٰ8ᙴ3i3tYt_e23?-WӢ (08D"fnȾnrwЌ_ʘw*ή]n%?WJZu+=4C<Ґm1bǯid?fZWhH4mz3cHc;];hoxvsoBat-nSZByh8v0Rŝݘn#zZXyr! ]YG=̯SADOQBNz1JIw"<~-ekl,ߟ5zB7z^fƞEaN0s>Z 4v('_բ~!um6:3c7ԃ" r8v[?WYm8?[7,ge*b=9p7Y;#QEGS)⥶ӏk\/68zo+C^xWgJAC36 |*Zvx a?{tSfZǡ!{l7-75]Wx^P iwZ¡E]m cs#klas݂N7z  ~;{d_5]2y{ycB^aWEQEE'cؤFhnz8DzKQh$D ,h.j׭^_뵕sXTP=|#fׅ_"kګ,N@)B֥S\JD8S0UN L'P"昐h5&H $ rr!ڼùXEm$ͫp Iʮ 1֏ϓ0ry<(|E vv!WVh5_BLUjQy<0h3_ Nڏb/?/^)DM${ݍ/UAlE [Ej(l淯F7}OeE1,_F1#6r{EXX>|:ǘ Jt$z?kqE.?N@dMi;{}g h$ꁢWF솄3L>#2=B=%|{ KHn>Ǘ6 r5#= 1O_HB{F{X6㪋`Jkc1aoEmhWrebEߴ+)?2 gَv]* \R>+ &Uٕo!ِl{sxW7fxn?G̈KJ|ٖG28~$Fe]NQG8  ħhU5<ey䈝w| wL[T>w [݈OJ`5~~ci-bEM xCa_V;oؙYJD{]^Uxbmv`/[ܣݖseo}LQs&eH?{KvĘk \/TrA{E!7$O@HB\<ۅnߨV#B:& ){A{D3ݒ`%H8Ek[@ @6|HڃN.<,J$ d)Kb,_/ٗyR9Bٔ]EUC.+{;M!(G (LG*'[IpVׂ/@'ߞo.La'&rXBc|P; ݔC@.'4R!g=;xfsn@$6' @ȍ@_C[)~Zٍ=rjn݄<5?xCR.ePS,*cGtxz3E :ەOR&]MQEPgjYTLC&6WD4)kRza'B8UQ* cz?r~um gם ^uU`y h660mlՈB шCzJ])$AvKL3 xz; { 39k?0[=TE5۲÷52%0(i1׃J@5->/xh-7=KՀvtqn7/'dysx\B;w>;s.p:sļoeADC3'Hp "\ ę'љ_yK3N7jT7JŊ?UCo N 6-7z,A 5r/^6nR/h@İ-Zop|"׵fALŚ1+xL:nh4<qi'.稡ygLb^P5͉a*RT`(sVSqL_QL|@˽"#&,s#:n !O|ip(SbڵeL}JDjH>D#GW,]${d^e) [Hx=!5?Mo?D <ճGwǷK k߆#\\fQ GMݮŇZeŒLs2"VYbKjhXK%׬.ݯ Gh}@gҧx*3lxI/+Us Wʻ.$U5j+P98|o/{HH=X~L?_*t`DPY2҄1R2ߖA¸e_Ժ±0V!{~kbE{נM3#] WW I݄RY, 4DQ ]ց#{5݁U={֞BਯUcyn('{f"6 .­Y~f#:YLeZL{h`w='1쐟j̼x#{?3ȬQ˫B1>A3DO#z#c|Zni]x_fKqÞxO? MLIf#bVdWcJszsxΕh˼L`( oB?}Ȩ#F?'mWZ'RGVwJ>] %X32ixO{C[INZf)vSEQ=%{|xFq+fY!{~R=ucB \= т댹rp_=xgSh0#?o*\] VHa&-rt[V֙ 5-r&GFh4 UY ^'? rׁqsõx>=#G˞DH+~Frɘ3c IKXo4yuIUBA3 X++G0_7aj#5{m]8k##sc}gFDfiz v-TDzC5H'CH,+ H#T :,_(8(Ҫ60;TB21g{VSk̀sdˡҬ<nV~uO)m&mOH4W+D7 ~__`{IJVdS*H}=3$=GDaVm'5)KB b8S|'.?}a.& Ռ)MTJ+w=:w}w@ty[Ufi:c}j43'$Yv[}5l[oGim}sb?T~ubʝP0mQwcA M`s^>AVT %w!B~߭ g5H c7.PhcQ\ȐK/7H)˦ nyq5ԳoB]疂 ō3gv[7+|Y.s6e @V`A,ـ`LdI,Y-Ⱦ['=g+1=W{^ou@NCaX pYs.c/ޢ2;[a#VDYSɃuq|$hKAZ_C։JNR mPK#ǫ767a^yhWmE_Xk(͡ә`=yXtoYLÿqOw~>@znb\ɶ3haT:w!ub(Xs5v|{>T,5з> ߤ0wרG{/q(K+ϸ>2.jwRJ}"ZjݫwJZ̅ċeuƗL̛x߽OZypL;QknlEE mƧ)ǘ-m M2pW?g~߹gBIo}`Su ?jE|oB,a5V_JI i0xzŤ2}Aqɖ3f{ x4Q5"6m ~Ci h2cR[N3 [t˵ \꼄}>K+Va;}%FcGKZvci Ýr; q(iDz |\G^RxmB O?,P%s/97vtdm% c1ji"'Cos*:!Y /0amjB|!K}܈oƆyO+ݧr2s|kI_oH>|>_>,$|Cqd7B:݄;/??q$acXG1ΙwuOK,Qt~&ܜ@uw&4{onNk:8PH>W#GԼ¥K)GyQEO=wFvfp$ϋCK1KmahЂ'bFF#]ccz =H-2:7 OԀ ̚OUЊBYGz!~w~ BKc{ǡH"XyْKkP>O_BK/|~қ7 LKF^Tɣ&LYDh)׎,$' ƽ0)y#E:;j_ X%ڬJ:+Gmx$`=Q(jlL"A?SA  j29 ;rac ɤ;^|ºVY&`IBf!ћkk*WWdvMS'u@Z h=VRFbyHru<xQ=9$-&\Xݧ I7(k^)Xo{n|pwfMݕ}JxO<anuT>'Q> OW>^oEV+}+׳4aj6 -d<( Jf>0ph<K?0^70Ys1lF9¿~.lFB(0"mi?+Q{Ce]V֔!""yѻf~|e1^5NVj~V4(ߺy˞q;ŗޞ(G~=}L{v$qe"}/{D}sfSDOZs:?l'mKwx>@?&ceIbω`'!wmf Nc\U= )tF7y7g6]w}Eb>E{WVR{{?}>Ygz/v*Lq6ѺDDqvy.ӰNQt[TC ^;MB:ੵ,:EmA ) _m:-If & dOjC(F<`>'vUK䘙3D>ayr\PC rcBG?'01P+᧧kN0a4pVyL{f:"mhNj&O&HEcӀ){6pnhJ0-;d +;%)q [V$D|=@+`ʥTssvf`Ǣ. MBRK0'_6,!{jKU<rA, )<rpd0a?(@0bTߜtΌ7 2-\CJi躣:\ەr1o0}?x8JG).>1IX볎Ҫ՟. GCzHaa`.> @H+`\-w[_d,ʡJ;չGV A'+JTs+~\a⍘8 n(9osb2j^Uy)t~vaڟ^l=.tlޠ< :>waF-EJ,4bĶ#닆( )fMN|NFs$6OU{ݦB!"bKIw32;\e{dư05<";}iџmnWlx>,}ŹwY˰e.0Tf1y'%-ꝓDaNxN]ρߊ[IL (J2[Eka6ܛ9. sǻ?˺o Co(;HQef:~I{C+* s i:dx:$@IĀg Sxx5!UE{~9]FL%|Cv_Ŭg~Q1rNϖEYe&\xם_l̔?[LATҝ@]dpn5>$rԻo2& I!9&D&JEɭ.ݪ< %"vxiݯc-0>%Վ08_QbU S5&DhQ߁-V))ōbHr]X&t/S5OWsIz&gFRoOKws5IJqHt_VwX!-֭pod`8Vm,]aFP6V'3{=n:uy. hl=Wb-֔1A _bf19vx-O5;eȐGQ1NV΁%N. &&vPהW`TڔP|=!!_l#9 a1j3ԧn֡brd|D^?hft~`O_sȉ^o1LP?ccZz68:zVe~1wFfF7%,8C X"FǩcҴ1S{DOTcؽ<ӋҴft5x7~,ljG^6Wue0ޭ=j(Z:W7P| >G Y !"|Lѧ-oD˵qHl?|vWz|M<,E!CGzv4/yLt V54}\1|"a~M_mn2G&_x44}|/ }~?!sl$Xrc]σo>E! SumPpd#$4D}Opk?>[ĜODa]IPzM?V6ޡRZэKɲ1|!0PzmV6t! 7}Qm(=l>7:A<ȯB5K`s1庸J177҄b1utxbbP!KpKb!"99>_ 噯3dGvF0M0fr?M rɲy|^7v,d3EY!u_aaa5n?>AH1#ćIF%AsbUW=qB1'_._JЌcsI+a U7Lc[H-ir!Bmf\A"€Wu÷8m< 3:B|L.AgZ*E1ʐ7LCe屢+ DQuo7-E8 5'\nbUc]e* g.@i͍w7*J̬W d9ўy33lEq'siXSxiǷ!oPgō01#׶@1VWWW7б G 1MQT.j'z#EAX#<ϛĺ{#E(qbyrG#CJ šՇWhZR)n3#qV>rW}Dz:JX!{>7"(e5(~~BƵz63ܒa@d4@ Z+WZ{.@(e+ /aZg‰/bRi8J08')ǥ3܈~A-UH>UA HC{:jrx75j1?Nۺ+x+ӓXLHq_o_hFg?52{7ލDnNu\M+HkD1WWsGŚ+ ;zCՐزZdT(XYo-h~Θ[?? *d,g,.pzgKs{5HkA BFqŗ_3j'9ktp=뷬CЮ,x|Z]޶1'L|kHZަl앱Ky6/"н蓣zOBv#3s;{epUEB#5lC-gKF5V-1tTz^:z=0FM{-wAAȣJA8mNlOUrٽҲHceYp?Eԣ15n)#' +ȓ½SƊC}L܎b('j0Չr A`^ 2^/ x~ACd%#-hT5l p[p2Ô*DAW| XRmF=O]uËn<(vQ,YɒFi}W,TKPT775]w$S]Hlp/{"ی%2O]\>us i=R>#΅N@&)cu0&}互F8pxq+j ɈM*\"%<)oy e:ЎE&jӒq])69#BYL_م-Es&[  q>O6 <+زBGɀ0MF7`_8^I3q,fM.cx.NwA0|\gl}66 vkو`^,mxYtz~O#ʧΕ\Em,]c޽PV=_յkmwWGt̳tbw8)݆2OLd'}wz,Ni[ f=>h~-`Yܤ/zߡa+ܘ,]/"wńD?%EUt $ bx^m0~䧖^A{[QU$Rm6Z++a).@Uk&$ٯhL05=]lTlĕuKmqJUbڭLb SnM.gKZ^Q pq2 k1Sƛ+XaclW9{uK˛7%: } O&]Ҡ6Ԥx GΕ2n&]YhKM0FDg-(K5_R]m{S] %!S^S{[Lh?~*mQOU tҡP_u"(Zd5%e}X&V;ǰOlxA4pE qc3.?-/D1Ô0d?>7A C*yK1=?|;Ȝ"G7nsrM\1n4g ->-5؎2hsFN+c_``HY_ثmV<?6-cXX\m+m%M.ib=HJ̮=d~aiij'l Y\䉡&n:x\!p#>#ʊv.5!Qn}m{Ωrd~B19c!s,b#}҄Ww}E#L<ьwY $h0 ^(YePwIP C,GKx#=~G1>@BCq!{^9עȎ}4#DL2jS ;xԸc;߳lJc"3?< 'H]￧lա)`xCdO Op"=C {$d^[$ErJG C{v ﱔ|cc͒$y9AS{f"Ÿ9DDEe2z] .OzvJ(袊qo=H>>bd #G̘Y`|JDLsVw=ϛ d,H"ϻzB1hBC~ޗƞhZ 25ڽ|1aOg:+v5Ѻ4OGd /4R5 ӳ>K>|!f 9U{ssV4g4B$D쳺A=[߁=Q=QӠ“ؤ5YBC4KY-(8LJ+]Q6C$ aev ۚ ;۫'(8xќ'g,bQ!嚽J_;dy!"d;;WXtˆ 'gCg}{]荪Ք__}7KO%$vi\TIҌ~l g^-C'ou'ge?A,FB,en,|=<>YX]"$b!I&;cB+8X:7ϫaZhZގ*|ce,!! |լ$5H7_/#mKcwWEaF3hn8y gX+/OKZhEo=`r4CWGԗgxO B4!1w]T: O3y:Mڏ U{袉EY߽Pf8 ylzöccV!$!Bx&0Wkv(>5CGĴKtx?0T3Lc_po?HB6mîX)ms[̔jF2ڙ Eqbի "2?+hkĠ|-y!=$kYeG 9XIt"'#~ҿ-;+'Y,xggDOhqi>iobCF ݳMiKcUԠTNEyjMV>!psjM՜0kL\mLӳY2q#{ `Y8IʘSOHNU!pC}=n$~-a|>5۩Å`yisY\zhL;z;D2}7 ?I_:\++'X I e DwY/@y#r9'=þFq#/P;p@o7ܿE{U R6^cٚdP;2!Jɢ W:>7f.|z%f?xY`'ևr6]Bٝ K,ȩ6!:**?Z#k QFNR.ȑ+ 9#<=@t=tip: v)6Ak ݞ}C!vun#S~4sj ~83WOp56$;'=I(&Ef #r$.0` $CFNf*;FNF/6<pʦ‡3=pJay8W 8M޴+1޻%6_ _9^n7fIfmi2HEC(`] lIa d8yZ s߳a>X6jGz1 kՎ&`G'wI.y c3~HÁ DBρr,liTRZP̤QVy[.0Of~wjXGEפDгL4b<\.jx9ƈQc=J7嵘-֛!Klׄ"-Լi|/Lmr<J!1^+r!|>!Щm[| , qw؄ ֶ4kͦGcyW[sJQ MfonD| L0kd]&"ȱRg=[,DD4OǏ};=fGlg^}.n#_`,W{D~w"%^JaBgf3!:(B((.밗˅ǨT6'!ma1WbᜰEoMo@(w 3'4m?:\I(U܈fyad e9] hF104Y9`Iy85H>lC$$ׯO-#<3mU!( s9,.g)xGU,9 Dh{|,ybg&Uvuj,+Wɔn V#܆hMTx@~BQZ?iߵsyB˵P#]굍{7o@C[5FtJ2/cLB(Bd4 t>?_dh=[pr@ڐGG՞~d7̆|+8|l0)=4G~;WwhZիe$kb[r9$3a_UtE kUv% %{^9ǐFyY|]m~Nq5֯^cS5tXEfzB:tG!&kgZ={с' 3봹G?Uej/0Ku0:7%m0^T\ "'Y'UL(*$<}SiH>{nF{*_赴lȨȬxwcŹWBߢ6r@nooy_"Q5j95񮁃nal9b 9."FbB( /t.x d@ĩp` cveC}6ڍ}{~I%{[@l WGQ_v8E<篈m{$ /Кvs$6(E8=L4=yI4/,"7jG蛦bG׿ +Ӵd hX|404Ab8Q+!AͿ PrZU-8 Q5u7 2Bɨ (k.G({U:P E@ q #@! ÿq"a.1`bc?Zל^Ep3>E?,, 3.ToahmX#F%kDvw,7"]X2?`뼑06S452~k_HJT qR3}g%]\sFڷุXhZ.+V\U"lb2uu^_0b=~L]d6YĿ cmt,| 7uM]{.-6?M4t@)OooxjH6[-%(Zd7?KrhC/pϧ(Y*8+fꥬEIjT%v/=nϪZ^XrؐV4ybdԂ Zy˜/KS᠘hi!4`{4 T ÓwePyB&_ryn[CPJ@tNXp_A6Λg @,Ēh ^'/ĚIC|R5r,ʜAg9*w t \oN/Ri'N V^w =tw'Gnt}W jCnL='pMǯ )v8GAHOiѽ2k~bEȝ,'a0=23g6ANlx6|F0j xm y)ir,M01|[o0m)5Hb02W)2˦ ,^32< ;yWTa=if=d[ n.(.h,;jɝk@569g*`R.c\,L +ȑoUK6UddիFgEm"1Z'DwvjVƷ*UYseP2N()}/&Aj6}cXַap?@/'tz("~ؔLd~?=c qa;&㵑5_{N!}|!(.|AU1&둹1av1 𗛶~K`իFjռ~Cxdk 5YVO<>@z=ݿEi+>]]y %؈h)Y$U6` ₔ-3&eed%e%ewu.D$C1"ԫmWʷDE}(Ġd.E85*B1!˓V3TC 1Dz %Oĥ5Z2/n#'UnP|^׌_ }!.wx>w|f~F1#z 3sfyB68x[Qhb )>Ez( )s@lu}e|#1+Y9H[ ?eOcvXT ~↑ʵ{-NDi&W^_.E"9 >~.^GC}= 裹{^i:XTVEm/TaPD\_ySP.#=QE2VpswcF?|aԕX?H>:\)T~0GJj8}J! Q6tzF1YI4xQ~,nCL?vS?#{ +Z$&#ťQpP&"ts߽vj&J<ꝾF pe-cv y;(]ll+쬬/^1Ax6T؉RO{8^Z\}I[^|GODcDQKJiC]n.fHNF*̲V ++*VV8,t{Au'|gQ, m#a,NNP(p?vjQ^z< $y#ߎce W\X`J:tS'Bwʡq@IzybRI*\F;V(dGI榦j:jqÓe;[̼ETfU,BZnUQ4+9W_X}hMU!."!&eXZ撽!DvƻZM\\\tiԟ]Y]JjZ)uW [1RK hP+7)H8!BL D4Ҵ^^.=pˀiwPfʕy0DT-BX碈Gҭ.D#xԚ\օj(Df6?ttJW7mKOiUq+γ.lr&BI !򚽥闣32ͥ+y< vZah(zVXlShfZzRVJ,6j~3@q &܆ص],ό ſt$XmܛF)F59,kbbѡx+Hf~TRxz={! s #u+2Bj"n܁/G9t#ly׻>hBeq޴>[sxbhk,|";lL"+fih,u!G }{2}fV\O5vЪkZ$ONsUrEtxV%^ ٽF89m<)(e_se׿%?LlIw $tO[0a?R-%z|]}Fb҅ISNL"C28\Qp@{H$Ľc,7 U lVpSҐ%[<8k#3bf9M ̦؂&*'~ |v K NbVcShAL H%?ޕ:|?` }A,/;N$32', |box;eĉ|u/Jip,h=dqɲj' =6YB֫u)#*< 8{6߽H&`\J ]P)DyR5&R~R-Y;*IPNi;Ў RƀGO(~_0ЧS> :՟4S"^F X94͉AVǶ8{3 |4Xʛ*EE6Zt${zAigifBн_!{ڬ" ֍!u@e#tg 1(ú6Ħ;~j@P~R,ȭ y,ʶ;Z^qc6:"!<˅Ѩ(el%õ{Muyk dyHgT #=obCJhB|9k]!M ~9 9a@|\`BO޳Ѐa"5n)!+u_r5l C_Đ%t7a̞xMFe|fRwo!VТlݾF 4 ո@vW` ㌱|xZR`ؐ0yng&h7;Irb15xe_k-ˇ&ywtdr[r{qs#wyr91׆r½_z[WT2wvnsR6eWkj0fۏ{E4OsJG}1a{\㒟>T\ ﳑ/vY}F Es'/~Qb}n}Z kfd8$و@e+>\Ⱥ7=N qǃ?_ 򂍴s vg`+[HVD,=!tzkT ZQ[{l Ռ֪wry^?Hi{wz)*F,V?*I\J+[w: hXf{fM-'忏'ϟS6uP#ī =-tluu0WƢ{,ۚ= \Sξ2-e4ɃpSғޠ`ˋycď`{[)ʓmqz} \^,p„m}ᖈtAAӊBT͛Pǎvcpݠtӈ*=ٌ;E(ڗ,wa=Cа/|7$:*aQt6^1Gl5d%NC9+yԸP?zV9ZP^hJ>ˊ(=թ;$'a'}c m]6?/Ro<}"@!ĉ }u#y"raL+#bzH1ɵFƵn tXmI=:(QxjYTu+Qx6U1Ek-񰇍ax]̷y =Ô{ l!p3EaWb*Mg{s @}>MXor~J~}$!8cZr"'84 .D"¯fa^~Yw.{SZWZzWJ0|al~=9xqξTR#J-pG n涴o>"Hi+ҦZB yŻ4B}<,ç[ۮ+F1|_!wvr=m 5fȉdVd(s'z]oN5Zt}Z}ˏt{ў&zߝ32J1yQ3' <*Ah,bCu?䧌3G,%q5sUOxo=9?K!X/EO=>1}:xǏ;iOccccZǵlt7ݓ8&>mIi}piH2{cZ?'$ P|1#} -'UO<">@7 n1y>]ilUama/F'(o8Nƽ7=! n9n/ו={H\t$obp&jZq we7QBuJRRk1RȒG$D"Gܵg,si8C8tLoKS|n7V=j+QZ\;GfvZo'짢jիVptdy{PT*,R^z+ׯ@P?DxiO_#vmbȿ^@fN#"FQ+U"5WL;܀KN$34u_=!"r.xxQ0Cec1mbүF0aLeĬ7 rI6SQ">ϒddo,~;KT|7ÌY-a&FoީQ|'u/<}3$bs_VZRL崙tZX(qO|@m /צ $f|8.vؒU3U^  YñDnW+-@a/3"HoxFeەSebɳt"a nY/|5fh+kBIHe8Óv~qHNЏ5̥>F ]^eqON$d-~(&=Z( xDnsqw0U:$rtxsaKbe0%9a"dgmSS$CI}W0B6"> ?]g"2:UB*QaGy1S4]\~mw(se`QuUTeo.:\/S~O5 T贞(*Ez*kU5@U0ꉲţǽnX 1C׬7A@ G={ q`g˴o7,eЄDmL`bv+I9|'v5B]l}c3?!``Lf`Bd3<U{8׽Gy[fɘӡ.%B{&hE<3:+XB3u_.ѱN{@ŌEY]d^N1zM0XaX60O[+(F-Co [Nˏc8oNAƛGcد?>\#tTe&2fRσkZ kIK:I; .ݘt=UE-'KSbx_)q{:9/\qzѢL)ӟ@(Okg4*9DРWȽrc m_o nD?tT\r')ֺJVfrT/ c}/3f:wOt4?S]z^yÃF}Y:f &ԗCdoKɇpzɦswxېn '<5~ԗ0^MDKWt1#fB3~+ `A'B_E/Cc|w,3EF}|a%>3|[#SAkXfU-H:EpzXcs||?,]z 4@S0cnR4HjE z!yHZSF1QxؕP*_2rT)w6ձhYvO Z`~ee*h{3{}o&`<9T%ȥ0C%&jJC%B}xJJ!=])TwE!F:ݞKPd8JF3AO?rWzY }<-5nkdHr wH?Ua>Q߽vkHȌbᑬ:3qEfzB,ZVƼ6Y jgFz.m|OWsOF5~lc|c w45eQF1Wr]`Q;. B$qv9 ->0c3tbDea𨢉4glqE2HB0at+=-5FdG 7%D%/}fqw h8DCˢ!!G'S㇫!Wc1Wu{!(7krCbϲq֭Zau∬N?c"$!cR+2Go jGH[fѷfE*S}'H2AgIZKz-a=ʵitԪֵ!LfyXQpC%LYTM<8$s._㸒/#CR*m _ B+>3'Z0cg13ώﶦ?7A*V 5W:jy k8n7|p76665XI r_y y9^{::3xF[ |ii"Qtݕ;K<0*€I!$ @֬lllllllvj SX2z\)Q^ZlꤩHdfffw{n%tn)hgضWfB23ql[+;apX\B'ŧ7<@idoe^a]r>UTPtQ'f[@kdUHbA>n 1aH!0f/UEeF¾U]n0 Sgggg_gm@H ӯmI)RR@I$V æEў &a2iWߤ'yy>$~x}`[y,X-YIx6Bp| .E崒)cb&/s(0 ֭R4VvDAY D*phUN;QAb_wEx ;{揪4v8Jjq"&ubmr&<|3O|c?tە ~K3Ci۩rj+mk,lw]fv>J02F$4~z$ XtMqmxAvȜG̵Ml TPJxXueO}3"Dso6A"ۂ"5O~@ p$n=>LszR4͞^}F!"V#p/9opsD|B"vB }qd"0[+oc6v@N|~kޠV&뼖p: >#46w ɚJQL|86.WTdeqąMbI#~KϞ:PYY12IQX04՞=5?5 IJ9i^@@Љcdž0>k&qD< ;otIq[!}+<(*Xuf@8x'Pe(٢`A@} LX7*81Rn^v5$L!Nm\^@y38P88{7l5^L]ſhp5JNXc6y> ‡ƭ;Ah'g[I>џ%\EG!jJӃ z^ a#[ 6<blw00uJ$2yfrͣ`-5 W =%Zd*׽jv‰נp|=},%!sB.Bx&b^l(8[\ة wdG" dq |mfd"03LeGr2~Y«!ƼټO!$<stIa>X ͼvL 2KWiw̥)Z<#* FY1IU=rU[?Pɏ_RɄ:j[ki[^tްȮYp6ѝ?JqDH\)l{0'˲E.~2W MyDd,1dI t*Mp 3@+1=Q'ғU JOF\\n.UҮO334 up:O.v:#MH%7n>}[ڸ*駕k\)gjeoSv,Q"p}F}VufSZ Q])C&kѪN4B[I)Z b:=^953uotUsB_x !RH ՞` 5^=k&KxCe CbI9B|)%  +5զ` ?nɔ\ɓ6 j!nmpV ޏYw,h\*a bvB4]Mbz$T _S_P~yGgwk."yϵQZkPп!qP#IM >_I"lf6jKO!okMg'oY-'1g9M6> !z>F ~bn YzςAHaC۽Q^gw!#]Iժ89'~iAˋq<$r;1ȂMXc}=}u9_yg}mVs9QS)D#|!֗e-)<'yb;3cHeڏ71|#C_b6#OaDxCPqFihD~{ueg_B/c}\i-~#ӮN)$!M˅x;A}B/#@weQ#aO bu!B_Ci” r/o+gccW1p=[Di{2{l-(|=˫ÉJ/ Q'E֟w!ޒNsHqGI(|CMeH렵a4lb1쵟 E$DzX .lͮqTI ͯ;?M!BSbiE+!Fyn / \np?‹Ÿ~֧ἰc}̈dV)*v}=U\?OEvɊ)(҄b(2_q/TfHǷڿm@.rc͞xO<ō?R6B3DIj_5TX =ODP_ZpDZLIB6?ARUX:1ru#jrcݼx3gQV7{K! ᫉ afJ:*T s\ڎ:XRoZz-*_zNDQyAi޵U(XJ37j^/ '(eex86`ģwt6yߩ4QZWĨ3*a,Cd>9|HXWXXXv9v>bZg=(^ӮIdZĜMb$V+9'|0\B) fD{d>ޫȁŞyCsGD~KMUUa"*CE|kOZ+Q^[ֱdxW_3ߎFW o}(R*LԄfDvZȬ3#3;gyQ[S6cWt`?d_B! 2tS_K>o5缔A$>2;3 p[iFc;#+@N-~)U)hTɹ*^}l͖!j_Ðwmzq!.aS[[ja$!?/"j>㉎qq9H8cJvѮ-~Ld_ѓckl%>dl9^ըd*G!"@%{ӔuPzPn' :N~'CKjM*V6 yjۤnr'WI&lwLMeMn;+H?]Ildk}[Nk"%b6W j?Աj=2(A92叉hj@QW3TXo7EafxuZ+NmS^G;*$@ąs]&TzGC68wcug΂ȥU]̙ȱUZ^m!.dм㏆AÎ| FeJ%S琧hBtX,qd ")9 }"΀dqP7 Rn6h6:Czwʿ?wPW |]&r 0RE: +"zJ 1Ƙ-t[?h3P7Bg ^xep=Zj%=QN n@;aI8l~ Y; ]l&8Ô36ȧO}-X^hwxApx"P _'eq+H`oP j?*ju9HZ|wBZ#ס3bL0n!Q8s 3S0rPRv`DXC2 ل^ή[`rwTX)CQ\W ZC٦4EfJ XxT|f].it& GX%O:.iSE6}M*L& tFڂ[ː= 2i%{^zmquŒtX"8ü׿b^u9X~Z0'7;b#/+xY_Wڍ1a != 9EHQ/R+y Pp%Ɠ9o!V GB\y8R4SfdeKV.\ц-wiޮ惗 ktXLkw)0OێNI$pfftQI^;5f>-D^U=Ogۿ2M۳SYYG텲b7q4a[")Yl/u =2Ohx}2f:['R#7?k|5r~xg ʖ ^VfPNoӽL;>/('%@$@x=`׼VVRS>]St8sZj*\j4E 'n)SC"bmI^nEy~ gW>l[ٱ_hdydcD,*Z)5'a^Y~WWRרcֻw@.UJn!& z.x{WK"'PݕjFӺ0*aPO@v) ~ >7lbYְh nӫ$6Iu5幫K8*=5ގciN Z up‡!L8PvË %"hi`BL]qm\ >*9XYErǫSPx?,"_>h4zYo;σܖ9ӆ^%UnVUv ;؏Kc<< 5f1#1}s]䵹hZ}Z\BͷOߝV"wlcKg{lz=ƯT>y][ y M5q"i>UCwOU&w_~q„aB%op MyoXx+/Fz(ah}P=}; g Gwe9F9cYm(dz}0'^.~Whiu9a'Xf wZ+oMy'%C:usPB1M2A%A?x_ʞoٴ C sZ|mv'k1aؚnqY8WJYH@CqkCY]=~Կ[2"c,t Z)GnfsDDD亮oTT:[tjYu-:ԈD_dJceLHAB[0$%x~7A5{ДzUwxϳnl2C 9[][[Y]]oaXiճk2<YqG7K }R+VuU(6 o>sn%]߃^?;rcn@hW;L3$4)1Rv65Lރ5F0@:KU?iVj+V[ }_On/ttϱVV0t+ppkZ/ UʫֱcRn%n)/tƬd‡.ے(4tf\Am}#k^ AL`i^Ex]̈uX0wC]ev[3',TdVujԫYr%Nk8mhkBp aOI{m'YYtZ"BBBw j'wLI8a H8MmjJt9Їf)iƮs獮͠~8`[UB/ce]PJU$\DXm&XDEKU5)JVΜ~bcmn M2=]5ۇi O{Mukwx8A ɢиT7j=D{LY^ uVNg3ZFwyw g?;- W6TRr>}۬d/Qic=?pj)ԩV$Ӆkh;m7iLYgT+r 46:#8rr l?di 4Zj2ծIP֤:DeW%:<^gmL4T跊}>I>`& v`NА=˖lDhĠ1K"Xّ)^ \43%!JށXcyjXTq*jgpZa~8IA@k87k$zP̕aq'z # 1q#K#Ŀu&؋&AYo|?ø寿-:\|PSgF*)KcXA%fg{PSѨa侏t@s(]\}*ciXSiڪ I~R $p ϧ bCF`@=XDgN8]yO"Dns k؜M(Ėb [*Gt*5P#ײ/7 faXjw~B 8jGlF |?d q71 3-> 9ӯ]s5i 4T756_I2%j M/+hwKlNF5ܱ06!{I-&^vr1u;H:_(_`B>Ya41p>U|(3H(>*PҨݙ 0{u7'lU<{ ˂ ծ@p%NZ]nL"i!B[Wr?/[ɱqu>rMY>msF{tr5?ڿ1+fg<'I08~y9(4QU\e\ kQs‡WT ֬^[x1vW7U#c)bf[bd -%[ccjljyFL@gdggޱ_,k= ㄫ#z[2 "v67vz[1Yb߾}dE~NH_dZVo^.羑E'xYQ8& |'`I7zRFPUZ:BZp'Z9/BJ(s}K`45<]?sv Q!DmLu" U0faj\8Af͖ xZ:x@.l''WREz-1iP;:*{C{k ~c'.'P:`m\_Y>Lj-SR~Zu*NblX]j,1Qd9̳3^e-ɫG|Oa{!ޝGZrl.S"\551Q6eˊh r+1,SI`jaڷ#,\Bx_ =]rACه]AqhKؑQU &cح5Êi6-96949\WXb~>"|d6keg\fݥwas|" w۬!S>xS+!8tee8ő2 6^MhxlCC .g65Z8Ic!HyŞ s+g5 Hg75yQcbi8pC 8zS N;&=?,p$eIzMp=-lb k}6"&u=/KPF+Lͮ#f Lyy_ͨGL+DDDZJb[8B^jzb³45FVzM}*C$D(Ca!B9a~"%PH"j͎hx(\mL't tO^y}={`zΐ8y:p>Ҥ7{CK^NgtzcVi袊ܜ_ԕΙvҩ` "ffx<vq5(Ư1Ef>Oy>lڻC6Cz8;FC~1$Y!4o7\B+@ _>J=vהlaFs~tQtAۯ1衘qd vihhw=myZǾ3}|~ 4hHg.:/,X r^'6rxFy8#7`Ԑ/F1cX!I!H7j+c=;>ۡ\8X`uVE -ҿ6H셌){ !F? %i25ajӯ_c{8,oۏdFvig~;xݰU+/F(Gc^3VWhУF>2=ҚG^Jttbx4 &%ByӲ8 jKFy 竡J~D|vw}o{؜W uSx3Ϸ+09 '7z?]D)UcK84u\T@//.2]½V&,/QĐXvB!]jVe}kΙuǵ˟:99Fn9.6 pXzqvC-0^,%J(z'Y҂Ž1`0z['F2i-}NϼfF̔x",DXO5$`FufH < *; ՛Ƙ,oruFw<,dL]]e*tHAvs:QaB珉-V%`^ a#/19uC@Ak{oi5+ꖭBQG%i8YIhǪU""!Zs42D}8i/W녏ʯ }0rT܏0ѷ,95nY#>pb%B $OdNע0zÕzǓ'@_Za \oZUIz\Q4i9o~q(CXsk6=]HE*$Ao {ࢠ9@$Id7o,D/{Ǒ_+5LK?JзH䙽 AöXYj%t>z1hƢۃ2:H}.\  K}V!#p! k%46?;]pܠ-Py!t]mX*ţƴ+b5aJ1v;۾G(#t>/PcWಾޘzA|Hoth 8ջ2+L&PS ˇ}$J7Bilq r޶R\ӟ0 b_)_A{ 2ei!*^nQ?OUsx3(|&-ړz\ѼUiU!PYqQӘ +p+ uPGa ͖H3bf3Ĩ*-jv i:[ི/"V#xG ~|_'FCpܗare{!Jtbsv;FQ-ywH]8t\JWN9J]{rpuUB~cD&-şȵFbscc3u 2uKx0p({IE"q"ZJNYǶ< 3WmXUp2H_?_׺Z=e57XS5m_-ml6ZOmf0taAcU\Cڧ=zrRВj-=t$O^-pŎ۰ߡ_8z (D z^Tx!:>OJ<~ Q̯wzŤ+Ҹ*ΘǜRvG^8̮6X9z}0sٺKp3, TA<7,8g0~UB"ᱲ7Z9ܯ4Q@Dx@;lABxx!Rx'%&=_2 < h~ 0"B=sxAnH>%HȪ!G1+ f]{?Bm_g!]ZmEl?wiL9Ҹek[4!ސ6 @6ZujV=j~c{M{忩[nxDۼ|^ymp{ҤCե5Z-_tOH~|k.W9&i1tz}$ZUWNI;Z}mf؛d旴Yl{+w(.<8+&|Y6DZd6aO4~jOn˩{:[֐6Li mfPwQ2Ttw,mֹ̱V1Hv,^O܉9VimZ`T+( j&jlǯ:MYP{'W! DaGj>zoM)s@[a3Hzf#?k,oH` o{ʬn"&4m>7 zP{N7;7)t s?gIv,8*iBlqgl*ʞׯZ}_xk\5Ѣя#=7?[{Go3g+;HD;7媊>\ 2Փp}D3D\-5#Wڽz#Kk9 *zc!YOY5#w◂F?"-:B/5v֭n܌0dx:8 g@ҏX!7O2a̦DF8hnH"if}ZC'z0'Jy!"5oWm?}, ׸Sec?US {H2u{ƌ}lqxafM<p3,a_,9 q'bMGͪs;"IJBa< OW@Eܫd_y-x̶E0N$"??e 2Aဵnc^CCܺ`1cn`bgBK熻|{ڍgdiz)Τ.(FXv "_ ]-6Xi=>#e]0*kzoȵ:7 ,pkqsOÓ䋚 [hMWp w;GKJp\_W 2>2<40`I&5)HۢRk CpϐPaB7λ N,f~sa|ўzEKC;J&h)^G,Gx5L01\dEɗrd '&O\'b߮9ȁln274`xwM~*'ionC=+[5Śk|+4ɛ]!d'_w<ζmxƔvx]YС紈_h|g̟EݑOc?sN) ZMkY$q( Dxj{a'Ra_m'8Uy Rbi!.nI|L]d!ƼS%jc/tcy~{p w "E?ʷïsq ҧDl\F/Neoǩ_y:[U-!bj4k,y)H#ykm5CZ r NWbKIQJy9W ]>ߡn= !C٧osOq/3Y=Q}? r ʒnqTϋSG ID.{f ],}h 9Υ8jt"E{A7IFPcg$QuAQj0Z!l<-ħ~2qQ0];FVD6Ax}Ƽ p*^in̅[$dq75b;44Q'St-\5Q;PE^]V"ji LȺXy5:䙘0Q <Դ{Wœ>?Mg6 ,F7X[7J (= //K{29UI7>Vu^m!tī CHo5۰XEƥQrfvM0I|iz)jȜFU]au-gm:(vr }'   qlB#Ms\ƹ>vFpZ@?& ʎvlc˹/9bB0|:n($}wy/ Y o9mJDF; {u@|'^g͔Ȍ ֏3dfFu \d3U+(n;(y¾hGkbCQs\1w+5N#/>,jel ~>gamRO')=(|J'hAu |tОNjv kc]gVud|Gaj)+؅g>gkWj{/tSl 06>n S BŖ6Խ>|.C Lj[?1 ?yB_? !Nц jb?eVZ+Vq1ꙍn5]A|_ᢈDC3ZGr!%4l|6HmE">1э)<aI5 ʞ31[ lTD[뙟?~(MUVw'BO<@tBE!ɃF/Lr$4DDM?9w_:c ~ϸͻ+TBVG aĔ{n5pmȉY0(վ|#o$wx L; ]2ȏ{&pʏѨfh;rWDMq}&B0?q38Ŧ% a""iw΂Ic߿EZ_:M^vUH!'K7ˏs&+lPe|MVdn3*y X˂??TX<#?iY}oHi3~Ffmp{k6Eo7k׽;5=HMna`B:k]ޫ ٜ;ݴ̝ <\"C%qJx>Ng< ]񇭋F+;׎uztHQS>Z{[[׾2ꪨ/\9v|qm8 Bquv1{Ge1,OC,\ʄ rvY.0{N<['^Y8Żвsor_uN" =_'H%-p8gѣQrileB*s<S?5a>!t{t)ӧ2oioJj<嫅"˼}2]4 վ{}sޟ<3xP4Rϙed^0C HA'*:ckI;]<.֩FgDev=eBĺv",LL?\qI NM(m֗"V܄)%p[݋i +e+q)?pEmw-׃,yҪXRvjHVۏa_I_?y /#> Crq|H>A>=cdMsy~S  M@~؜ޓIq"Ie?{蕃:yt $`y3$,?f7\Fe7"ߢ zR…WH|~mi~b/Q_\=(r"Ϗ_RtT"m_ rH[~n7fb_~#M,{&КGbوR3Db`" M99 VWY{20Da.sPq$3eO݌"rFIڟJ?T=qJV>z_.pһߐ05Mvw~ebB G v ,GX;}C$CZ+so4\7)BN0{bkG%8HwK `*3=cUFq=viD֭Vr%QþX:=\`nΖhb+;C25Y9|+ M/o39a] f{ ٿHXP,iAUSH̙$3ő*8ַpBCMpsx>!N(ˌ)0A[%)Dk*͚mLLd3!GF{ƲiϝKѲ?_E_[Zplϒίk .=8vOƁx9%,炽53* N1`26S&i>ɆƚHk/녋[=_$rSVUtnV 5\.l˫{ SRIߛ">9̙s|q7U@Nդ d4 iHfDN[9&ǯ -jH0=O#|bL\)EV0ֺZu6h%u^mB ʔ:@sGCLд$Imv/U ~Z"ѹбoxٜ' ~~dUq՗X9pI_'WEp^c<k"#aqi!7?9Ql6&|CT"O KCTxVCW&}K5H M} GVsmc6#[q.BRK3Q˛vcڢǢn?^\;vU L/<; JR15{ٵkjP3As]CrHyKd!(>"<{V;~wu2"*J,*Tx&e*gRs=2sZԱ_qcfkvIB&c}dv]ZƷUvKN"/sܻbMun|=H`.M^ny`t)D3ƍ[beOWqT1J>}ܬg*K!sQ<4NB3עe_˄Mw(e< ]BBVLVCȈ9s;Hw3ksߚ[fP[g]|[_fp IѸX na2[ߘ5^|!S{+Tϻ~Dl8c7*˔""E,a8q;ʜH8l|o)k\N6s P{fid.(ͫp{V9kVR""XRVDD*+N>LJhD3)J@7&s{d7v[QZSZֱMPPVsF,fINcax0PEVεʺ;q_7|^aHV{*$_DVJ/psФS:8bf{c%оN9hJdum6 00 8ZI2 Ie÷㨩#}S?e0<-<"11- 3pѤQBv@M\?kM|g..'6 > oD/5#ų|yj"9m4?q'<6ՑD0b~fszގh̼9!Qv_ J}7f<$G@GGMvyuA \Q;79Ux 9xf_E;]z-kv7{I\QC<_۴8+_yUQ8Pn~QNwn &w)=>h %QFͷLQkn]࿃4'7o&|f{K;ehiO:R@.U $Ezqj~v'Էq1l4YaKs JHY A7} sȠAkoJ:C撊e&².,gaT=@e *.Hkj챉l{|1چurĉ=.zquؕAPunmN7j Ɋyxp2q\F3#c%߿z);l1L/3WLJ—7.PɆ@RB8+~qcHaY>3,adc | :`m #c\B׈eȈ2AtK'HՁmzϘBsk+q ncUE%A0EKczE< U{Uo~s}î:ce rzǬ " ͈^p0l^<=Y+85C\U7֥!w#X<|W@F1מyBSpg?unLɜqŸ]t8RRk66Mpg<̌_؏Epr[sW'UV{X.aֵ5Y5aq׿汤.<'D2OGZ{[cnS+n6ٚJ&cr6 k_ז]-gxbe\xt3&1A7Wf;2:?Xj[y2]+f]qƿ[A4A{:׍ :Hk_sZ8# I4hqE5òm՚ gTZ5c](WbaFeVͮ-=pc8ͅ'~½ɧe?\k%ɡ'wr+fb9nFzŬ>ޒ3o{YgC F̏6xYgX2G+791vxi\;Xed'\8u r~Ocಶv̏M*'h' *¿tCnƹJcۦ14&.ԋ 82̓f P2v4ܻ|$sU,W>n4_}<-aG`_M5ڑ,'IRlHֶkv*I [ n7*kkXboR[i*5OkCx {JRy+iY""'7Cx)G!&YGM?}C֛+D'U` p^"R 5ȺTjj_`"qcvZfÓ .ք!e6`Jk\踗 8XmYzfR̢zw~N Ž3#=/_p*_d/Z"#UQ],L{0w ; y 7 SuvMTiF;I~3XDEiߌ _Yh!1µhȡVM/cWte/^#=iGZƷ~'"Vm_.S1gv#tA!I0³eeZIdڡ{R[!uh7DxOy<{^µm6 ŏ8%N/Zx97QGYJ$fPLy/t#=U^oIk2366>¢GN^,-YЎfk >`cĪZ1͝װݮ.vuۘy}R\cFmSEɺ#2|P,E/E+|7ʰVQ֟6=z'ZU!4# YQ:Jkd]eq+""htӤWF8Xn[D.YYk$1 mƄb.bĮX H$S*9'Y$ڝ4s-kէMSIgV~4|ے\tXYQG~h VJ')ŌG5|)tVDZR %b[S36˗jl? p#*!($hz{H!.5va3CcлP}Ӂ&h4blt=7cY+z"3:~F£*w<ЭWn6(Mيc)=!}zW>\cEa#(NO֎ުF]>V*MLil6!r7cRZ=o0|RGnwyH$>Xf@ɹvmh)27(6|]8TvQM@YgiPުz{8OJ$/u̠OmCo)QY@ZQDO1-oPxnQZoQl?P[oKf4 \in0ʋ&UD|2*O>Vxi˫-~ 2Rua÷&>xHkb<w!-Įud?o,}~ okZN5|֪gT};$O%}~V1V|>7+B1B {Bx2= aB_djBȉy]hywCUyAkfkkn`ox%ƺk>nlX=揼|!`op>c\99B#48Pw[n%1fgix+ֱk1AV̈Ʊ|:pEiu'WbGAo5Vˉ^ƾ˄+:ӐD<ǴѶԦ&ətmQ>$qq3AN-܍ p[:+@9/(3gf,Z{u9\G `Of;p.v׼/wfBu)_2qIhVKҧ`>u[!onCX35Cni:TdϝE9 Jr1ORҭK43^)5ǗJSUԥ)a`[R8=)`)i7Vc=b?Sd7( Ua׳[5^?U*ԩWW8`cmW2a+k9eZ1lUJUQF3%noavXt|%y JVODz[!UVJ WAbBBB@NN:6Je+d[u[% USK> .z S##L*A)顢stLޡcS{^Ssa{0=ϡ!i5]/c lB7`J V1&\ 'qԻMK=hѡF2?@olp:siMyuRO?ˆȑ\a qOͷ(9W|")b|"'3}arխ 6{˦m8p"0.KkCˋ6}PuTlCw.TVr']ߐbd}żIS jLgP\~eŭ̈zLUB)1![38N=_+r[N-BWʶ d. RP|(_[YCꝿ, Is^0\{=GAW9ھ3)M"4AgE\L׊<̽6zwi㌾_BJ%uk @p GE7 &_gA$'9`6Me2]~DBQ1A{b-^JgOPH6r$Wh=H>8g/5k֜GؙB$?Bбǁs!s 8>mg/$8BUyVp*{40y|x %^9K u=;WmG7 G"ŖskS:3}9#b#':D'5ٖ1ouEE[yՎn7Ct-*.}?ܥXG%r*hMNt4"Y(~Ls +ļsh+d`z /2 >zcɂba7lb"?d]V|*9 ᄏqƗ?>#%;T~eӓ$JwC >88TΓOGZW$$ I~C S w|}@Ҵ*}9T5@RեtyZ=e& t!`vygmlSH(nX ?+0c<~wr=z ?^P$7I/ K<&MGLfH*#MO.I(~hwQ%>-]tZ0X{^lۍ\r5a:ۂd9)qM(T|q7KjO< ~i}6x*Ri! N5IBY0+GtDp]W<~IlO54v+BA+lZi|9o@[32w–WҤDK&1|(PXZ@X68mđD^+v5J8_WK"8a1``sBl©V1le4=Z!ZhhL: Pc׹T-?zOJFfzXP8#rfq^c8+Zֵەl[ݮ?g""ȝBuEc&v$5TD X.ˑ.F5y9łQs͵5Zi7OSR,!h+f;%cp6ӱtÕi|܃F5ms ]$(?_tFd~v{w+b;i-}MW/QxN+zuz=F'1f6O3# M^w2k8wT7b$DSt+ə=nB.sMi\2 ^ XֶkA0@Ѭ1 ̴ 5. ;Ǵ,%en>d;o=UX+(hChp^ ?}jslx,tEFbPpRDDK=a,Ÿ'[ч]D,*_"Ξo&66SKgD4L{Fʼ~oK`1""e0=o TJ6ayE^-𳃕Y 3]|=l]$d74ݮl#3ܕFz;އ @_@KQ/4!>mկAK_{eRp bx7&錪ٚڟ Uxظsf~[ ᗬ)435L5)CUxgR 9ջ^\V=TV]_)ufi>-ER} T_TNN?`,+)\2amnױc+| ,^6#,󻑵9p[Itj5mb9lz_ DD6i*csyk4^Vbw*33>S%s~P2 OkP #S?j|>ܶB&]guMU&if;Ūd{nEKbuDEv:Kʘ`|uь2fW̴T%vaOm>,Q:%Cs (W ͶxsP`׿'u]=;~bagK7SP]iPKO@W{C[!Xo:^((@vk7ߋ>m K~LBjB+Ͼ E`>y=U΂a߆< &>*7 "bd%@*+( \P"̠<MiITvħ8je{EC%!3ŢYoq)GG =ynڀ*J9o0uj)]#zN'ֵ7&`DУGnb"][-W6_; mFo\K V6$6`N>4}dθF @c3a.LU.!/R9˔`E?;x 2/wD<;PdΚ /WFk7Qi~ۮXsq(Ej/}6̤w5P~01h)򘁣oj^./B`aBY/Qmgr]!j %D,j>ȹ>&-9ӵs: oav-hQcC㇖sM$8nk}c$H`Ii0:BL#`>o|Y~zZ\Y}gf ؅.$ '|=|CN3R-~/h92yY"y 'A#Il6\\Ю]A{|z \5T9֘XƪT)Lu#_@0g%f*m+gC};`@`dST&ח/!PG^,Y Oɺ&޺o5_2~ rk,i2 fM&: 2{ҟt;e? jΈ7!s ps\Ƶ iݿU2c$||鋧UΝ3tScRrLc4 3c@F׹x`#X5y? yC/?@m Yr Į.|{'O !IU!uc~;H3n'kpbW>|3C#OmWlnQ9z,^J$ߧՈqS!B I[dd*\r{u ؍e[j~ߟ%v_vP䧹 %'{Ȉ~`Y6kũŃ6*B}TY׬ֵY]]M4_D"eY!5k{e֋ẁk78׊Q.W ~nsFnNAv6VWz5Q1=Vof*VhO\DZ4=P a/fD^"J^DDU[r=~>wN鶣U$̔2;nbud 2K8|Qcd[%a}`_?~Ϗg(-ܙ0-vkn=L/"Ff}O0w t CZB1Y4N,r\gauBƐ5k `8tv7L9;9" iÐzpՆkht~mɃ6c v~,ńA3uTR{31el6!.DWҰQ9ʧ/_7 "oy+/15n{P,0[IXFe#]zeD~m !m1k֨5s^k-.$ rʘ+5E@Ў?yN^J-cvmfgTݣlE9 rT*E,Jk}[~hVZ695\]^bXcFé\t&!ZLn۹Fv+I"%ob! tzDqnK "%G,/ߥ-E57|n'ty^1:'\#'OSrkīrf^JJ֩\;Ofj丁>]#3`!0Vmd kZǻv3|z123{I9F A[t'D$J i$7ŊHxʄyw<\f"qut&` k" '\{ srŕ% v;Kn=rRRVZ!!.A\bR戕,)0,mkM [MrgaȲ0 !pֵU𦤇.`̌VNk!pfznw)UN@8I\L44Kty׮Ҕ"{a]v ѓ ),owG$^+";= ӃJ:9u\Knf CHi1RE)^Vȶm.o*DEbrZ1d"e})̛l~ل #>Ea1hMda3~jHz( lkDAp;LX,'4?,:sR|gs(oG~!*:5)]raI@hB_޾HF1RRSz6$ &n)#[fgDDg>!>h[5I=pط.~֧wJ?b4Kr"6V2^/>gg,`+< ZA1k-;G(d A رyA}[]jf:cmeI>7FM&S-l!&HuoԾa#AЊ(- Fld1 폓swvN3{ø#tū^ݏVh==<4wıؘ( aAׯ#aq1V񲱰YpᒷS-#$+i -ӛ); #kXD{ָZ\l+Ń6۷iSl#՟JŤ/Ң 3X~@g"CpX`0 rcʘɦB+>O}zz0 ݷ؈U)Z,oj٩Ygm?KetD 4'goK4Rj񠺝?mgF-:-i]el,W T1xk3MɃutkZ~Qd7ܲڷ\zuW\uh?4/Bm۷HH 76˷u:\Q|E W"ߑūH1-Zbٴ!͐Aյr^ѬU'U-scx˭9-~!YBKI&Ŋ6 {Uzv%=՝[vęe쨶B#cRSTP&/ С\<R02 O%Y~=\bĊc7t=Nݵy@S@Yt$&|'wSZxΆT\iYPBMz[ҺhPɼqAg׵^W5|SZ=]1R#:iخ>ja3dk}mt*I'W XX&u=$7 t8#/P㻼6X kkeٚߥs9(G {,h)zC GH}/z>P 0n; [e7- ~1X΍jZㄼR㮸{HI˸؎f\=|/A FuRN|Ywlc$p wo'3e-[gyYmeμ k9Cozћ5Zdl)6bB33ջ.I͙-mő͛=6LyM4ZzyA[]}ZBWɦXgFL>jsomA8I>h< -PGj1USd ?| xY/ @DDYO&0MEI=nJ)Kߝ2sfH6M 2JC's˛]˹:Iz\||::ex*Ɖjc2k33ۥ{AFS'?{HB{)p3% AN6,j|(B2`ۯ^ns\_VIR`ׯ_g8 lI.3F(u_IǗ2袊(n]yni{ikRcW+clRP)Q[mP ,(4 h !T\TT]nR3PLJŌj‘kX>wCBQ`2ђ"%ՏΛil(X"^ B JvXAH>0YSw/{Fѿ UkN$s4yQd ##@4OpIJxA)>yD T}l8F.:E,L 5Vfm. Z8cfέc-V##k5k!-uFɹ?޵_y@A6n)TlPo(3LFx g-h$lrwr䏋=^lmnk^g̾}?&8ǨFs }tggɋ%n)9deJ+n8N݅R&xT ~%R4`JP$yڇ@vR*uԾ7V^c^@_ÓI@jLj׃pFM4b}Y =/VF; d* ДV53*H} q0XلL>-}SV()+Ծuׇo(]x#B(lzxETZP b&W `ˇ*g ,AME؇ ŕQtˇ`0ğiaǚј1'/my܍Q@5wU]j&Gp~"jP79rbmhg7lFŋȎ݊:@™nhxmE$ () <2yL? fp~jd,9ëڊ-K!=A;)yˋvadN= R{!!'I^,|?{>%_ H9X0$Gt٤*ev!7U@W`H <@^"/M\(/fkLA`/-f5w] 2-fTgVބGDNoVuzۑWai`(^ eewFQ$9YS EZ1goEBAb]Ҷݭx+\T@8k \DÛ|ۼx4+J2:`Zav~(TvxM1p [}^/ðЙ$L+y|oKI)?׼OE[5EK['\f ?ҁ2mj^g)kyW-^^2 pB0'pC;ZZE~97exto> 28$6S7w]ϧnW;fd7YYgu{}/i܌+4 q!ɥKb1#|tة+iвGk!*Ow ~H-Hrjv[Ahh-{-WAfj5UࣶzjB7YsE$',T?e ](&ʪY q^L`o\UzV~ԨUcnmx [:F Kv|ͪ{ײ cn_6 gm6EI61Uk&h=T|F9@FNqV3a;S[ "3:Wg:r}B׬Xe7ht?W![[m.X*ahdfyY xh[Sc[Hw~_q(~fmf.U,w>m{?'cL?gzF/WKg>)5/ŵu"qeh,UZ*^y5*}]n58mt|Ë kGg&d~Zm`sZ>kZپ;V~lh;__Jcftg͗e/J; W;c&f`܄KZ֕]Z4Ki|3?&esjO)v%츨:!_s 2hވ4X8KU)s{,Jb$L~+"bֻ[L/oqw|ޜD*s]9 V^{zL$V숋}YZUs쾻߅ qL8adU*jfvwkU`x)K$""w OQcǍT^&Iggl& pêά;.1(qlVD/xb@(3ä`'(@ur@B@ pdYP pλQT'BBBBN А'BEVTK56 L?m:R $Vv\5iԥ)KV{K 4ؿBayIZ $a" ߳Ñтs/p_+vֱwI_Z0 0jS/^ SZƵ8h_+U9v 9fcYqBpve (hA^lЕF\n(o |- 2n㐖,$Y'kW*xj,|Rqʺi?!I #5@`'i÷>\Rֶ]P$/k d  ?(Yϻez(ݫ.c6 jL's\DXa5t4ض꨼3ꏟKZq(]ÿq6|kSu*+ ?zRϵo[4&Mp| Sy!VIfzR<~}È+I9,dKC%\Fn;q&[졟-_WcNHT 1| (2<1$H.^"N[ZD:as©-5h ImWWLS:&4FcqNNp􇉤cnKK+5ƴ Ⴚ#.{R;w ܒy[#<5|Qp1 m:`3 q0bƁhxL'x4~Aq(z} tak>n V`8 6y! dϠ`Sksdhfڂ4߁><`ӂ+0@W:posA^> !Ra#류@5 /dCJǗ էT_$@pZPUk/Gnax`=Lm]o[gD_Dէp> H]Ĩ/҃*`#zc*J=X؆[F_ ͱF^zƶ_؝asljL KZmsQ=C9{/Pn$0 K)@SE%~G;1y hGL +U҄V9 ي-GG]&vkN`%_zI(DRd JfƯSl`ƌGՎ.+6AFoYr^?ڸڃtXatvTr sElBU6Qp]ϱǾ4etk[D0ly_]/ݸu;7qâQCmL9uzgŰpJ9'$hbb盾; _ڟCWL/UW Qdrvai2 3#٣3b݂)Wcپr3KJ͢*D(0׿cU#0CVf͈ZF+]*=6|UeKEu:6\½5Ęzj2p 'Y%D[a*_Ǭf_EWsK`Xf^ZV(-rA)i0eEWP(lХ~v5<61/V|k ?EURX=k5O.4m:u%$6юfGY*/2mz>`90#ְ_+ER`UXN4BU󝼹JMVjV"[vR9 _9^ӧ/]iᑓtx/R CqrC\cR2jtU[ʨ Q\;ڱfŹ7PfqQ5cZ(dF ;aU-}R29lcD( Q8ǃtzI GʧUI):tx`b.I%.V!@  S+VnJU80f-'ȽAzBO1|*xN4SddUN&M?vBco'(Ǎ J7Be?sKMeqZky;K|O{p{(࣐.ȝi 3_D( fgfaKYuU<@oTk}H3+N!`!m1=X~eǻDE|2dgJ -:p>hd@y^Z@ֵGbc(f I#wy~V1:vk+qL)] ؼXֶۤ^sςW,s`_d5vnǡ.X39h6/yC͐Bq6J4E1ׁWӫNPW~==a8+뱭ncy[Kl;'aVc(W轎sǹke1o4 jyY0*܂+'e7 wle>DŽ5]m";#rV[DŽ(mor7$Z1L ~x0[j/JE5%()BgJ,.S>F2 WȫV&IOs@)r&[RU8{DSXQcCN(yӦkew:2#HKj+-JR.\zHRòHCsJ"\N0XW5C=|2v j$jR5n8-P-FzDOwW 0<T!w]\])JRDR D4oݜē?Mk^e300ǖQL#Y3S\r )ӝV'y똈\JƘbk[w&ϕJo3ϭgII o5 >ll cifIF/?$"cDW7۲Ԅ^G[FWq+Df&&k}ZJty?c4бq|Wz~zrE 5Ȗ&dvą;bq~U(+&z(c('s܃#x^=?t8rw' IVwZ\1?nThZf}Z qhGwס "O`n`[G_y^}m2jI2P#)aeCݏÁT1LvSC m`%@l0OY+0M C/LG u "phM#YѬ@4Fd;bbn#D}(B*;@[<t9h[AZՑs[&2tlBڅ=8&5BUANrM+%ֳ?# Rz*:Nר E5C#@s =ޟ1F05V%R/0JZ o,b j7ctbTv*F+i ɐj;{s=o\pAj12 aa} &\s'ֈU߻ +>yAuu@kyQY8 W^c$ ŇSːǟj6}V;qlXO; ;uH$3=꫘,/%1iw_g44fN8W‚A^tƥ߬MrN2-H[T沊3Pbt6&M]Qb+'=ey_xcؤ BL7Fӯe/'/0:WAћy&n"+(uӁe@R®Orsfo}Sx[;غ7ʓʛŦ;Qߐt]v}IPBpowV2U7;ҫ̾S'h2HϞRw%8ؔcyP1:V*ÉLeMQ?<:-F6n$Xm[4)Å4R"u>"z6oE}V]u%ZT^Un6od gƩen[UIeWH=T3" 8v CŽ +bD+c2NH4N$u*/6FGn 3gӣ/pU `I LSu$ӃQfM!yXȾPfk\ڈ1Qc0v~iM驣MLxpmOgf2LI>[$j CFTLSFql1#5/avmB R̕;`a } 7!nBl&A20% <=^e?"ۺR/owU.0kA Xuq%[bZ浮eƍ/vMt4 J ՎiC&|/rVgU7iMμ^,R(}dHmcy2fS}p&0^A+%"Ӡuσx8r MBx`{lv=?Oil5B MHQ"1uk+G}XJ%38k?N |=d]oاqR5E_2Qj<_Hȶ2dEn1%J[uujcOߖ2Q%&֥UmX. iϟgKE^gq'd* GGgסkR"Y}{= xo] ףsTsŨ>nG5Yz w 3u}NWEqش Ab,`y(Y"b߸S~b-w5Ƴl)i9RScQz\?(„5\o惠Z JaCZ~!y v]8s75+g4"bhHCf˜5axo:>a`|\U&p ZG$IH%[)2TUxfk]hV#Ao<]ˎ9)mڙt7I.pUh_x,Dw+[#SWr\1j 2*X(5:Y5e(9ڼx0VɑkXq5P)HT0c*dG<#}YLYԲŐ*\Ux`ՇGyĭk~ߡcwLdsb33Ящy8 Hb # QI<*qEn Hkktkaˉ8TlkaҤ2MZ)v4mFy͌H.M~Ha7|( ȡJ0(ѡliTB$Bֶ֔e d40ʓW.TWOYf[k9!jf/-LWxµ'דV >,˫4 ]V,*h]wF'Z$9ʱpSgcZWckxXau۠y`Z׮״1κ &JVbEKϟNW"IXW ϲNG;nnH0rW<努(sʜS !轏l;|K"#h|[>LpS6AH UT"wJȃ:{&dysM^( (k?S !kbn <5HF3i|7Х;Mh +L &"t gO#&,g~%Z Rm> z67H*1<$->#UڳzZsܡծr_S:MI1<l+4,Y oIuG!EƘ+!LŞ\^.$0ʔ{'^e>U;2,h >,H~_Uh"DAƬ홾09l" [q6s㶁&i,xAv39+#pJ%; F~Cb b^js6k%IJx:6 7]bshWE5v(mMPN3~(A fp,_0iϛ=ɢB?՗gD~9ձtNÖ N%&t Y, (@'D|ۅ}~SnؖIWLwʎowxD~p xQF3n21{HdM3\9r=aN-1k`[[6Wa_LbTTC@ӊ]ˌzbtR0eb(0|Ux }\*_'Fq`Nz]ڸ ݟCw2WVb׃6#[TUUYD3& j@»bw ʇi~VQ,[&C$#&"JJITWf9cQKfwr_ۅZY}D)oܜ_"~ EeyA3s|lm.$.^;Nug|[uo_uX͠[ݸY*,X&cfmߓfaװP1`k[m{1= K[!J?´ z 9Y)Ad|Ie͝(u=+6ݼ@{{?c<|gLO-ۿm%BǎHa44aY5jiV&u=*Ђ}th:䦥]T{0ɽIW3 6#G75rKޚ˟Œ{4v1lfBMK  /AS[ƻ-2 (C}A =d.@S_zxm jݤ\;I U+.k;?k^lmws7k3U^{FvW(ީEkWUU~^w8"xZ^6Z/lfG2;0`4_2k+Z2H5 Ez㚂aq]!ů%I0 3Zq!j|WgцXGD[Jrdi ?fktYܯsǨDU} Mdc#3w&9fuag@nEقp?\n0;,3`ITfaqamFv43!nK8X(Ňpמx+Wpy9Ts, ]s$FLW<\~EP8s\`fz-shy [.J{M7L & N蹛^]#fUzI^qpR]Ink۵ g+H_ـ` K\foi+dp3㫄QH^A-#O]Px +ˬֵ]^rcĶ\yIJia5x&vP]p:I˄q' `oG*Pɀmd0u#KQc[ڻc0$]i>qV ;xE@+;1^*sIqqD $EG?mA 3i]9jn PRdT*zvWv}vlB"rUR"f2[?C~TfȚ‰LbWRKmy[@ըEЫ jTe@1*@iOGO9B9SGscNq陬3AŠ:/cD1kE\I Phً# 2ppu8Y<>^h(]O; JsAc5dzccetW9-O-o#P pNXҷ>Qq=lVPMiʉ0pSJZF2. x=dod2~Y䷀^%1HEWRzNEu:@1DXv(H{|WB_un[ց=9U OmI@WOa{nd|{7qLb`NGm1@#weE+_q`,f0XKnt^>&{oد8V2)\uj>+Ħ XS 6Ȭ8nX;hmɌE?a0:XCC~-w 7l7,Tw#ψHVWx.G]G\BJduu4E/T,rthIZ7{gnK?slM;ױE+-hjūïWM&%~XZ1cZY;&HΉmKhN禨pN{u:^VߔqrR 1*6RT^BJӝtf̲7NyP mN4jҦmJ*T3@-eO |`6BS6~dfQA'+H2"#R*t+( ?"ާ S1wuqs9' 8A]'CXX0  Ϟ^!k,l*;]=c Ю8Ҝ LVR ,q^7O{ 0)[{*t`Ej!A/76J5;_N?O)?1TH~I',* Yfy٧;za|}[li ΉEpΨWl2.,#pn6hi+J9s,(PI ~|ƁkXX$F4pSUǶj”TB~OkScJX6ռ%KdIz&{FBћ.ov&| TuņU}vaCy5udygk[I-^_ b[T21o:|}T=ρL^U8w xamʱ>+FOܴi Ev=X 6cIvΦ ss Cs>}caH~-2jd!ƾvmDe'N8䷠G$rWj}2~\|aSsq}^YLp _bh]h+4 [@:Ec&4WLm Me[Ů }ƲV J _| *.Z{K뚙LNq9w$35g6N1oK S0 8!# 8=Yh 3Po+F =QvnO}.U+$Ljy4cfn դ28WC'0}9y׋C0xvGBgqQof^x]hlR Rml Uֿn|@! ܏b"uc,HfRCb_NeXA ]}@ֹLI@_c'pTUxFr7I b ڼNz>^@[qIh~U¼w:KJK^ۘ)iV|?*J pE~52-oڽض ~ m-ڵq>1?ݬ^q[G\x:jR0\zqS8 k[<!D5lw>fǙQgd#$7px}`{1+QT։f6+ jcKĦ q&ݑ̹>?+>׻IV b;Wַg-@p;abm2~ ގ2pdDr*o>08Obǩ~Դ}k .Ӏ_Og @YDw[ǙXx6j r&L7.VgC]wcө~VXWt1&hߠK>%hKjoerU8 rcUeED*ʬWӾU2cK`Ӽo1A#$P@5X>U6T|Yume]\8[pyyO,/Z./Ent_a;}76\ANL578Lf&eҕH _UB 7Oy2aKI#=خμQv@ Æb*?~Ln.2oVwצ2;a:xZ=K5Nm *~V]fI0|F`'ku)/y,F5WZ e۲XEW9zLj@\Www{FJ<1u=7E3`@0K5U`-]ٱ.ŎaSU'(DYrV;XZ>TaAlՐ=\eD.=J3͎g>F'UP_'og^ ܃\ 'J.57bƣGA{9 !d+Pcm_!=y~!c@@Mvy%t f0\ r̬J{MC+1"/MY` -qYm0`0}t}PV$"= ga!7i\>)7X8^jjGWpdZKZEZhf~b!y ɫ̌RחHتR(ĖqT'9cd^:6㌠}8n+j¦3Rt%d79fDZ 3yPu8ۂ3Q]J2݆Konw+uvERmlU3qW/6,S4CdE_;#Ev1wnP S҆؞֏Gp~rNKuK݊*!]1" ƶb^IqΞK!2 k==VoZ2֩3{ڹ}L;T7l-4)s1αo5nao^s>Y՘ďy3~SX3g ;uz!+ѼyeP7us-@6e\5\JA<,UٸQmٳ{-'>(NYylLXjY5t#\5khD5XI76tXZ-cLEUFc`,HY7V{<`wJ-Cnƭyo1lu VqXGr]HE I`ɽT(V9ź셸UϠJH1,9&^ ێ$ÎYe%j 2r+2Xiǫ8.貭/h.s kf1@ Z5hP2I`Nvp 4Ccе=3C%wr9)kkwx'Ԇ%ƬT4ߊG;ݮv{-S:Jy)`S y=!L[S"Ȭ0 eрu[4@d!D5^V;FױEįfߣ^X  >!PېU\ y>eoA!5aW |! AF3^ ?uA&y?xΝ3 0!BlV__p9 W1 oܯ,<9*Wޑ5<&Uq\Δ9^P+H/kƑP1 2 vGQ"SrV7sGYe&T"S50fgiAٌ-9r`'ctT+jI@(kVMo%pFO^pLԎQ.iE:kjf@ObQ|rZY Ƃ4蛑xa03H'6)/M"A4 {̍*VqWDYk],XbZڀfw2c!:;n(a`+m@*Gj*= HQRAE;4>Uxe`3ܖxx#?CJ9XSk b>2THdۼG鷽+>yRI}>a2Sqz)qTE'|4ĬDq QM~€ 1D_nj\| O&ʧщkj<;ʴ8F4BS'q#gmg}W%h{#)i y |dXw0 tU]rp-*xx&W3Z XS{]lWdSG+.^\7)$a Uv0),>qUYF3* x! ͯ3#̿z5{!&֐e^"&ґ"̏4hqs0g(C]^>"mEC<: cB`s|tN]3nX>MUcG8Yyc_fobLqwjwY$t77h9;!T̚Ռq,r|DƮ{d|l_8#iSi/+0 /̑xVQǸz!Byq({IENx3&{>P#?"<~\s Dޚ<)$]#]e<钼8}@?f 3L(Is~D =I7/䔾")ॊ6 *wvfjP%u|tdsP*wpF! H[`y lϤp0%DBzВh(KÇ6X|T"66nMʁv* Ӧ<;EIUWL I<$Q`/6jc w[dy⓮$v[ "Ff.>H쯢F֌Rp!AJott)(oN %Z^G"#NuSx. Q:nfz2V2(BSv;%y^yU= -lg,(Q/c!ruV}3Hv~G2sW紕rH0LݺGsSY-"V (*Xeiػ*ٗ޾篺V+mB{hnpL^VxR=,iɓ`j„G@d."ET" T9\rtټ:`%DRj3 L뽮V$u}0Aϫ!!k=%`zM_vW-U]vE\44|̕tSeq6TjGXcq o(׳Y'{4þt9_ 3V?`M#¦E m?X53嬆bT8㏆ ]vkv2H Į^z6= ۅI5]* {5m2bPds;`!DZ&VKƬ]ZFa"fؼSBBrD Xc'Cct% Śwf2 9Tb6$y)/XRVHwOf':f@iHWTc~8~Ƃy”`ɵy=S!k&PS_%I(=Xċт#RvMH[U)`ղ*QeJLj1zޫ g )Bֽ뎠Y&2V=+Mn{2ɶ-f{-.OZql9TȠsqƩVAҫWe036a }[Րv@F-N60&[,?Ss/1n#N٠l'MKSeͺnlӔ_v|3kds{ےi4\欒'⇛p^vehI/G/G\iՕC!yr=jָ},%7m|&x둥Fc`pjHD]L;K0.݇{|"yo!1)F=P->j;x(t>0A zg%z_1&cZ/0 Mqz ;\`cΌPH@C_减\ǓI$< |h Eb\!]i&Ŷptfn^H17t75}VPH}oƼaZfːvPaɸ+'z@ |:oH{ a "X @CK`%Pϸ•S nmK=9f2hb([h>n@C|>H'!!O|8Q|IƐMvIGo5i IπwܝO*%[҄i{;L 8pCz\"@%ֹh`wjU_X8X!E>?Dӹ&U\ uWI6'b;ghDXż}LS\'.LkypjN9[KWi+[̪^MmuWwZ; Dthc8~\v)uPx- V+4Èb5%q,rYT LrfD{W5 Ic qh"G1,PIQ  B,]LO?>qWt~:㱣D;aE|#E_h&Z쒔E4ptʂFTo=A[ݐ) Cc+gfm *j> q!a  ԉ+a-z#Mm֎Gy윬*=/Y`Ev=}") Q05҇]+rl,C,Z TY=@0N8Wo(Ŗ>. #[DXNlܾK1:W̰,ΌGN+o0..!{^lsj;A c2f=-lHLuҐÄ%fG '@ G>a6CT̉c㉷a|:W즮E%d{Ah׏g|iV?κJFMR"bjWS\X2*eGoD2Hb#ɛ~Dۃ~aB`A؟a1IwM(=TWzE䩔-ixMgU ]o1b1N fD8JuKIs!B)O"\CM Q C+. Ap%@ V0uط&mp[I tey]tJnیB(8J~[^8i k9Vvb4lEuoD]ː f ~&]Χ8,+cA*b +^&?*: KSƉ1u0~3b,Zjih%DATƳ- /c!+ !H[_ZDNPP񬯰|-H*Q`x~$ȷ _A ۅ zqǷ5__)G0K }\W!ѧ1d uC ؟ê>}OM3Ny[HQ9EbqBi|QƇ 3,+V_:b^ &ĘP/At𗬮{$jM~dw@f<.:I[rikjݏ{Nf|2\Bkv6U>py01wp|0@odӐ6G]SX"k]́Y/>Y sաa;|,pU+q. ʃ*6dx[6fCB-Q9Q v)`#&XY’ b/6"bDuua@{-.fYxǑG!y\3 ˦^$̒<2~gչz"ZH8V_ho O} !䃫t>eJQEP5C(1OtT: $~aE&g&лDx}Dk7X&͐ٻno_wl%`..|m^nZ&zV sb`jۥFy`V(O燀`^tt&=ע^󥛩ڇec1[!K.n)AY?6GqR,&LR,Y\cYXq;u<ˠ ˛E\:(>rv:{l[OWζ/bza*~xE=0=MT:Aӑz{uܧ+a Ebm T,"A]okҔ9Э#ȗ&Jݟ\4w]|IM$MKuʔW9Ԅ![vYhjKaXoXW;шnxF`g6I,R 6-h%REuMTa ]ÓXpk۹Z\  ho? _fk"D-q+ :OV^q$V4]:M7ngW5X`JFNmlERɮlq!)~|_Ľp6RW/cFO(ekTu:ǿ#zUFj.Wq{v>_vgF L 04BI's& x=;B.[\*okac:bPϻ_##'fDk(y nȭ4$=Lka.@kF3k*NW^C[#Wj}tŔu;˭bGɌI!/lzݙJSfVkp ?L 풀\;Nd4rj+Xc6[.>/qGwzWw'QkN1whtlͻSoZOEWz-՞%T G>mE ZqDHfM,ε:';tЃ[QDIEJkeZTBJbGsn\-q֮eԌyZh4]\LM^s݃P˺va`qaլi**} \0/=/ϽflA0geA.oev1GKqE|\Y#Ɯu$d+en[r2AT @T00?9>*ZNewA;G (;j7LeȓrL^k轖?*ӵ$9v][@aŶu۵fyꏲ&ekn2a7}Yl% ksمja+֪z-_1Y%nѦPyB1qs:Q.}ٙoIaf|@^y6fJ&(7im3'B ĝ ~~Mlj327XK_R_ImC5*`Ů2J x[AJۮMLHPT\ Xpar" ZSnr"5R ,ϑ˻1?st3Pמ~#8Ϯ99bnA' BzoP&2QC%.\W[WVijPWϸWk9: q8ǭ}LvyutHСz!:2o&WHy̨Uί[@G'W/)y8^t 4o8rJ`ߣ^뵌`M: ^zR~Pc43C]Ep(;zs&&A:NX·c5(Y"Y<')2O{ B!aE ʯ"- ƣl u 7 MA8 ;qnƹp@TcyF:kͷ.u~s\uEhozc5CݖY0c%l>N/ n0)x9Za 9: f?bL@F4}: Sb;ƃCh]@~`~7L0pEn|;4q B'Z~-P.X=ÈA<8(%*tOI)ݓ;)'7E y f ]ה9/Ś!^ 8v: 7)u 7@*M9RBXJngyT%Rđ#CŠt l ԉQ-df9@ =ǀ:G$oo"=7W7H֤Ulԫh'@L)1Rk+>vt"9Vh"nŲ፳H ⤹:}?S s`QqU+p}XoT Iq}.*S\A8iiVrc J; Me(=7!^j-ԫes;cv%9{H\;y6''|x__G<>ŦoTƆl-&K'?Erѩlbe7'>"?`IśsԬuny̐½9"S._ktseIizGиPC4G+rGhL.v9_ok&7i :< XSؙ& ?ckyZn @V{Vffb ~L^/ꐢ~1|̻XNa[{<~uma s߄sx5qvE݆ [|%X]tx!3;@17]}ȯ/}kǮ&)4a ʽu"lC,# Y>,A8@JG]cQ411#m7UQ`{`*COx몑$RsEuh Zl1JkI>뭠EۭLVد鿣u9=CϟbtR*UQRH͕dcT# f Bۚl+[[75+_]"ׄK$M`0rjYIZVjЖ/-B}-mmc=7]fɉhYvY֧0f:ٳ$z ScV,kE}&LmLTSoh D">Fa FpV྇ -PH{0M?M%ڥfaAAv^v_A.颭`X}<@ qTwLf0X1sy!un߲rN]_(8n(^"bOEFO_]_yKkh/}'[\>͡Dx.&uQ1 a0)%[Qtmc BZ'Hبh%JQG^U~gfRX#&$$i 6e5H^ ఃqH4I.b!5^!ǬIY7f:R@Ċ9vP#`okl9gI>5otr29ɔmo,-֮;t?{0§@:5/=VJ7ޚ @ӻl,`^rT~Ƴs'7dvF P sS~\19H_ec_~`geXHEaThXwR ΍<qLS4!u)UO=}2Ue)\H1m6&{4Ÿ@Stf>h:c_e`*T*f@mΜzt:64Z]]A굅R(Ney&<.4Ftv; RVnJIκݴrsqwV}eiÇ-OF\hܧ)L&~ǟaR& 5O5n`(f=]Eba"0ba-VxӛzY`^&!S0NݨqtO]FwFS8d53`T =,=O}αޘs欧K"RjuT♊O|oy2!F(0`^Dӏ6TĎuCLBGJQJo1AKapvž r=i<@8lM&t_.X:~DŽN.ћ ϢI_߸;;G9!S>S'>EAN9Cߙa0[!Cxųe#۸l T 4q[~X Ug \~=+@WR|MB0A|&45 9}O.x^~Dwa _-̣kN_wd?Ay؃v!;=i:|+(IyuJtSmisp7mAl"~# ~!=҇L_۞&Z<@Xc%1nި*.[db6ɋ`s꘰d"Q6eB gNgEnm78\9p0't++_)IER C, 5 yfe=U_Xϧ;jy#P]|tㅝ;`o!! wns̤wk4I>Tf@gif]hp U/uĥN?7U㦞"Q0kFA,GG]ؖ\"X:1}\eP,O ջO=$su 386Q]s%9oe tG_z ռC\e̙M{t0GOskbF+zɫE󈏫pCH,ץb|ňc2X<`Q`0pfKǘ魦]E PsڛVQĘ`1q@-u چF[ػkg3ib&:> Ud炣rl*jNFݱF q=u7;<ϣ#*"3)t߀wpس5敢8y3yjVc7\Ãr]1Mm \/.Nqux]cXG]6VFgQ] A>qKzN`qzɿtJ79}V;'QZGsSd*^lh3GLC5kkrϬȈ%5-aJ|uMH+68^ZQo3Kΐ[` u$ g<&Xm|W0o\}:xmDX.9Ierxzwjٶ2 2dlwl[wzv*xrTá$\r*TgJѸUu{v%|YyKp.%5Nrۘ~ C=l~ƺyߘZG;5h|%`qS)oFʔu$T_6F9UT0J;M<3x&PؾĊAv3U{W)VpQxYoւ^e:ڭ ʅNC@-t-2?IMYꖹX)-EDc0)T貙kGz쌎R1-m!n! PPQ xf k{d}/џ뫐oY0c17p!kOhUKkʐWlɦ~acz<ܩYZcEuJ2s+a!Իy7=˝I U0CWTC⦕Pb1$ZpR p=6'R2p{'i;[2o҆HZ]h}e3]/? 594MS1a,3ɏZK\jWxr iRIFv&8frI&IZ!V!܍%_ǑGΔ5ƾzbj--u5sϵqFB 2l k |KsDrL,Syc%|m4Ө?d=]$| )L Z-l yāwAv硲a&i F&ETnK*׎6,K":XrdM_`lXn^vau ߏ|Ob@dYWtKŲ}-OL9Jxx܆s/JK1QOr^Y1Yo7dl Qib, Iq笭m?f͇`东LMӼD uL&\)%G*#@սC a`xȩ#8O2Zh4kveTWi?0/5?nY֭e.]V]+Fuͻm>ז)$ 'Fw5&zpoJ6Ӝاs6%ؿ>_ɆJ g~w㤮1)Kepgw]C~՜ŞL1*D=oQoyB/*TVF:RTԷ)(͜{L| :YmqP'RO}a_1wƸn@`2ۂ<8`X,0h+pFSD1T, [0,", ̊93W6pO Vfa!r)ԄP WBIpbxx} W/x}d!vF9Ƙ5-!ec. nT>jAY6\"z~Xi_gˎ4BԨ5c &Enk…DS+< <խ:r XM'։ A^+,9aC^;=:phi9s|P Za+͍c6}>UM.a"<1\lCh7ɉTDlh8䕊Eo8tZ 'j-;] *Ѩ WhT}f6(s0V[7h I]qʟ'<%lu3fx>)1Ua5ۮ¯ +S1ΝKIe%F\AL"jX͛K2$u'{>Mn\[uYA q{f]v7ҝ:^5e2ЉE Y‚(ߩNY%5+eVqH%D4Bu|}y 91+,E31z)2P> (.0'APa.K!(k Z$L!T&e9D:i.8wXbmuD.iln}I/l.)%r\[ o+OqI0uvl4 Kd0BP'WT6.o!ҌxT"[(Rod^k$3F_qgltչv3!}y~a <%k#|l)M}h t缮x  Eh^zՂ\73 KG&_# iÏq8ô%ma2Vb'V"$ 5dw˓5N1v.F.Yl jI-Yn1]a&J/ ld^'W/L>;1'`,:vE ZX>%8275n9ۚ7pov/WHfpM DDr"rT^ɕBB6 yZKm- A86![͚ k _b{KZBm7O GT?1v+\!80679;< ϳ -cbެO,x'MgLхxժ$ 8Ej`A)gf,`Ř"R[ ge}H(Xd]E$.(*gP[&?E_rs(e̛oC{YL. &&0OmzCPgl(# qz] W/NпGTg | Lɺ,a7M%,g1x&DL +ɷK >YÛ9%7d)pF#s m]7lJ5Jjq2l˓3j)/3ߟl/׀#zT2"pMs7"\=|,3 (|N@L92%t&N!U,EgG}PzAd~F|hŞWŦn;.\Ԋ:kG3Oqi^0V y%ƨh;ZIJ+ pۻ`3ILCz ! "x *rS)L9sǣyߩF0B顖\1Ѐzw0{ 6&ᢺJX|UXߐ/4Xi1p"5mTD+V,hx@'q[{엝ޘ$jI`t?p_d9N``ʴwcj\zٷ-z/G٣ˇgt\ KK5==t5ӊig@͞-">;@Д-S>ůušFˮ_y?JISU/z;SZo yS_MN Hed8Swh2vбmMIO|^ H,mX0MNJ%/(IÆ)-IY~H"Ф[0ˠGg۾Q7 ]xSTF"4v#|Wy9-[-8o0 \A ~ 4 JW(KZ|mfkq)XBjYE=?2gTVjH*bTm$GFd+Ͳt!Cm/R~j>n3;dz,fuT?i9б}̃^)>w8-sJ܇3f761_jT&5rOc]a| =<92z7uyB/{OyAc8]) G>ڡTcFwca"4W߫U#.1x@$'IE0bz9br<-h?Bi 0!I6[ _ƥ.{b>$uڌp##Yh^oƦ?ŜUv?NF헧 [N, :ƊdN7 ;](*37iPq-P_sΌ傕01J͛]eEg/]HsuR"As;Mdi-z5^lh*Д5%*\Ҡ\Hֶba6Yۨ@`wC& S(~3rwϐX$Y+$ 'A띺y"Ǯ5aƉ5fn=ys.TM(\$|D“"z1M$+ɂkor&2UKE/ D8䰮%T sb[,QC[c,_2GMoIDc-W}SB}]57\r)5lHZٝr&.W2S+*M}&6vΉ;d`|&fF1R[Q9%r%kG ۦsN%#P[w{IW]{kz3htJ}z q+ ޼R9D WD2EDkd7d1LlpAwA l-1$}K:DK[QØMsm?;DZW&=cDQeeW+m0/:y!]69 I#j\c-J8Zk%][y_㊢}WRn>-'@j z7f~! -'Ny[;|O`t\ 놅*WITl.EbY#sx27N'/P S {b ܼS`Л(i m-f' ˏt؎ĭ_}@fѬ=]1irL _L N>͙qKl(i9i_BvyVpQELK9Y(y50@̗}r0~24^2;dg{Oz_F`P< `Gpe bX{Fcq!cDZjzih\#,hu)LESw> Al_m4E]2MA )'}= OCUv`pG+BIAn0VCr-K;w-d_vLoLVgͭ0+U4OOA_.6A,&B ǀa{ P7hrio_g?9cƒ>&A};.~$ux~/lzTQu;gt{tr@Be[}zΫX>((@k!|Q&VQ+C`iM}":tMJO3ПHK<%Ru_jڗY=}XMAd; ķu!R1z ~k4$nmf $?y@ǐ.j1!9 arÖp~=9Tu`^`>x|Rvtq@ mu<. hߠPtI}}·[/;^k(pX-22 әP)l^ S@ʰm+,i+gZcK@G6E-ZA˺ICj#yrS-O5'.&!e˩ ;Y KӴ3n:G̍剦Vq1``Ddݓ6e嘘ЄAVl11 6YNͳf \k9}GKg,&EB ee29ZatDS]j[lnrDQ?ADJT?s Q]P7I7ӌ!}otd"+!S hC  ~a}vȩhګzEB5\<[['sz4Mn~ͥKK˧ N9a 궆/iޯx Tî2Y.8\ҙԂWH&2{wRo {_ڵz  g1m\8NZn< kq쩐3Uefr+oF$K L C켘].guv\DFԴ>Unݴȴ]ǩ)Ӝr/Z^0U  eˌ2/FW)Gl0Q LP"e Oǡ൳۔,[8MmCqpSL8:hh09eڊ=}u6G~'~lfso[EGZKg ovYc.9m^2j`xĒt>4dqȫL] x59dR .9km#IO>>}W`3A?M޴aT~sٚA8_;-{]u$2kJ\LK-?MEWG^2Y^PWC|!R68Jۥ$H>;[mǩ\@s`zc'_һRwY2C*HPzCֵsЌ0V3j+S(:̘T.{hqR^W3 j)6ݩwj$j s3u W%{lHヶvm]T?/-A5(9ho="s.\iu3 Zzp(1 [A7]upU;0ÍRYXF0)FBcf kjy{UjX+x4c^urq&hrA]:Qhc+ATp<:NF͗0.F!݇&{RpiOB$Mn{Y 02֑TF`(_Z<4_*c/[[TF'UȥP@CCE ]5M;CR?*LtC:]A' g'D wjM4l 57e^l[ у{%(z?" \rါc`/GǾɆnS}U[RPRlԗe\U w6<oVD>Z+ad`z)0 5k%L& i.Zt1[~focϭ܄J~[(?TT اxNM)3#.̧ݵ}` ]`~:\ěGP4!HGPUfuXh戀;m%֡)B3X~NS949MVƢKq~`C cAY',36:W%)Cx,2 Pf@&ӣgŴ:u#ں֞H^(eex[05y4ܦj lrC \jMpKLrzr stȏcΗV0,fǰ:v$-cTg6(CPڵXlYȇkjfI__|Ae)y>Xme262鸜z>R6$쿁uᾗ*ISyiK)s͕ϭrd.:k{%9,|[̏ <0\>ui4D= WH+}ei9Gn?cc3xٷ#%3} N6A3@" *V*?ڛt 8ʩUowʾ\31\,/$m۰t6KUņDV(!1v+ܽ5hy[H>ԛ+ښ/ k$ovb6lkzhT,+S{.ZǺƐ.b鷤}& rȞJbYUB:>*d8dѮ0fY}qDk~M[t'X#Y4 ϤvE8vY( ּj&6hȢ6F?*~\aoLjn(%2NJDe7H ¼ G諚egD{|rt2fYscϯbbٝ>mz  \wRoJ(؄n9aBpCj=z-rÈ[5EkƹBb6Ezн5Όmf4T9֤D`/whw]Ѷq 6`<1vd>9hHwہ[yHࠋ_MgwQo, >weWaBK5V(=aKO]`l"^RWO|lߎU 9e>05]wY87>1סgR)RU`N~Uj>5ђ~).9؂1ZKܽUǯV볻{hB(,j»Ǚ60'f7-V6dX%]|Uķfimz ]F aZ8nN_j ˮkOe>>[m7/6qokk3^>t[ n9[TZd'kr5yAþga^Gh[\Lɪ1f۹ߎuϸˋ[[MWkT;_{ ("ėo  W(1xԍpRoB-mCoEkS&.?_6PJHPdaf 3$Gn 4fujEu/IR~ŚTͶsCwEUn0bb]{f,gF7%|нp$ke$Ds#pG5. _ (_= & 3~<*L g*"~ňΥfzeQu+sv%mH F\#mz1dI98s83^=*,zlg+WsY.ER7K`EzԐ/Ӿ}]8JɌ) MP} +[R,kv wLmi>4[a>'v]*RmyC A`(jhJɦ @)HLaBOT_ԣ_5 xsiy8~ſRY4rA+~t>"B]7?d''#Yj!w_cqnO]Iڎ-ِoEp=:nB 5 * z~2+>ٗ*14߲) e'`9#I'y_0gLE**l0DZq1F0Y䏷hWTW94Y"l,QN9TQ_jh86aIbz֚$BXz#^ɔjί `{Vjܶ29t+_1lmMdasv-7u/q̸QX&khʯNx\ &vAg}UwB,tM|R0c JK\ƻyBSKl8ųՂ:|;OM+ʗ&oF^! <2upQqM4'$)yX<}S/6݌1]ցt5Lh޾XR=a+0c lD)a:a~ė9@<\]L&>#[C{r)-rq/X]QI p@:lT*ܮOK֡h0p\2:qXhE).lR p>|Jy n{|?Vݷi.+2#bEw (EԻ+߱(Y7mTf2In{בIEۖl FhalC߃׍HSG8n02T*܈{ gծYvxsu~W>w{7[:slk2fϻ,H Le?:O\GU+o*:ϘNyPvO|"BbZ|{cU\5 ~,<_ :@}Ћakh ݍtmj+urͨTI]}⮞sWqj_r„6:t^׋\؞TtO%cT.wJg}ZSr!R,M\Y 8"Z5Y-Ia*IZԩ&ٙGUnde[bnA{gg 'ِ뤮AOKV]=E}fM6X`40i 3Q RN4s+6I)z*0Av52a}\8;V?P?x,"n0(eAE2m JE)bwdmnoofEiCrXHS%v2p)>/Ҹ l?XA2Y7(]`LA,.X>$+u "RtCVLʨ& KD[^~jW  i6:dpKac1Kc,G.CDm p "$[69aWV{sg]Wч}*XN-0> 0)2luG =~sx'M"ߏtvZns8?:>mrƒ11$H ` RX۷ <r=pFc"i]E@ WT\+zj]C8v(APj06%}) I:9?׮&+Ƅ,|1n8` o[ݎkzQw=N}祟םȥx/&(N5R awaf*55 CUm\7j[r#`yʼ-o%j.9Ä-Mu50CO!6N^]`GuY(J<6_V_H]z=͛ Td oީ`r;(BZp0㐠1C|?uSGl yI|brC77kM+wry9K$F3%sk]DA]wȿ؅ÄF$+)˫i_î[1+NE^zrcYe:1KPQEy[,+!qEn馤.o慿v]:og~Tn1]6uG¦PN09$5E ֟$ÀWD O)$y.<#vDY k@|a\y#5bJ"+ A \TzjH5=#'~] sVq)WtY<Dɒ(tWK[p8H{#ʳ\p|M8P~t4~WemUyg #NYF,$Z)m-('|,[XUڀmgOjqpe#(/[-׍~+(9BJŨ}b,@(w4/"Qk_n-]LT1) I*a~<k {G*V2x]]U $ $@+> Z9W0B6ҁKMثM+#8YHGj@렼:K7?k7ꥸOtJ*;nb87i{ⅠB=}!|ЂH-+i{5%½g=?>)6\GS[u+- mq6ryNQe9u5 ;^m7Z J̼iKV/ `Ss jHDAWy |"ڀ>-j8L= A 5y$L0aNAۋpML`cvR{XC۷V.!5>w=ǭB3\gi,ŅȃwN7Q]/%2KuQCQ80R7\+ x?ݶ(=yW,?/肙JȂtC3uOE$?Q1>oxF$L -,HU `nG|&+Ĺ]z~!l/؄8;b؛Z[1,}6ԾfP#,P0g)mߥ&OkY*"d gp+ siY.ƻ/>mb7Bdi@?n_x/uDPzRx2`!lulK([4afݝO9'>ev44mw_ء\گщ{bcG/YuA8 w Re`-u^FG1vܬ.)-Kd] H^pvZ`վ1錦@.ML8N"vz 0jRRL9,H&^Ghy_O=Tx%MU^=yVI9!#J{\8j>/Bڨp&Zħ*.w@B&io}ca;0.[bU9 z2d~bO|}EVYzqy<BpawnT^H*ܴI="LOA8x,,pa|T\-G{|KaW*R"$ubP馟_R+_iA˸ݼx٠eJn(p9yḖu|^ǔ#7k0<}٤ϛ/Zc/2,u!=ֹWe\1p6Dzl (u}yx>d?a*BL1qYdWK/~D܏r3AbkChMiN*1"$Y4ъJ](]:]$twYO)=' 2F]!l_/ĵ>)F u6da4k|nHR#;s]0CR rcp1sڲUe@-/b yuD!Y 갭U͊84B}⭥PGUY#SD+ʞzLIs, 0. N=PˌW۹w^v9a[_SMFhA*3fB.-W +RMhtU׎˱DK5ݔlrVj|[Sc)*!L SɊpҭNV]ZAI] ؐ*!~Z[_g:Ӝ7JIr5F]ZF@1 $;Hx31`ff*NWrnH fhZ:} W%"oq{# ra8,Zp 9)@r^k % R}8cr<I6eJ=͌x9Pwx)~̖T orq@_Bİ:"=H38F@Ui[r*_" A?dyԪ{ $Ld|9xnm[EuVE 89H݈h 2O\‚>qo(8ʬh>c dbmh iD@(yTGUhKZ޲dYֆpkA{Ͷ9>7 ;P m }ү@Y)4^*:qu@L]`i^&'^ a:(@!z)\}(@;[$}T) Z=|.ƬA·#&~#I VAbZs%iϭLn ɧZxHJeNcA᫾;!ZǫuZbD)\tDy>G\6wk׮R6#~?:k:()6c$*"9v0!yaU7x2QiN2@ųc+('3{^Ѥ:n#$vmbl?1~h\n[Eyy f3@}ns9Xq|&PvǮ+bٷ;dk7HԵ{={꤮7HCH BYP贲a4WA(ΐaϷӃwxpsu.\2A9t2Cf 5eַHxd#7hY*]Aw7f htafw , /ˉr%θaN[*((َ|@j0/*?`FQ|7aU{\l-1Al0 BR/(a:~\[]0;uC\lcM cgx5s~u#\p8̓k?s`!ocbu?E4 Wl\2הх8=ۛ³gdx:[u]0Vx\-3*lqfa|$Li۶v!|ovϓPWW7]\5Ց :Mh#D1鹊k3qەk+%xֆ6P6|k éosވ%,xb@8 #wrYڏgRvx:ޯ9dYkNWOGkSeI(ouNKp $)ц$6l߬ lp&~ }]U.]TWp#ݸ-@CÊba Q)˘=;8jÉszr*$q>h֗ ƯxjyʪB,ȴg+[*.M|[<%.†nQ̮EsoH?͸xkGm WH;jGehH0&s]_HjRs.$y E(Gɶ?N7720-D譸ܗJ]:65mchjYzHv9I dQG! $Ml\5;"tpJ}P<8"K] k c*i0 Wq B=`=NJ< A Qr*啥pUdZ/|H&8ؐT^"wGߊȨ|Eܬ+UGkBR@؊ϩ%EdCT^kЭ+(#+@?͞Y#-{EOS'!{A.M52A>ޠ\xM֤d!֜$=(iƳS=N YG ;0Ycy ?:|(Go(kx.6LBj6{PIΓ˧YX.Cċ ?@ڤ-S8d0Jg]ec"x쮋DXEv*$  mZ\K5'F2IM7r3kYID*z0sUP- xylH~/Tgx>;arn'- I F(VEJ.W\"I|`NjH q\H;X(f-W)k&4ZǺFps1aBEv S9ǯjPzj *D"BU}onD,i`G+Z1ز=4La4iPR*c {"<&x'|i8:w$rkc T6G5^s(OY'!vE wt(7 iD8ΔH́B^J5Z3iߌ QܜJg s 8TJ@mJeS+yUl$ga~qu(1?j"D3@D;FCD\/x9șBڮ}!z=O&}͉"农75@MEٔj-3 AaDnG#eC8_8Rw,vY^?@ ylDXm-ׇg[l,>zc7hy\(l4We[^|7Q0|!0t6^-./Z[eO qMΖQV op~ >A)(N -H[K=Ϗ\ЅHZ: 8qH۴t{ᮖ+k߀CR ]Go5pk01k&%׃`T;O Znhh6oHjԉ5ŋ!M Zげcdjl{G7T[4Tj~~йǗͻ7Lf=f (5`>w}O}Kc@UٟM;w8a hgWf\uB2dóZsUB ;C~~:'4 gKFxK|~VC EF 3g2N?_XPlOG^wnSC|G?fu;0r;~s`+҈~@Y@e]PlFa#2yW-P0n`:$fμ)1 5:$,9(gfab:hDCX!PqtqyE'-"0DwW`Kpmx֛7IR9ef$zZӟataDx!fLX4Hw:mB"!vw+gs?9O|Ww^?@zG@ @<_3VSv^$z9fZt)<⮫N9?knB6uKx%c#\_0I30X^&&ΐR>r߶q@Z @!Ҍ0Ayzirxa_ 0/`)cSP8<1RW"\);y{7buc# LCJ|{?rޭ(=4vo]9o wEZ@VOXCI w]aQKުŃsLyXw(/UX|CnvfBիA4'e`J.6SV%H=+ְSQw@7"o:uwLJzU xAJc W/vg;mmg֥ؾtMȎӓ $։f^L判r|<+nzV u7ؗbo^'C ?Yb3"|E 윢v' GykvS#re~h~))LۄDex."I lK?_ܸ z /rIum3(Ŕʵs8gMIOĬ`ߗ`,(U5odf.&8:`<[B>wwjf  ?-u* "Dȑ[Lpd PW[7D2N͹CҢ^Z06GgXk<t{^}Άal,pS5^y"Cy_ yW gy2/e`KuMMBsk^&WFϹ ?JW/vlK7.zppn_Bկ_?O.z:E%+u 'D   D`Hߓ(WR_t5om(=xt*83m?9_{Oҥ}q>T_Xm3)-mBwwxAb6^#%o6>޽KDzb_ )_sU$X!%,Bd5K lk!Gi`B]W.k06J3q6TX}J˱mu;nX/4"$D( T{@4&eG2nT)8$61pT5dZ7}jOwJ.k3W,PKQTȱZ:`T1ʈALLz==y[C~Jᵇ/:z \&*&gM M;ǔY 5 &AL9D;5rQm00D>g$]z;,0;L,Vb[aMR>VS${z'!d͌EkT@lq"2F6VRlytlGpkiY6?ڐfUxK",kLAwC6ݎ@i>&`]#q  $5>g=u\.+~btboxZkӘlspz3uu٘I99JۉM{Lfcevf3?wi7;QG)WaN{= a;Rc3)Րf8Ř5ƔV.,oNn]c0SDF9^x^ 8m Pa8[H(TOȊniQmFmST^dats$G3" Xmj5~)de] '2NF ejOU0* 5ڿM&9xPonP<k=+6zc@́RzJ2)X-&f#7 ondYo8v?Й $7F֐cBj3az\2J <'t[N klcJz&UN`ǿqi۔MƑ[{7;=f_m++iKAw{ǯs">;n@kVO2dжAneZفM(6's׷cI#Cz4V\;v̍ə^r oFt$ʞ.Sb@j9 pO\{8/r'"N`_b#s|Q,Kf۳|.XE6g)vfWX`#ɐguu4 5 汀c [ x .EL[]Ȉrc)0l쬑Ȫ&Ǐs ХgV,w1 H^;ˑ']If=yCcAW4]1˰_,֤8ZrGP p4&K \h8#p%’$U 5D$`5dƲ;$J!1p!,dީmͭRⳲSh|ӋW2ʃ8Ryv ,}j!U~_( m}Ccf89ciqGQ|۵V[IFΫ^ݙ}{N{JIHOG{0/FkR7 &y掜u_5نc7~Pp1W4?h@>K:A4ވҸŜu64BŖi-PBZEù 'Sz4@J-Hob,Ru !lG|;>t 34r: ,e .6㱲 %Z /9{&CAWO,^Bh 6GvSÈ`۰:K=oQ]+ZGa綢8?o"0wܐieݶiOeg$/o{TÙި=q ^"~^)|ZzR:Ĺئ[#{Nr=Qkmsz|x޼>^2`+Ss P|iL%m7-sw)(|HHkݜحsp6:RrO~ea Zq>s6ކZI^XF4b{Old0Bg(cZx<(vB "cbg9`hiAHBc) bС7x?aB;`Z9SB9#kYAW;VWr}*v;-cQ$ VBc=Cv$:dr;IӾ q{eߜ?B\×H˜E}?qȌ䋼h.ꍩErr۬pƾܶvT{Q~1I ?|uf8bB0pbKA0}i-`6@(S,a'JI9Yĭ\OYgZ In|dZc->d+͛GrY-?5vݦQϮ'MM~m#RԇL|=W!cce>_Z6ײ[Nw3׽H~H'\ Dk3xJ2ꚒBYWG4.lҞ:'~~G+v|ovkTX(B*lQ: Ơ ó2@08+FM+8 oq TGDx߉sF;NQ\~d" C:k  E+ՠėq -TJtP8PDy:@lm@ IZ8`x$R~4Ѡ_8S p{IwI32x˘Q+I '? ;7n{OnĥJ3Y.Niq3PLQv?(1]EcӆH ALI:2.DXу8HTR(O"'%kJ4`( $2iKubR>=A FFB 8ƍEOE{=dCԐ+}V9u3/mɇ3j설1#̚`% eI6;ʖR_)> C:7_>u)628[ +t#_T5`BE~[S3CGv(:fVՐpz>;/t4sGQ~FJ\țrr ^1f0韩^45G}a++9/4⣮NȔ~DQщܭkA ..78@OOX;T4}B5 M%[X>l_?C1t3+^+7`k+f[i`\Ϛ}UDJ&EFN 5EHV,Trv:-'!ن&eS '/,hv(td5:';k Y$xב9-l2B{I_q,zKz 왠" i$JzEE=l$O;;4jTS՟7YsNv >خ&ȯE"aΙ|ϣhM@õ.a*7A?MWo!$)k.J64c) wLU^dRU|ҼOoj8VX>SFE ߹CrBS7[>"yYUjguN[sjwZ;7-y!mwR2~0J }˰mW=a1/|@l[{ \&lԝTN4eK gQ͘P &#w$ 1'9Z}#.u@a7;opUc Ul o)M Y= #!ݩ8Ds o5ƒ6tK'L.ecUJ݄fyg~ L4DtfB&뿨m+>B ߓ2s#;V"9Xiz$~;,ZM )]HHox{~YxHGPVë._,SvTB"rIL49XZpƤ[e%i*/YHqr HX 0Fg\"yQO|D->~w$}:, lm""mDP䍫.[4pH@YCzcjLZ2FaUu>GE LXMjq.tMa]]^ ^ 쬂 Q, Dp 5t mjp1&BۭHFE'fGA?Aʾ$8D5)THEH(K/2!LafǴr47KG;c!ʢsHVBٵP᜝T9g%A:U@Ù~{1/38nv 2E4 3oM8z ߐs</uZ=].C5F\"YihzG;qmqu4׫ 5;Z)k&?p+TER ^w%| 2\f/؁?l;o5 6gױtr0d2fr=^NT= 7MRs, Fz٫1/m8Pjuz%Z2 c M*p˷tb+Kp{zvi5ǺV, \u><_Ϻw;_~HlFw8m05Z<iGM"/\f7h=jh.)ϮyKj PKյWtUv*X1d3X9yh:{н#@/ҿ^I'FM˷fȏQC̣ C .Ja8tTEl&AΰxS9Uv:P/D$櫾]:(<Нh ؾ_yna8+tᘧ\H&C\)Oۉ8Z$8%Ξ`:}q/٬;<P14peuekyq^O]q'I&eECKq͵& raڮL5Ab8~'!P}U~)  3Db)rYBٌSl>.֛ D܀-5eJaD췃>r Yg&X\]JJiMpJ~ hqC$}n˷UbذeKw3?G3_K.e1Z6a@gk.~l`dza"jH  jTm Alr⩬ jĕu37CCD쥛M3P>We! R^"% l8xX,tSSK}EM~Kp1x7^<@؉W"&+=XCݯ[]up8Ě &7j..K/a:3`͹|+n]a8ۡ%??Hx(d~Px l9^Cw818:q@ȸ+="'VEB7O9|:=w8h]ҩv/-ŊFX9=;v~yUNy/!YnnɲK_F5k- Q'yp c>b]e] XaӨ*'y$HI}|wghT$٥F➉LG:!Sh='!x0BZ 摪6Srbj+ )#58P@:-tҲ!/Tw{o, uA*mՃjF 5z1ƕ8AئA.?ylukqJ,ok/bFCпG\|W<6R'C DgcCJȵŇ `}.^TIà #kt4¡j#[ 5ȅu^:O0nemrvs7k>1j蟕l/kBb,~*杛|1 T-0"ZApy@w?h*pa9_uE>@@)ìbсj8Ze,g-G,ʇOǴ^^?э DnO$o#j84'9eω0{!M%[\r/,xn!JX$"cq^K}Pk`#rPHV'lsVMZ I`mȳHƐU+~-h@]rgދD9rG]JRRF;$s''LjOoNz{+7OV3c‰HUpR`w7 Fj`m/Bs9{߼*ӌm~00`Ot(cx'w#-@ZAXGZaQX$zzHxQxPIՀ*]V8Hr ]4(v1l2mBGokc8G!)*ը#*Up`p9 l8>@g纺^P>t\4b1U 4 L " P}M4'&`(3B=]|f]$ H+ Urw?IX/o^P9Iu #;r6j KàٰP6Y0Ի._=y+o_(Q72HdBfHdL HI&dIBEsc Ң_OˏSBObвƝ`)Jx YƏ׭:foSXԪ/́B(frVDxX5& >I٠sOģ-n:*#`^P7`YX2u; =8+D1`Xvu#RU*ʿӋ97{*}#=Ƨu'g4,Qg9PLף"Џ w5J q=`\ Ũ!,UQ{ #<#%xKBW.VyQI;рeYm۟뎻''Cl=[t8'4uQ[o,?|2iپWb5J< 0@/M irNFH7-Q#}rpqƙgM]A&1PmNܻ$^RM!5e %ϭfDG:H`,]D68q!! _ss+= ҔfxGgQSW>naJZh|͵><bd8/ћB^/0'Sj w;okUr '!o;S?m+$lw"O m6OpqPx9 0HܗQ(XZSGԂ[\a HЩ,͉R2XXY>Be٣$Pvr Fkh~e[]@ YՆi|`ZYmLcf^Z ^sKC=bd^/< y1oRG69NO!Z=jLiA´D^ 41 nݱXfd-n7JՅ7-  NNw˜XP/x~L XxCE}+ɗ얱6I7f@EF3_5/W? x^ g EYV Qt@E6gǩV)Mp\l؁qa!hI[$06|b iϧ-Qx`&$FKQ?qT0Z*X]S(p|3+xم\.=ٞE)/sb_'/;WeY'O̓$]֫ ̈́dYLoge>|D6K gԉ=?=Š.4< kR{)0?JqG@Ǫ|7]-ڠiBqE;.WVj֋U͊1{[Q<[$z`VI KMG^1!РRkNωj96#gՓlP[}ss0!{FV{bfV,D"SF_,}n 0z5+F=^>Fp\ll^@UҊ܋(PhD-gm\ T\:V؃6Y~E{]+9]_xToZ/6S AmђV܅wxOOmu[6Cp!#~f'yop=yBԵ~"ʰl*]YIﳻ 8YF \9/KqƦXo&@T_d _aܫQW Ӭ6X0ͮxőXp\YiF Yn]%v@n b$_Q;d|v !6hp@G;'x2zizۤe0Bۈ*ށOi+1cns>9ܜ-ՈD^7w+hd~(Yv xg.KӜ_I_IthB[[$?ԞM|~R 6&z;x: Fvq."Va">|X%+)_d %͓;.Ę֔S o8k8v*ER\}|w?ċ J~Jl-GC>9أRhl\`mZC}ߴ_!d=G@4δaR>K(EjoHk ur/@;jNaD.?z+7ގ3{^ȁ7C .}.N.Jx;ev6[ɵ$E~SX Zy$ZeŚ,~:Z Ƨz0/R@B7|qX}8ߜW] #Ng9+\O^rJ3|HmTX@RRܹ.mrp5ߚi 5pF 3 F)TPoAË giV:9r<swXJ;XI {Aes:BNi7-8=Z)h TqM-wĬü9O6&! iYmRGvq ҢP뇍{:B%w!0kPIpR?^<sUp!@a}dӄeuvO#z }eW;_gnAoM⵫,i]; Ý(v0oۜ "-tz b_0/GRuH:ٿ:%n9O1eɫh Zm@?(NL<4^;)1/xÃ󵝍;-\ڇZc؅R:;*pgJ; EhqB+V]|&iR_LPw}ې+M0TC\L^\`uNx -lM8oa5~p!qT4@C^hDTB&6g>-\LsT~l-ZFԋ2FB^ 7CM>!V9Qaizφ,f rGO"GZ 砣H_* }рRTR̮R}\as0yťp{9m™8037$ Y98iUݹ84g8td9ile`CtMd$*߄ g]4Թ6όle\pӗ6 MgP@%虚Lrni~h]m^2/XvӁnF0U#Vha{F$Le]Nh/y=6)CS^6Ů!?dy;x#ubX?@ʫ00Wc?+ĀxpyPJD@ia'w7PZbkؿt'Ɋ}M\)C+J8B/9tG?J.^a_"2aԣT& ~НCb1}-f-}\%O`uz =+~XzJv8ԾUHQ?'6%b0M ;G|XRȅmPEl&9T<0ZIz)r0֥| lzB+ܪ^<,Qim)22+~i`;6YrP8^dpĹ#+|N(.{X08PS2*`Bkǐ82 qWqP44s\YL v>6W”.W-[z"syŋ`>M÷\ޢk)m[~UR3mB,vaV=|]t ۢbO HvO5׼8o{Y/5!!?܄`u-=ΟI^@9ZDI9KoT~!%gS]O#do_(LO=Rϯp)sϮcc>Z,L 7*AD=c2:^#5$Dq3q-4. -n*2HoP57fo%;%8M[ C/@OOLYBԥYi\*a 4)`ꐮYqGWq) ׫𦿑 Qpd) Nܞ !,Oc!P"v*~_&|x|4,E`D7G(;X@UjM(TCO+{w „0N2w. QvO<$c "M!a8pmKԏnRb*++Wg"%4_s!$bB_'E\|[HT:11cu7  d;D(G( 7DϪ55|J3_Pe^{? e0g["yp;]"3l vU E:9[Cj]7a2h™vA)p6-TcrTtHBA*cKVA f88I{j1: zsƨ9Ͱ7IPK"Nn dVhjzz˘~R%bzώUZ)vgi5Y TmgjD$O' H԰ ߹<)+4$TPEI7]#xC}T paJRCP<-:175"10yw s!B23$((WP8&FzP.Q1G#? J(2U_w(LaCᎫÂF#ńIm*Kf̠<֒k|roVQMU1Ez0 i*c15DK;a2B3( |/$\zЁx6B*L6ە [@dY~A_XhHX\.SCEj10^ַ!.ZX;dGr4\24[Eq,H3S&,6<($~>vsh9m6<ׅ)}(mɭ+i͈h(8Z1MZ`LɃ-DӪѕ\*p:Gܻޔ-r6[s@M4q|XPH  |_2AVL"ˆ-i^'_F&4rnFĊD{#aX3*Dz}zLJ!6t.K drõB;.R5Y}; y G,mw9e#w!kB%&De\bpyf à6R#MdTbPRECĎ|>ρ"Nݷ;TIᗾ.Hcd7[46z68=^}ls -S':^a87=ϳr/4}$Ljh4~J?Ʉ`j5bKmn@m ?,h$,Պq`|Ut8%5~s;hX<9y[ q)-H5HC\${S.POV \]P =,uM{ױq(S}55_}ϭps{oĄlj =*1}>#kr#$$}1&Lg%3|Z]'!mC6Eo,s bڇCe=`!ً9N/DŽdr8/`pRf4}ch4;kV|VxO~}yB$}׋-\Ag%kR>{>wرp_~HnrCv*@V#CWة4STJ5mrRX_lQnv!? R :{Y*v;nj_?jwy_MmΪI*il;bz[&?bJ*H)tettDNϗ;Yngcgc`QE ZgKLjA֗nMɽO{f@}O" %Z8*27t0.Q!2=0eе&TmVYbȏah2qnLvZGZ(CQ^= ӧϪ/17s,.#:/Q؈qb|y \q<|mej[YËE{bc㬉g}gaKǀ5 _En6=qvpF{*kB93gr<`89mB#F 9t&z,BHR o ˜a)[iGĚSk21=;[S:Z+ܽ A(6GrtÅ {1@e<bx9FBL~k bd*[ӏ֣X"zDӎ~ ,tA܁X vlf :mH`rgEF܋m{A+rFIotZ)*yɃ?Cdlp)mN1$OdP]S` D_|Ґ+3(O:ME-}5Gt&Ԗ94 T m8E!Ui*0R} r*r `b *J;Swi;M؃NmNHOk x"0!O9^3 #Fܘ s _z4MBa=Jaȑ>χVb n[v^v8,ސ\L882ޱv+qWٜI-YdRPz)8q; e.[ %rI8=BL8,xL\)}&ؒ^T 1㪭G!?/3}Bwǃ^0̾Hc]XYN~̪CNuPدU)V Ӹl6zME$4 &fL5ksGAR-MI WHA`)Zݰ5-ft . ={(t͟P΅0 pn6aBǨ 3 ްq3Ҡl-]>)ԧ=D^Qn]h.%z/O 12[ֱ"vl l1! pCO m$"QC"!h=`n/2 z 4HSt~eskOS<ځb6o0Mɼ%fI0Ny.a/T 68zH/˼M8m@ KonV4;H y"7$)No0TYby[8\?df8U; ܩ[V%{>atNgfEHȮv0VgnT3mqwrHy{G}x:pKױ e F2{0ԝ9g,!t>?רʯg_ry"vLOMfh-1`wJ$||`P=,Պ$x<TPY]9!sqki={q4$vt 0:hwp) ~}g:;]!l?YGZ]h uhC rќ,|!~u(~sgaxr&0<8dۘhBam>``0N|/Q%sW_hq’׃ Dx82~Dl&9OH|` !ͮY{]Kxܱ ، qdL7ކ;8ǰͣpg޽='~?*)woQ %Ma^Tf!Dը]` 9,~*v ~˰NcJ.k[-y|ȅ<$r(<($s6˕rX.1_I\BfQA'b2/yzk+T,])q/9Y钴xA `3E8]O\%/wko"ᢖm"P\ƅxI]?\ %2A$rd\5:-Uv\% @ r"kU셂ǽL1u&<  [ ^tO^49w5 |+q# g_RҺ-ޏ:O{6Y]~Qҙ807[jCѴDe0)R0J&A})<:ksx˴Ƅψ0Lo\,://ZPG.>Rb(aIJ?e ǾQVṀUu!`~릌0Oln3ao{@q}DGxEy`hZ ydd\Dɚק\Te`jh=u븷̗ۑ sa,{"FդȔW/Q5g#c0-Z!s@=<;9rz',u 80n,exJ,'g8$-3F#X5 :(6axH" 4$|Y%4 1/#9u~֕Y-aA*^0ȅ胮vCpu71B#65TO8oF,\z{uOܿi2'n|9F!Mر>OwUS$]~PKcILFV~AEțY)vN0j'ĈlH(ZBC$!2L2LqF x`d?ʹkͤ\KԗO&f3K6x=!+DJ#|=N*>ߢvh-|m"B:Sјg!7`wQDQ)KR8kfBw͚ڜ[͋uD \yë^LՃnF;lw04_ nB?OO /,'jI)w:MXI蔞72Pf>Hᣁ*=V#G8}w&z L҈(K$=4Sb`rYF%Zp7$]ڦ8"U5U7)q`^l< +)hoAw!>͜ooHT؀s"<ŔɵZZ|؀ *[}@9sh*znjP"/&mAz)8CbN*’TbqhY<Kptgm\éz/ɋ9#~ʮ `'˚ lnM$`E_V-H&-2cc ,y0"FX0mxMJ- :BhU0 ios='n'JCB<g^,nygȃ39:l {/LӰ"QX7-w55*,Y.Lύ,#B4ZO0 $l J$ٱ\"6G=,"*C怂TқdQU3'0j΃^ 7d9Њj?/ J6;%#56s05 ׮ZC9P\ס;eΡ43W+) Ux9P hn )"JQ|5{uxC]n&+L ue0B:}7u{-ӊ?psƆ7j؇0ʛ,[[ʛb'd| 鯕NA\gk'ѪEҺ*a*s80X ]D$HU죿 FyZ)ڭ>7=MO0oobfEF1S<&Aj f`j0&AWK 2s [GH"%)ǫZDqCq5gbE`NΦzە#HTĢۡ^dr>W؉y.`s"H&qk7ނl -wYw)Oe3cI H)| !WnE^]pz'!\ A!!)'xzrm2B"uH}ifnplg%4iҢ%X?m|Q&5|fCvIBM Pbi$8TG'ϐ]6bFcXKRB }8<;l Hkp?- kYHK5I9'Z5ZRA8?,vpf\նs9˙)U c1!H+.  J'D!X:%&3+F7t';hadt`( `_Ķ O||{5Eᢵ~Zp/#p "Y)pS|[6Pq(mmd@p4~ z K UdIaqf!cݵ=_D,WkEE6w; Dn3D0P G0O.AVýaIY61e 4(%XNu*&\dnZ|ԠJȭҗA֊$y`rmn ϑH 9.݄Ẁ[WA,A\” 8os3އ_1hxeWGaX8N&PJoN?Cqt1v˕DI Ib@SngNxY˜ 7:,(P .XDDT:t"-%+uE8re3+XZГ?p4m,-frX*n_$GC2tQH Cnr #u-97SA5b/K;5@AOω|)'ڱ 6oӟيΛX GZמ L ؠai'v?[W KWouGw:96ŏq6샜{o] : Ek|?O^(] ,Ig<1X@BS AUeoF8)L˽n;W4Xe?([ &1a8 *M9^2Vpm"W꾛WBsA;@y@!'6C-Dd)Qz7ˉ}L;0d>b-.LʅyM;f $j;CW vyx]._HB@nעpei?z:@4C,@:9`V -}Z&{\l.牿 oӵxl`Y$m|rHd ʈ-6+v, Oy}}q0xOh͜7D$T@bL$3a!Ds}zI>~vi! 9ffR wW<}QrUMCP7݈A/ ͂-}#h7>W,N2QPѪ95n?P |y;K%V"xypdlB~+܆H־]A5pE|~F$H9%L|.PG@ݦŗ#{-/;WQ!& -&}Isܪ#|>gwwTˆF| iL8L>єprKR|8N23v1*1oi`Z&dkJbK_ɂMKW1.DSVdGG'{d4 35mS -?3bޜtS8/ޣ&,mԀFz4FJ ,ô+FnF#wl`J4d.tMn/{V-,s zQ"V6 hSD -~ }>.#>8dsEaSQsI)CT};9T"DA-rS$۵^73w_4|]r%#8:Ԛ[$/=:nHvbl>mJmb9{9jB` 'ea^DzH#穎o69M adZL5%,f3]w'XWHaLs97ooGgrٱq#̪)ܝawDJo?O_x""&m sM.MPrS 㖵H 0|X]_: Ѡ]$ZX5j/ڜF -UE*|ɌuMƋ//f&|0 7;kzԲ8!{~ L:U}6A<z+0#Ur=U+̲y^MrDRB3i&p捻\j'&ELy7fE/ܑZQm>j/tK|D3B{ eO*~'T ..T#@a/*UvUٯ8wqqvݷtky\i>v&iOw. q kFJzYB.z%cI^@9;'+䷚@ٻ@0T¾- 3%GՓ>%Oľ.v?~sb7@ ar q[l ;*ߵE;."+Ӿ>N0p0fo?q7$j]GJ R]c@*8Hw|Eb!nHOak *9m1~9OOcG=%')ʧX6uE (8Ѯ_̜ iW@N.Bx hܺ8~DbX88m"ٗHٖћRFj#TC8dX˭-vIl(oT (f 01%#>b nԷ1HǸ*|4އ +n8ADB9 B2,'mV ^}nDu$ OsauL%7=+z?.q(bG50+d ,=sA+>L 'yxO܂S5E01¥b4ՎH*Qn)nRA5K+!R+[47 Jt% |:.&|˜Ju4u%a"o2KQ*00BWg7`'ű\ &XÞ-(.t? f%8rC1!zPZSkf&w8Z8eY5VE_&`= Gĕ3Vka0AY'ffW- ڐmasW[I1m&o{v{QRCa__ N_b2#LX>l?.; 1HCMuS/މ}1P+W~jsކC9<Q .Qְ``z}܋.hsƊ{X1D&4UJ)UݐHT,}0 p6Zk =Iq}}@ %Pjyyy4lJCc\wz?`okB\EYѢDY[͇GWrwJU)ܤ8YeKUK2 ezmt#h ou\dI(]6G[u`GA,fWy}Zy{s5ȳ)ؖh:nѵ$Xb(wbGl#AGȵiOfYKů] {aO8|b}ׯ .גa9{vսn{ČMz%*p쳾3=3 _LSRLT I""[{M!H00*xeg ^:k$> n((u+Ij؍vvgN}YͣxЍi` / <Ȼ!g1S .n_mTS>xX_KT4 rۭYB"oC1Rׁݚ62R`&O䃑@̣\ƅ d9Ë)}wʀS]}$jY; e<4SGSzsۯ* :* r}3SUe, c6h%MqA"' MčGz Rx=k5Mc0d~yGE^G]T0S|AB|{ܻפ?QG Lo 0~ ջH|Sd דH^E 2O e+ޗ m[`/(JPt'&xbD4.uj$G! |Mz 9e+ xQaBʛp$U:؍;HOhJTZomi0> *n甊d|WeFT LY7z}*wQ݉cϨOw&=viE-׫.y#W bS*<*-z~+W+IϘGK7n5{}c-sǔt UHˍAhd*9YXo (G|Ґ& pYnk&Ho?|s+B<0_8WAm9)_9q-H_{&v|Z9 j3!>3E3y(\fPx}Xg^V}#IPr<5 6' 'X@@<|NsOȟs mg`vg-x)-Οorx9|6$ʏ}sYu٧ar!3a`IB|Ϙ,M#ʧVf @oTH-;pBC!Tr(,_&aY>o};L?s!iS}dyv_waC|Y Ir,÷=CSd=%;=Alq:e-Œ1f)0 f¥rVkW}?S("NO"T|"OZ\yE4E|OCSD `$ ^j,X2 s.fYPZۻ&{FTi2.1((6Lqj721Îi9?|-IM@Azcz;$A: z+yLKQ&_-.j+8- e.w![`Ukc?>p;H?Hv,j*hL Z1nB>a{%:D jHRu%+zCi.>6C|菀]q9KoEGEQhҧD$(kz4ufg+xJ[go#2\ ^LDNXPyv5$G݉*B/jQ˨Q0[`G沺E kI^lI1=̹GaGFN!1UwUJ싕 XTJ3&C~ 0j#*$}JEVf BiќOgN cQc ;AJʠ`,=b0hB_Vp$3,d%곬`RR&|r=Wogjp7 o,Ё&6[1ϐŪn$Յm\7ܓ"\&@P7Ƚ-.#0@9tI j&Αc 7qgI-*c8I .˳'YqD,CnG+ G!S,2Nޤ0FyA}m *|6s_23:EVX7co^֟Pqz f/?fjȘkɜ7Ù|秽K{w0KXܘQ`,VjkͧBji#ygA#-vΚ ,/ee +e\DO:8N 8YpVE%#}NF 78.X+ظ5tϯ$|XJcz^N/k^jDB?) TʒCDAbK 4 DImZAuxɘs*,*5\ 7| d;τLr[U nx'"~{B`vd*-T d喸_$bKmG#Eb.:yA@S0a>j@PwaοoV,wǙ|xf PGF[.Qʡ5mYI>[څLTG) (zOz-M\䥰J`$c.\ "7OfgsxEѽ|1eGaTAJi>zƄ\A TIuV$:5!Cлk~X,}܍lg#jSң݊XHR?w~6iR۟.rϓ}I7!: -E1 ` K}i|ozEaA@LaCg֥; tc.@__Ԇ߫sz14aIs`]<=K,Kn5C#Q+5jv9J6Xl:n"@fz t0`l+6Ka1QA}]`Mm<_Hd/>wDr+w1 lc#= wh-8| fcL)||ps-H Ջ@<2k['#<7 , `"uM@m-DsΑl'*=VDk5e빩go֖L.=;>B$M9z<.D[>=Hbƶqv}>JF<OKmdQE6KRzU^;M-KYQqߋ,4>?Cr` $|O}A>S|(݈iy6ddk8Яpt!s@bK(^3(nND[x'F~P;bܾp:aTxr=D^]s|iiH pISI{!!A1cw=,`w^Ɖ QFxX ?D B  "o Jz[sB pņ 4auSTeI[lP!'Օסm2/ۈJ6 4n =:{dU`SRޛ\i8{li̊ [->ESpm-$bE3̌bb<6;/Nc>%O6dPQlw:cd;8Vo&uQ< r I'%:ܝ>x> y (6S x6t$AyRIlTA}?n_]y9VI1S@y'S]O{։Cj_~>p<^h,&Ҍ\motf/w5\@4qHYo@kDDF"LgXN!q-13GΘ})Α{r Ɗ} 7ӠUR= bߜeʴx|3~`7kx%v/'#CkS]FT prԍe!u}ܾI9 bdLX9G 9]nJ_A^[Lپbɔ{2%:Ȏ#kDE0&VMO|Xd=|~9p|J "{ Kf|@ \#ދHD!ɛqWɓ/#2+Z;R~Qz; 2*=}`+RnU$de&~SvX?L>[>bwg7ql^] \{JU>WP՟Ǵk|1Q}v4 a/aOIe$٥c>χ#O9GvI[{8))înOG >Qawc"28="K*C,;:ŐX O~y\@4*.h-թ\HPnoPKF)~X沁ZC6~,~gA[ %xF `Ƌ4F;KkL/w N![85Bïc'faąL +PxW53'Ut=hM‚[ A F(S7K5±X=C^%0l+ഡ%W 哢D#N*@џG>mHڇD.y7mR%XCbR`0/'c!K^5Rʣfiqsg) ƴ(P*8ޘ{r Pr,.>hScŽ)%?nk w]_2 U$ /n&R~(ܬy> g}iC* 2\wеwKL8:aԁ bO{;)Ѿts3_ KyBq^ zZf< (ڬL=NC%fXP(-fxG/W_ K%W`;RT)@ chE[5i`vTX& $ɰoEsiҚSù 3k_RH,^RȖSjI.Zu&;s_fÖ8Cx||% ój50SLGUIr^E1H{tYY׶/ʹ$SrĪ"Xv-NmaqY4ek{E.>HӧLt/ >ÓG>xGI#NgE%r>D+NB\>WfXގ|/{'(s <  U38$wa#:F%^OނcBW [u>bsE|Uf!Uݍg iwE]h˕OIAwaFXæ Q0Q-%o6',ud N19 Ů?ۄ^62^gGe}:dE.Lc=>7ZcgU)[*|>Wtq0D).b:-?hMǁt4oy٘/"v<{-v2~ں@ }~6Fޭ95]ɥ`IӈxxƝ2dj"c^@H*X;tnB&( [kC\"F"{ } .c|9AE&b7)(H\j=| HVk)̈́tEM4$r#{$mhEzby}_!1DM|: ;9gb_B t,\N@Ekgo 5M&[=Ѐhŏa^(GKbdJX?iN-(!dABkG--tb"ǁ7#dH57i02n݁uKB-s7ֻv́A]ȷ.#(&ŝ ;s4'05~y(>8b8 $S3[h%iB d4y:yI|G~ W}w8rz@ 㸤 Fm}E`Qѝs':sx$ޟH#ovJlW]/L;,#u?E QDMp'Wrw_["j9go<c=>a&,z̎ CHw.AG\#=&f2.jkY}xK zCSD :$Ml-&"܀QϷ4(lC쏽Y M&75|(&{= gۑOPvxDΔ&Ts)>7SPQGb]Dad5: Xi8LWfT̸̓$rxhjH>1C~ @6`5cgcC:lH_C +4^?Hבs.>؛jgbF_WG>C\J997 `Tfyxe3 &+i`7J-$ocsa mBp*77: bsqSz=$#2YsRS̐l_k`l|J R_th8X'{3[Jd [_JAR˸ T])s2DneUm'ƒ5dhD[>p?%@wg$a>;eTS*CB?ɏm}ke>;g21~S\ %+_:TCFlEhr='IK_OQM;U>^Ix˜btϞCT095Ѯ8t)EdKQCBHEP, =6({QYUV3,["ZU (XɁDU-H2y](X~] ܅"%m΁oߧ'ӤOM e ϫK w|ՈO!i@{uP_sxp`+y<}HIim[9PR2W4!tŠȾ1)?C< )QXH~ ×}T'gc-5|U"\`Fq3 'EKڗ,*_(գC]phE2׿,L#!I񈎱' Zke/]ojO8{DXXhI+^N+뮋He`OQh1yT)?Rѹ*c,DJY#p._FAi:Ar=jV;j(1<> %R:LLov$Ks((1e!]$8ylEF3XcV|q#Vp%YM?6fO\?>PA$ :ICKזqZ[x`_$bFsGz {= V g Go,> )Vε"+$ߟ6i+y3#vpmna9!i.ߵ/lID#? 쌂"pZczN'SYڔ y []\mAYK\C>)o3^A`%]^&L3Dz5wsȣVK`SQM,:x薓VCilj~ຳ"y4WkvwHqsD铐l#kAN߾2 $x}(Սiaѣ#?{A QǬF;w%y_o Jco<$+0`% pZJ͈) PqAJ37(r;w?UD ?pMOcŧ6a68x]$"M#vP?;ې 0Al@!rӛ!}q\_r{M;!4>үl$.'gȣm4߹Pfbn '?pAn/W?B7w#H> -3Ӥk4="܇_9;\|1T>-V!VC$"a)NuJ6}t 왍 @B@X&z'yEx`w~Q #Y@RV;Gr4>_6=+ƾ@ (%N䲜|.iRUe h6/G,'e>ʭ ߏ!3$ BHtE09,L-Α HPi:}&JτW* !;z\9)Lѩ=Dh/gTBD `_ȩ&Ipr ٩"Xxo WRFqq{PrDLD߆sXUȄ^Qk5)0+5su'?g:0ilUAt+D)ji/XHE 圤bxt=r];tr}yVaBISٚ~CM+yw?)*Lu)${?}oG?Sx(mˀk2qԀ 0%3Gmx͸UntJQ]\AGIs#b0}(5(8 /Aq+)jWCz(tk~UU\B$K? YÕȧ0?\8=݇BJ=_ř02av18|j 1)RA{v6Tx]y)#>AFjp 23]7 a>o< _p[X=t'H"û,ľސȰ@5Bַi[3JgWDCo_xvԄxnN?]/YH5&)/N(M/ Cg'Q$LV pM876 P?S7|2avmL" vpZ-7gnso$Đ&Q֩@>82I/o$ᱎ9ΣW3~+Y"~M>)L;&%oD.Tl,A?{|zqЎ`H;zP C|k|_,hvJ7p& QQL>sgagԭ r)&?'vꊹϫO?*@6H_]5_YHׯ\޳H3_>},}̤nġKq7ju8҇c J伆~'GG >tPO?>ۼk$اVx 4$h|D͏uve>jHV ! mf(& '7!\%CW u ^_٬f  !k$ a51o=H`:ӅTjyL)ܣܱX bb}?&8(U'Ϥy휶Up@,E ͣ3> 5kq3R$WFݻbڞY_mKi2bՙƂ'4BiWvQkz6/ 5AP9S9D'~UbAA @ EǩEXv[oѹMESڸ\_)TBQ\/ٶT<<`=&X( FyC;kFjcr̡8pܛlXT_bLeΜuA=_?mԞkdFg/$iw>NpnHB"jtDorFz?UbkB|*7*q|&Jc_FKdZC^!u26 /B H`2P}mKF Xu“f_((POcNsBnv$_d4(&kUg"lTRv6A􈓭CX(%604-W+*05J l51zbXNGȢ3S18qt4 d9$T,. vpTfQrCh S X֯#zraC/xj@:]|b7n3<&r~@z&úʎ=] &ϫ9z=}8;2%}eлB+9ƽ_B Ճ(GW ==w6 /d^qU9L8j"9{>t*|aw7" [:"y8}g'5z; +]Rx0R*??n<}@Ռ0ߌńpA (81wS@{]$/)H,y9WKDQ{l_G8ze.)mh~s6f_" +o!KDn[i]0賊Z~hvqYFO>`A8 4U[`^IgW9xt;P6Ypag]fz}ݹ2;NfDսӲfoX UD=;ZשU Lw*.mR B s,Λe&<"$ZX ڕD#<0P`VY "ӂ)Ј5>D5{./ =C~|3~5m8ȽEiʂ2yJc*U3h,Ry[F#22b6K %=}ĸGӾ`Az/8?Qd͌>ČPVȘYAmB ql:\+-)6"AJQ+7UK]3^vUw& UAnc͵ѩ /w r8)<0T^"U]qq;oJLt{wT0 BᎧtx\#1iz70q:6[յd]/1 >Dž$D9`xR}B*S̱fl\e_p8W-p->rlK7Sͷ&> ";0\WATFEJcO gY`06zkGg \>/ߣfV@u=apϢ)8qz.$(f]`3 @lt^xt>*u> BXeo&qi].qrMq4I&NV:E+|P6@2=g`,Ý=qĐؐE?DlOQ߁!R Ps0a[v3dcGrF 0aPL\?rEȆg2x>d0:0q(Z4HȞ#kVV,j 歝< / Ns=A6kx"Mؚ؟A_bIc0v7%Prb-7ds#5}O+cak ({'>TZ,lYj *7OIL_z9e%(79LcOޡb,F-Sbi |?y`a@JCz2>Ҕ>V3oq Ndarŭ p$+Y1U5ozbC~ oVàa`ZqGUplulܼu]It"',xN=zSq|H?{ k')MSyݫ#7|7uуB @2 06zuG):X'{/10_ڐgu½x|Hs҆ sZ ΃~+U>&t EG4b0^$y;D 5'*/hG-/ZoV 65f"F8|dL:-vT# H0"ʧ+& #x:pZfa,NP$Gw5Gofa\]Dj> OX%:hA?[4x܂\in\8T햄(3@`νCݧVqտi:T55+}q/* $lxXsc|\H a\P6G8*vK@h)F=ϵ]ُk!RF:SnKL:m[e=MMa?5Sf|]|0kuΎI([# ڠ*X #~RֱTg :u6'yB8ڮ5bTYsc,^R*SC 9gqBT$ tjEWw j~VD_y WAS l7xT*I\b'@븆?:nLw1D9i`oW TysοhECGt*j5KLDi}Zk.*__00!x7rN4ψZQCFC&Wf`_5B0ODPea\š'ΠXPyYD } 3*aRJ/ⶌ;no|P֖J%r؋9:^5ޏct^&;opf̟86p}`TY0.yv#6PGUDTj;4 ӉY7=II<)a_dfn3A CjNuG}(Go;<:q(߇!g* 06Yq?X#3Mܐ5Y-s6O%h7$'>1wj\D 1ح]g/ۄ"߷oRP}KOןZ4#nlԔ+mmd&L [WednA6ae|i }45Z|ȊevWDyZqL#h0f]"q:A>oظR*agKvBЁqr$A{E0eN[J-c9ӏpzF{׵x91zpgp3}6iaQB8" ge\՛x@DHc2qG:RWA5;gyF)2F-yf2@( {js'8O&%T^zJ _@W( M7|]5t!c ׎Hohb0%yr߳DKoC>|{tAܜ Bۛp'8];[ߗ ^~sϘ~}%ْhoQ^B'̿"[<郎z])  rbfzm3:@/Hߑ R8vrw\ţv0a=/^%a}m~nRB3ޱtBb0.ͯg},v``9(RC d}r!̨f" Av6z;ފ)2{F kܩRsg2 0s772ۖi!Zk&,t lU&BEy)o%aJ[(yp)(Sq*:o@ezQ9H,-&>8xӡMtـ@Za>~Q_`(4aU'sѰ'Wܤ رs4tq3Z@!10: o L!a ]0"aRPy_=mm6'`y? /)}xOsfLJ9Zq}ș 8$nE8 A>/X%|5x$;H*f~1K@?z/^NU+0Iw\&LoaFI 9`@x:y :(ON '}[S4fW/Js 𛝃DB:7(Ŏ+B2=uYƬ}3w(@e@pyV<.H҆l+`? 8?2V( ?bb@<L<+iakվ2! 3r+/Kb7lYreqTuA.a~3x~y$Ì";*F?ئ W2s!f#ff.0.j'@ ^+8ɨuRFv  6`aK*tiއn-7:oL$o7rGTJe_ia"SSov||]M5I1Ώ02RoJP셑E J?,&yv9 9r9+qR SU'_0zIS9\rB0=nDWW U6QdKbrHX= :r}{^EYHam]Zf,:<>^Q-z'&h渌kK޾7򻊂`9jבdH=JMK۱"$3wiv/ףZ̈́ X#u-a3JL"FMHL6D\z ܰaC<(iZDb0# ʨAEﱀ (&x!t5MO c~9H4^@3Gg M(#@gmcq{1[|r);߁N72 WhGw + @?⻸bGݍݜ}.zfP7asv'`-0D,' @Mh'o$*&z~TJup`Y;iޮ#{DL_ Q,=ÔsDhTf85(Dw)c <:I0ĎBp@jЗ}'V"t9 =_BHtS ?j_wv<]Cˑd9^I}퉒vhˍ1F!Ml??O]W=K_hL酹[`]eHd3XHw3D@_Z4(: 7!YCW௽;g=>g݁":SWZ^͆0H1)msင?`> `@K(E_HOJWrP!mwG.Ym=+HdW P`ut9}Z3FIipSW%Co?U O*VU"]DF0dSՇXn?~!= yay5?':릚gtj<^ _Ԉ sjIC?I ˣmtn1tsI:7r_wM@͵g6b垣:'?99e~xLA +X8ߠ#mag=Ť+O9լ(l(95<[~_\cz* bQևs7Kk*jih$kDjcV`jSW2%gKrØwGpzO)E%ֽ0;FBi С˒a2H{\u8+@=^yj2 -aN6tVkQe)̄bލG0Y]D~\5X 6@T+(mdx|rgo/H7H=Kròt V ~ Q Q|tƩk#X6-䍮!m*vX1~(Snja-HQTevM..B&&G[7jlyܭμd%P+O0T@y`y}i5x:( RFX:pUIYQŹo{ؑ`љ^~+hy)#Rjr$=/?{KN$)#i7.9b=AphljҶ\P1=l|%9i#:*ci}ќgIGqNH:iL>`3:K |mBI!Iy!$<,EB:3.yY*+g{7/^&r-o[%sF8dv=wP|>w5{V$B]'LJFۻOI*_Gbț~%S=1%QNkʉ&7fnE1h(|4LyWs5چ̏ @_s\vX}7@ s;|>!dD'p>[! $v o Iqq;>2_eBc9iB;d/ї*tөDygCuݰR}3H+ϪS=xT/$|f R&c cK#=Je,LCF?p;c[)^y_TFg=Y+<g F{TuQ,@Ŧ)JjEr}2GT}@eA9%ߔ뇮T3}$:ӹ}L?&+Տ'%"oEߒ4Ԛ S/R-/EB!ia7{u|Yϋ[so "@{>w׈XDLv(BID)NMD, t9!t3:[7+`æ#.GqR;:y]\ C}ϘYYI mW&xq?2,_;9"qlr_{J}s4_Y@2"Z|9y_ }V:Mpqj !C0W2D#bwsHhM+e'N \?U2h5>hI]sYEZ&-ډs1?!@Oѩ$܌-Uo{MQ߱Չe6~_ @%I_J b _f-"+>&8C f5ԹXs"c?u_Ij \I{5U{~vg_ ~sj)c\aɱFR,x>#/g: 0{Cp@ 4sh!K*,8( 0ަ ^X3=w Y&ȚL]V;TI%ח{RW a֛j3)CK!"n[!?E]UdPa^L[vK%){_iӟ@ 妻g#.RYü' "$fB>u)$w,7`,/SՑ"haNrWie Q[>a Ïpǃ@ִOSg\a)׀U?V;8m2vΨFcqٶ͋im-FQXHW#ԏR5O|pd.[t릒H]:m Jy_@jB8ḯVVs j[.Z@q渁ٺ%|L/r>L r>&!εN.';;BL!A"d0An"9jT٦, nkhq}[wđ+`zBXy52 { & 9΁244WbLsC!|I@_?ȏ^!E()p=nƼ#+&;@F|P-HrjEtIwJl|~8MgBs!6kO89KmWM-y ۫m ͚OݯH尷0n犒* %鬠;joe^| Υ5gQ9-ɗ-`areLOSBjoGήI\`FX83π<|3朏ϵAm ;7z?R_ʾY+iqa6֊o!t޼k|,mӘ3$=i ,^kN̦{CÎiV#:;kλJ悋AXpo iI[A24k;wXMsڼ\^BﻄEyAg#/#O!O(`Y}- * N!!.1ܑ_Ԋ8/AxO}&\@T^ R~STUg G~0|v)`N>JWR+aYa&ɨh.CD-f#hkveGi̗}q/ˣ}WF|qb=F<7?(plyHEfúx$fc^ېn4/i1i )* m~$" Q8BX/@g|{K>k"@ی Cm ăKV`)LѨ j0܉\~~MEjL#e@52+C-@x7Wci6-烑ljeIRh MSKqB?nODDLYmL]#Ӵ B79&=C d][ j)G0$0l|U&"a)1Hθx ՆMHڢ:(P{o [r_)i~<U/zGFsW)\J{LytةAI&E2(7y|0g=NB(8Ȉ1{xNX: sȴ&usd+ـAD>whw lDP2)&xb_b_"Vn7weJ%?xݟw%!k&vJ|I`'k`9y@x!7SQG C-"=xh=| JCsiG{HrlDp]I"a #s+u@kX=vC +r+(6U7߹n@#7iBO !jMH=d7h{ ] VpRpF 6~'iv\:v"]"SDsw߮`1nX1MWõy< KoM7ٜD#X#h&\>R\'ƾXއrF[wr?mH%fS{U;ĈIzcݾiuQ+5n|Ib#5qr0*{wcF۫e Ԓ\` #_\@vN[Gaۂ՛ecÒ=S, pEƖiQ b+eXLY3t3и^!EGwuL4V-sZa}-*I'b7>b&8{(`= *r>׃'=_1E?1Z/I|+0Uɉ-#X!]Ӛ( 'gem;WSJ'{}W!c_4f2(S~SYTL1;6ЌH޺WN!8/ךT Y/:"*sڐk3A$0fso Q q?R4W@n"=̪)T^])+0*V~0ɂ*^*vSkL 4!P\8=}]3sN 8:D[Ȓmp@ITZQ4Ii姈'̡힠2-6*LFリq`xB\j Nd6W8w$%+}s!E,_F66 {%:;x6˕Z|4}[ gG|HYEnJB[o^477Si뽡*uxve 2F{P\׸ H$p8IrQW|~BW*RA0 a!E섮rP;B-;FmSF 賘qǝ8iP|1A1P9$5u/&`xtߢ0optqDm>;m> LĭQ5gPsϷW:n^Ўx5J@{~JŽڎwhf{6Lz/:%m׈0.d\ռ nBmC%ģ;}niZ:` ?@ե<2(7[c`Ԫ \&sJjgnPR| !qi]~$mCnR(TT29ЖFጙ$CwUjJ@E# DFq~)GLm=FpD;UU*\sl7o0&H _dHc@PorMC{q|2[;~ rӸbBI[1 5͝q_Flw6'Gg$)_d*|UvܾDҷC 800a扌=AoZ^ö>]³dE!>ۈ3gJtrB3կ7;+FX~vB̈́Ā>M֗9<`;a@{\0U?RWل؜)vZ L# ߖbL}`|9[]??X,{ c;Ϥ$t|S܎˶=H`3r'  SSEw^-^*A:wX0rfp#G]\(Pnbl!3( y#("3bS")$?^`+nzm/WO@b&yhlXh?iokz>fE8GT: 3$zzɫ:9"h\wcľ(pQyWꛪ /3$бuLr9>)jńX2iyʕlSyFEVaHDBcDVE<)c^%&@S< oo) aqثae]sIz} `MvfWVbqe&4aA"_0S/)>}v!lYD.>Y>Wy_{#;hh 0Y(Nd@nO #~ax Rs>=3Wа%MHP@с!H8[kFK?D8x+?6B:֩LMP}|do}ɁTURL7]^Duu$뜿G/{@9g"Nߐ`oo\A6\kLΗ86 7a59暢pq {V<9x4p` ù3o[椂s4Ρ(^)Z^>cS_Vߪ$?۶VWs0o|'ܜ`r?۸)DԲcDI8h¿X?jxE1O7`I>%1;6Bwy|UwX0@{@׸s.L[%i`j@eˆWhP]x*/o,Pv3\>Azn714BhpZԁ&^juX 9A:Da%GI AJܴ((>WhhTye!gwb,N᱿ )϶CH~s-̉t8F TrH@ȱos{p~Z t/yYY|DF:_ ]!X? nq)+xlv5PvСou[ S<( N |qw)%ADtTL @8BK5 Jl (n'SCǚN2IsP&ɶSp_\gHZQ@!6}jIb m!Iӯ2fAS=i t~s׸q% _Q$1YPvYFb8 E6K:a\{9^d +,.3;*:FYm? (\&ڐ,@7 63Knp~.L> $bG}(;[o*ފ<Ʒ,$V[t;x~ξZt-{NxYQ*˱|/IJn&׿z=n3񒟛aY4#w|gr+8r!T4Ã>*9Mntz;j2 %ʢ*áO^E"<=*!JX<Vtz3\cU KmRh;kCOOE^9BtL44j :q1n/~EC" l8)&'P;[9\dbO(0*->Mz2pz'|aDf9dFժ"lS>ZP9@ ,EF-*'bq.,>0ܸ ydk/H-m\\= B=Koum|({ $L&hLrd,г? 94r@Im!I'ͧLM"WyUwUiG]2wuC4F&ӎߊHVDBx5\ɥ?jrs_z2q9C'h7̃w3za#KAx7x <7nQW C_D|z̦tM6V_!P>J׼:v9Hw) ].Gc>1wQ)tN׎t/Nb\t)ᄎMV oї.嚙hؕXzt4e2@յ؂^Ոֆ)5Kk ݆_傗0esLw+4^ԗ+]Y3v[\˳L0S+ "tOt3u  r8o"w4h%>a-\UUĊXHOG]7 {"G%="0, B[hgg|eW6.._KX߫#y~Nef)XC/sKwO~tėX&|Lq>u-ez$DPC~_z٦]qǑ'D(A<漅w|G%v S(/<͞ykܮK6:,.4>Wd\ UO ݷ?uN>V LɯPGD3_N_ixIJ8IXG1^Yj Н>H$PA|ՇW,rl $ 49RV @XrTB5yn8FMӱ ܵyH`޼c1pW'L,_ 4]<6_}<'ډZF@0lLaasH =0!1姥 w{>]^{;;4-.j(/!/y߮_< ^ɫg c0E{i{i{: sx}xCfo%wߗ@;͙jJ˕*<Ӽuh^"؉{$RHugGԏsČbq0 }a`" aDt.*S|a TM?D@iWA]4Tku= A!H xO۵wsȆVb0_ʱ/&)نιo+ٮqto-ѫ bvZ{h˲=8(9F94` `LєIC 0 "0+PnitSfiaP=m ;ME@na6ox2Ctbھ~.8tF{C2MF})jSAb!ǡjN~y[Ռz>xy|E#A  G7O{s(ش߈" ")/]bo4p4-vb{JԱ#OʾΗ_wI;MymvĹ=Npw1hH<ȍ]cTt+Eo3u~sÁ2FA:v?KJzEL2R}rf4F/ JV_żUBcP.NpA'`>h^np'ђk˾i$xE Ek_TvG^%aag1-|3Z_a[r|6K=d@~fsʹgp -Gr=`;}h~czM͟ xs=' Z,M"_xP%U\ ER?]qq9ݗsS({B췾iH['򆆏YE+ۈ2NAxIUC:õ} ԣl| `cx05w6{q_ a=S$ƴqKlx "@"2)Y9ykgI+AT8T|^Zpx76659qc0Hnzݸj<*5荕TMNKhPiiCT;8B("穟rLc*XmB>.1SǙ4ڂ먒-ڹ2ԂoGt5|?ݶ!;ԯ᪨/{Ut;- (mk2'K-W\GM]~xky>;'4uJ*6JQΰdk\&$ IЗ/B-f|| i}5*l# $||Ù ˁ h!+/Zəf ,G>4װWo@ -A/vXQKN{0m*M7l9?h&nkpGrwaT)]6aK$>;x=3Heh"Yc/.&ƭf,+m0~Fu3QGM[2y6xsS/%h5q7c]cUDA4ǥ1:_+,BqJ ?w(EϑՐ/ᾊv{:[FIG~opDz( .0ۼ;0?>߻Oқ:AP&1w7-d?SfD2p+RTFiӔy]{ stB^u02ʙ&k66qŽPw%vIoTNG\[b&NVjx[XFrI@ {}btI6IŪFKbzC͌8с (p(w?n6^^"O푹 TtKH&KUk =>)Ădյq-ϟBR3L-3e$<9b7]"]Upߊ\}~U4B)OLH9H% ̟"6kuNQ N;Agg|zv T/H _'or^*/sQ8qQ8gڐ47om>ʶJo7}if~P:D%;u,x``0h6z쐌 )=D֑۵AZ ٣VދJ:f';);U*7NmwfRxYGG/NV;V Q7-gWv>}noB1>m8|?ßM1p3JALq '1 >LpM{qE!Oؤ{-3k϶ld׮v*mcScp9WG Nj \"ϸ-_L$1kB>Wɣ~wmu6 =[sYk v+@6 ̃=遥=MT 5R}Gxǫk;7mU>@YQzpEzm .Wj0U$N1.ٙuz+9*.ۦ7= ){LM!qw7= CHx};#R#1]rEߴQ:NG"\\y_sXMM` 8Ƕx&&KD؊#[_5Q=d)0o0xge4f]r| >EIN/8m.2u(B3BtUzAoKvh %XA@Ag=ILQ;v2Iq 7;^Y0 w:Q ەi Ի?jTg> HnW8fqR#sZ`5gJdAݵAd髌B7oWJNlYyR}w 93'Q~XSl5&]7'ln"jP<s'N2DA9g~}7(N[҇Ex* Ů3_RX|'ڧN5 ϯgm6 Gcb:c+\߈sySL1n,sk{Cqs?@×'/>+Q[Vk“q.|P zȇ%vG ,5wv"ekPW8c?0 >+8f.Ɵ~P}#ZPQA4Ro\ >KmIr?qsEfkY-Ld^|QУ ;̽x5dVdEe j|ƍ;֫TTôlc89^{FW)(I;Ov嵺[aw\>lE$طMw qDµ!0u \$~sm* }2Ps&tiZ-Pf5شc$oS{) Nb=;XED"V /B Vc2UB R'QdֹVH&ޣG\!UO-KB g sam-"\/ -r٩{`HIᴭUNwU CUO"]zdl L-RU "J1߄`wM)IиA6u:(㞧ٙ9OY":86,؞UA:QGKFw4iBoovr@;6 SwREw~)N60'1.;3Ah[sc",9zOFxN{u[Mz/ s$QCW㘅amf9ɪ fqsEż~A70Dg>8snw ϏcNeAf |6FUi¦[&Cp~]qWWv ӕ.p:Ekyc/-[] ?KWt@ңmmr46biixb]B)ݮ WcW6th ++v\uZ X-@*fV -`6O!nWI5pn2͟]c+3_~*?my×nYL9O!,XG{z5\Ŕd/[c^0Ǵowq³1:۫HF=1qt Ĵmogrb\HoI?K1zc}|b͸ }!:i:1=K;<F;n-5=6{')i1 fG&iF tӼ`7gcU{<ˠ3w,y+Zq4˴X;z_W#~Tx>XkQr.];d\0/.[ ).'ilVW>٥B7nGhJܼ$1n"Z7d:@j)e(&N'2(|[~}.>ቊ@sJt]և{;^i !wuކ2B:v@:.ҲԺPU%E%Ԑsx.t;,VǠ=> 4ZsS#?6o^vcèD_WEYk-`beB|!yDHlTM2fO=Vx0Ea+ jTY/Y+mccȐ ws,B''ͼ ᎂVEA8kPHmY{>ջ8}U;.Ar X#9m#>Y N}ҾpPbnA,#`V/Xg?SֽκANckb, !uu6'6ne8P/[b^yao/ "Ad#X[NpdS4@ XasE6"5dy.txeoz_ឋLvn_¼JovP;8rl,' ψ)rSYtfPhi_5SďNIpSg^j5vD*mEQok Ut+M͗ѯ {"N*] E@kj427 N/+]&j[z핤&C6sa'*OC  j_i``**%A40$WyY?pv#w'0غ,E[y?Bo:pSMrG*@ݼnva4#om5(?Q?iow(&z F+ f4NQ/2d^m,y*bmNiӏ!Jǥhnu.5ִEJP 9QaJ.B/sWMXMLٰ~7j|{XqcY~"َzN}u<{| o nPX!]“ AzߙѪh~gxh9]޾H$0n{~%y-{ asSt7:&V9ZC: 16t+ ު<5tE(B`uwLo8@ ڒ871qxb|x=sG}Svx^!Cxy݇&A3!4D f+O mzơ'x$>yւ\3 C|͉5H?w[ȓh :,f"Nލ88{~$i?r)@Jˀ6՞ =aN.DatE%wm뻇Zv0Chۼw/'ICmew ukJjv}8=.?#`6o%ke "jhVRGnSg ;]FX S Pz{Fj:VPD&C]K+bqr4y{$C6STNEiG!}cW U<[pLL䁑WnVКUC{%V0(~'a̶a Nbd,FCJ*,z ni6@Fl${ y͇r^}aE"\hzhn$fˉ7S(dVywh=ۖ]]zM4h:1A4N^/wR<-AZ._ 8|gy鳷'p& ,?v\IW81=.D04f-8#PxY%򻪿ޥ|d1|yɠ觕9%g4M))",H䜍=JH@#dFtݤ~cTyיҹ׺5={Q>.eY2(5/@d;8GQj\ }n5+/#LL{ t\lýa{d|{x<&X}iI9φLKg| % 9!e1l0X`nW^/.YANPIeV+u0FƎ#C_aHuh-[ƭa)H|5rԑBF!FsWEІ:Wq TVA۵ԼԱ**F]Qo_nAmj`||v8X֖#FR+DsL"2Qy pPWh]~E9ʹ9%8,γM6?W?܏ EE(B7w-J 2$Ƨ%b87F!Z+-߆/`(1bn E/zHbexNeH6VXyk#Zѯ7ᖔ#kJQ0 |=yW2_ ?WͩLw-2׹7x= ͯ ;wE#X@]Ƽ=K&\a=viJ4;OE>Ku =ƯmRKBvpr t= 2fSJyV/AG͍~ W@$y({ߚ gxdki8W{kKyݯY- BC}h.B?eJXЁn4z)D V혫[)]B,I^ٛlvݥ%ֳ>gy 6Nj&>QK[b˒d~ ";A_]Q_㩺vqT1'T/Jx?'8O?hq[d>+)'qwS,*)1WSe*p@E@75zvoji'3'L9kWJBxхm kjnbj]BL-Y#~Ք5P*I챥1"CWbH uNN G?\ɞ,@8A(ol(ҰXnktlcJ-|-"S pnۓsvFiù/0^z~-1$w IA,ճ"!#\_q%g+$T0}*Rv:>]bL0Z*̚j(~[IdE^QVMZs2t8r } <1/Jy$zϹ~DE}rDDۃŃp>%ݮHB &ܝrgPCz߻ jW\-a)tGW$g.5+YZj; %ׄ?;}w?f^JK1RSPY CUQlYq&·oޞ?v3oq}]Ģ#l/_*ޤvl= . p ]<ιsu·RDܢ_&1l/%w2YC}p`BYnhL{IGAnU*BrkG.?rP9]G{ =tk+ؼ~]JX Kt'vy`E:t/RZ\PFoēS[&uE.5c#\BGEcPy}" h3ŅyAD%"^s嗛ȿ,_E 3>Lg6^L:Ѻoȷ*u_,I#i3lڎ&UMjKtl1 t0-HE z385eK,h἞̀6S| 5@}<T:!fꆆ?JaKG]IRE/R 14dZ,ӂZxb<Su]yir;-Ep*--> 4؞X=:W]pӄ^sEKj|[6G"c~!h혚3~[N*^Q9Mhu,?LI4D3F#oj+MCÖ^ot ǶQYWLE5nKhƤm*D ?WC3\ c}d{u yWBUbDF  1{B_uׅF`UQ&BG )e'.oq>:Og|VgJb+SŶL"oJƒ;g ~E= E51VŦpYi̛\[YMޅ"+8U9]f6?vkc+Lڽ$zmp ֪0q2 Uϫ0€Wآl t/j3~L+D6B̵wTkX J :5\8gp ! |rmKɶu6#Ū x +Nk.W%4 ,&#`9X0c﫞.Ff**O d.RT.D1 V]ZMʚEH)UqMJuy騼/OOҚ=~!*.k pٸ6:Fൊzr+$~>v=+sy=>uE?wC綤ӔO>(ze D8]nۦmݱ\O[4JI:U6/x p>i= iZܻyUf%$疐P[w3iOn7n]N:c&0&$J(>Dv/}"0~5aAXoN6|,_ONT 1]>wVʷ(neύxOXO g_G2HUZRhE?rOM|8Sr-{:7E]({/+Pw6!ӰlϹ:ޜ,9vp9ᆳ`+8u). NִԂ5],j|=]d_wSj5WQxB*غ!1;hb7BGN]"/Z{\guf 6)@7oSglSXs 7Ss r+ ԕKQT^tȪΌ"H.΂:iAnUGίXʅcdN]sv9E\>o&KCAΝNKvP}*l?W6&Ij|SD?TU`, Q@4wx5YXs63/ FX?Yu?F6I8}7⡈)0(P U;A0&|9S@YC^>I=N6ͥԢvI+͹_X0( {\Y);*sgu~ͅhۢᄑFa+& v-= exY082!)*Rl9|ӷl)?w0X2FKgHc$u`!;!2fb҈ .j&Y֟ܞ/KK;;BzYACgM\|>M֐1>.viu<}D~s8Moø".0m:?1_Gb2NQ'uB~QV(FrdO0׵;:&/pt{$g'!ol̳l䭙Q*| \,44]y4hpT޶ L:& eݴ7Xg^c:1dj^soiCa ٘ΆU=~)㵣CX닙TjH`%?YnsC7C{ܳZ/#%f^'F QcP{k{S> e?a71Q=OdgWVibG].KvFh4c4KDmdu_ZܦByT&{9]?K= IL~w}N35gEsucGh26"ͤ?QKџ$KՋZ=97~D'#Aww[,# %"ݬv݆ .JkFƸ_dzʐ =$][^~KM+bN+MR;qXwRziB6K8@FS@#ZCb ؾ3"o,!eaϱjo8a$ J堰RS*qc+٪B {a_q:U u%PDnJj7-1XՁ!iyW")aێM!G${0a-bxʊ]fxz=ξr"2qGA{|jI-gu}~(bߕv֯ixڤ3X`dh)[!sx0E LQ-AS D-7 k)^١ )\蕙u~^BKl*lN񿩧yhr>n'Ot?!j3y2{9g"_dN[zl{9>굇P}#s!btuGg&q:l_BU{?6v ĄfۋNjYoYD4<@LChר#ś鉦kT UBau)#Tw=NBCW\~A(KN@"bk7Ɏ%Zh;NH, <4&.~PC4s߀ၽpΉ-&&Ϊ6D \׊.NEM"vNΎxۚO!r#ֳ@Z)";'xAM$e |!Qs9{b +u'@g=灍珲E !>7AewVڊ!Z ,y.W,4Kt.sMעd4t`|:/yM`[A8t"DĂ1\i +C}/"Η&Ͽ|^D2ȿ.t8v#ѯjN^(|=(/a\a=͏gx3ihGֹ[E/`6=~Zk_Iw( zLknhuC4X]TvY*^- 2MO"4Tӵ<:svcǻoz6?(L^λ.Yu=8W8n:]9qf W?y ƿwy ÎnFfÄٿ1dD ߌ͆ԑ } /m $II$,j{_C -kۤ K{GSk៹N,l2^5E$i2_&${5sZ'L=ؼ x.@Nj ~V&V,<̬ZJHW@@*R orX6HSeK;:w韴x1a9fMj3mwFZ-/}n =f1.aj@|`%R)gMBd#m^yX$났҇SEԅ?3}4J@!@@IPng kp=\joccQ-hoQx% `X`{5Ljǥn[WtA; 3pWa26.{yKm,W^^yM739<ƥ sM)$ cs8^ ^lJR jFI]5@RC>v8 (eE, |BͬP;VAs'w빎%FY^ kF9;%eqT%Χvhex[nJr'\t ELwt)BDfz&$n%AahYQ;6YNk><KBD;S]]x^Leu$.-;C{.ČJ+#@ 3{] r>Luy%Oϧ1I.x&(H&-rOVrXо/`97MSAxd[Xe8e/WpU?ˍ^ \\s#_o?mD(9OE10ul숗ye~&qq鴯rs|-s̏%Yo}7+6 | y]BŒze6ƟS) a-tNReb]nOspbh;gb$Uݡ(Di\_ C ~QE~jPX~}H R4IDOׁP1@-t|9(;,Vuƶ3DgPgvrmd !`0kFP3DDuVj)jQ1 a\Is\]mؙ(]3QJngh`t=9WX́l QmOC.&.VR<`;Z,E=?H~砚"8Z.Ĵݓm ]wArW<ѷ)|>H!}cS'_ԐMq쐜 d=``@cn*Bj$(!Ly^m 6\'VѨ^xos?4:eug$YNr+=̧znև+MW}?X`dNεiJ-5Gg/n_".}Qf"eF-.?[c@bP{>pH4ҕg&eꍑ?2M3vUDRJaW7tT/^V2G1\YC7@S\\LgVL}|VwAp͛nט9_ֿ1>}2ݼ& ?oG~'&.ZfCEoH`!5"p$*hݲw<3)TWb7wovJJ/WIY9e1t²t6ݏ#}~o2Ǵ*lOY0Y&Su>RF2qU> ޴X*t-OM-z vw$pA8JsəE<;uHg41eP;9kաbJ7}UCrVC{Fe~ vx5? f_[mZW.ViVoP'mwh+B!}WV-Wŏ?~dK7R]zwα[Hnğ 1-R}7@{.j{+pGthk|9%{-cWRӱ^ങސ_:|tM]dn$Љgg| h˱FUTlh7 E' a!A?Zݒ&XGnHj)ezD^&t `ϛ6!@V#T3S]uhӘ]oFV? I qzz2ؖ#|~ j%N P+*0XW PaGpx3IUh-eKKa`DzZj&u~{y!CA3},w91KfqTEʂ=6N^9YXߖvDS|6NSi3]cn7l$EgO,C _8"]ݿ''^gތӉZϗuDJq'#d\iXrbUD`:81fAe|IiAX8WW7pȽ*մG1]E(N>{*>ؚtBXާ,B/.Nاttڒ̫'>}kt˿2lg8hfg^ݭ+1p_Mc_hd hZo]Jc<=N758qy`y.f ~gA@C̤ mظ4_ ԥ+ mj|)%K~MzBy7O49'X5Nic @L9NA~,=+imZ RCdM(kPv47GlXxQOHI `iAk}UȮa뾍UE^ę7"1-WE!ˁP򞵆^beZ-HL3Z[&+쀍XW{]nZ2Ǩ,Z7$ zx)>8mfkEL)y1^[5^dJwb,)W(y8ZӭK޸ y 8  "Of;Cv]~7L_ruK4H|nqUz9%yu~&Npm)?Ēüұ:w1= NIypn)xFxIO럵N 4zMP7qGt̖- 73`,3l%m&YU$~z1d@ Kֽqu/m؜%BSf LJ &D0PGVx}}cM=˭8alj} HV/sBk=ܑWU!UC'CT H #3ȋP^9[$lݯDr.tӕՌ&4r蘤ݶU+nHrvL:cG2Xsl`6),W/KErQgş\YUS/pVvq<ؽi5G]([+5/ތ:X*p2;4!Jc}"Y8N6N*:TRJ:Դ^=}zs|NZRavkhHq*sOS.=I`{A"rHE9F^ ͎Hd_nj~g1Wʿ'BÌWZQ[\JPg"yJ4B_S p[ejߝdfZQV_}QBH_nV,VY)<J~?:X`iSiØjd*3윟H5ߵB[9={g1 CFY^|8ΜH#͇Ew:v;L7rT\e}L0ЙaIĿGHÒu[ Qfï3HD5aA+<ǥoXsRoD3/WNZxé \[XYLn?vVn~)SN)Ӽ3(_)1|i_xL+'yQOϋ/ҩ_\p$M}2;hU^Snsew"~UL>`?:Iol}A, ` ٪j$e젏_ӷ~kEgDT`$\ ]m#QqWQ )B:BH_iiyf;\2e}7HHi_(=\,2Ӆ2"T>ZKTkO3<":U=}fC?s]>Mrvnh~wS ryآSuQ(y|h1CfQG#R5g]62 ?|ѤM|~>m㘂4!s\y2_6_`) >ˮ+J3O#9wO} {,QUm} |\=Izl{'v:^Cg#Yi_ e1:g}g崛Gm| qjDGT@Cp /nx"6)Y_zo]|41cLW:[|6ݭmaoY FGh,\Azyk;[FJuy? bR+ե%%qnYpCiw[zGzZ0:lqϷg2LSMzI &eM?(OuKm0GZZPj`X hV@՝TB5'm`a ]oE!jي!i>P ^$JzZ&h* .zq#0LBQl)>xYI4!E辯'oܢ)/M(r(H.RI&,Ii_Q+y]a^Ǝ b]_rqp㝴 m;Hه_CGPFݼXv]ɷ>|%Č>8VdKXsNP1>!>y!QW++B }[C0SO Ô9.4(dȶ0a9nX>_{:-$K["F&ݽeeEd}D8B΁hr^݅ۑ`jr)";vOMkћPc~LNU03rHBMxZTF^ჾ~NwoHx_ݼ%Di;g7m-(xcow,qz#goo{WZbʚG1*b5[m*V>w.C`j77L@wXBl#1u`L*vCk1"r  )RU'pޤ6O6o[~}YV xAB ~ǡ\ĝKXu ^$%9iP2/~{O< CmSSp'{nX++QڮI/Q @V}Qi\Z?)Dؿ> q ^c#~fɨs#-ђTo)p>N#QEK)3 Z&}-*e{c&"xQWTCO_(  :1._,B_CB:J3` 2rݳvJ,gBȖ:{0Ʉ޹l/izjS|䛺?(egKOr~Χhyi:eݭ %($&PpMr62}LA*o=f#&gm?(*0P,JWtN뜤ZeNJla&ݢ#slѸ>y PyԲ?l6tiP:< ӡX e?uOHR Ld,$BcehEFKNw ͨ a; -P{Hԍ_d&o0D ?gIEΥڽ0&8j`4UkCTzh]m~kdvUP:J/կT{f}_K7*Zzw.XdP-F9|# 99W\e~i|b 2k4-VXRrKEq*h^nYWߩZH+[>%)k,E/ F4'܇䴧-`[HzBe"ٚ 1xCrIR:ã[Mj]F.jW_tȠl31G3c@孄yw-ebWo\sls+W GƭoָK[=]VUZRӃp/zl/̱e(p3ַxqvN8+_!N.u4yku%H+y$ -)V"j<=J5VM9/&8:JjW >o?;0_|7e/r߅3d[]Qx{^cD+p H Vo{[7|=L)q;ՁZwhs 7G$#d鉛97vӠQpz8N'H <59Ivo2w jB&Vg)*!aףꕇz"lj5[+͐cDҰWm"+$v}_g԰2ISAI]hK߿-4.+;ҳ}gߠ_`g\Bf(f+;~ɾ JV!4pIXO-;NN,,swX}*k~e]>YX>\&f)K8. BsNLϱQ2oO*pw.ApV{Rk x9.m|z>B(, `ćQɿ/~ G܈_Hm ( We0@gOhUM+wOz>~06l7$g`;xpQV3wiv 9=Ok:qmM(@-(P -i6'y ,vhlU3tYo@%'~})8iOt5 ;Zzת[#Ѫ6bkGpwh@ܪ5vs0{y@^o$ P*KTd~_K}-{HѺp=\QŰm^嗔 0ByȱQATEZ0'YCSߚd86J5CV,1X9|zqj n|亗?sSFSGa*Ϸ/#C"frzV=p[oZBGkiWw&ٓ{Pu]/Jk?ĶV_KUonKJ<࿂\0., w󐙏PNK5_Z26۞%`0h&Q=!'ad}הx ׺sQ;SPG!wdmwAWfXPvSG:*8.G`۫Pőd;4u't/1 RC},esq'wP1:r@SIyje/~ ~ޡWET"- @PEBcCMF)sC$bMC3̨ D4ĔދtOw }8t4mqKi j|@†q C4 zcvCIt=^q?JI}zp1NĘVg)Y+mח_^Mb hz#;!v&$W0X>f2j!pxD(&3fVL` V, 퉔QaTW[^EPD_PkgNn2Z/!n#,~ƹ8l/958$q%vx40-d!t77s*</hުrMdhn{ kQ/ЛZ医nՋqOs)AC%H$4U8W7d1ieHJ{5g7>f (|GS8 UXXCInt\ͬz,QޣMFqlc/kkPAtW P}n#oǾLZZpM1>҇^˱=7<}s0(("}3Z2af"G(%ߖ@Y]_ H6_9rd8vD=p`Fa*i`΢( ls.0̟bCUߜdxГ'j2֫|Z߫B@B"7@qE/ϠymQE2q?`v>a3lXN|}c8b4Q sY7%%ύķ(8~+1zP_/6UeM1dSzV>4GƳ >Pup,U'c|7"FMFH{P*X_}E et>[IxI}m&[:04 2`t>zp}^=tB)O+dr>O'e/ZX_/ŋ֝_sOàs3Cw)R1KB8AC c Q1V.$lVjsoжdA .׳'u``qFAUs^٥ɏpl<!)={{";ω!Ջ!z-~Zn_ v3L3`m)U zT} /K{Q l=:+oԛTC4=?f (@uڧ0Zy;g*fZb.V ۍֆ$mJ͋TT!1y#h|YUTL:=}$C1䚹#^^^75(邏C^,WQw5]87c=ʛ7]/y_Lⓛ\c_/Z2gV6ᰡF&VT6 Ϋ`%wQ/1epƍ ͝jNZqBDqN!bǺl|Y>wg 叀_LmEk4[-RŲ"n=?*]CS?25tmॅ(:F 0/Rf"Sk:X19:- 5F?_\A _V8/;T`x1Iεmq6Zh&l޲uV? &+}>Xnaj6*f}\n[Qb^RiI-,0//K&(;:<܆Qȇ[#@AJK+r#5{鵣Po1 " 6 Oعu 5]='VYm&=ӆpuNumQUR8UOg V`!f:M ׅԿ0.8 ?|b~L OS9v T[\^{4=O`;Jckh#EG6\NK`8㡽Γ R?z}{ǒNayI%y(ogXPױgX .cnWCdqrڽh.yşEz4~zNKM@&1Ҧx Y[8%vV Oz+0c>Ns8)mS9#-0P;&b.6( hW$C[)8C5p:RlMg}Z_bQ`Ÿ#ok1".& ;z iQ91]SZ6TӳC&tD>`;U|֩XW'B tb }r#_mۉrq&τ礀v|Fms6Ŋ,޶DZ3Ipn&&%"H[K fɜ [K Ɲ`@kc%>%>iͮg&eIVJ]gT6jC}*{q­pCq9/vǁQG׼E$.&0-M@I Y )Vg}C0 qe5u?I= \??1Mȋγ8].`\li͚*/.֬PAM7KJfS7ys!M#סP%mFz߇f}vE}3RF ,6F5mxK۞P@VİX}ےy)tN;ci Gu[Vpc`ЖcEo}kW2[~'eO%O7eBQh[x3}(ҦzXpkEv Hu[7-n:Qw5hW B'nWc^eTnon.M;Ϲ?rd'rōXQ66$TC tHq<t<6?2]Qm\|5sTΉ0pڇ?\Alk}<۱n`/%ǧAl&P3;Yf)V%.գ/*ŷާLגҽ~s/^O.lt_Yn35ȅR%oLyQ^h74JwX* MѹC F!)6pg[ՁP (E/ih?-bx'ms𚉓2Ңϫ=JޖdBYCC[ć;24s!A˅`L-;Z-pSxh] f&uRrs}TWJ$L꣝% v}V>*|P]s{B 0F0[y30h亇q/.ud˻ݨ`_8( k-/o'Q0Z}t|4[6=ݓWԵrtpA)|$b|SCڏ %I5¯YR`(HTZ~ HA(GHP`sw)NwנaA##M.#>9`Grܺ–M/|$j~4Fq , 57e Ssvz+7%/g)Pkn꺽cȝ}M}{?A7Z*mAQU|D&?ezc< 9{nmZ"1|}nk&-cqB8^svM3kxk.u+P&H"Sc 2ԴtǪ@dX܀ &8ѦPuCa{, >, KD x>ّ|^jZ\/4kPqϴ`W墷KkQޛlZA uQQ?vxR͹˻̡LRbdwa4܉ATF68grEş- `(R_ cǼk#+Z+wRB̨G-Z )@g1s%1U+0|I?o &w%hn?˙@$ QrSPx4zp,ONp`$W%U/H%nr^N~iG'joP-BP=.q=-8pSY*-O`P/dt,hxːB~vfygSm '=z޼CNA~tEJ_L'n_,YoI=R)3mNРv;(YtPj ٗy$!20 kpŞE}g*hss0g<5PIƠ`aXSIO!S~|VķߌOkt+VFH,4*n؟3¡[H-jrS> ,ܧ5f}]y?fSWP)]gx8FeBWUI̴6Z-SELﮉgӞ*Tl V DbuA)z ϻ6%so_/ʤVtxtؤm٭<Ӣ龭}{N69^yڍ}k|9uMGg͛!ٻRsA['徘kKi1P}fa"97%'a\-x]k,bn+Rg G Jr49ԭQ N{8wf7^n1ԞsZܪq};B!Zɪ&h筷&L@d Hra0u33ko7}fn+ZAUF'`f6wT=01G/M odo"koynv1nW72>_]{npyޏܻ"d!Hخ}֣m~ǟD`ܗ7 mGF$h/U%]\{kv.Ĵt|?sb |kƐ3}ual\[<#,?UYH>lX,xډܠ <`m[z[M+nŌ<m _37g#mo9?':{}>tI r+{J"ȪskW;ҢqGXYMyY^_vƫ}^{npyE$6BڏFܨ0C@j#&ʮfrt ]ͷylWqI |Zo dCeI^/EOUd u)bpM DËs& NS8@^Hj&0QԈGx_=[& ߒOYk(쉀~K t%Z!{οu["8d\C+9^-"*ƨxT(/|/_bL/vrjcPa~Q u0o3f<*1|tRvVl3#@א;a5/a!&E>>ꡯL~q)K<1 4ufa:_bmAeoϞݖ#Z^د暽ڶ=w~n͸ِ ?Hs5dn@q^S}RkkTJ/˟8ؽo̅#y1 oFJ=zRn\z~bܰm>uF=V1v羌r}zͶt6S -f,Vx6m|b^-3duYJόnz])'5MÊg͟^g0lf9dLa-ٹ{ؘS#OZ$/d.:Nl+'1ݼ{gBb[Tw~^ƏAgop ?\`$ZH>۲LPCs>{pE<'^yݦ._3x2_HxĎvbj6E FҞa~?v ȶM"jDzaΓwy}ql9 [Q2vH5**we;췬wY/͖ZUDt~Aڐ%svj][oUp7Yqn6:=<G8s޻A)0) %Y1g&!"-&齛?(чscXA{: Y3ȶVIT cS$IX^p{6F  ,sXGe\Xt&ZkӚYNV+X<,h5ܪ(MXTSU nFɩsN\X#gԻr lIrvFBGiCB |;'&G &ICh#m,`(Q5o&*;倛L9)ǝD=2M#*;/*NoL~ 5l5 >$[`ߎcyٗx/۝ ?[~$ I JO.bs`)E|:zi1^| }8e:ԝFFrEZd1gZS@p],B ).ޛl"o h^=F En7/Kk馔ۧF7-#ژN>~QovkviM/7?W9 kZN41ۥ[WqPPFuޫ GXW^HROAwVz^[&5c ӚExP๮j ۣo%= xmj7af0 ZoXsԌ= M5#R3 n+ɒkZwW< O+C2K&{Ξ.W)K,".ǠQuS;7[-$aѪCI,-qiku>xtgq sÛ/(kydFY;>s_5/\NmnD f;SUw9!NkۂŝМq~}zUtιgb~y5hb6~]pc -D?As=tTp3alT%fmJczxs ہ9vuv3$ۦԋzI/Q'9(9u -heDI0VNfqkha2rV1AO?NlR':~X-uWn5d_8&#`Gզ =MUJ(P[kq0]$cQb#G{R]9^m).- CqN7zsm.r-tZ$WPɲ{fj6xX(K k]7ј(~ +Vw<[<'?>&Eҽ kwP8 AL9th2|O C )8+X-3uN_WKL4JgAN^.a9$?PfS-G$=I55s?su 5GlApN!(YSTpҎ%?%'a\%>! /xcQr|+}ГeA:>ذUW""%6=&HX5R? C x^OPPb {ӱH۫p^ZޯfC$d$f5( L䈏%2BNs~ʼ ݙ]&j`EE~@9 :ST:?SHCvɓ$̲>jHׄc,K]}վ2߻{0Ocs0A_,ʉfKo-]u-8?d;8@b(Ա.n2{S: T:"Bs>gl=!u4`ĕ[?0@?h>X衫b3SYkܶTO8{=a'8i6!?$؞KO$׌6۪b<Yc R%: NL;GsqqG+m9 믘2ݏ5,WBKx= Vrt6섄c(f<ܒ+X#K?1( i<~Ry+jo Lfa>D)^;oV9mb^1.>rr7`5 h4nu"-'R@`Tg1&˴vZt {J1 )UA˺z.ƝhܨC [TvDnW|Xg(j<*㮵nJj@LEj~ی2˩hUO(rFjџ{Dp#9qu3#|Z?-X{W݋""ɯF#<ugivss +a 1HhK)vxU4ȻqЍyZ6< n:9/3;]NgCO32eo({\~d=[oHebufFݲ l;8wA83ʆƥHݙvOxNڌ}".oo&v}t `}ʔ 1GkZ Q\ ѧ:KRQ$x ~M [^Go|h:]U7kke.BL}M,1O XB]x_+^;i<,p] $jXccclke ̢y>$MJ40$o 4F1S9>i1ֵ*卑2e-6tӵ%Yń+Ezp6XN_ 3a?&17 I|F|8O{1i#\*H$Lho{}}Grj~+oK)4sv9xn޺BdJfj\TVTks9U"ڎiM)@8RQyt ͛V~2W}"+چm03<զn뱿z<~-)?`k >Y/7rH Sg朚NqH/컉 WӒ4^RN$~>)b@0 p'C4wĭ -(̪ ;qw@&P0WX117|J5H>&cWp-^)ͯ0JGV3 o'b] ]רܭoc |dr[c}lԼ_R_FtR"XKia1ߒTr*ݺˏ͝n׿?JR*fmO/]=kZߞq7;ܼowwX%}чؖ8"00I`~9 qΚ$_ԴNޠR^kl%F Q]@`zŪt%_–\d2s|~ZUnɡq-CblH ^rszeІ3(ePw^ZfeLU&]U;vIZwkF2R9>ј+Qaٵ}r ~8Z{Чwa~CПA0D jtF~o'EF#nN+3T ~d!/}$ /}y) z`_ Z,B AZEՖx0st k=)u}x쇋ﳗ)[)|EŴyd;rq{~~i>hßvJd7] [JTAd9aD, P s R\yW:c)?gy_ntnX= ILhF":RBT'7%=.ײ7W ߋ/6aPfk 5bwYm`HΗT4&os7Wefw~/CG vF|r=-gjňh)rcK&&DOhOs914Ůb6Zq-rwǑr)(!-=|1W6r*@ϛ@̇#tOP~XcVK)^ipkMK=ppc: ^AWϟJm6-d˖Q(hzkZkO+jŸ:RYBId&e>zc@v3{wȝpV6QЄt@rP Fzy3y_F^i=ŭx.UH`azZ=^_>)V!j>9K8>]];nq*8bE>i |{^C /,>YGK>3 m#S# pLuJ/da_86]rx׼m]l䝿; g>jM3]wf\z,B6C4ٿ 3?# %v`p2Qmhx|p 5H ^d/B 蘒s0O'54/3H)rhr\苒bA0 ??Eߩ=|y+J)`քs S9/!!xq[2e(coΔΤ'~Yo̙h$ЛrU|Rq,|ZU]|IdvgY0o鍣C|4K8 MV>@|r?=J(P zihj_b$9ơ1?= ȴշHtc KJHz`瞮a[G-]a<2 j|XY,-v&| 1>`D|^`e"G̏];Mݳ ҦedwqNw@@/%X9`N ;*'@WkfwZ}[pKW@wX(kvYW6mP+yLRC#F3v%<c IBo"VXKp3imb('n}8^z- Cl{}KrvO ![U'-/ܴ]ĿT+@!%cD@A4A Zo̖b0v&HIK׻T2wq|mSdVО~|yc)Tkǃ^ UKKFRk8]TEW/+7J|8J<sWk(RL!pu PE}:1sIz jVsb$ nޗġNDp8IeQ[տuO_3]N{_/{5s̿0:, !\$'uxS/Or\=*X;2,"P @ ? )YKb"q8nWzG#5JV^̺oWrq1bh~A~Q㤤ҿ9%{!u}+,;|($!vt"}.[kj}_ckOc}93@0pĽ/%(%--mj[V _`[ י 8<|z^D1i9}dΓZLǢKTzW_ Nv iLUN+R-sζQlC Uzt7:7ջoi(D?g2<s@Yt$k lҦŻ]Fʴj U=l/A+WOP.]V֯[*3n;7j8TdXݦsO5inI#Z(#63H+bO_`t'K?JCR/JCA.!5NR5든l(-;]] @˶>W:}v"VW=RT 3jڽ^jf}6Ϲ ep ㈰XH)Edƃ SOO%{Y 9#Yʻhձ(JrC4Y\?/xX~YzlY4>}To,جFPMrbN,XtKmQ* O&zM*~.WIE7?vժ CJ3D.˪';pCSCӯk'ks_1. #z0&3_^6cS@Dr eTYx2|ϯf__m`,мftyBB&r%@7Ibvh*(ٹWH:;po*׈JӡXF#TZj} v 5j KVl'fuC7=tFG0stjY-&4! E=wWaR]DO w\Y–mZ' (z}Z԰QF&ڳXL+[oV& =+2tauxU_ndO{Z\% O6Y,74mDzg{V$^R/ MN$&%JDa;c)+4Wł OWddo`ߝy~ /YGB^ܥ%jvH1BPoFA*VW 1N4؝NWS@Z 01hl3c_[Z՜% q W4tD`ʪT#FPH%,D|'1~ ⣡^.96 !Z)Ih-_GpMr ;bvQ[ZTֶxvEwΥh , oF6!~C$7H7"ƭ=Y_Dt?ǣ6v+q:lY=v16x 9Ld@T]og&e!NV ]*#jtPzcmt8j '^|BRpUXb8·&޸%"֜V(Y"BbA>+و^ <^@FQPCc"Ic0VcnT#T%4ބcU=`ϹEqR=P.3F~y*n<ԷOoݓēi6mV~p §/:f_t5V1֩Muwt#>D'Z@B*{i% ~ X'!I`/D!>-{pV=1bk`nTQ>omPϫݐ}&P'=O 0 —xAA{?Pyi+`懁 ;+a~ x.۝HR/Wag.0>~z[uq`Mous*J&!v i_K(FE/Cay耥d+CIalCǣ:z.:`9`{˜rbZ2T/IkF1EL-br^,#qVXM.{ՠ],SEaT"J,PIU,hO*׻ 4i:)RUKĥw ~dEOapKCy 0Y]~oBW00`~) kf/)-*xB>7j{ /*~9|~bA9$֐g6W܃GCtV;z _D;f=NJNpp]S 25&&S]2 9s.} o] 5KJ|Jrnݺ ka8" 9CBj&?B4MgdC-}A~(^4V"f4vL|J](]ڧ3g #~h7_"i /N޶s%`8z3"xVJS}X`97av1}cnnM2Gw>}_jVjx.xɕޤK)0cv>aJ" { 6)tA7 =&kR/2:G|uy~ ZíٿP E] zڰyh#ȥ +@`S e$o ϰ]'%JK9AȺQL0aH@sT9Su_F @A<;۰-\{ A^^%) `$]+Ԙ:yq]Vk*0EqEM[pco/)È\omt(ГP$ ˝gM͛7d@+28 qDҠ|%7FR,Z",k͛wmlNcoH|D0iT&DF[sY']s6bhܪ͏:Y-FթjC&m*Yv{']:i>s{:e޾S:mnj.vKֻW+pֹMŠk55[й ey.7&OI'9=b2*+)n2XjAb@jWcdjd/3du)]$$FZle",z焟.dr9ԋG:r6VʪkW}8\;DgJ.d.|r+ˢ;zz.A⧹W-E!OB,~coS]>j%=;jh@ s.ɧ%VВ}$7G`016ּ-ܑU]M}>63dP=}ɽiҟ?uEE P]ph,*Ƿe3hėǿZ6 Wp0dRP?<&(S%z^|`y> HZXL%vlЃr{ns#5󜆡1ҿ^5l8SKd 9o;EqJWX9~KnHk(Ҳ? Wbץ!"P/n9/_lv%[Hq\V;|lߝƥKk~xftEgQJ*>e^Df{!e7Nʤ7 s~<|3 n+F8N0:ݝIk&}8[ϲ*4Y4(:?8)e/wѰ@P@z&/O$5۽G"ze>c  @2EȏaJ. 4QC/<#Yݻ8npc*?C8abpu[6zk#82E߼$Ӡ8^?0 (u ^X CmIJiHrN܅XyM9?5Xor',:x;)~?eT~Nؓcw{a{^Z-?78~0<"b_`3ʨH5zjr~1'Oڿ-g SZ"$z{fN"zFo_tU^c[䫥`ٺOJzz oc km`S<_*m4eKmm1sw,dVb}8J̮\gDUZ<+db"@Kڏ,Ej,m31lqDkPx d+i4 jCO`9% m*Kr,WH[ ynh7%f=Zh?miV?Eڿp?]bD捿{4/фp}Da/L)b#Sf\h\~ ?(zs[$Q96q RmGd{xrVܰh`ZX/>8r0Pe]vH=փ͆Gi^sDyQe'_ob}BAც1!/ qrO9\b┡z>>\5wsIDt8lKX{bʠEZ"+Ƀ1ulrFS1`_ @1Wb"w 9p!9еk:N.&-2i}z5K@{W;Ŷ_4w3UgpLyˉ8_#g99v%:./~8%ϐbR/rx|W~gWkM(ep?} j:(sdV(Yzx;㝸콑 Hf=oCkbŏ8Uo>Ok<'ޛIYr'&|N)ܓbM~4n$tRuYbL5]Gck(s!꧴*# /BSmgͳ,4w>[;z^l3>u4Aq=]Ds(1 >:C +< Qd:J(ʔWNU0ԉzޫ٦ azw߄m0G/D՜4h+ܶW|9]C HFf2q]M\uwa ]_Z*u"Y^MX_rcdUCYW~gڞo2}ykB&tZ"#e eh uZV);*B/i(Nr )l ;;9w;gHO%GC|Ǐݽv_?~+&Znc<5l.viI5IØ:4ˀKGCeHcC犯b W*g?aԲ<2=2CGnؗ8Ph$ (2hA/Jrf4ґ9G]N8u^24ymQݜ]@SF" Ks\ҒwT&: /;̪^nbmP _wA3‹dYm27<ԁ~yպD}>8EA{3XҟKu.^z]йHyEF{ȃPj [0ٯD^C/d>L\:K>R'w"4(@/d0N_&_@//KM?pn4m\LjI}UwqfꨓK,KGw|4AHrf&[e9>GRYpxz(͹Nf~fC@>&ai]>v()X{-lYu:o+neF!glL=?9]֮~Zg?tW]AbiA˷ՄO9r*oG -yEE$ˣۜ;%Դ1gwP|ͳ\[Z>/!$<']isޏ&6yn6y+ {JYYb.R`xua _eEw zS>5Ń4aA9n6JwW\^:[W0սaVƝ6}W7u!(%jzX[ՏuIs5$5x(h5߭^mՒ ӮT5ԑiNW1X/V-.VZ'4pR>&5_T,vn +fa|x}3z:1 |:g6,s/s_BTm)I66U%{j{.VGsz6C0j}FE0υo({L}u̇B͈`ns-}GBKp K!gcɛJ# zވ$`[1v"אߛ4]BnG ao{jl,>pOvsY4rJҡʬn} dj|f>^WίPgxWA_WQ'_D"'8K?~az(5Yl7cf$Mx`XyBBzʊE'c#E,+hGNλO ̆ί5m*+;YFJjO\([\J `TM>K ROI ;ȋ׀&^'9Ho'KfFkY*ͥטڑG\4OC-=?:4gUc?opwq6COiM-yQwh/9y'gL=Eiвz2:n@HV&߽b=zLZF8o颂l K ^s}b+vif/sYkB͈즴|BG̻=X5,bhTVv2 =%䜝PaWt'׿Nan6{Lr #?,_$ig?/N|?9􃹸":zM∳naxF1^Vgx#"{M}'1Z&Eh8ZgB.mArI-zzФ2]n,$a8AIܠ!m$|~ؿ~VR}Ӛu ,gU]1Ohd#| wIWg~}"7U^vL8JAIH[q oưm O8r%0Fm6{H5ƺ?16i0{C{4uܵΓDhfqsoᵳ}>=kj/ xl<w:C_LY'+2 a.O&᳥1[^Q>Ɍ5tpGzrP^ɄBF> vU-=+ uCUz!([pq{9R!D/<5ogzPUj V ܽ;2_ 5N+.=vzSs hE|1_ql_͞<}?"!6:di >͐tma%?tX y}þ~D<7Us:?і5 F"e1a ]IKzj]L :O>cF-Nq)@]kعBekMofpF5z0j&󉍋+O֖!2k8k@7_5u4A/3\Dq (ޤi/ *m.#}NrDž?wj:CY=)ͬtG T׻_4MOe?:XUoąYsڰ0ݝrſWm黾?5l"l#k3fe?:imKØ@׋'!p)`K=om{"&aQHlKlěʖcpRV01Z9m+*:q '/ϋCyF_ryލ o:\&RK"#_O$㦶Au |ȟGStT[in7<Ӵfڎ7xK|Am:k𴘜̠=@ݜ5r}7-MMW+[ t&i&8iuݦL3?$Ք <$@=UBR[OvdeVnX$2u \0N&x6'IXe `W۝fߖ*q4y,Z 24l1T=6سݎ뤦1]]:¦Sux-U2D[)gTkW1byPo`<0ŝ!ٔL2t`k+nEi'F6Jّ@ˌӃV [)+%L⼾o#@4-l5jHzDM~F@-fP_ Ȯ}D3WJJ=\W!I|wR+ǥQ4A@B%,73"n)^ S0JVn+f'(Y?1QO]_ͪGOSo .o.%r9Oz良fh>[II?K9tcN#I%O$뚒5J Er&?ZVx/r~rdc\9m+O:h<>X^aJ%ͪ{J 5F8m |_wӿؿ6Fy U>GcWx{\-oOQ(J~ZGej7=9}ys|ӍFBIfM#g}0M'DrEcf-mL,oX.7"/+f@ܩ.5MS" cF_3a<NCQLL&PQ%nBKS9αQFA5|B/^_%^pL|9gu ^2' %F]0V+>Bhpۻici*Ft g}[&_kHwî{Ȱݍi[lA2D8rW, ?XtN[bɛa۟q#qIv{̾ʍ7]g D{ >JڈS"}o\O]gTSwǖa˂ƹ=? )~Aa TCՀi沑A"j$6[8+D hKexW#%AOp"Vϕ)/X=Ͼ F~Na1 5՟*s*"X\tj,{᰸UhCtJHX.ˁ%߽F1WY?/sj`(KPK -w&Jݩo j0Xd 7*ѻCPФįt}8Ī({e}_&$ #-Q7L5>3_Re,b]cu.>0lEWMH$V{vmHOi[sP1=S1{UW,aB)F/.i&} ͈bѮ eh?D+ s/M)#VsS]ӏWͺN+sțxjJUSYQHHE5\yU ?n/g=C,OД7V}ׂ=>z:amC,es[bl@ațg=в6XѰ{l!]M7& 9_ -닱8ʼn]Z83H9eTǤ_MEcg p" cS+Dy r"㰐u:2_*٧_L 2H3G~l0ȆLG#CU5s'歫E(|=NŇ1 :*:|dpeRUr\G{\[q[.kf9< _T9|cW131>w5rGX>`X)拉 [y:-F#)\TAWЄmȂ5DE,o 0V?`Lv&T^KrMD)$zLPLZeu½U{8oS榃3 뮁.fnC5ܛQT2 4$3].Wmuo*l;1XcsĠa@SP+ę?( ` qɚ+p?3R룣Sy\4 %$=vLE9%O&XDgc8F%&T ?e9Cl@cT66 5l չE5 nj(J bV}y~tR8?d}%\я5#: 5Ȃ1;UBEau:h$JE2`4\-U]m'/ˡKnӠ9zUc\ :;eti'.䐝F(09GYB)~jBϬtf;e@%"O4&~EYbE.T,>p@}.[<9wAIt þS\bW5t-ZgxHg-~{m kinr ʠC hA;cNY~_?m_l|3ۖs"0U ySU0p7ĞtW[Tha#_DWǻA3`?{?HWtF3 yh^%Vj%~F;HѣA`R5PA^V5ۦoNhއ pz=+wAGtqN muQԹts2 f*Pq+ӻow";P Tv$k}($ J]zTE&W=D TGVfM3Wbx }fpx{ժ[z}.9B qݛg* B \ʼn2ƴImy=>xr<;WS9wظ]CZ]Ftb$4|CY$Go+ nR^=A<2pZH "k*%K7>%d&UvVڑUt]5Soij̿+{%B뱽Lj~Q_䲡FD~b Ԅ\i̗ RZ1.% |ze+k? j3/*\='֋ulYwnuhzYl6RQ`MU = 27͢kb,Ԝ~Ox@ոnNFӦ_s{v"_s߳>L el_ֳ|,|_41X7Q+[0>({HBMC g9/ `Zb |72Ɂj)_\bKB&tyze_1†&#v̿ŧ$g&SpNsteѐ&tՍKÆh\J|<SWL=` Y]A=E/kB jY=@YmEp;$ɶ5lϳCf#ZÌ:}gGg\Q~r-|mwWJQn_̉9uzDO^7G`ο)5ḻ2mrߙu}Xu5p^"/m 56xS 3SЍKv 80m4|i]_F#@4O֕)y1qy/3'za2)4KHxu +X"U߮OTKCiDWUAy[Q0:vVuw˟!e8t Z3 9k9B\ .M@*BtDʈLmjŧUAzE; _^|sBqͰĉ$wn$h Nb`aO=AIգWE -Tn&˟LC{/W !~<ԀPcUhH0 h{JPТo_/ȮgR3ލ1/2}^*G,--هZݛҗ0G4X=F䨀J$цJW=H ”hϠh6S -KǶx7^ǻ i֖_< 6 pIgqh;0Gb3 hc!Rߎ^I#.1 \ ~iqпCPCLLzq*NJR}85,7'oF?8]$~R%o|rC`FW]hEG,Aiwb -0͖zT-SHx$Oެ Z!׫>vYw{aSFfa01!}Y]')dU #1 Ng~p|w3hVˡAVC.|\.ozlىH^2um2*HAg9{a䨔M/`liYxE t9 0|"q7nm^\Jw%٥n}}?Ly~, q]洊!şG!nPGH"iZ%"2!FSw>p{ oS:nYI3te}C1 `E'իX>Qٝ ,d]t7&y|8ڇgy}R(DWSU}~ _G+FJ)$%cFuFߝ\FTYxڏ-[_0'xJ;A}%hcsP/G chbL7*L\Cfy LmvDJi3Q<ʮwMNèϔZri՜aFش{!0?s!ͺz6s׫.Ke8]FGfóbzbjH<#[tG>uqPqGIFHg ݁$+ݎАM`w3}h4|~˟Ǹa\vҶ B|6x3z[CN:]eׄ$W *qa[="A2?boT*ea:$> |YFI哔 4HyL&KЌ%30YDZL{]aUn½gI|ZoizwC@+1x-i%|-gvKsp=oJ}xB귟nb8=ԭ=gOR[ X|9òu;pz?{ThWқ(II2xɥoAt/A܋>XB: ci929d&t$x%mQR y R;ywA&GxNk?Ekӱ}_[V`C֛<+SK[|ּqj;9MEǑ֛05, W,sC{P%-Un9an?d_*58LWn<R{X0S%M\):)2w ϖwS'sl7svFu^GD/=YMI\L.0xFW_}!<_sk3IfĻɔS 50_R_y9{nT!;rQg}r9Dgٺ{ɂ- p/I|Բ {!!+zܥ{|Dz*@g <?v<.MIf.wR=2"=%|/s VT0XН8?>ȚyD32&C~JRPnF2KTPz9=\{JʝswA/]?H%7N4ғՆ9g&|rϹ)k&]Nѳ ^KHPiIe vo} ǁ{y\4|<79ٜ;KN"z׶¥+ n)#wkYxZ N6d=ۋ i>{4dVP,c P瓉* ' EX݋0*Or;5X nذq;J7~PxXGN$\8J;{^<־ '.@Ȱ aդX4N!{ 9}6'e8ݿx׶bϹK s/,BQS'G["U9/Iw#ǷB%_,Z{+Xaʛ4aVYsˆt[Qi}[xJ&ѧ˝Ҝ`QMzV|O7nhd Kb!?kf{P7l$?z:v7{8bNV[uF)_< 'dlWyyG$cZyЛGtҘ6 !.I1 v>"P3{Ț]niIZ{{jjQ=MԎSgGy.&YhcD(Շ R83RzGkz{qGӖ-,U ȠV*߉%WEp?ïy.3{1FZweMKv Gs';P;Y#Ưf#q} Y=2x@~ND:{id03&n:gN%%_}`=''nwc_fCO(cפp|o맃p)²0Ǽt.ގ"X>ndZ#\pBI=6̮Żt ~2:G,f9߅k/CÅtͫING9eT"K%'2:|w@_ 22su̓>/i@/ -8RT90ڝnQ@1HR&i#+H_@̊ҍ6O r?>c?Yx?OXAy_?-dC}}g߯?neXt 6(U?=[0u!vwbȀftK!؏Ftz0ߛ ԔZ{T6O-/bbJ"5G6듚K4p}l4w<]^ͼ4:󚧥Z>.$x< 9s&i}`"Z!pjxU;8þ/*Pdqw_M_bRWBC/ 'am. !sᛮ,2RQ^Ӟ~Ɵ@LJswIp5mڀwߵgnTB/NfOɹ46;͌f}u\E8H w,LG@Fp\y-O,:V9zR[Dc*j$Iߟq(~%Ʌߴ  udl\<GK.0uϻTJ#R1h7bmU|mCOތх^OhwN`V@})zGiNTCf3,A.C2Ii|:1ob^sLj%]wGwͅ)Ǵ1A]m>IY61flQM#. ƽv O]a!XP;Kh|wnDfl}8`>tM2FGƯT11 7Tk Gk'(OZqC p$/7:0mTc'fLG@l",td@6eD_h*bF Phan@EU-+`y/ i)S)݇9K .j4L-h۩iT iNo {hzsHs]徧SOwai2]Abr0̏1YDYVrlJBn A+|i\#8 CY|h=xZ 98^uӮCju[xUp7r,+-?pܟdn8RnGo!~Sѣ3KN~Ȥ;=~R$?,鷴RK,%ݠ,pG`ҹӗ@a`/x'UC|{mojP哲M,a;\X ${lƔw՘y_Q8m}fQlɾɕB8qRH٨7 a|}F"k=ciy Lp&4y!`;VHYϊ8pIEB)@ZGxc|cҺy`5Aq򹸳jal% pIB0 T\Ͼh%+?ܒ,GfGqh'Ms[GoK(VaN>a!m_*u]gnV.7cίu\6 sZY?[휠|j^I :RjaTta$L7O0*g;"' Ĩ ;˴]zLSwqmj 4Dm2'#tbf=}׾ G8;N#CMC7to-kaV׸^Os/||FGtZĬ>i`]W^$={m 7,皎?}a^|Rgzu(r~2(2:a_:gh1¾Ր`p07#w'.AE#bvRҖ)qF0 ٧;?S TJD,]d)yKx4_Cz;UbQ\؂XPQ@Q 5Џ지 {4I~חǛ=- |wW̾MjԎ@8J8WRI[-b5 sq%[ Uv̰ a?W"֑$%LX x,HLh{]խ˃,3Vv+ IOp=h(Y__+eZ˪e'BgVoF}oЧ1|bR!uZ5u^gOB<:n1ypsDCnA=W3uv:/eutj?N4; xmUL̀6djpH5MRatYD]-nsp_DPvxg4HSnwuB +^A^L\ȞݔVl:F;3%xM)NىO _Xg1 >Zox>☋^r|VYD&6+ZxQؗ9v5ꇝAazN1#K.wyk&z:BX#oonGjnMs&~vj ʇ>HhV~ rSBŰ pܴSxo;kc%wB)I?xH xI)HJ7$xaxQMĂ=Ί"!ENݬM%2@仼1@n+k; B&k?e~+xps>Q & xYT E]fXhɐď˲W|]K,$rvFLn]q郒3+<=ޣ%ЌҮ*06Жp:rU5?k@  wk2PgtuO/hfFmEIR17%5w# B﹡Rܿxs!`~n5,|nb+{Eޓ0][ѳ_fS2(7 JHN;Y4ú&sho\0Ky*`X(u\756?K_/:`AG$QնsVybH9~ (9mRX( "{-c帗W~{)b!.sYSݗ39l~~DGs÷ON7C(6>Cq%1>GHƹgF@AFdV#~d]_hnvt7U[pZkkOq4AD}úb3ÙWNQzITb݋ MgaxUhH"l6Kw[s&;j;ƖnncJ!BdMg-Ov*1s'W7dʬ#S-ڰbp2Hq F=?&,vd]20>Q#l+ՅbU<Ͻ!Boشb:B~&{Fw[>y#I;+/_;0=Sgn͝'K_b>qu_к= o`U:sZɒxP>vyGx~Y<-.¶?$N1%‹8\ˌ,ZHϯ<W8$a׳+ WR[mzl]& OC+\f5-%RYhr ItЇt9+W5V0lՋL/sP:$h/6'x!7:hg;iV1" W*cê'- Q Soiou@Tk%n^b-[R\"n: p[A#tHr];sŝ {[ǏrXr#=h1wr%Ana]*tY'Qb?~oP 3Xk+FYN&0vc,-"j{y6#%9O#1N:#tٴHK!ޱ]|1aZFNΪ7?0Ki-{ԍGoZ| xopK^~ϱ>oz`Rm_.>QGNܑTC}8 ^Eƞm5 }.,&<.ʜ1!Uw9)$dWry% Nk{c뢕j=g#k]__oBc1/.axn[[> l5<_{JQ\N ۢMRk\$HйS:A!ѧn!8Q싶Q/}aci$3ZLGD >I p۱f~ BQKu,B,$}Ow9fjfe\G9lJ}~-iO1mEG+G6QZ aVFz\O]\ʉZ˫6Y]Z$sR>gRD[}}G:4& }|F5t[T ?5*·)C/VȚ$y< #s!N/zkrg|xc)q2d#9l8i+WĄgyO"9<&"JH{^"0x^8#_d?VC̨4CWh@xm޶;iF,m;݈ntFR(-Ҥmn4Y80:GO yNvfszؾA`tdw:'Y8߿!>Ը:q7~Vwn"#Z5rFrTqxJL~`%o''諅'xHg:;(7Iߐ[EA8]:6:nhz'yӭ`f,Mn晝7YZy,.EJ{ǪgF|oZ3ǵMΟ|#!םt`1W"o߶SGN^w:<fڪGV"rehxwDžbm* U{,-$6Z.;N44H)G-kf/Xzmܵۅ/bzsE{k=N<}`r ~ڭlƬd`2`!ʈ"c^eDܸճ@Dv_^ks{4?; ^?*]QYf|sšFME͝,E2wBku@ 8Hyطo|`î)p*AgquINTd>~枹o~YA,] _Iܻ 7N\+Xxi˲9剄`ݞ"8 Kp{DG]w@_@mИNq8ӂC܌vc`9C`)HWhT>ӈˇLO=dgN`,`Bx|m: ?/|ѲٔM4!FA+`- gP\d$>3p /c(lի6ذ5u#k*k;>97#p]$2^_JJj[ã/f 9qn½'Xu?[?WG+szXhv%⊷K_2,UKkWT-G e Z?l;RD.|-7G5&UG:;szM3  1uj̨.[zG J#ctcv"68fJ:ᐷ?qvθ厅㸤#3E7]>܀shwo,f5,S+NĆ\]-9"cg5Ca[| K#~Y<8`ѽ`Tzi1o Q#xX:<c`؟^sA7.Oʵ$RZUO?j#brtQpmBaoH+u<"Em7S䂒}87_Q`wרQ1-=;wO*wk?.NO{qk 31ltx݀m- P$ʼnLiZr;g>-P)ބ_迩T;/=/j`-cSҞveek cs]ηWr^8qG4~ s)/$ /ףּb^ ;zI'g؝et|A1`ɊCN3h4 *`d,_!{2Dӊ#e\_L.9S>T ei|Es#ݍȰ+xZ mԝc~c׶ai^:ERyE"BS2?Kxgxk6-k sh jV&@~򢕦kţhM5(3ŷAfE BT@'U順uK1n_Wnʲb4:!|\.M\`oC!4-GRDIfoGՉ =h'WrQ^Aj6^X&<" aIA0*5Myj.Eәl vtkI$lGrjz Q{}]kgj@58+\39iZpp0“ " lѬ~-Ԕ K&? |C ɶw)e7Vbr墰oϠ௿Y鯇XAUкL¬55C3]9xe(f4U2 yLU'_[-qvM&iHn=<~9-zXL> <;d3Y̓ۘD}=D0| KB$ڌ矞 [*,SeZ6ƫ<?ȁQD5VJ"so_NEe`Y@`g%#nףTu{QmJ>;,I(-0@ԞK\C$QmƐJP3ڊFq 9|efQdr?#%&P{[t?/٣\(ug96an}"gu~\_F芗ouq6D<œg'z.S5"ʕ !+ A8Ƈ̷FselXo_+zL7?j0\E-N@/yw{9)|!IzwA^ u~pF1S3NּF 5LSz=¨|)c&ʥWIjgGm$ÙSS׺UΎOg82=  Pz_}'&}V= KKL1ۼpf7*@Gf ae(<_ґQ{uTUS<,of^DNvHY?p5{pB>y_-˛uzTͤ"28WNu'L|> 1Q#b wؽwp@@/~Vwu}??mwLE?gƟh)4q2L G*_9 @S|8FrKG@04׶`ݙ,x C $&'-s)!3c*w4jІjoY͏%$\ڲ;C\ԦCsދ%t8G5t" ϡH hPX6IzbtFBFsaZG4ǰPr\+kԣ6s~5tڮݷW$M]#vy$twW.Cܞ--Ă5TS_ʋM_˳;vR;vxs/I+MK:;XL0I_A fC>>ײ`(Ԧ+Jl9_>!pQ ^K"i0Dx,') 07>hԗ{ nn{=K|ZgL*7 S=㕮r >JcB)gsxGw6(@6JOgG n*A+AaІcZ~dԅI6hKÏF_ܶC |qkM-cEg@- QZw4nyQa>f$+:jXD S}CW],z7ܪ a9PoڵЧ)v'P]L](4磖._-XMs+(U{3sܽ򀮂a5uY8RfDc%W%n~b(h/!`9(;FHv=a kPJ8=w<.Ux4՗Oe%\\EU߫̑PaU%iց%E0zѫuӪ=8>e7f}jT"EM)hEH߃OL~-b䧯<[I|t3*;yyX זOƱ \waNI`si2tH lhF͙gX43gz~x8FI*<t;TgZnJ(t3"zUI{ar݀JWA"BvQiKRB1d+-&+k9V"8&-e:'m. C H=<}]7ΤfNm܎?2[#^0pq &\`w-r8Zùg`4#3 -w6$9OwnVX0~Cn=&E`D:mas_e5l:gf6ol/5L|Uo /~i^&X`y4>i:8 m)/\o.qCº6!yĈd(x+8بMOs)sӅwWBK<9٣>.keY32ƸAz)c +͢ݴlD{TXsf ah+mp6<n DsxF(U:1!]3!52A5fWyv),?1b3PUpIfg#$(BlE:KKT^{Jie\Dw(DzV n̾rg|;IՁf"qw}h9,5;HZT2XueAM1?rZĭ "3wN4\ 17Lun>8//nAuoX7~dp0$fH2eyF%XAO 6l t}Xu61^z\4.Ռ ~>GgɈp(qlum`;B;P֕@!Mt9kx,@ZV8.oX m^ѳt=./M-ݻ,K~A; n]Klzz׻?ˏt֦7s{7QCL#AGLgt8pC9/xODjʎY!jV4%')|~MÎ%#,*i^ b g&ş`i~w8r.7Sbw5aDXAnFi;wvt19otKEW[GoyLpi>9b0Maͣ,#F_QXX\s\<wMR Gnw;yTj$2@f1o݊AiWi6=mgBϑ #8e+ؑ5x= "ۂ`D2v5Afh. u'&QzU吤jVkRZ @/3 z^ǃݥ{e8.8*c[0_!~n_=¿u\:JB4r !IӲF|i/J>H5h:j:tՓ 1 m?{V6Zh;Sčӛp ]s?Mv<8!%L]ߕ/x;G+:nyJ%PG;աp_1wx6gKpwϑ K"G򯩸KZr3fs\. Ѧ=U. ~KÀ2~a!!06l0o 6x}5yO*Ȍoc Kt5gbk}|4>0;ȴILeqLb:gꊓ8hQ@EPԼP\UۗY^΍F{&8_ִ”mR#{Dͬ>7s>{'%%sWK=5?YGuc{=7%d+<ίZ|=vzCdvxj F>SW-n 0bfO6wra$ճtؼ[-IoE.lUgyˍ:#. Ghu>6%Ӊi_ fѻ=C0tX`;9oTZ<(@(e@Mbri1W/(D@h$A_?ͣ:lf&:*ԥ`.!ϭ׌[G8y_"ecW^%"c%;=UuNEqg:ZzSS][<ݝ,؆շ:7jH (B XDw* (#xsEVr+%pU'pv|iӧ磹ʼn}#_n2=&ȯ(aUP=\d2o}?iwqzn/k>4ez2-{ǁ=UƚK6z5ordnU,c:CYox5l;|\5dt˯)W== >5)eNjGʢB.H?9o"r)|*¨ѲwGL6XZxpZ'"?y32#ދ&,a<^ʧ=[G<./%If\otpЪl 5JokY#0}&!~Xq!#̓tΩ _0ǜ2˱X}n}ᘐ<[E]՟gkL#< ySprM7ߣoLc,~o?v|FraQdIR`oBzlwI9>% /  wjzP&I!ogiu^5̪rIx]p S㈈kG՘{ϦO9H`fE5AeW/WkIʌ>[C?>U uR"qK M@l52눩<og)̅dH܆i u 05su7le-v.ŲC{Oثc}+0rHj|*\88dqx+\#4HwVU7i4NpmRYeHN)FQ86E9?_+Id*vazJɁx?87@q&:Dݝ:iRIxiJrfD#<~hH?& ǥ,67p,lj|8gWʢ<*Js@+ԓUD&T]}hnvwi>GԢ9c9s} 4:CpBy_oS.%9y:K#?$N>;tYn>tHN|b琢-"-f)X by>[)=KA` o%{6x}S?t޲v?j=t&>|7wRٜ>\^GӢ dfiQE-wqH eJx#`Pґsy)S{浒2LKrUO@ "*r9!^o30.:h{lAwx_ `VZ f_7QOJ?Jxq`w 6k҅V `i~OH!p*5ȝ HZ!޺h.ҭ6(|D g`U2y|3ZA|1 P{1/c{,6 U&t Tq/. (Yw,w_;5n'nk-N)}7e ?4jo lڤ(3Km#~"ƙ\U] ^o0*RO<y~$D߽o-dP)9XDaVupFAxmI,XAg|%"zj.wvܵlT3NvgY-ei|`l)r!#~JѪM.E= ]Y|`L?zuDHȨYO2η:0aҼ~"f5}Eee t&zrArҠukwvVM`{2tS7]C)wp"5 PreF/Q2KISJB\q nE1?eHevBgb6'e 2;y1}θS(eɞʈ yƗ0 9=m`6+uZKtƣ7Mylȿ2}:c%ګ4ZmiL(V^n^G L|[&=:遰%@E Nb !f`XK$Ӹ3c!$}uG5XDž)׋v>"9/?9|Czݹe{M1χ)Ǔ{ԁju}=yS½wO00I/-$Omfs*;Hek̑E=^ h")6]^'|I C}-&SlOb%8v嗶dѽyqgu'9/;lǶR*Mn[il C؝A!i`-+Z&'g&! $Z:-S}hwߵ1ʼsSi4r\k}8ũ]"A4n",_}>Y,>0!p*;Q\po41.Phze+4 XL*p9N+(c+/'[Iy<΢Q Ѷ B 9_5,E1|iщ@ N(kKVfO/.-^:mIN']^5w|i6J3ҌN։lǨuMfdzEX>I_m&Z_m a{<5SNim>C^mCe`tyzS+-KJΣqytKEd4ƀ0YnZ G$~o;C"4j6oeR|Ô*w#&wʾ~;j)Ƙ!O {rΑw fVxMJnԪQV?Sy rD۪*)|F_b~UeOaGMcѺ9MG*"͎9Y:fšA!wsKV3[NWM<ˌ5`DX]jdˡb\s$K{ݟ}4sO܌;I,MLU "ܜM탘M[!ݫA$;3E6 ?߱WH3nJw/`W $`-@0ths8[18VtF_c1$n],&Mo)!Z+7olxuC8z&8y?mFrߏnPh q*6ƏۜI@ztX2Ks~0#Eޒ4\n4i8KmoKp+%f^w䶫OGrnK鐆Be+ ۹I,2`?tKvct+gOѢEۆ:G'aܶK8Rm QNI&3'J/)Dp}Њ>JD.^/NN1ÚwG1I=+մ,zN[l ɛl?s-F; u,}ُNe_ 'TDfĐTe4D ޠf[Q.{sGgtݠj86#+^c@1\M;x4vlq+bu8w7tFDi ]jv}X;.ߒâ? G|ty%ZyJ;`jT`teֽGPMqHag{ =_ f|4S 8bN'n9X.;U 43, :byE8:ΰWnx[~s%Y p,'"Iz՝wi>d#Xe Ql ?}Y[}dގxmZ{U/̾EBfEs\{Mw<(=M𨸔֔+aGIIUv^'7ArA_pLmmoܓ\D@/  -_Ω'>尙f&]M4`j?jOˤ2W{Veku\R lY5 4ozޭU:jKx V"D,v2 @̯<[_Tf42E#fE{$yXc)'rXG xa)(%w8BILڎGXk&Bǚ\;$tZ}3h|A [l>:cQ=UЀSk㽶!j *]o-001|y{F :>*=k"z2lӿ>2{s:nv^I4sU{rQvc7F_`UĮ6_Y2'N6㾢R"Vznf6u.`af> 4{'3UATBHjzzrlu5N9I&Vl䁞Bv6qq*~_[=J5ˆ==V@tRdЈZzNj%NUNQ{=~Lo==O3RH77Qw-=lStZ*^$3Vzr'^fښ,.+K!&gZ| Kb1bdУiwOG~1keO4dzo4 {;ˑhcIM5W(c A5X" Qt}?;>Ym̓%}KTq,XHEpMm|7yCuiuR]֍f/h|jQUٮ`M14g;u9? 'uU">I@t}^VM&5ǡc}]As< 烞|)R)xfn}g./vt+Y~+hp23ֺ\e !٤i 7g[3D K0ԇLÝ2_64EMi #MQ{;#wM U8y(<1OzI$2Kf0H|bW$)cV9%ե6?'Ɖ&~4ӯk$ 9Sh-S݄1oN.PPm*9CvDߣ/1&buNmgOBVz@B^YBN-\mG0Sgy,f~oEM #jEj< %;.U+#QwQc>3?9_3x+>hj:X 5֑kD.0+prbk{kfDM^x< зǸS'si!plO0 :{kM}.",7GS!gn X{÷s0+m aڜk?l`< ga-$J {~doKvurSu䌀6 0 ptIvz79DxVO9ǟJr޴gSco7qci6Dh$$@ m(y0 ^2;cCw4_hg8 k7a9cJB_U,D`` ЎA Y/Ҡ^?PE%ȿ{憜7+>ܨ%/54E#p^1fQ'핲<R4ihL>Rw"ޖd3{f_vY*#vP@B=|5 gsh$ד@t[vWmtI5p w%6/@MY= 7ðEūSA%x֐,^!FEѐ9d^O^xђp4z ˖^lT8fI, {{^OڬvCP~y&ѩ[d,3 3X _Y"nCu;v]o"rc{t**pVsX\pD   4:nFΏ}ⰿt,ly k x&߷[G:7W"ל9"Ng{j\:I_{ %/GwD۞?z/F9"덾sJsچ!b".8sTCa(Ȳ( ! uFgQsV$7 mHMyyY2[^[.;w~ceP+^{RV3,,9Uz݅@,`\csr E[l@O;\ʱ7up`EGfǁcwtyi_̷jyQ9=%Gn8摤 > xO}[#D͚/buF?R5KEV&;/8j\ݢ΄#(z}YSqYtF-yÙYzpz%͂'3]zlqg/AcP*@E>Rfq_I%['x (2v)Hh!ZGx 2ԡ\KZjCiOCəho(,<ѧZ1)P?lh LLyۗKY˹irFل31,{ MBVA$t(4c &אE8quo51Z-asNX$OQy6vf+2P-n3z_^کȢOw]rAax&%7\&H R<瑃y\hZ:**U?7]i/i Wx#\,؆(l~ƨ1HXdF ۺ(~J7k_D ӧQ608(8 xqH Ø~Q$FVKU.^n-yJJ hwdk7^ڣΕiwo%|)m_NNf"2KZ󭖎/_6$q|^_eִ0/|":qp;xzք< e:C0/SoTxyxm6(uo$(61UOd<$pke|.d 9;r733 Ew}FSbێ[|D8t*ټ<,5=LdZrNWv>??& HD܂9V26pUu1$1^| 2 DLоl]uՠo .:kqZ(^W0ˤ"-vϴ{:n'E*+hNX&8f8 ChoKFwZ'N;$IFgƁcdk/ o>,SSVcGܓ3fl`̎(뫤 ;>cmVxDg~XKu,Y Z{^ʏ-w_ifvS!z祇tq͠(pQ՛PT15*V j7'#RDqrz=M!'D2![iɪȲq<o.XA0jO42hoBA Efn\B t%p2JMYArxl_"N+wM-Metքi-2yPlk-{x;A{2Qw6t}MKv3ӭC1$Za 6LyP/K'λp+M/=}wSI@v<*47ߙ?WV }7ZJ;G{J6Hhu]0_D"3aH(Zk;]{Uޭ1o?FbWMȞ`%Ǚ \cTD9 t<\TI" <)(U|-㋸b,M>JlHЉmA kKgh W]x=S§aKqD]L둤bڻesw}+Ę&V3YKnx[Jm>XƧ{w+'EQΨtpO}{ODjvy1@߄bʊ3u; MZmEi`@T6ֈ WPEme;yTQp0pZmgG:ڎ gˁgdk=_ofasSN \@O[` &@\̓F_ӓ) ׿G[[_QazT|['s_̥Y=|__aYbC졇;e~Vt2ՠјMf>PXpx<΢P'uҒSV Ls=Q/p"yw7&z2.ܠ3>!2|0e/ \ی" M$Uj޸:| )=䈝rѳF8TsGtQGm/hGĺ2XׇJ;u/0>@A.LDVd!`P6wb@NFf4 ׁYlqqdD_%Hih8g^YT WQqvf{NdJ_gkkO[z)r?ov\xL+@nj K4ڑh&ki$ G<4ݩ e%_ic04+A Y wًwḉ}RUHnCUK CJg6? ɋ ,*_%yF\l?J+z~{P:ܛyIYYq" 'UmHDFh1d8.1kAwZ^kxG~A7GD< 6=,kt}f6Ť`G_Ҧv]Ш7QǴZ{Zաάq}<+8&'!ɸx+kFzL肷1|Cgt x||[9ۣvf:Aݱ{ӥ>ٮek^C iYv M8ߊG[2q[Öz I)-.[.UϪ/æA!.E]N%)ݷ'ȂW:~M?U?Dڬ:wb.5 W(^{"tY 9%Y"ny訄̂z+sIAxM9&Wun x=1$$ z7|؃OQ棐z,hVͦTOX>oRS(::J]wUVRѯ<ȰR#?!|+',Q1o: _b㠭7v]#䈆N*l_e{'k>gnP3 BL4ՎDͼ`郉x\l*kZԡq\Sp>%jcFUAA)tEu^GBیXYlRIC횪%ȘVx[1j5)06#7ÄXbSO^-yqS`q6L`Yo WwxCǥ&KګV)ė )mk#VzfU6!6R#CfarqŃ _v\xEUw|A:v}u K&r R§^Em< p{ +.cqPTS?}mťOğƂ1< ]eJNsJS10տ,k8Tw5ߤH;cؐDf=ܜ MN$L%6>0+|>,qQ=<!#́/uν_B ǐGS~2$BgڷӲF^$=Yz-i$ |Si9H,H7mZcVi^=2MLDM?`t(=s1q LTOMX:o$H$++dTkgvRe^:c|+ȻĵhѷTr3@"EP"} k[@icb97 "0 ;? $؏#Id~ݝ3P=WI0\1F= .sVx5;b =B"y+Ij kf l0 ]k"CDLVP-Y@ze` {"^^ix tt}P# 5uZPݪ429w_<>Gڶ3jvon6_, (E i2 &*T7ynv8a6vqm iEv|]y^p4(ޱ 2b?uB%V.GCcvק14&l!YP)#tzH~k$} (}CYҺ۱YϿ2o<8(㪙/[ؽ.2f?6r>(AZ!D_L&8ti~h~k'ΝUgR؛/jd2G}IN|˖phN@#MgN6́P@{1 .)f~-֚n0Q|n+Od[ܚ}"CWlOm0php1ےr.$EҤgZ9xǻ-i>.r]`)t ko9(eIs{cIzdjpcRbEAx=:[sP?=Nxg_~r.U~}x2G}).!f.~hGU|$ )Y敒"ET8ݢ&58 v祔,֥,*0;?E_u9L:'3?)xs,Hf|?_?/rv~ ӷӎnitbtO6Ӥ7!Ml?t)U<4ͦ)CNtJ@䫷]nzt];|sh Lw<?c.nwL(SwkVu/ipOmWzmFZ8ZyT(“x.*n4{Zn4sF|  FupZ}mI,: Er SޫF sVQc?BYq*"Yi5m?jKwv[$ pTbe֩8tSu_ [夊K?ׯ7KFo7J9*˺}-/^Qdt wAmZt([5n8EP#('|Bm ?c)&EZ95@#;מL\\dyզRlrR-3o ~%5M,,Bwy߭xj37M[۫ofńFgrݶ]A X }%D*0;uky='جD &EZ~2bzoVG:E_? $TM0/կb 4oqOɐ|\e2*WZ95#ĕS(V ? 8I$XE[CmPcoD|z9(ʹRv ^:C /K8/4M-b$`X&tgEw |ZwEhE`$cغ.2J uZpudg4(㎑K-vfo v a6twO6F>Ȧ^h^)d$XWtW$Y #{& j85N4hKuA'SN &y.⫻Ỿ &R4WWz B H西R߳O GU-՘O!MvIrr؟* y<2+xFCRHJO=t.D7q׫ +v @ֻ.!ʦy@txIC7u.ޗ͵eOٍ>v$>kI |ϒ0w`Di7"qOٍ=5PsJg+$$ݤz#JCKEiAqV9Ȟz7#($$t&zO`܂a*aa`^<kͮƀ9lD Z# B,& Z?![c.:&@Ymp#\`$oP͓ yQ,onv?VA'^B:hlv4LL$`Dcq]IU8vO*w;ب]NgxyeϨ+XÐk?? #J9~'}fUNQq4a%MD= a,kǰҰI[6iv  yvI>!X;(DE9`PُPterC(b8[욌߭[TsI-)R!߈Oڥ!P D̅|#4II&``ɒ{|.\sixFvK[+Ky鉄`!Sx6?j~yx}# T5.)4iIS̼ q0sh[(ܝrTgC:4G3"ŴzFǛl|:z7?Jz/K/%cх6|o9(jyQ~B׆)a9 ǭn/':l<;4_T!4>r/o#vKM(6+'w~șo&0U꽞)Z*sU\S[A Vwr!w㬱ƚ{bFp,-HP\p2A@sES#B b{O0DpK$)Zp-]vZnȗ?l% ۦ&kylYrt60Nu#ؽ6.t]&b31bl[n(},媄6h/vI(/9ܺA$:v$EOH c@\7#'$Mf( p7f9e*Jx|dEsb|٬NY_ c[afgUDJԩwN 'ύ5u&,{e!<]ۭ⯻v(sٗ2u޺ 98YMSUn/vǺ=/CW_*{qXJ]px\*wS,YEu`A%+'\ Z/e knN"E'H&ޮXܣ+e&'t{zmp@GemPěGF-10z!{F8=Y5$.4J؀1Kjl, '8-]j}Rҏ!).Bs%{v9 \{k?wL$x'M=R]yv1nO;Y#f W?u#ց;ur$INe|sG?_]?n{;lKdeaH 'GSD+RYvvaΣ#?r&CmDm_Ak ח?upmZ &̅[,Z9ۓ,2t{O:¿ИނWJWEelEv[&߇E8ſ~Mnxbi (ՋIL[kzpkL9W{\yjcQ1+%6]NQoL_NݘbmlWwqCpDݣum nV$T6r*51G-R0EqVucDVjNMD pH;'x ) Koq[O9OdizimR7$6t=5Z1riO=mA1FWW47mXY V &n0oslņP^n13LO{;X;RZ{ytp+.eR,̖ISErar79'/? dF`Bf-#Ayw`HQC:ۃa551rE+[}O#"DRF֐ ͘=`Vԏ=O| GK뫂[F-קv px%pތx'hՖFk9Wrxa}Fv]jt.%5A ('aޥt/`sEҔIY4E[<(#,:rcȩ gUrQA2qad1e?7mt750az/s 0mO&{qF`+j󗨔p4E'LdӐZ܇Fv*#"bG%ABd`j. toFѣk+>j)@z OxğT| YeV;]QZDEvl\3O+fX,s} trу@^>ucI;ko:wUHkƕlqN7MZ/.'[tl 5͂ 48 K/|5N9 S4SꍋG)E>%eyO?X`u:@6&@CFw hsx,7ރq̀PEIg9a9> s@6HL{K:Mn"pQ~}@hfW;)qqty”&ccխٷKT s.+~@(砵)Z-p)ő@1<Џ7 Azx~/Q[ \&G$$t '3nce1$zU&Sh_BҊrsk 緜|-"p2rWo6(U~Cv;س?l^V "5 1wn~c~C+1$T( ܮzkTګeB!7 "!mF@g[w #Q->|,>*ж v_̉疣seVCM~ zK/\ާ#w`]wG,NNoa~ȏˬAc;oQ9k|(JDGǟYh%diR?{F,k>1^g7 ?$RXm|!8I#)ZhvA^qv38[p|xCJ\5a~ շ}n4=׈EeZ8qY'(Rq2C1MͶj wh-) dwl.ݗN 1[z0p=^+TGiӆGO[՜d*!h}`}+P%d ʖ,ɚwĖjfGدKtV y/az& \]y)qhi /sQ$Z:gL!㝚.9+zgy(^wQf9ׯc@MkظtG %ui׻pM^'3"P뚸YNS9'u  VRWx%b?0pg " }\9XW;p2 con"Md}6C.vm iMPƶFs[ LD{kw4B¼]/邅#^Ɠ,2> BpǕ0 ŕ:夁&P3Ř8Q{(ypނu^0bY+;7Q ++U) )PI4/Yx fB&[oKB\Mt K3Fv[uz|thb4I] ={Ȅg\B2AG8eD٩~ |P7дs%9] N/i| X 5~oR@V{VHqW۸77Oɻ'~Y Av:qCԋp 1.pa!`>PG1uƈEMMzg3Fcp.^| /=>4R3N$q@9~!t9'd9#j5ȇ#v"2s- rLhx_`0+|%<#,R)&$5C\ 0D(i@GԴYǂ}6uc BRh sWKw;94ϣ, nW [r)ŐФb93ٻ4Jv[Q\p\rǬY*M%5YSTe(wK,IFnX}PkfEyvnrF8d g XӤ!L }NcrO!ʔīN "iap:axmou4  ]spңr^үbJ|LZwYog6cyʝpl-H,5u+AY}9|?Z9ERfvV+r)6!|"ǭ OJ5N3_讝o^l r`1j_T A7;!m Q31ɩ-}|ͦCjK;x |> v+7x10pTS1s WtWll4;DM3z>hk+1 !љdny[٠W޸,jGY@HAjAirx/0 ]0l˫^{Z1e{*6(gŒ ,eiY41%^X 7aV[]$_͟;&n{%.$C {칚$h)y(-pa{lz&&4ox=z@IEK:ޙrX^=G|k I wpc PsRvψ-p`;q A3YfB*2UVeQ.º-=1ikxi4aܰH3I<ٔ|, MB0@~ IeIT?7|uFRKq*6zsk;]|n-<8Nhc9`S=EeqK &}ﺯPgf?1 D˦0BpPoeM/yl@ˇk98P*W/0D7 k e)5h^⠯O0[?K3QD(/(Z2;dxz~;~|[rƝA>$Nhj k5>b-\+$0 Ho׆4~*FF OaVaK~|xp8O"kxneZߗGdZB}>h-hA >5K|v:ZvMCv-kj|"]%؜~'7R +wN6M.1ZRz#Cmز*GNjZ:XA罸9f,}Et@AWx4 vj@{_/ZpQDFpՅtj*"MeEΎ##Xnp#[e׬E,Zxat nyMB\j_Z\s#-.<.U^xUj1lc;mz )~"ZxG E ETq>3vFJAD|sd%~˙VڿVE {U߈HEP"3w%Uf3cʯ]5.l%DF)zLFW?ݿ)-3M,Y`s73{N;dg#[AgKou@;nLDF?&ӅIV{N U.e ,YJu0!^ 0_:`ݲ+m6QmƩWvo>}D`_fTB1M  />kLع]sm`,2 '5iL_2ΌԢ 2O8u>I,hCQ@&6XJE5jg;I.{w>Ps5paՇ ϭP}?"gKh.Pk 4EPO!j9(*QZ8?EX) n aXðI\kA['Qg#DZ3sJ`=ފMp@A|H0^JjSg쉑Yw8#  0;##~XxY5;Yt⢲*PkC#zRh?&] L?DǦ2K=M0b?PYOWyaYm<2ҳ[Dxul&b۾ȓ _ukٰN9Li)m%X}r_w(aS!4[|ˈ ~/*Ge&& 0FN+E+ ]C5ܫ3VBH_w<>tÿwM᪀|I"b9_9RXzڞg(9n̉`i%vcn2I {BQZ![T,bdRb`$5 tb׌ F$Ej0ӌ(?҈o&#+bg9΄?g qPŚF=6(PIZMvfl(+* &%L3_D1*`t 0OfbzCLf%X0V%DlH'&i91C&/"dɆrff!` "T1M0A0^Q1P4r `&F( g7LHni44!+oƛDEY s{ !Yk>՗ob ]0+P->fXA$XP??XvVv;̆g yD֞fubDԱ-#{ľyodߋ>cnL"sib E8"]ͧ}(tgwAW^x)LAx^*sjArz"رSrcN t^^hxpēVgj~_ڿ ۃ{b{@&R:1eUW_yf3nXu<>DLBgϒHmLS /d)2ѾV8~4,WHr]ieo*%,/b۾|Umo<`zAF0T2#u}ĭ^sbp#Mf E"W|(J'6N HRuaԐ/\!i}HԀk8/ _-+3cs,9Oų:\ l0bOŸQǬ&fI3Dfo1L|'6P5YCRMG̨f2.13^ ӓ Lp`+ɝS|q ucx^F%h_ 5P:ǡc5c(& r(AkgsX42$8$T$ y@8)aC$6rI=iJ,44^A&jI.1"fa6m0b<!>&I36M>NĦPx>6򡛓FPl<]뀂e/;;?m I{|\K13!9 @6^Cf}uB&TI;. n=3dbSnBFvxnJl&Igv+S5$lC4d٤Ld~O^ Di#ۤ6s!_J8nGt `=93Lg/vg 28c 5E狟 W;u+7|c>y+ 1wG\p{w 4zccmzŶ"oΣ)eB΋,jyEe&c?HwSUUj:n1pnqVa~#Fe]0HomĆؑDgAbm\ 㾑m{khXmS^7]-lÒNv£-"O/B,ͷW7.nPzj|S\gc*e՟׼v;uJCp.RE .ks=DcMAV*an®OpjEڜ;צ4֤L1Ҧ, gc@m'ց,G;+5LƮ vj#=f2xfEgj"3jm" Y6&~6팰E& B =0Pj@+AneQE!Zjq#iS~3ƶTů(Mߜ|i;yA`K8DdA?;&|F_'ʞBsv񲗢+D7aÐt#WZne7,Bk4YSDh][)+ơ?)5`.ff[=nkŜɳ3TO-Nb\0-r`lF쉘@KQes眄w.6h#h?X8ߤ,k5FrjYf61ZIRc$ͨ)AůP!~BkQcO1IҼ/zv':$H{I\s\2OYbd"P;B#v(" E?SEJÈf@fVu뷥gLhD,ElsDE$[u|&&KW1*/pp5CG1.[x/!B&rbkv?^D͎B7%6l0 2tD1XM\_G$(i\1t?$@UعR5aoGvAAq"&nÝ4΢YfM柏[oaA$ xaÕ~K[R? A.wbNqӦn|f!{׀7UɓU+'f`w:F~Ȧ#Cc1qDZ`?ʕ5e<U? [Yyekx_] \AL"}I`A'-Mwk\~+*|KY93֦xYD7g_0;;CU23bqN:$IQUH)&ٓkً6 D֝e*N.'(Dͮ_o)Wʙ"ZNIcUMa%0p+quêuҀ[ csJr,/A6!7y n:Kҝ8b ĩ;]!(|M'5*E$sq ,!qDRYL&ºHepr=Rg $Is!= |bu`8kzSL˟۷>J^_#jT7; sm`l92rTהͫwo(_Pk[rۗm'&]eVߦߞzIE^h/ld,DZHvq+\JgqWg\QFarޘ(XM[]AY ROUl)M4K\33kVWpbcyRJ(Rs8 >4y;B*^1aTy.]l60ǽ 确=Wj)[i-qJ1a[SX=*5X3Qv/&Sۣ< blG<=aTzKZ|=]NaoʣfD۷a|?$fVh"nRmkª ,pϓ%q9-'׷I[y Y*:ORC VU%cmz#v0M/rC~ D=}ZOƜPsupYډ !wcpnAven fw? ųiL~ϳ߲,Wб>tWM+t]9 dйY' w'~wE:Kb{14Z} %{f|a0PhD7ydWnrjҸ ϛ <3X/mpU7=-hňۺ_N_ E;鄡G!a*Q𴵐NS*;UP` ScٍiMxpˆ\E=0` ȵ\>XGG(b1xuخMq\7[zn~dZ?Ch'G6FNJ6gʝ0Q0uMDPa pIUe*E(y"&lf @2ψdci=r:˖WjƤl+.XZK}L"<ş5"z=NAE5Zj4Juhx/m,=b3w# 'l줋ߚ?ԝН6BDkp #k<&_4﹧iir X@! dN=]K-?y:k)g1wp Y9@ŋ qd}Th{aJK!Ai (GMI/3 u+5&O $rH&$ >][nM4;Z2PZ'O1Фz׺eK!0|5%5er*K!fudo PLa׶TtDe)Ō=zAjX.0 ,hfGhZt偩1޶,VQ|4e:sϋŏvTpyka*N?L-ox*}*V*N9T$Po׮Hzk\>kSp,OvZl=\ǿT78?H*8%_1Ɨ0='8% Y ):tҔv)nn!#Q-N4 4Eh䌐Ȝf2AA^-9ˎ2k@Oduk.}_+nz~vuZ@WThM8XRUeVP4qhڹ&a 0y)gzLF8xxg"sQqY̵S0Q{ ;|C +XlbU${]q*vׅG'3-{IQ.r iE5OM7JSEE0nFk^"@M}ַqsCr3 V]] r0@dt)]DCo ^Ԯ uAY_L-5o+\XW?GW>E?_Uƿ=kgǂ aW +u_E\o-1-~SגddJV4?ȝ?8RVV*1yFr8SMXIrfR:S ߯48.4dRfYN:2t!Χg:J{`ʥ^iUkE$Qkzs{/ZRXݺ*qASY} ?+KYl #O&O=GgM@VY\,Ԅ.uA4IKA5)shւ(Oe9 zJ8qr 0ўU άv bÃz]$%N#XM8m.-dG3j% ՟4Leԙ*K9[W98'NM1SuTl,,$Jˉ& Tdҥ+u!a݊^kmM6ՖKի~Tk'mx5NK)i^)mnu.Rl+p[ɇg)ut͸rDmkQۯ01uf:qRdSiqiyq{=/jc62aWZދI0͸4¦5 xfk5)1EEK;JDhN[ \ea~F˧K5PY%vՋLgk*z#űlgjWwI.lo+0xUvVNҵYYyOz|! kdzk)dK9K!#G!jZp;G3-DlH0Ԅh\|4"*~]Ett᪜'Ɲ"1Qg[pjWŰLi: ?xՅk90sēqوH)\Ze)W1A I0ûtV;{{{xK[jNuw_nj/*\ܺw]aJ#[:-cs-oqm/k갃洍:eMQL),iqG|dȅJRp$VyX \D*7mkw`PmSk5d½RJ֔N%]wuj$n=">Y&CHw&S""1TZک9b!֩Y 4ϖz65.MM CAl8IS0~\K5.+YAw.^_DfZXC1䚔-jI(ԹNhp]ĕRշme})7lC2RbEQe}{;ڴ1$Z.Z RKscŷ7xt.htڒ{ CiZ_ոm(f [[*1íI+Z%ZұR_% -#:I2h2L PݺXp< O"ɪvR*:YsRKZ.싌.ȩ6 0yȞ6%Jmi){.֝Kx'JXʕ,{ap dT'/p;$y 7TNRi.AhfMLDI w-[++mݍWI*V[%GTԠE*b 9l$ڣ1IJ❍*MjhU;+Ԧ+-ի6IRY-)'*Wl)~WoWO]ED[;l7a )/uRoo)5.%ؗ̒Skzx(i4Yu9hY\"`ڶղ44)P4HhAPju.y`=HA ЃZ OA@Iwz>x  @Bo|Õo޸:QPBes6Pjh}{>ϝz)(Wۏ@=`V2\;tBԏq{H9sѸqrew(ͯwwSyXW{yyAj}T=iw'{[h÷ݽo|ovzSwuϾ*vw%;m:}nzNU_NE4Xcu[Žkyk"P5WzO)Mnt=Nmݢ2mB+ DӮo/z=N]e [ЭǠޝsk7stz;yw{n=l;ݚV׼Wjײݯڵso;{]\/{ץo{]뽛nwskk+7]ѵ/'i" FL0`0#&IC&4#4ddhтB& iL! iMh4 ~cDM1  &x3Hi b" Кjb`IcBb0FI41=)OҞi z''& 2F4h hB457A4ѐM$DAj=4LTbhѡSѩLjm4l~FoSR~iQh?Q4FhzQBzgi?JfGmA" L&M4 4&FFMAa40`da& 0L@LB"@DABxMML3IL me=MiO5=0z1 M54M?Q{A4mh4\ ǯ2ډ}g$CC:n {E\? @)h@,@ԇ <*EVQTU"I$ $U+V'F~AK: \3yoR! ~O€5#q38XG WA`6!H}Ea* QӣԤR86ٱX٘0fcJǣF / IvAje4 rm B'&;yed>e: /z&L̹("mj0mUMW\U9J{){8VZ{ui[nnݵD7j|6OXnՍjc5U/u86T%2ܚiUMQ3.J*ekss3p2mS.J2dGۙmڴ(-~i+I nKbffTӒZmQF@d׸(d)rQ쌶i4OZV%əRj|ormے[i&KS/J($ݛaI.$۳nIm4lrMe)LTyI6ml]$6ҳI Le%Rܔ%>eؔSl]E93$ɖS6JI{I>/D&I%F>/ǰ#L#~dƈ4 ZE@jLЅ @L?l{,JNR"P=}x !u>Ũ rY&@~ $|~hclыncTTo8oc#;IÂEXH@&nO`% rK`?KT'>`2<Ԟu]-p?/~_Ojk^κv^xU驘/ D;'bc#u* $7ͪ Tgg <$2L`r>Bƛv,}k@wuD@$I)jhvRlv޳ DG_Qi/9U|oayz{ڔIp4jSꌺ<kٶJ 6K 20&@J$rǔd$I6z[_nq\3oLW j Uo>]5\1Vx :9/bIQc&Ȇ'8&\|[$kDm##.Q%'+/kO˻?꫐?+ZF'u|~{ts SK[ Ve5[H~WIZU֕u/eW٦ckWw3wviR@x${y$?*s/Uk8]%aL0%E'H":$Z|GD33!j:0z^LLbH( S}z2<Ō? R %`,Éh(q5r%ǯϩ frN=(<hE xQ]"u"QRR^&sϖ?1N>9R;Xh4F/VŒ |.÷s * =Ɠ|*ei觃:i?Gڿ7;D~I9PcPbSŠG<>wK¡],AkSBS!LMW&̧7~~ZSR7_t?{5/Go!bd=?1`,O| `nY.2ҴP&}>Oϝs?'ˏ!-.uؑ9[\O* tqyDUVtv}uyk.^HwL8VS~"xǭr x2+>nsyg43 ,jPC*;jcnjIp,Կ8qn{Ùļ8CI1*ЫAGF<-ײZ&mPQDW5 Xijig ?a~7O?<ˆn˪1zFDQј~XLky}gouԤ5OP :SPA {뼌UxZ@dyÏgc^偏K%%"V!լj4FԼ m_`*1fZ:J';4+bLaY ~4jS'xW mY$7 V%A:w:w%g@/Q {9ht٫C Pc&`"`"gu`1 qʫ&=1’PϧFQPP:&]|̑][#O9"F,Ѣv ]EZV_׺ 7Sဏ`Q&4dP[䌀 @M##SA $P=Fj5JAyTh>qgi:K" ᅬGk(` `" 4hBM߻r*fm8ʋ[JFSd7TCH@D= ܋fzVJsF~ +x ʬu:>Fy-5?>lˋNP}th2V\GQ">gm{x_GH8atCyHE8P ͌NA)-U?q"ZZxf\gvdDM.9NoS!0kp#^^F^ ^0]Q4wҧ8 n~^ /D> e< XZ+g7B{36g@,8^+_IL>j=!kcKJcㆍ_˩g?v:<C=]3^/tYUQRFR[O{t/xt T t E⢠Ѿ//侊w h+LS 4 )`ѣs>p] Bf)bO(C+d$tǯW]av'4ruE͝j HxCD@QD4Vh `0sYhhG_]oPU[W23,eg"P0r1X|Oh R06 ElRtP0؞*Sb˄Xll8pw 1dV8F'O9D\hw2׭%8~%TtP A)$'WI%ms'5-f /]XiB3C6 wFH/ 8[YjZR\2rcQ[uF<:E-L[y!bЃyHc5qbnW]RKlTq&\f,{ZX&Ay(M5~m;jIUpZKB$\1it`|乸rEEu4eU,k)|K Dpa$H|O{˺~'̾?ݷkf=  OYn T;wr)kRXe;t382 ;k&ϗ ؆!|c(Ѯ}1 _ȰFD0#lE2i=s$ ڎ *():BAA8T9A`C4:(ʑl)y~䂒(D95>Bp Bx4߈| \8 U4D )?d3Sђ0Ɗ`hI&1bX$B hjh B4CAlFl~_p0@-`T\aE=Yr-/[҇2Lv(wAFdZ'{OXX,6a-då\; GH`dt)^ZCjcc{?+wy9f^_m:I=mꠒ;2m=?._">?vj<0('@9'Sj.u0{kn̹gPABfϱ7ϢTqP&^65Ϛ4Rqj%}t9I"`fWĿ&U:kץNNlU'' 6hY3x?CESνvvt#_|`NHQ@=ps;B3A<;3B=;a2{bH:"Enz-]zne^{x<6tRs1aP0Җ:ΉFt` #AQ~ʤEJ]OЭ&(jX6qeEAWg̯,xxUP%nMj]0 `)PPPS;UeX3U zPXe߯K/Rx7vA%%#SPcGjω&L_7m/9yP6+}6@p@M* 25L,ۜ]fuԨ(FDu`ʐІ2!slT!Ccډ2A_kS07S& }e/6666HZAo7`o/0 +Ql0itTRi#cEso˖NNNrgs2r ĂӨL/@n``dʟ%,* Z N,1\H(=ÙP@_9c1y߼e!lo vM\[/Rk!]0TvH ZH1R?za$^\ G4TzK_i7ݠ%Big؉P 84,7NWʕ_xecۈi3 rL>Ǟ9k, }[ 1)ʬS`Wc׶Hϯ_m7mыV$Oh3k^9dF%틯xbf{V0&X {]48bt$F=!k7M3U]>$Č9pv^fzO!–\,[Q*T>\+` ._ 5J~qSU My HU6II] :BBE6lBjX64|(9e=W",\>Tm4ᦉ^xw䀦L9,ۑ*ўvF$0ʳi!8Jaʩɪ Ϲ,?`@/: !"ɏ3aw&=7cndȴ~5H4#G;f_o@BYSqCzeːI&w[Xu߇beAMi@k"1"Zjz,%a5̊ɫ*]o2$Eq:e1pVm߾W] 1#hPJ6f cPh0l;u|:$2ӽ& +^z~YFS4*$yG2_ oɋуta=%Ef| 8&@Jwa{D(#"" 0 302g>1o5Y>ؚ-   u#o(g,LYƄ@Qgr>CB*QƍnyXo45(PgE`ru$>vu,Qv4yp6l7ਜ਼2Ɏfݥq#}Υonfh)g|1&Lee4Vw a8ZW":UYNظ,\GWc ؊2#T/i 7J[.tʩ9fCʹ_Y3}  R/)AّF?SeRGl^zN?paXM '=b87Sife #K=2a(hfm1SU-+fʛjN6ҾA,ѰB5 @b:#̓;Etkh\(⣫0eލBA JÒdDa Ys5u:5ZB#/G㖹IrS2QD$EQNLM&fX뎉@o Fj5ӡ|7f<Ҍ"˷0GXks:.No8afxET0(\ɌERR2-rիTƬ[JlV()dUc*1Exr9]Ysէ:ﮍ w4Ů9eLt崴(њ*)aFE%kmais0zk0`b]kARtbی-(kVj LLsZ֦.ZRCNeZ,B/Gnr}XhhDJ`aS n`V-([0ne2d9h-8ĸ(̦L.3+cJTpmVVJ&0dEJW0̬ jҪb,J %fLjV K0PV`)Lr5[-Fa,p*T+*ffG2 UL13"LnZۖpZĪX.PūLe-q3 0,ZcrmjWe"Z6jZo?BHA(DAI JʊB CH\i"Ȳ@XHYR(&0үYQE Nv[ yvX.3uYNJi Y!+\E l7.mmVrҍd$ 7s}s{1CÖ"*ѝ8:]PYjTٔ]!gI9ˊPZCĬShW[3<9JX| p{9yjUX8T G0CzS"TZ֡mYUլQ2(tN!#11E@l11RUˤz@^ȨidӫjՅ--ȚJP,ӆ 'g t %h@ \YY7kf!snE$ C ҞtfAIT̪(A $iP\mm̪X4+5V VtzZ8r:(cLJ]ZލC:7)֔M4uf$V MH$#:teUKji$-mUU2u5-mt.LI\))l2jRi4n[r,u4553)1T%MNXrY\j66ڶU]\VFꕚ+SAJ+P8zZ8멛(i%/:ָѷ{nRQ:#It4cQpN$#DbC0&uxק6,Iidwnjo㛉ĉ7ݜNy&4%iL" E9Em.+xU^j[vjVzK#FaknT0'wsIǂ OcM"|EA f!0im5 @ }{z^簓HD HF"H@ۦB+\0mm.Q݃:`SSK.)J"$2ĭxlQ! qlV\i ݥJ޽w3D{Gt'e >@29 (bYd Mfgf')*,:D$=uלHycU=Dr6NvLČ'lPZ@˥Us"V082E"Q#d$ ! 2A dV]\Xe/- urx[5Jɠ gEĘ?uvEZTd )+J?$qBEJ[yǯ@^TH | QEa( m&37eB ̀C3 yƯ,,`Uȅ*,\Sȋ|Ab(-C> 2fZV=1'FUaATI RQ`(TH :9JO{HT@DrrU(2pUHjeuzW7ι]P3iBۜY[g"[cOi8M&*;) M08QP-9Ý0$i(۾\lxi&Xt՚bs 7(좪"DF0=Wr,([zԡu,=ua铩g.EG<炞aOD5 VhHYK̍>]8لŋFS"hv4ÀI) . S²VL!3&%1`wVS%=I F@aY< , ixE*&TWΜ+3+gNC/PR&T;v)- arB}.=rrtTO3L1< K#܅!GwJyQ#`PHZ?k2CF̾~VC G^:Z UiV1%bk$Qd,Y ߣc<;Mklkҡ( AA!ZJBݎ6ir˴)sɥ܀Uk%%TX&4AT rhL܏Odo!ZMP!OC3?XCO 5@(KW9,kRQ͘*L/5Jma[2P7J8 B:]]3KL*n =o;DqOqiϭ 8uI3U.о'ƈQ[yӶ4/g~.pǹh1r@-9?lnW/7-Wr~3;*:SZxQu[vGE߭gSʚnݜS{ibXHʕD$NrnZݘ8R^JItZULC+q?\oY8?j\f6Ou)]Dnj${['M~71[/>_畋%6k5e4֪{DCP d%<+1?xU&XGv9N하Ϝְưu2:9,kuS[؝W"?RI8J&2TːsgT'҂qp+@H,w޺r|Ezs9oe@esԔ¯fd늞Um K ZRưbfmB7'rO.ۅ^B6IA9 ldD"bX噛 ]!INS Cp xv`,aBdgb_Y$\;!}llȨ",.o{9.Zv ? ǜnLnqo^Se 6kԜmfc(;3d@/@G9f]lK<1#kt1MGWUO2_t7f⽮ xR e&SPefHA]L'ΤU8m10UP/;(1~. }xkE]E4)!bl.mʨ4~uk㛷&S4'Yx 0$I\̚yqw"FZ8H<Pe:70zLǩoNj/;擃 [̼lKnW{\~S5aҶ4w70>8rCO"z3R+$֚!GI{ӥQ3 Y } RBjc7ލ^_褕3S{ O[IL(=I+p"h8\DHZG̗'Vy#m_k(T=>矡15liW>$)>dp&7/ޡ>mkR/t+=3 n2*%&xGǽS¥Y_[J1WګHZj2ĸrzG iՎ׳ٌ~HzQG Ili'SUDlYmq1Jfe=ϊm7XLN9"&pŒ#useM`_(]L> PfYtBy\sʥ.by["q`6.V*8Jhv<]G0Ξ)lk/>u V8&;&$?C,rYBQ5!gV&!# GVGS5[h.ݦ<6b6kg#ܲxl0ߏ(cIhE s,M7>nEB\0=<9++]F}R*|c~(J~@dȺ΀r [GD`_HT5iC=$ywר:+6h  vlc+ vKp`˺x >jY C\۔3|Ws󒟾F7:/̡v1Y` *}dOHNj|#HTg9ŧѴ;f>bvTf0n7jPA;~6b1wA\圎Az]6`u-J%>uN,ͪHtipH$uk18*I8>W}u'] ZGi: 4DxΛ˰8=z/I [+\rDǥTT\/~y;Y|UrO%XzRHrOƷ籵33;ο&љ __gBX;:: WY bPp14pȬvp .>0'\ + l7zr2X:Q(x7D(0%HQv)7t}b%2#Ifsګpm.txx^/۷)5Vŵ9Q!7 4Gfȟ&ӯhM޷`~EO%yywGލxco7@vhYn]$@;t~u:&yx D{~2fI33/AqP1%dQN|?(x ewwy; 1ҟq/97 IQ{0 `KS#KgxQX[̗.Urb}0}D7}eAko5.OD=vhqWbg'gb+/X~} AkA+I|}d5Foܒ odpKA#@ӆ5%dS2,011jA2ىk`2,mHjAwh *) "Jր0 ʫ66ɏ CJʍ~/wVS7_aG6KdmzI1rUa?XV[E[lKl-(^O_'.TvJ@UE,} I2"EP]P(E3tCfWێ{4Re{RzPCd!"q̢E&5X(R$]5Ff aUuhAEWLP).)"35;;6ʄATw5V49GkfLaQBT"p5f#tCﯱ]'A vJjDjYiSn0ݖkT&Fh5d?Ml”A.^U܊la!ΘT'y M[)Si.۶M$kWL8Vfօް1%`JRr_ɱ!,6G =.6vc ʳL%cZgM\@džddY(Э-dEY+ ɋ\`M:V`A?2b@%LOI1L=( GyM0YVLE[l$}0wjh@4=!~5p&HC6qlR:f@ 0Ę7CI4֍c!|+koV` m0m6ؖȈ0dD`ł5ǓMj클c5Cɝu9htCzY.3y:e}g{^uvI63y@pjF$%㛈@{oƗll+DxƝ}^d $F7_?01 FDi~IFa'_}+3NMoB¥H @<au n1@S3(c' (iv(͒H0,DA`Qb (*dw8>@ ^>Ρ!G0B#Uyԕ"vD E"E^[1OdNߍ'$$s%'⨨EPX"" #TTVAbaX"QeȎPGz+voֵ/1UyQ!hA1@ \.sx @'-.,7k ƨ]ZZ Sa p8S""} ˭W8է 5^ihÔvT75*i q@@悼k#Xs,z{%OWhQy-qv98ΈւByZsjw'rA,EKzn+XZR7PZ($4P$}L7ќwzk Vz4h8_'k>ME9DD+9[D$q :,LHʡds>i/4ǽ nT5UpP:[-aYDy9\$9(VFYr TT'U9J9 YC6 HI m՜|tց|Z}4)f= ļB:.=;;;77LRQPPKo(':7{mi Ru=6N&Ni,Q`PA@G)+UR@Dڟ?Dʴ찇* Dʴ\QTUUUUUUU_KO mJn˖p](*%,w”ݗ-x{1?CBXT y<ȊB,"`PR(E"aEBD,^*& 7 c@X AHd 09@$r~?5pP>㏎WH cڈ=(Fa%BFmcP  @a+@dY$hUB$!rT$.Y0L`@A UdA@#tpa& XIB"ѨXB4 Z "21H h`!((ꀙJEF-@2( 2) fE0$ j*Х`J1aP!i /c*RNTڤa$,΢I$B]Hoc9붛V)ڪxRkT#U'VMR*˭ܽ-ZkZְs35UUYZֵRiUakZ6jkZ6Vz][M^ֶWk\IիNZptaëmE聾={mXr'H  8M8i'C/0 t`U(+#h&y핤a[7q2cH+=t_ju-6R 3FD &$0Gْ*5Sr!jZ+V#~7@qzZFLnLS3338Ԓ&\UUT338)*e6vo1Z]Hf$ HNav"rcqielƆ4Ā#+ݭo{oX_ [gk=;t-ɰQd ,!q;nn8 @D#DD5ja&fYۧU[ kZ5zvJkUY%cULpZմjSyJUdml Nlma$萳H; BF ɠ$ E!8# V7"* `3Š(:fpzguɧ6x89ۙsy|psk0a{WVZF@gJa;y&QJ]%;|sElk:Ր' xiŗ5.SP&Z(Q,ӦZܴ; o shEK;a𴒦8[$$43;v¤ڰ6&3XR#%iIm VT8I-]+U.c3t\x &5*NVf96WfX +sgSM8,c:2JHvݡ5lc AtΧ:<1`)RRm㊼QB (s;u+WY:3N(N٧MLNqviίbB" @0'r{Xrvx/TԭDkwz0JtĕbFLݒӺoD:!7N-qݩ !ŢƦ :q*sz3tyt*tbz< 4"-i*諚j/)o\1:g; +'zrs@ =ڸ]u9ʠdT2 zP93[+'=]yIm9I IfbVJq@e[Mq FCz-m&0Ӈi\04¡W'D.QC6Ɉu aa؝);SIcwnه9a7LmVtrpW6f:հ;Xս9p)q^jgNGW@ 靬m8tIPճPzo%őlcU`uf;rsa:b7xjbV#͆q&n+ Æ֛M"1VnlWh*:nR$̥8Ld۵dtXt@ YT9Aa٫ֵӜMuj]44;9M!QQ 6VbkZ IL{3:ՂA͚LP!N^V0PQdQAH*-T (HhBL 1#l1t1AaJdbVBIYm!4I-'{ wBmlѭXa VH 0ՓQpbQZ3$+H(HsmUC$6BD`02&fh1t@m@ղmh7@ `塽lf03)%@N,qAP4W%j !YJVdHc e5y'7MLMM5!1%aۨsӛ{ f!>+ :ӝvjń \/> P [ &YCĀ`E5JH&3MpJ2@&11 DPV " "" 1"V*a8d@P(A 5H @*ޮIY*,,%ed89wEhC$ DP+$ϋnA yN W{c19eo9|kGd`4}4>[S3P~?c'#ms+{E=oˇ c4dBşkY*r^rѹmpX(۝v>3DD8+dGʬhw&dt̐4L:B7NB){ٛبc'ڥͧ^gs*[ vu-AIA#$R[>HLLXO @vRy5ME>\l(8.] RM#j8hZ0u9iɜ jŪ[/n#K'>:;pz%қS<n'JfSJ3ySu+z]/z˩Y=jWݰ_Ƿ~9;> o{2m[{ ^G3ťmmlnd~{z=9 Lm 9Wwąe?|U}eBY/E.g2Fmbt)lhNC{R#=_]pִwgqYN?6ux0ؚM %ʊ[G^S_Bq'yS52w~Vxrnج+XNypMUb1tڼgvӪYF9"? vg1/p2kU7LV8_ 5"4S#%/>ɵ%mɂ9Rc[;~ٯmzE߻\:;?oLo,sȟ_F0Whg|}t|'{x5Gn}ў~[gsԳɟ9&q}V1ΧOZ3|NWL^8|5/f ݓe?Dmj6(f0`w""dC.$0y椖 Sy;^Ă_Zn={P}t=WgCw }+פѕdT l5#b_h _1ˆIIUUk\}uUtR^;}ϱ8LKn5[ڡisy28q8p h 7D{CK&q?sчEOjگ-QTW|n&t~!6h9W1qåL%<>ZF,'/5ˌǧʏH3a'گE{QTLKo|\>L#֞?MtNH#~&3'4 YQuR?KnA(2:y.Y^$Dy5㥉Èv%eKcKohKAoiOT M aZUُmH]3s +YG㣸Mے4cm'w9j>h^ih6&fݮyÈwD}Wtossak^[>7 >KAe"2wԘнbܦ== gQ ?b?^s#FR`JS/ʕJr;A>_$NUxE,q߷ߎ%Ukc/a_)8utǩs9jxJ텁_olVʿBd&؍u=-ă5G&^Qi3woǯV##6zb˛ǮNPkE dz O\:uB1Ѯ}ürֻkS>у4<-<񓰛w)ǣjgRB~a7]szޏNoc|363]eI̹t_tKEt[7\dzuI7WJc0g$0qU{dw]qXfx>gt*yzDZγg7%D/U~Si~o[O fetp X]|[^/jziSFՍ_WωPD.w~|7s :P5ٯQ %+}f9~qZT^,~( Z+gc ¸??geP"InD3+n)t}{B~BQ#9B&Pcsפq۷o<ʌ?R&z5_eM;GCmmqg\AnjRBcNFth2O9J|(pq+5 4(:Ggߌu2[cz&bo(iۍ&bGFcRH+aLt@n֌`"@gi0b;!IZuFs=8 Y#I<Ű^ bQM'CcQPB0>#UF'L iDK39iQ㱍Z7B}ɺp7nFXV/-Rm45!ce X ^5 w4"?[ 0I:R}%IcTP,P@܏ǧӣ8=ҽsx}mMXqt@=:1bAbTdQc 1Ub2A,A"1ᛃ==OsS}8U|E>/?eK$<DF (3B,! Ednd$ (>c_|s{:b(!Y([ EX/z!,eO2>VbXxz^|}>xOX(B܅1 Ĭ:Oܣ!ª|J э}gj]rc?9:H(]ʣ^]|ۉ:n? 9;9;#?ÜQ{z|==%/#?r>Vt^/:˫/6o}>:wV|vWOobwowۿl.;;jp6{?/Χi~_On4{{;{[{/lۓcQJѶ_=P$IHE`H^7q rdygcmp`(@h2)6+1-=+Uۮ_8 RAd /6̧Gbt 'qyE˫&HVv?jV:c~C-v6ս+Y.^ՑSkj"{_fbଓ ]پ).yѾ@!BCM4&-Sン՚U}~TIc_=n^&fQps׼Nӻs($ HWtQ=gnPuHӆ0,:Tht*j 钞kie~9s9?tk [<ͪj%1sa -R^ ]BZϒ 2vEι40>4)Fק5Lzp&ƭVod_1&ӯ&cپ޼Xx8OdJv9r6ɰ5AEٝcX~ 󏠪e0$f:t'9/4o_>U{ke*˻N({sq^2U=Yt9vy"mfo]h G0H ':[Uҩs=FTM6jHqfO\ ?sdz$)n!)MmpZ~[]rcgs`||a] 1bO\mTS|/ՉLH3Q6dHxoD4ݬ3tYWĬyd]G^oKZ>\wk`>+J={ P$(Bj0v LP HtY2Y>eZWa*o; QJwJ{䗳ŁO@z eCi$_R[r[{Ԕ!^;2~kǃ_E^vvb"wiol_[-$"j5&8ƃUe߻,BMf~oUV,X lBPLo*aqenAɦ,51'/)>=838/2<:>>=<7766 a6HԴZ/h0[A B菬/"G-z"Iy~Cכ@:/7t MRS=#jǡ:/ɲE5TwZ!6vНrN ХCV*>?eA<ju2BxW;Au zu/R4 ٬VA#ŏb d`,AB0DT, *GkH_4påIu"@T@y  ]Գb9\`.qaӃ-p&0j00b0sEb͹̮~nץY6$˺Vwx%{kctTRH߃RFG燇Du$􄄴ŻW~ç^%'vy0vWl3h@A iSv{ pg൪\üֵzk[Y͍a~Q22AɗvR~%w>VKk/?r<{dMr[--jCMʻiڦ^PKM-Kǰα-gԬ:o DUوg"[Q@7?{_K|/t ~/B':O<+s/Շ-tYy /3Je 4%m6pY J|eBC<YRp g* kc">"@Wb!굱JDau=d =LbT>fprT0IPz h $P aQ.͍%1pR?+(Izg5/ ~ @ TϦmF J;}GPugZY ub7'D ;\wij.u8d7M,3UӅ(5u}OݧHgąѥ7L'Zp>{ߘo^,2^l~6$g v7pꎀdT̾=k6]*:+KGa tp֠r]yU^M7䋊]SEk>"j=yq~~dה=@|:7[F-Br 4nˇյi-,(gJ 2@c'l|82ӑ/4:/O1|'GZ8*K`6yʶ:I.|0ྷS;Qrw\'Tkvj kO0N(vPoE[gjŴKr)µrR\%p(U-amdn88V[ik.RQJ9Ks3r4L-‰hո1)VJUr塖YnQ2rն˖(Yr+[kDLj`ڔĩLqS3 hil\E č\qLrKm)jfe-Z%kL+rUKgRn` qSq]]=Z-K"D#:ҙb3=LgU7zug>%;;w?>{}è#.3C7o}]v$"`.ϥh]E:iXc~rOZC+LA߻YH~X}L~'Bk'< Lܿ=޹.o<(91cx&#E>OߟyJ(Ti0pns:tv麲BȀpzHjh9RePlCJsed#JKV^׽^ŻVoﯭ:c|/I@ R>"k^ΚIaXxupBt!6P0̨\0Bt) 0TY/ f֋c"#h<㧂G (@(#%A;CLC< f>}}< PRTzs9"9{&Oc0` (`8^mӪ%#$4%98\׫^vqJ VF\͡BQK潋ELIϙ2 gNFūTZ76Zu.)ϙbŋӱa  ǭ6 :ChOqN$MdcZHaP E;[^?*1|2OtKd7dyUp⹸HC $!! 0 0ʔOMAABov?Ñ{w>:2%^OӒ>?%#%%&f&O DȪELp=b;՛:} 5_kvm׹[|VĺWӧN+uWZw۷nv^իVZݺl\۱nͻ>Ӭu L*^_Y& 6ת(a ^S3[ncGߘoZxs=GL~܇}YCICK<X@Aj8| 5HP( E{$>jmш H(EkrCHzt'Tlk&7(D: 6`2.0J_5@URgOo]dRTh߄P+a"nu`|/bt??H<|hp:;=K@II.:(#HN}:|./׺uun䩰M^mz&͛^zn)\^Sbŋwwv.߫R4h$wV,\ثRիVZjGWޞ6ڣW[tх-4>Mq#cH*I$cs^DlB>@̈B_87(eE>o,l=YgAo4 2}MZ1$NRT*p1X[M}/ I-M1Mذ>׷{J|:dLX3gsOzQ_9~lQ#Ǐ\;=No5u[A}1r˝O_qYeYRwnw=A'3wloy'[VӋcl:[u]q1s{uh!d8QD9pѴ;_zŊ@Gh|lNF&㎆NuE@dz9tcA/~אI`rgJjv ƹodl; 6(N1 w88B : H=+ɺ:].iv>0x~hJ#!^WKլU`WO Nf`Fht0$zHCg <'ҊDcz 0=Fp?)kcjMێGeEIߕ!'tugwuoH4mOZ CO͐oy]N~ޮ(+~˭үExušQD%@ шM!h2yCIlZ}7qw^ ฌhQ0{Rd,N77qM٦ofo:kG ! 2idl<)Wu >=MbȌ`m j9}a-;鼉$Q}G3.ϓ[#;w'+ jHH0-;am14/cx{QQud+ak |g ԰ ,"ÐcLn]٦}[4m߼怃g!覅>ex3WrLW|FшA< C f`az0G 7  ZE!,"vݤi,wZ| :ߦA9ZE(z-KSd"L..6ncF }=Mt7^GT[{hcec2jҨ%Xe\D|y;'.;Jm=ao 9"_*X[gXO~_yK֑^"G[v_c3LgF1w-5ra9ˢBs.9vOG9Y4ҧu_gW<Ò_ovIR(HM:0bzJ`CrbLeC*p6U涖{Mcxߗމщ3%ת?S$#Nk]z8(J1aAJvsЅm&fl;,Y W!,zf܏j$#v,]ܮԑ?Os O{"G(`5q,NA7τ.FTx j37%FU9 A8ҹKWzF. r Ol: X!H`;YԒB AjЉ,goJl߱qE>u9rio9ߍ"JEiykO2V:<ܘ^ŰH0JC2c:bI+-PKrċ!Vѽ5D vJ93Dz b C/ުA$ JKsSVFդO$Uģjo1H[mhҖ'6f^Oȁ>PX_fxq>ϞjmmڪUW/^nVimnoK , sS!rG22 0 {6O l9wG ⴽV~  qjMUC\K^Ic0z长kz'`pZ><6?{^~A P#aBK0FV1fK"0KMH~,ne"q@(g=>i<sT=R a{!0v A0 _.FQz(jzb|.[@8J53Q D3LM RokhrD֕Pydd"+2pD&PDš9C4<_P(M $bc~w#GA^^0xBB^^[ߨ0 1 $wy'6pR0Ba#)ai+{z”BWFɻS|R1lbpD!8u,{?hή%yI{&A ]HHE_ xi#Kt\mT˺6 \z=E ~*}i.Dg4M^@ FVG2skÞ#?yy!z<Ӫnz:{oEYQ*JUO}Cw5Z3qf[H1у aegwk_I A.4 I.{W V$@SJka|jjv=*\G7.,WK<‹҉}.2ϛ 3y?}\2zCQa0BB?vG[J'Cy8 N ǩ쪣sw/p^^d ^0paO0?"l'M]CƷ gH AsY1Py-q XL%c哆YzOOy-6<]FDB/(-Lyw4IM2G%.);1˧pz0AY |Ɨ=D}!;׸?%>'nYNT[RbrPĴ$(]%$]͗U(HAc)(&,<~(-=?&};{Yg(׵%ݶpn bDanAX&'W`^sND`Zu^h 8/;䦢̢uynw]4,sqAāG{p-Js6 b 2Mty>O}a'Kn!z~rei E: ]n`*o1!]0М 19Jl)g\z/c}n7BiLdIhۂU$4ȒHC`޽dd2sm)k꬈lHQT`*ƈ-\aZmV-ܶڲEUUmhUUUmUUeVmUUmmjJē$ԃ*"?yN1Թ $°}+߶ e_l:h(~:^O/x4< I1Rg%A%6Aӕ5F=XJ*As0mt =D "D!fZPnQIAĭJتfѱ`̅ƞ2~m_9`snHF(@~4A״9NkHV6|G^yO yD'?.+@,jdrE RBe/J G)r꼡@$V.Cm ^{bEݮs|@°?8/0pc"DO$4Z>At:u;#*9gK -<so!`qbHndND77T\ o446典/UYyYd @w::Tԏ(*ukCk*D6ָ4r5 ªp%<nt~x":t1A (1'a|vPɘw׌EGfk7S%6( Z0%M^Oo( 5j92GqF(o~P0?[?[VBxy V@QL l&0,+k4!ZQxPPJ4^{xҙ".uwwJ߰ȶ3րE2ܚ$D{"hm%G+C㨶sz^PSzH?DI#d&vQ~'Cgo^Gvql U` `TXUAUDUUV,K2洎fQij*ˁPCօYL>~(5K@BCx$I z/,0܊i9!^mʪ*>jjKu_Gnn nhhLi'4YaX~II$`"0HvY*Vv۔`e`^cumi9[{,8D0}LеW=r'pߙ_A9>1q tt;a>>.nu4ABWRB|7kzq}iɶ#!z0N݂dlU2.Hk (;;1N2*saæG-9GYW}~o/`X-MIhN#*PhQp\c^DoħlR`mr|f6?-c!h^q{=?. fGk8Nb- gͯ^=-] NR C >3q|`roʞoՑ,CluB8֓l!UO]9)_%LbZr*},B(PiOԺ`X/aY\d;Cwj~֗Ev 8% hXjgbm6f~ ϱgvw$_w0Ův \Y0=/^ΎTwBúV@};NZ9UFz84t1lMH5,1h.aL>ȳjA)||hT]?/ b4Fone*Upⱽ/}{C|?2I 3Й&5噷j/qSiƢ)]Q4D\!=yi; ĊR% X8ʉOkV}$+6QI4Aѡ$VKl%eg 0=,N6,/ ס(o}a ;ztf'ίl^_vGuPd;pcљ^/si(wk G,=1G~c/]_ ۢ=v jU*G*"@hM<"+C-灁j5_g~(${Ey I+${fiJf7)Kyݓ['ɹs"jHdyʐ89$K>I=՚qi4鏚 jp'OxmkIk,9A(bPYDW}ߡ)=lSkLt51 . 6r(b&pf&O36<w<=[c*F]jW}3*mr6mUUUUUWq/ol>r|K? 8Ͼ}$ ')ga@w8@F#.G+ @?콀s p?H :{˸bnJV!$KIQ8^1^w~[S trt;tEUQA~_f| dl3RdL$*XDBs9fh9_~r~7g[EΠy1G̨p|55 C5I"*k:HҌħL|JCƃcTD"2hʀnV-wKxPx;X7kW~8v('q`. (q8Mڅۙj Zkm"(A$ahN†"])jx1^YvG/-0 e2F$2Fjje6 u"SK$>PB8r|]Bw0y6w޳\ܵ2#nDl0<<~wM%Nfϫa *~75$Kl8EEQV"/ߞz/,UQkR| bnp@m t gZuV,dUִҩt)@9s JI)YXfޗ~~k/2QfESs_"'F5bu{+xc 2zm`:kv]಻jj Kn{Bρ$ށ*;ë$!o(O<~]p%em4a6j,8t^pStyzdm=.MKǼ*̒6U/tA`T#FI0Dz- DW03Z@,4E0`I` 1| _ner@h, U<]}X]pkFb#;9gP? !]Z"85=}3\@UD>8ˍְݰS9Hy'-_ 2isD(Nb. EyH!l|kZ-}qAPI޳,lljWZO ִm){'Qc2Lksjnm/'vpyxJKYc̮5l ( ->$2Y)YBŠ̍4$PԵ,MDwb+%J~l @!G OmltVj>v?!H |vH1cg}+8*bzӹ;{ot(y~o鈹xǑESs3[!0”k Mxz@ZLVJ9RhW|e/}v%cM{A`3q@FJ_zƽn8#/1TB} (sePzuŤ_η30Ep/;z:>ފT^’w-?auJCLL0;\ٮ5v#y G~vZMxQ/J}4(Z118 5_m}Fߝ7D8g4Uy[=R[~W˗a%^+ڿ9 =RDH#4"u#d{. ˒2dNÉoJL[c@|\%We2@^1'eB{LXN.?!43V\WJb LlM?׬IF =z`sfl ?W>+B;-ҍ+Yʧ--!ckI[(1jceE<1 "B^387ٰ8x@/_lE@Rh~ `&Ksgچ8Os@IF^Bt\kYF<~5Vw冫j5e>0n-z~ R͙No+F7A7 v,{5Ala,!L)r m^ž'̈B2|+@/z"?̏yE)2q- 6Fxj?wה[֛-yr| l]O<.#CDE wYK&tqGGb=Ո܊b.Hhޮ}~c=hȍ }fdj M> b,ot0ͽj<)!P/ +=1)( }lls{~索6!6 m}M/~W>b0 /a*Hm5i&1o)c$ $h{G&f7l|GWD_BZ/Eȃ!!-\rE ;C aS,e(,̨sB}f|!#fjvccׅXO{xLؠg~k.?N> \T %a{/-iծ Q)r+ 11_sC ^Jpfj dvp΄n'05IC4da@"HÙAIH" G~ 0xއ@ۺ ~:O)(w#mmy}^5,izlRK>K.1ˌSRo:Pq9܎`fv\G)uq4}vZcyB}?s hX_08dzY"8,ЉՊS6˙ ϙ5?u loMm9.B^}jf=@&$/OJ?!)Gd ^e™aͼ XH6X fCdu _2@H^owĠBm:̨ru:.NX=c%3'֤ Əe@1RlvQF t'Hb(rޔyw:J<.Mu*/NK`ZwNZ&7r7gz遬n 6 .EUr8PH:-qR7: 2 `t~R4{bBEPBI)SH@Di> @1Q Js oԼ&h[ г籺/n:=ta]^`! 6p73K34Qkj@a0x{{r\b<=/V\E f#9o2hb}$"S06{/_ K:*ZgԼȍ@=<"|O񑑖D` ^n sA@5s@:Pkt_Si;-z2u[o|2 6$?I;. =J4ICY!%'.CjӉI1JU #P.t%'*IL7wrT >5"G"s<| 8(B纜|?<{;mP_kkvtp`x"FP.H_پǿWP2`=J(~|m'Z5$% 史҂*3l3-^Ҽ2zխ؝|+Ma,lpp+ǩc^z|-kVn2s6n&jzlżrĄ1l814jJRTC2 2D dG=ԫᥪˊXkv53#PÏ\WobWo/nZ+|8x+~q0dh 1$}b^m`|oC]U~R:c&|:(1"3 :("Vs7srcMw\z1'' ҃bt:4%pk ~P !>$cQ> HlYP "%K8w2[j 6H?='mǨ]\5$YoA,p 0c 8]r1#lp+g꼛$ omI%>2RS:ξ*}y-ε h07 N甠p~hnY0y" d0qF. U 7Ƌu2NES"VL9U? UL(r U N而gZnӚ[Yb=;5}\šoqW3K%)/xUy,͟]3OӰRe6&{0Zsw]1koDq醫M"Op^(Œ~o&v)D:=Əs6s4$C1@IR!ṭafфr~:$$Z͠T&']^~|eyVXu?!fE+@ #s>U4B@D-^{vm&ǯKQoqM3" E)Tq!`S 8*{P9!C|ab(U3?[i= 1`m?Ouc.L˴#y}?{_<N3h bZN+>0xZ5S:=HVjM[|w҈q*YSB鋜-9K_!nߥx̽@t'=]ˇDVb\Gg^˱Xo5]Lfe5gmr2a_\1@\@0*ۙ rGtu?^tPV(-E3, ń2i}cJFT4 gDrX-"d1h"m,yԐ%_Ω4H 0Ax` w2H|mo䶮öo>"${篒G1 $FH{DH۔KmuyM!KN`@u%oNu}9Ou} #mDA"YXW`'vaI{H&ŇA,&dGt!nf $x5Cs!GE"si\mL 00L&;P2a4S![4.XgO6䩵q9t+m9~y_b*6-|~"_]`l(`\&F\%rSWfo/Ykg@.S],'mw/@Dg*b2d.uJC[b05JIV6'~k ($C F҆L86\v9$(YLAAoXAa/\rmş',KZ,EZ PwHaƸ5:@#HK[U'lO'4 |K,K("J XYVSpC:?1 GPcfN?Bw >kzf94#$'@$ I Q%Gɥ_Ԑ c P55!G @nÑ D>0>k@ 8iSl<g\".5&ƿf7eLr4 %1Bh獉BW:y5}v[dSȂm9(B ,8{ºAtiPׇ K6 ]UhGC̐31N XUK`ʡkFJ.tqSʥYp}gb {D$RۇUX2`Ͱ!I9pĖ_jO`N"E= !hP_#q첎:-W-4 $P/Rul{y{mxJ@j^D–1;-:{x$7W?+ʂ%o *BEaK4Tn~0|0 gq9^b^f`pwnMapȁdg"SYwvXϓxsXlM5B)݁E9e0BG>h'oT6e*TOI>/^=Mœ V÷p\FBNi@ { a; F8 xo Ϋt7 >6kZVp fxc49O3ȿ:c]Ɔ5_k"4sc"),jo, = V @b +u{%Vr$)2z^;-/4n2n!P Py)D $3 6 .GT0z;6K':wi#1#SV6ҢX=^|97ge>~I}0"Vع9N4Vc}VLSu\{Yުycy~X{fÎ"f_W<uŗ3Hdž Aٛˇ 4$0EQTIO`***@n-[A .*l{3{:taO6b`vv'8ur>{4FVg >w`CuFo<7/(f&/dMj @KhUO9U[Fت[UUEUΪpOy}; qO]Õ a[Ky)$})-~>lUUPV"֥`ď. sG HP*KZqjSy%#͠fLvj> 3U6n͛{6N0͋faۭwmgk^/{YtM8ۓɁN$3&Nc#r(R|9R\qHջ6l&ͺ$J+)S1 HTL'(ä`U'K$\061ƜS-k\tՐV}U9un*U.d㘩[E7KNbS-nKM= *)LF}N6&:M;E-nc.n\.fc("mmbЍPQ}#P'ТOnI!}1G-h(OU))Vejg29)PjZ*I <][d@ak0/=V^0_Wl᠎6(BFh .`C|o9:َVZY!]%hߝCS̝!F>5BG̅ζ?1{,b*LohO^\VS)Y.Pm ,AN d<%'B* [e5L sĀ̴)[h. ,ZյȨ(Q Hp@:zyFUׅz#}CمRyx{Q9:U6x}U UQpk&nlW\I.fAFzH+P B}6BU{1&JoT@Yh>Jo}U_>bzs >agQϦû 3:uo7n;( T !BN] WЅs0Kfkbf;8 (ntC m\kp`nF$4PUbŐ_t<; ^!v:bw@DNgM@,X@* (djE (, ,PQAUEEX(X *b-lX HH& ~B(jc|X;.ۀNBwF^t|~ ۊclc`:x?"zD>m֕K,0אPmaa*G6s.(r0m%h@tmtwRU>aXF1cEDUUDTEUDUUDDDTEDTEDTEDUTDEDUDUUUUDUUUUUUDUTEDTEUwšI?T|?p.` #x'wDX\B4mǵ1ց}%}6rq9 };,SʖTQL(ck bxT DFٍgcx"%T-bt. A P+DB+OYL{@:AX c >Bewsa2,^xcdmS#w'I#쾶q#x]C qx[],4@1L(FT!e!+Mi,d=H^jCJk`CfI-$!6-j[Zz'4"(;"E C|` B|pbV`KA,fa GwXx0U^! + xr2 RrtYuy!uK Qd*؛'7Y&u1Awyx2K)p$v)@,XxZcu4,8b* #arWY ։2'wzfnF;K$!0Tvf'3n̿ G0,`\r2/{v#ⓨ6jXSAeHh σA^2@pgxtHK0;#zG$[Kim-L?ZOᚑd7Ss%2O5T^z5JѓFԫJ:mv/kd$F~77ǹYKJ!mi%U~Jnz? occb "[6"It '\u&} lT$lH3>눍m~|Z%,S8s!cr^P\@ R.P8]kC5Z gIUhY%HZP?֊$A-߃CyBFLs6ǹj!CD32#+%l¼j~-vs(Q v5<=(0QB}S4PՈV@Xp!E7 8'1w(⟈&sHca@5$9QlN{1`* v :M\8`0 0x}hwI4*rfo $H$a$ 2  ~ԃ ͠㐑qӁ_miZڴmlml+?ZڴUH@Z[FX<),`D>:l*+rN蘅%*F놤Q!h^B(h8#C66)4|ԓ6q7>+M=3;|fF1&͐`J `Z[V5RJ*P'!Őak_'74\b$$YVX\#EU I-5A93ˤHP JCmA9@i2.@$@K儰猒k[ ' q/'s! <8.+[L!XbBpx Ɓ$d$qtܫg<3X3ul ,Rh+݁]`H32@;eRAǓ2Pl.lFCPm ] >wI|OKi+*mlk@;]e9P7[sbR4v3"BL90U}Ubpww6CJF,{!!>TeFW3Id mW\׎W61ô 4CosTY>]}|CDc~$ hHdEvkM'(5kHqUUL I QcM{x DO}=dec&s:<#}!,gqP?Ñ۽ w7 {tɚ8:L$D@A R}gY U4.ـEHP@gcIܛGd1`(lOw:;8U%AO^kG.h@j/@"Av` tD,İX;j B@hFlEf( pw@0N\ kp4bj,&:$ Q=@IrP\BBz@z:>m"S6Z6n-`dNHba\9}QC!4"45>iS[ Z~ 3@0dA΄GoP.2V}0FV6˸ I ^8#w2TH{X*@/ybϾ;w8f%*~_ 3\Xn XI.H< ;`q8Az ݯRUXT$ 8r07ހB)Ih:uݱx(!E6 =x`jB2 *&Wy A{8?F'>43']1nR̓/6K0Wa˧@L,P4*愶XPD#t){a,;?qv)2S#`yw6S_-x45+uXO;x+RF%K2&_x:γϚY.Zn`BN0l`T ╧GN^BD[*.(EU4R>n 0f  =Z.E۾zrlbAChuB> mxmopAj!䆃@gy 8Wυ})}vAq]pQu×v@=jqtP8ai䡘mC |M(nb:Õ{5`dD q !cq6l҄@J Y!',q :-yJ?BkljQmX5Wx#?剜~~-I2Jxk_ZxzF: uSݝJ e :&2 ,QoO7SR~C &b ^RrZŁFuTpEť7b>*jImT!vdV-XyD<E1Q)~=3 {yKЈrE#]=4DBgZ7[H;kbp&`F?ҬO6.}4|q\'LJ h B_՘  Hqlu`#`ȬON}Nk-M@5n8,d"I#1s/~nyee8 ? JppҜ`<,BBBNk:s=TOsgbnB\*110 Cd11 E BhTxֶ?K(dq'kh_I´հ""pIۆX,{+?Oes{'^4uQLP9;GY,WeVr=zleP$@CCʣ60B54UׂvĹg,.kˁG(/drOg1X mv 9^IpwO>( A75m^?p=ߴj18`lS_{ d`?q@~''k1iI!HrZ,>+w)06ó!_U?[2%UP!(;2"A{CG>1+ ,+@crUF#ܩ]w]E/S{àK37a*%_M:Hü Ԕ)ZN@*R7;,餃bDOc)V*?^ϐk}N(w@V oCHW5 D"G|[YQ*X?j%dsN9&ю=Q5K"tM`S<++-$Yż`A3׾!mǕ;psӉp0Exx/;Yz-ipj&)XDP)'<ϭ2>gzp1G8:[uMQ8 |%/jU o< *wqc}]poPd<,NEݥ T^WeP ˦1f @H ;l/fFQ/ T'tpQ IW C[q6vVH*s`jYh(# ;Z:`o"?<-uedf.O{~;0=1? @c0M1.rR, _lkv:Гގ.;qN (e;jDՀ,"3E#F*>*'N(/$ڷu]0"'.IDָqg*!D$V@l4.%DEz:nrhOt:QVD]hpJȅP-mXD93*"( )Ҁ+Is( U!BǮY;pUXV{0x+i1'kĤAސ߱h]gZ0JMI i#"*l%.硅 FuxtЂ `Ԁ PT C'ߗHwAhh$JTESer_z?U`}s ]龭ToiKjS~2 ^ΞFxhK3N/ɿfU3J*͛:Kp\${gr~FH4o i $&ы{t??q㔱y=z ѧ.w60b` .ϘBwݽ4$kL>9wvpߓ6B\ >0Ɉye)=o@>I#H#ȕ[[gȠÃm!%-xP>zV6z,\oNH:׾jiQΘX.yPDOj 6BCפĖÅ\ h ,nO饣fܳ?Cxw+< `Ɲ0+48Q+ԭ|hᒰR&U-glɟf C|jA5BX>Io@H:J's͠DgܴlQ O^/g73YLOD `XalxAP8E6 !45jA5m'Q!* PhRg,VI# ]8 h F= n ٝ|Ӣ@CtL8lXAXN ! 0Ofnh0 W<P2ƆO?@zu vyM c]~᩺?}VYŞ՟a;{)*%-%V(t:c^W\&\2QF2srRc ʇ.rТhX}U;{sbګ!9ү{4mM!&`@潤|0l`@TXk>kwj}m1kb=T蹓ЈAbY?દmIOmnv;kuPwgrF!O}?F?! 2 k\*0v8ԓ3U#3 s}`qOOPuh" xrdZr0j$.,+%@(L inlGXXu&WюӪ ?-SCJB^ip}_#SSØQQ(1EA%pDɹ0CFGO鼫>c_slRU=<נ6(m=4AH:r?Kf"#.'CÝݞCوKC9-i$L0@e}}?bĿi0 Hy"xzS]!|l%"JL<K+M$5 @Q1ȹtËw2Tۘ7w4d)قYRriQ A4J5({ߟeR>@F "(@Q3D#Q }.UymqQe!c" ZC _Ow\o `DH jmuϧ3C1g|d%ck#@]wmv8Ҷ$ET;#%s*3/>{=]Ӏ{ 3P ~]~1" jfHk4㚙QT$?O/0HѧZZ*S.?7C ,Xj5raw3aF9pYvVGMQAA (Jhzf?> kJyRWs).#+IwUelGRcm_ht aOOBcб d8Td<.agSphnM6"0oLW{KĂ:t6QZZt>,/(9ږBΌL/~w!FP`cn2yv]$"1MSdMs@"r&ujoc ,F?X8ώ#L_KD{ f>m $Ny$VPNg':4f%`JB=wm.".֑ U{no0'%]=pd¥ –E] 3׆"iH<{dwC#< [cP",`/KāA6ۄ!$"l::GZݞ?[]`a lьI3ψx) d{׵&0{G:"?IPNR%3%`2),c/qd'ɚ2gy ~QV0!(TZWa]O\鵐~ԟP9pL-yR7>?/yI1_͠Cj*=C]mf!iŤrlrMU$M xzdD}㗧r?x:ĂdE)3։A`ފkF< # e}٤$TLWaa07y .sGH Rphek8=xoPw]gڇluiS'/D]_OE`v/P EoR|[j /A?4;%$9h&>wtV$d@,\鿾djPm2H (v'ui+ 8Met3 <_`8OHr=x~'+GMJ=X^b" lё2[_ yvMX\=ѿF:d:$*HnzvwYM_Ca׹Q+4M~>,y?Clp|-!NhZ ­b `Ho̖}V?E}k3Ƨx})&:r?mF(Xwd n%t5E0HhF,uqW맸|R濍C Sjq.}: E pjT`Hd3r wACg$uۨ`A1ya2qɀ?>&1?Ƞ|2%֛uE 8ލbPW8  u &_V|["FYY ŤIL=,9HjNF6V`W\a>-}8&wF R6$hM!MQ۬Z08N 8|#BebϠA r'&mEd}B: jQ FPPU%. (W HyQH(- *8I@)OϦPk@r.}1?NT.8&}, ᆿyO8&}!(&>zn[nЊ }2|xWTx*"fk612q_%V*U :15E9"%W;i|5+R"nf!]@DȞ -f%=Ad[;^ }>%ڻ6Ա껮cO]:Q3X[՜lelK^ lka^`.7pVDVG\:gRN吊78I+=?6003G?>coaϳk] ^Uif : .~",J"wd&zuxWVhʵ~aň"9R?wࡱCog/wAd.;{'͜(@|)K-xxekozsqP>wj:-YWq?}+P/nR>gjpLI%~x or&QSh8|$$vB A_PvX+C'Rѹ_kt6$WoPSvDC`8aƱD-ﱆCvҟ}}I6Wc7?N* =2})Uh<'LMl9і|_Uv G2jR84k]bO(s/r~h[RnTc8%$I7UlS{nFs|#)C| ̋4iPAYA>xA^vv RL3l(,`9dj kmkbfh͸!^j>z?/ԟT}@j@YN ڧ~(}][Xf?SvS(D7ۏC~ޢ0p  97F qrwrTF4B{FhB%cv|*4]5 f'y*%"U I7X}bYR%P_n67UTҽI:u3" auX0/d;E̤io%IQEt 7׍mlmi0dL\Mdԯ_sL'j[Q!uaSXU!ٚ{*Gsi߈x1A8;/7OhH<`t︬pxj=ͺs-}ߴ͎29׈>}ok8lQpTqju`tDY pXWj7A Z4 bWy&~~u@Ǫ99 (MQ'0$gEZ,XJH8Ё}T2` `ulA>nRDT )1„giTXڹ%Wbs>A{L "uZ0L98DTY4Oi=/{N'+T`tO+ ܕ0/6 E8eW&ZrkmhVD1\W\ kj )ρՁt`#goBMu? 4ytƍW#JҲi^,@`^@vr;Ib; lf}bji⪼SPIu3)Cǚ}{_#WKyV2DuZAZьddT /]T?w՗Ay+~a/T&h_OCam`T$[idBW@6Ƨ=( عG*md1R#jјmT 7FbD믊Qv88ԁ7Uc'ָdm5u7V0W xx0f1ݺf G~׾@+~!͠;?(&"t[`re4 /ё!u!Fp ) ECn=w ` <4DdK4 R f3RT8~|Xa{lWUGqZ‰F0uGc QX |lObΎ1I!i2c6rg :2"?]7'gMlT[`R u[_+ހm0RQb~}\jWĆ3mm Q[3\ZNZ8zQz:5ZT`O/v1>2sR{5cP7&wDPhh|ct>W3KYh!'úDmX~c&>! ?t<mDZ.`$ #:H5u&#HQD 5d躂sJxZcRC)k Oo(0`M&2o׾[k8\Otr1򐧭bgϾE%oMkp 30g1YȓR{>ь{7{Ft'IA*gΞm@O {\~֯2+(ECԶs~[s:P[G0[go/B-4Os*cdM7 kVCHؤ>bؾD~dP|y{O/$dY2TQ@C!E`T|$IDx ģB@!i ],?H~x9GgzI mBn0JmLl/tMGOϠ] $ *Y0" b$U2(~}]t?[U)!b~Y 4BaY1}meװy0.c/L@\CnƁ7 zTQ]v`_CBWUr5]E'`1A۲fQ`"bfhF<%EUoZLkX%651{:qDHC?S?qYo)Pgv>zL4`L9spAژ3皑 d39sbd\ å]g!Ӓ% LAI 3@UmW#w_U]Xh+--Yxu^/@lBHr`f'H1+7Hf{{i fI 6\l1\{:oO?'"p,U(#<|m'|#x[m=E^_W@bc.,_Xg57n^R6G b.ץㄹݳ>?쁒|SrE8P#