# HG changeset patch # User xiomara # Date 1184966525 0 # Node ID bf1d8af0651fbe007469656f244dc28a456ff767 # Parent 64ed597c0ad3b8b87d7d7c40411ba216e72c04a5 [svn] Load openjdk/jdk7/b16 into jdk/trunk. diff -r 64ed597c0ad3 -r bf1d8af0651f README-builds.html --- a/README-builds.html Thu Jul 05 23:47:33 2007 +0000 +++ b/README-builds.html Fri Jul 20 21:22:05 2007 +0000 @@ -516,7 +516,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH.. + ALT_BINARY_PLUGS_PATH..
  • Install the @@ -566,7 +566,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH. + ALT_BINARY_PLUGS_PATH.
  • Install the @@ -657,7 +657,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH.. + ALT_BINARY_PLUGS_PATH..
  • Install the @@ -745,7 +745,7 @@ the OpenJDK site, install the bundle, and make sure you set - ALT_CLOSED_JDK_IMPORT_PATH + ALT_BINARY_PLUGS_PATH to the root of this installation. @@ -1256,7 +1256,7 @@ j2se/src/share/lib/security/cacerts. -
    ALT_CLOSED_JDK_IMPORT_PATH
    +
    ALT_BINARY_PLUGS_PATH
    The location of the binary plugs installation. See Binary Plugs for more information. diff -r 64ed597c0ad3 -r bf1d8af0651f control/make/Makefile --- a/control/make/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/control/make/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -80,12 +80,12 @@ # # DEBUG_NAME is fastdebug or debug # ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix -# The resulting j2sdk-image is copied into the product OUTPUTDIR as subdir -# of $(OUTPUTDIR)/j2sdk-debug-image. With the name debug or fastdebug. -# When the product build INSTALL step happens, it will create a -# jdk-*-debug-** bundle (tar or zip) that includes whatever is in -# $(OUTPUTDIR)/j2sdk-debug-image, and since it uses subdirs, untar'ing -# these bundles will not clobber the product bits. +# The resulting j2sdk-image is used by the install makefiles to create a +# debug install bundle jdk-*-debug-** bundle (tar or zip) +# which will install in the debug or fastdebug subdirectory of the +# normal product install area. +# The install process needs to know what the DEBUG_NAME is, so +# look for INSTALL_DEBUG_NAME in the install rules. # COMMON_DEBUG_FLAGS= \ @@ -101,12 +101,6 @@ generic_debug_build: @$(ECHO) $@ build started: `$(DATE) '+%y-%m-%d %H:%M'` $(MAKE) $(COMMON_DEBUG_FLAGS) setup build - $(RM) -r $(OUTPUTDIR)/j2sdk-debug-image/$(DEBUG_NAME) - $(MKDIR) -p $(OUTPUTDIR)/j2sdk-debug-image/$(DEBUG_NAME) - ( $(CD) $(OUTPUTDIR)-$(DEBUG_NAME)/j2sdk-image && \ - $(TAR) cf - * ) | \ - ( $(CD) $(OUTPUTDIR)/j2sdk-debug-image/$(DEBUG_NAME) && \ - $(TAR) xf - ) @$(ECHO) $@ build finished: `$(DATE) '+%y-%m-%d %H:%M'` debug_build: @@ -123,6 +117,12 @@ all:: debug_build endif +ifeq ($(BUILD_J2SE), true) + ifeq ($(BUNDLE_RULES_AVAILABLE), true) + all:: openjdk-binary-plugs-bundles + endif +endif + ifeq ($(BUILD_INSTALL), true) all :: $(INSTALL) clobber:: install-clobber @@ -327,10 +327,10 @@ " ################################################################ -# Source bundling +# Source and binary plug bundling ################################################################ -ifeq ($(SOURCE_BUNDLE_RULES_AVAILABLE), true) - include $(SOURCE_BUNDLE_RULES) +ifeq ($(BUNDLE_RULES_AVAILABLE), true) + include $(BUNDLE_RULES) endif ################################################################ diff -r 64ed597c0ad3 -r bf1d8af0651f control/make/common/Defs.gmk --- a/control/make/common/Defs.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/control/make/common/Defs.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -195,9 +195,6 @@ $(shell if [ -r $1 ]; then $(ECHO) true; else $(ECHO) false; fi) endef -SOURCE_BUNDLE_RULES = $(CONTROL_TOPDIR)/make/closed/source-bundles.gmk -SOURCE_BUNDLE_RULES_AVAILABLE := $(call MkExists,$(SOURCE_BUNDLE_RULES)) - HOTSPOT_SRC_AVAILABLE := $(call MkExists,$(HOTSPOT_TOPDIR)/make/Makefile) ifndef BUILD_HOTSPOT ifdef ALT_HOTSPOT_IMPORT_PATH @@ -250,6 +247,30 @@ endif endif +# Do we build the source and openjdk binary plug bundles? +BUNDLE_RULES = $(CONTROL_TOPDIR)/make/closed/bundles.gmk +BUNDLE_RULES_AVAILABLE := $(call MkExists,$(BUNDLE_RULES)) + +# Current things we do NOT build for OPENJDK +ifdef OPENJDK + BUILD_MOTIF = false + BUILD_DEPLOY = false + BUILD_INSTALL = false + BUILD_SPONSORS = false + BUNDLE_RULES_AVAILABLE := false + # These could be over-ridden on the command line or in environment + ifndef SKIP_FASTDEBUG_BUILD + SKIP_FASTDEBUG_BUILD = true + endif + ifndef SKIP_DEBUG_BUILD + SKIP_DEBUG_BUILD = true + endif + ifndef SKIP_COMPARE_IMAGES + SKIP_COMPARE_IMAGES = true + endif +endif + +# Many reasons why we would want to skip the comparison to previous jdk ifndef SKIP_COMPARE_IMAGES ifeq ($(BUILD_J2SE), false) SKIP_COMPARE_IMAGES = true @@ -265,18 +286,15 @@ endif endif +# Select defaults if these are not set to true or false ifndef SKIP_DEBUG_BUILD SKIP_DEBUG_BUILD=true endif - ifndef SKIP_FASTDEBUG_BUILD - ifdef OPENJDK - SKIP_FASTDEBUG_BUILD=true - else - SKIP_FASTDEBUG_BUILD=false - endif + SKIP_FASTDEBUG_BUILD=false endif +# Output directory for hotspot build HOTSPOT_DIR = $(ABS_OUTPUTDIR)/hotspot # The MESSAGE, WARNING and ERROR files are used to store sanity check and diff -r 64ed597c0ad3 -r bf1d8af0651f control/make/install-rules.gmk --- a/control/make/install-rules.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/control/make/install-rules.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -37,6 +37,8 @@ # put the generated patch in their own place in OUTPUTDIR INSTALL_OUTPUTDIR = $(ABS_OUTPUTDIR) +INSTALL_DEBUG_NAME=fastdebug + INSTALL_BUILD_TARGETS = sanity all INSTALL_BUILD_ARGUMENTS = \ EXTERNALSANITYCONTROL=true \ @@ -47,15 +49,8 @@ ALT_BASE_IMAGE_ZIP=$(ALT_BASE_IMAGE_ZIP) \ ALT_BASE_IMAGE_DIR=$(ALT_BASE_IMAGE_DIR) \ ALT_NEW_IMAGE_DIR=$(ALT_NEW_IMAGE_DIR) \ - ALT_BUNDLE_DATE=$(BUNDLE_DATE) - -ifeq ($(DEBUG_NAME), debug) -INSTALL_BUILD_ARGUMENTS += VARIANT=DBG -endif - -ifeq ($(DEBUG_NAME), fastdebug) -INSTALL_BUILD_ARGUMENTS += VARIANT=DBG FASTDEBUG=true -endif + ALT_BUNDLE_DATE=$(BUNDLE_DATE) \ + INSTALL_DEBUG_NAME=$(INSTALL_DEBUG_NAME) install: install-build @@ -78,7 +73,7 @@ fi endif -installer: +installer: prime_debug_area ifeq ($(BUILD_INSTALL), true) if [ -r $(INSTALL_TOPDIR)/make/installer/Makefile ]; then \ ( $(CD) $(INSTALL_TOPDIR)/make/installer; $(MAKE) all $(INSTALL_BUILD_ARGUMENTS) ); \ @@ -90,7 +85,7 @@ ($(CD) $(INSTALL_TOPDIR)/make; $(MAKE) clobber $(INSTALL_BUILD_ARGUMENTS)) endif -install-sanity:: prime_debug_area +install-sanity:: ifeq ($(BUILD_INSTALL), true) ($(CD) $(INSTALL_TOPDIR)/make; $(MAKE) sanity $(INSTALL_BUILD_ARGUMENTS)) endif @@ -101,11 +96,12 @@ # # Install process seems to always want SOMETHING in this debug image area prime_debug_area: - @$(MKDIR) -p $(OUTPUTDIR)/j2sdk-debug-image/fastdebug + @$(MKDIR) -p $(OUTPUTDIR)-$(INSTALL_DEBUG_NAME)/j2sdk-image ###################################### # Rules for making the install ###################################### .PHONY: install install-build install-clobber install-sanity \ - install-freshen update-installer update-patchgen installer + install-freshen update-installer update-patchgen installer \ + prime_debug_area diff -r 64ed597c0ad3 -r bf1d8af0651f control/make/jprt.config --- a/control/make/jprt.config Thu Jul 05 23:47:33 2007 +0000 +++ b/control/make/jprt.config Fri Jul 20 21:22:05 2007 +0000 @@ -1,28 +1,28 @@ #!echo "This is not a shell script" ############################################################################# # -#Copyright 2006-2007 Sun Microsystems, Inc. All Rights Reserved. -#DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# Copyright 2006-2007 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -#This code is free software; you can redistribute it and/or modify it -#under the terms of the GNU General Public License version 2 only, as -#published by the Free Software Foundation. Sun designates this -#particular file as subject to the "Classpath" exception as provided -#by Sun in the LICENSE file that accompanied this code. +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Sun designates this +# particular file as subject to the "Classpath" exception as provided +# by Sun in the LICENSE file that accompanied this code. # -#This code is distributed in the hope that it will be useful, but WITHOUT -#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -#version 2 for more details (a copy is included in the LICENSE file that -#accompanied this code). +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). # -#You should have received a copy of the GNU General Public License version -#2 along with this work; if not, write to the Free Software Foundation, -#Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # -#Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -#CA 95054 USA or visit www.sun.com if you need additional information or -#have any questions. +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. # ############################################################################# # @@ -32,6 +32,7 @@ # ALT_BOOTDIR # ALT_SLASH_JAVA # ALT_JDK_IMPORT_PATH +# OPENJDK # Windows Only: # PATH # VS71COMNTOOLS @@ -39,18 +40,23 @@ # ROOTDIR # # Output variable settings: -# make Full path to GNU make +# make Full path to GNU make +# compiler_path Path to compiler bin directory +# compiler_name Unique name of this compiler # # Output environment variables: # PATH # ALT_COMPILER_PATH +# OPENJDK only: +# ALT_CLOSED_JDK_IMPORT_PATH +# ALT_JDK_DEVTOOLS_DIR # Windows Only: # ALT_MSDEVTOOLS_PATH # ALT_DEVTOOLS_PATH (To avoid the C:/UTILS default) # LIB # INCLUDE # -# With JDK6 or newer, most settings will be found via ALT_SLASH_JAVA or +# After JDK6, most settings will be found via ALT_SLASH_JAVA or # by way of other system environment variables. If this was JDK5 # or an older JDK, you might need to export more ALT_* variables. # @@ -87,10 +93,18 @@ slashjava="${ALT_SLASH_JAVA}" jdk_import="${ALT_JDK_IMPORT_PATH}" +jdk_devtools="${slashjava}/devtools" + # Check input dirMustExist "${bootdir}" ALT_BOOTDIR dirMustExist "${slashjava}" ALT_SLASH_JAVA dirMustExist "${jdk_import}" ALT_JDK_IMPORT_PATH + +# Use the JDK import for now (FIXME: use the binary plugs?) +if [ "${OPENJDK}" = true ] ; then + ALT_CLOSED_JDK_IMPORT_PATH="${jdk_import}" + export ALT_CLOSED_JDK_IMPORT_PATH +fi # Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise. osname=`uname -s` @@ -105,7 +119,8 @@ fi # Get the SS11 compilers into path (make sure it matches ALT setting) - compiler_path=${slashjava}/devtools/${solaris_arch}/SUNWspro/SS11/bin + compiler_path=${jdk_devtools}/${solaris_arch}/SUNWspro/SS11/bin + compiler_name=SS11 ALT_COMPILER_PATH="${compiler_path}" export ALT_COMPILER_PATH dirMustExist "${compiler_path}" ALT_COMPILER_PATH @@ -122,7 +137,7 @@ if [ ! -f ${make} ] ; then make=/opt/sfw/bin/gmake if [ ! -f ${make} ] ; then - make=${slashjava}/devtools/${solaris_arch}/bin/gnumake + make=${jdk_devtools}/${solaris_arch}/bin/gnumake fi fi fileMustExist "${make}" make @@ -142,6 +157,7 @@ # Get the compilers into path (make sure it matches ALT setting) compiler_path=/usr/bin + compiler_name=usr_bin ALT_COMPILER_PATH="${compiler_path}" export ALT_COMPILER_PATH dirMustExist "${compiler_path}" ALT_COMPILER_PATH @@ -158,6 +174,13 @@ fileMustExist "${make}" make umask 002 + + # Linux platform may be old, use motif files from the devtools area + if [ "${OPENJDK}" = true ] ; then + ALT_JDK_DEVTOOLS_DIR="${jdk_devtools}" + export ALT_JDK_DEVTOOLS_DIR + fi + else @@ -188,7 +211,7 @@ unixcommand_path="${mkshome}/mksnt" path4sdk="${unixcommand_path}" dirMustExist "${unixcommand_path}" ALT_UNIXCOMMAND_PATH - devtools_path="${slashjava}/devtools/win32/bin" + devtools_path="${jdk_devtools}/win32/bin" path4sdk="${devtools_path};${path4sdk}" # Normally this need not be set, but on Windows it's default is C:/UTILS ALT_DEVTOOLS_PATH="${devtools_path}" @@ -225,6 +248,7 @@ msdevtools_path="${msdev_root}/bin" vc7_root="${vs_root}/Vc7" compiler_path="${vc7_root}/bin" + compiler_name=VS2003 platform_sdk="${vc7_root}/PlatformSDK" # LIB and INCLUDE must use ; as a separator include4sdk="${vc7_root}/atlmfc/include" @@ -253,6 +277,7 @@ platform_sdk=`${dosname} "C:/Program Files/Microsoft Platform SDK/"` fi compiler_path="${platform_sdk}/Bin/win64/x86/AMD64" + compiler_name=VS2005_PSDK msdevtools_path="${platform_sdk}/Bin" # LIB and INCLUDE must use ; as a separator include4sdk="${platform_sdk}/Include" diff -r 64ed597c0ad3 -r bf1d8af0651f control/make/sanity-rules.gmk --- a/control/make/sanity-rules.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/control/make/sanity-rules.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -45,16 +45,21 @@ sanity:: j2se-sanity endif -ifeq ($(BUILD_INSTALL), true) - sanity:: install-sanity -endif +# Only need these sanity rules when not doing a debug build +ifeq ($(DEBUG_NAME),) + + ifeq ($(BUILD_INSTALL), true) + sanity:: install-sanity + endif -ifeq ($(BUILD_SPONSORS), true) - sanity:: sponsors-sanity -endif + ifeq ($(BUILD_SPONSORS), true) + sanity:: sponsors-sanity + endif -ifneq ($(SKIP_COMPARE_IMAGES), true) - sanity:: compare-images-sanity + ifneq ($(SKIP_COMPARE_IMAGES), true) + sanity:: compare-images-sanity + endif + endif sanity:: post-sanity diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/Makefile --- a/j2se/make/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -325,6 +325,11 @@ endif # +# Binary Plug rules and macros +# +include $(BUILDDIR)/common/BinaryPlugs.gmk + +# # Get top level sccs_get rule # include $(BUILDDIR)/common/Rules-SCCS.gmk diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/README-builds.html --- a/j2se/make/README-builds.html Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/README-builds.html Fri Jul 20 21:22:05 2007 +0000 @@ -516,7 +516,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH.. + ALT_BINARY_PLUGS_PATH..
  • Install the @@ -566,7 +566,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH. + ALT_BINARY_PLUGS_PATH.
  • Install the @@ -657,7 +657,7 @@
  • Install the Binary Plugs, set - ALT_CLOSED_JDK_IMPORT_PATH.. + ALT_BINARY_PLUGS_PATH..
  • Install the @@ -745,7 +745,7 @@ the OpenJDK site, install the bundle, and make sure you set - ALT_CLOSED_JDK_IMPORT_PATH + ALT_BINARY_PLUGS_PATH to the root of this installation. @@ -1256,7 +1256,7 @@ j2se/src/share/lib/security/cacerts.
  • -
    ALT_CLOSED_JDK_IMPORT_PATH
    +
    ALT_BINARY_PLUGS_PATH
    The location of the binary plugs installation. See Binary Plugs for more information. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/BinaryPlugs.gmk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/make/common/BinaryPlugs.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,641 @@ +# +# Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Sun designates this +# particular file as subject to the "Classpath" exception as provided +# by Sun in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +######################################################################## + +# Definitions for openjdk plugs (used by both import and export) + +# Names of native shared libraries + +PLUG_T2K_LIBRARY=$(LIB_PREFIX)t2k.$(LIBRARY_SUFFIX) +PLUG_DCPR_LIBRARY=$(LIB_PREFIX)dcpr.$(LIBRARY_SUFFIX) +PLUG_JSOUND_LIBRARY=$(LIB_PREFIX)jsound.$(LIBRARY_SUFFIX) +PLUG_JSOUNDDS_LIBRARY=$(LIB_PREFIX)jsoundds.$(LIBRARY_SUFFIX) +PLUG_JSOUNDALSA_LIBRARY=$(LIB_PREFIX)jsoundalsa.$(LIBRARY_SUFFIX) +PLUG_LIBRARY_NAMES = \ + $(PLUG_T2K_LIBRARY) \ + $(PLUG_DCPR_LIBRARY) \ + $(PLUG_JSOUND_LIBRARY) + +# Platform specific ones + +ifeq ($(PLATFORM),windows) + # On Windows 32bit include the DirectSound library. + # See /make/javax/sound/Makefile & subdirs Makefiles for more details. + ifeq ($(ARCH), i586) + # include DirectSound implementation + PLUG_LIBRARY_NAMES += $(PLUG_JSOUNDDS_LIBRARY) + endif # i586 + PLUG_LIB_NAMES = t2k.lib +endif # windows + +ifeq ($(PLATFORM),linux) + # On Linux include the ALSA library + PLUG_LIBRARY_NAMES += $(PLUG_JSOUNDALSA_LIBRARY) +endif # linux + +# Security jar file names, relative to jre/lib directory. + +PLUG_JARNAMES = \ + security/US_export_policy.jar \ + security/local_policy.jar \ + jce.jar \ + ext/sunjce_provider.jar + +# Sub-directory where native shared libraries are located (e.g. jre/bin or...) + +PLUG_LOCATION_SUBDIR=$(ARCH_VM_SUBDIR) + +# Explicit classfile lists + +# WARNING: These classlists will not work with pattern rules, only used in +# shell commands. +# The \$$ patterns will fail in pattern rules, which want $$, +# but the $$ fails in shell commands. +# The shell commands are more important. +# Also, the $1 pattern in these names causes problems with the +# GNU make define feature, so you can't use these in define's. + +PLUG_JMF_CLASS_NAMES = \ +com/sun/jmx/snmp/SnmpDataTypeEnums.class \ +com/sun/jmx/snmp/SnmpDefinitions.class \ +com/sun/jmx/snmp/SnmpOid.class \ +com/sun/jmx/snmp/SnmpOidDatabase.class \ +com/sun/jmx/snmp/SnmpOidDatabaseSupport.class \ +com/sun/jmx/snmp/SnmpOidRecord.class \ +com/sun/jmx/snmp/SnmpOidTable.class \ +com/sun/jmx/snmp/SnmpOidTableSupport.class \ +com/sun/jmx/snmp/SnmpParameters.class \ +com/sun/jmx/snmp/SnmpPduPacket.class \ +com/sun/jmx/snmp/SnmpPeer.class \ +com/sun/jmx/snmp/SnmpTimeticks.class \ +com/sun/jmx/snmp/SnmpVarBind.class \ +com/sun/jmx/snmp/SnmpVarBindList.class \ +com/sun/jmx/snmp/Timestamp.class \ +com/sun/jmx/snmp/daemon/SendQ.class \ +com/sun/jmx/snmp/daemon/SnmpInformRequest.class \ +com/sun/jmx/snmp/daemon/SnmpQManager.class \ +com/sun/jmx/snmp/daemon/SnmpRequestCounter.class \ +com/sun/jmx/snmp/daemon/SnmpResponseHandler.class \ +com/sun/jmx/snmp/daemon/SnmpSendServer.class \ +com/sun/jmx/snmp/daemon/SnmpSession.class \ +com/sun/jmx/snmp/daemon/SnmpSocket.class \ +com/sun/jmx/snmp/daemon/SnmpTimerServer.class \ +com/sun/jmx/snmp/daemon/WaitQ.class + +PLUG_SOUND_CLASS_NAMES = \ +com/sun/media/sound/AbstractDataLine.class \ +com/sun/media/sound/AbstractLine.class \ +com/sun/media/sound/AbstractMidiDevice\$$AbstractReceiver.class \ +com/sun/media/sound/AbstractMidiDevice\$$BasicTransmitter.class \ +com/sun/media/sound/AbstractMidiDevice\$$TransmitterList.class \ +com/sun/media/sound/AbstractMidiDevice.class \ +com/sun/media/sound/AbstractMidiDeviceProvider\$$Info.class \ +com/sun/media/sound/AbstractMidiDeviceProvider.class \ +com/sun/media/sound/AbstractMixer.class \ +com/sun/media/sound/AbstractPlayer.class \ +com/sun/media/sound/AiffFileFormat.class \ +com/sun/media/sound/AiffFileReader.class \ +com/sun/media/sound/AiffFileWriter.class \ +com/sun/media/sound/AlawCodec\$$AlawCodecStream.class \ +com/sun/media/sound/AlawCodec.class \ +com/sun/media/sound/AuFileFormat.class \ +com/sun/media/sound/AuFileReader.class \ +com/sun/media/sound/AuFileWriter.class \ +com/sun/media/sound/AutoClosingClip.class \ +com/sun/media/sound/AutoConnectSequencer.class \ +com/sun/media/sound/CircularBuffer.class \ +com/sun/media/sound/DataPusher.class \ +com/sun/media/sound/DirectAudioDevice\$$1.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectBAOS.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectClip.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDL\$$Balance.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDL\$$Gain.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDL\$$Mute.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDL\$$Pan.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDL.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectDLI.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectSDL.class \ +com/sun/media/sound/DirectAudioDevice\$$DirectTDL.class \ +com/sun/media/sound/DirectAudioDevice.class \ +com/sun/media/sound/DirectAudioDeviceProvider\$$DirectAudioDeviceInfo.class \ +com/sun/media/sound/DirectAudioDeviceProvider.class \ +com/sun/media/sound/EventDispatcher\$$ClipInfo.class \ +com/sun/media/sound/EventDispatcher\$$EventInfo.class \ +com/sun/media/sound/EventDispatcher\$$LineMonitor.class \ +com/sun/media/sound/EventDispatcher.class \ +com/sun/media/sound/FastShortMessage.class \ +com/sun/media/sound/FastSysexMessage.class \ +com/sun/media/sound/HeadspaceInstrument.class \ +com/sun/media/sound/HeadspaceMixer\$$1.class \ +com/sun/media/sound/HeadspaceMixer\$$MidiLine.class \ +com/sun/media/sound/HeadspaceMixer\$$MidiLineInfo.class \ +com/sun/media/sound/HeadspaceMixer\$$MixerInfo.class \ +com/sun/media/sound/HeadspaceMixer\$$MixerReverbControl\$$MixerReverbType.class \ +com/sun/media/sound/HeadspaceMixer\$$MixerReverbControl.class \ +com/sun/media/sound/HeadspaceMixer.class \ +com/sun/media/sound/HeadspaceMixerProvider.class \ +com/sun/media/sound/HeadspaceSample.class \ +com/sun/media/sound/HeadspaceSoundbank.class \ +com/sun/media/sound/HsbParser.class \ +com/sun/media/sound/JDK13Services\$$1.class \ +com/sun/media/sound/JDK13Services\$$ProviderCache.class \ +com/sun/media/sound/JDK13Services.class \ +com/sun/media/sound/JSSecurityManager\$$1.class \ +com/sun/media/sound/JSSecurityManager\$$2.class \ +com/sun/media/sound/JSSecurityManager\$$3.class \ +com/sun/media/sound/JSSecurityManager\$$4.class \ +com/sun/media/sound/JSSecurityManager\$$5.class \ +com/sun/media/sound/JSSecurityManager\$$6.class \ +com/sun/media/sound/JSSecurityManager\$$7.class \ +com/sun/media/sound/JSSecurityManager.class \ +com/sun/media/sound/JavaSoundAudioClip\$$DirectBAOS.class \ +com/sun/media/sound/JavaSoundAudioClip.class \ +com/sun/media/sound/MidiInDevice\$$1.class \ +com/sun/media/sound/MidiInDevice\$$MidiInTransmitter.class \ +com/sun/media/sound/MidiInDevice.class \ +com/sun/media/sound/MidiInDeviceProvider\$$1.class \ +com/sun/media/sound/MidiInDeviceProvider\$$MidiInDeviceInfo.class \ +com/sun/media/sound/MidiInDeviceProvider.class \ +com/sun/media/sound/MidiOutDevice\$$MidiOutReceiver.class \ +com/sun/media/sound/MidiOutDevice.class \ +com/sun/media/sound/MidiOutDeviceProvider\$$1.class \ +com/sun/media/sound/MidiOutDeviceProvider\$$MidiOutDeviceInfo.class \ +com/sun/media/sound/MidiOutDeviceProvider.class \ +com/sun/media/sound/MidiUtils\$$TempoCache.class \ +com/sun/media/sound/MidiUtils.class \ +com/sun/media/sound/MixerClip\$$1.class \ +com/sun/media/sound/MixerClip\$$MixerClipApplyReverbControl.class \ +com/sun/media/sound/MixerClip\$$MixerClipGainControl.class \ +com/sun/media/sound/MixerClip\$$MixerClipMuteControl.class \ +com/sun/media/sound/MixerClip\$$MixerClipPanControl.class \ +com/sun/media/sound/MixerClip\$$MixerClipSampleRateControl.class \ +com/sun/media/sound/MixerClip.class \ +com/sun/media/sound/MixerMidiChannel.class \ +com/sun/media/sound/MixerSequencer\$$1.class \ +com/sun/media/sound/MixerSequencer\$$ControllerVectorElement.class \ +com/sun/media/sound/MixerSequencer\$$MixerSequencerInfo.class \ +com/sun/media/sound/MixerSequencer\$$RecordingTrack.class \ +com/sun/media/sound/MixerSequencer.class \ +com/sun/media/sound/MixerSequencerProvider.class \ +com/sun/media/sound/MixerSourceLine\$$1.class \ +com/sun/media/sound/MixerSourceLine\$$MixerSourceLineApplyReverbControl.class \ +com/sun/media/sound/MixerSourceLine\$$MixerSourceLineGainControl.class \ +com/sun/media/sound/MixerSourceLine\$$MixerSourceLineMuteControl.class \ +com/sun/media/sound/MixerSourceLine\$$MixerSourceLinePanControl.class \ +com/sun/media/sound/MixerSourceLine\$$MixerSourceLineSampleRateControl.class \ +com/sun/media/sound/MixerSourceLine.class \ +com/sun/media/sound/MixerSynth\$$1.class \ +com/sun/media/sound/MixerSynth\$$MixerSynthInfo.class \ +com/sun/media/sound/MixerSynth\$$SynthReceiver.class \ +com/sun/media/sound/MixerSynth.class \ +com/sun/media/sound/MixerSynthProvider.class \ +com/sun/media/sound/MixerThread.class \ +com/sun/media/sound/PCMtoPCMCodec\$$PCMtoPCMCodecStream.class \ +com/sun/media/sound/PCMtoPCMCodec.class \ +com/sun/media/sound/Platform.class \ +com/sun/media/sound/PortMixer\$$1.class \ +com/sun/media/sound/PortMixer\$$BoolCtrl\$$BCT.class \ +com/sun/media/sound/PortMixer\$$BoolCtrl.class \ +com/sun/media/sound/PortMixer\$$CompCtrl\$$CCT.class \ +com/sun/media/sound/PortMixer\$$CompCtrl.class \ +com/sun/media/sound/PortMixer\$$FloatCtrl\$$FCT.class \ +com/sun/media/sound/PortMixer\$$FloatCtrl.class \ +com/sun/media/sound/PortMixer\$$PortInfo.class \ +com/sun/media/sound/PortMixer\$$PortMixerPort.class \ +com/sun/media/sound/PortMixer.class \ +com/sun/media/sound/PortMixerProvider\$$PortMixerInfo.class \ +com/sun/media/sound/PortMixerProvider.class \ +com/sun/media/sound/Printer.class \ +com/sun/media/sound/RealTimeSequencer\$$1.class \ +com/sun/media/sound/RealTimeSequencer\$$ControllerListElement.class \ +com/sun/media/sound/RealTimeSequencer\$$DataPump.class \ +com/sun/media/sound/RealTimeSequencer\$$PlayThread.class \ +com/sun/media/sound/RealTimeSequencer\$$RealTimeSequencerInfo.class \ +com/sun/media/sound/RealTimeSequencer\$$RecordingTrack.class \ +com/sun/media/sound/RealTimeSequencer\$$SequencerReceiver.class \ +com/sun/media/sound/RealTimeSequencer\$$SequencerTransmitter.class \ +com/sun/media/sound/RealTimeSequencer.class \ +com/sun/media/sound/RealTimeSequencerProvider.class \ +com/sun/media/sound/ReferenceCountingDevice.class \ +com/sun/media/sound/RmfFileReader.class \ +com/sun/media/sound/SMFParser.class \ +com/sun/media/sound/SimpleInputDevice\$$1.class \ +com/sun/media/sound/SimpleInputDevice\$$InputDeviceDataLine.class \ +com/sun/media/sound/SimpleInputDevice\$$InputDevicePort.class \ +com/sun/media/sound/SimpleInputDevice\$$InputDevicePortInfo.class \ +com/sun/media/sound/SimpleInputDevice.class \ +com/sun/media/sound/SimpleInputDeviceProvider\$$1.class \ +com/sun/media/sound/SimpleInputDeviceProvider\$$InputDeviceInfo.class \ +com/sun/media/sound/SimpleInputDeviceProvider.class \ +com/sun/media/sound/StandardMidiFileReader.class \ +com/sun/media/sound/StandardMidiFileWriter.class \ +com/sun/media/sound/SunCodec.class \ +com/sun/media/sound/SunFileReader.class \ +com/sun/media/sound/SunFileWriter.class \ +com/sun/media/sound/Toolkit.class \ +com/sun/media/sound/UlawCodec\$$UlawCodecStream.class \ +com/sun/media/sound/UlawCodec.class \ +com/sun/media/sound/WaveFileFormat.class \ +com/sun/media/sound/WaveFileReader.class \ +com/sun/media/sound/WaveFileWriter.class + +PLUG_AWT_CLASS_NAMES = \ +java/awt/color/CMMException.class \ +java/awt/color/ColorSpace.class \ +java/awt/color/ICC_ColorSpace.class \ +java/awt/color/ICC_Profile\$$1.class \ +java/awt/color/ICC_Profile\$$2.class \ +java/awt/color/ICC_Profile\$$3.class \ +java/awt/color/ICC_Profile.class \ +java/awt/color/ICC_ProfileGray.class \ +java/awt/color/ICC_ProfileRGB.class \ +java/awt/image/BandedSampleModel.class \ +java/awt/image/ColorConvertOp.class \ +java/awt/image/ComponentSampleModel.class \ +java/awt/image/DataBuffer\$$1.class \ +java/awt/image/DataBuffer.class \ +java/awt/image/DataBufferByte.class \ +java/awt/image/DataBufferInt.class \ +java/awt/image/DataBufferShort.class \ +java/awt/image/DataBufferUShort.class \ +java/awt/image/MultiPixelPackedSampleModel.class \ +java/awt/image/Raster.class \ +java/awt/image/RenderedImage.class \ +java/awt/image/SampleModel.class \ +java/awt/image/SinglePixelPackedSampleModel.class \ +java/awt/image/WritableRaster.class \ +java/awt/image/WritableRenderedImage.class \ +java/awt/image/renderable/ContextualRenderedImageFactory.class \ +java/awt/image/renderable/ParameterBlock.class \ +java/awt/image/renderable/RenderContext.class \ +java/awt/image/renderable/RenderableImage.class \ +java/awt/image/renderable/RenderableImageOp.class \ +java/awt/image/renderable/RenderableImageProducer.class \ +java/awt/image/renderable/RenderedImageFactory.class + +PLUG_DC_CLASS_NAMES = \ +sun/dc/path/FastPathProducer.class \ +sun/dc/path/PathConsumer.class \ +sun/dc/path/PathError.class \ +sun/dc/path/PathException.class \ +sun/dc/pr/PRError.class \ +sun/dc/pr/PRException.class \ +sun/dc/pr/PathDasher.class \ +sun/dc/pr/PathFiller.class \ +sun/dc/pr/PathStroker.class \ +sun/dc/pr/Rasterizer\$$ConsumerDisposer.class \ +sun/dc/pr/Rasterizer.class + +# Class list temp files (used by both import and export of plugs) + +PLUG_TEMPDIR=$(ABS_TEMPDIR)/plugs +PLUG_CLASS_AREAS = jmf sound awt dc +PLUG_CLISTS = $(PLUG_CLASS_AREAS:%=$(PLUG_TEMPDIR)/%.clist) + +# Create jargs file command + +define plug-create-jargs +@$(prep-target) +$(SED) -e "s@^@-C $(CLASSDESTDIR) @" $< > $@ +endef # plug-create-clist-jargs + +# Create clist (class name list) and jargs file (input to jar) +# Need these files to avoid long command lines which fail on some systems. + +$(PLUG_TEMPDIR)/jmf.clist: + @$(prep-target) + @for i in $(PLUG_JMF_CLASS_NAMES) ; do \ + $(ECHO) "$$i" >> $@; \ + done +$(PLUG_TEMPDIR)/sound.clist: + @$(prep-target) + @for i in $(PLUG_SOUND_CLASS_NAMES) ; do \ + $(ECHO) "$$i" >> $@ ; \ + done +$(PLUG_TEMPDIR)/awt.clist: + @$(prep-target) + @for i in $(PLUG_AWT_CLASS_NAMES) ; do \ + $(ECHO) "$$i" >> $@ ; \ + done +$(PLUG_TEMPDIR)/dc.clist: + @$(prep-target) + @for i in $(PLUG_DC_CLASS_NAMES) ; do \ + $(ECHO) "$$i" >> $@ ; \ + done +$(PLUG_TEMPDIR)/all.clist: $(PLUG_CLISTS) + @$(prep-target) + $(CAT) $(PLUG_CLISTS) > $@ +$(PLUG_TEMPDIR)/jmf.jargs: $(PLUG_TEMPDIR)/jmf.clist + $(plug-create-jargs) +$(PLUG_TEMPDIR)/sound.jargs: $(PLUG_TEMPDIR)/sound.clist + $(plug-create-jargs) +$(PLUG_TEMPDIR)/awt.jargs: $(PLUG_TEMPDIR)/awt.clist + $(plug-create-jargs) +$(PLUG_TEMPDIR)/dc.jargs: $(PLUG_TEMPDIR)/dc.clist + $(plug-create-jargs) +$(PLUG_TEMPDIR)/all.jargs: $(PLUG_TEMPDIR)/all.clist + $(plug-create-jargs) + +# +# Specific to OPENJDK import of binary plugs +# + +ifdef OPENJDK + +# Import + +PLUG_IMPORT_DIR=$(BINARY_PLUGS_PATH) +PLUG_IMPORT_JARFILE=$(BINARY_PLUGS_JARFILE) + +# Import file command + +define import-binary-plug-file +@$(ECHO) "PLUG IMPORT: $(@F)" +$(install-file) +endef # import-binary-plug-file + +# Import classes command + +define import-binary-plug-classes +@$(MKDIR) -p $(CLASSDESTDIR) +@$(CAT) $1 | $(SED) -e 's/^/PLUG IMPORT: /' +($(CD) $(CLASSDESTDIR) && $(JAR_BOOT) xf $(PLUG_IMPORT_JARFILE) @$1) +endef # import-binary-plug-classes + +# Import lib jar files (only if needed) +# NOTE: % pattern rules didn't work for some reason) + +$(LIBDIR)/security/US_export_policy.jar: \ + $(PLUG_IMPORT_DIR)/jre/lib/security/US_export_policy.jar + $(import-binary-plug-file) +$(LIBDIR)/security/local_policy.jar: \ + $(PLUG_IMPORT_DIR)/jre/lib/security/local_policy.jar + $(import-binary-plug-file) +$(LIBDIR)/jce.jar: \ + $(PLUG_IMPORT_DIR)/jre/lib/jce.jar + $(import-binary-plug-file) +$(LIBDIR)/ext/sunjce_provider.jar: \ + $(PLUG_IMPORT_DIR)/jre/lib/ext/sunjce_provider.jar + $(import-binary-plug-file) + +# Import specific area classes (the classes are always created) + +import-binary-plug-jmf-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/jmf.clist + $(call import-binary-plug-classes,$(PLUG_TEMPDIR)/jmf.clist) +import-binary-plug-sound-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/sound.clist + $(call import-binary-plug-classes,$(PLUG_TEMPDIR)/sound.clist) +import-binary-plug-awt-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/awt.clist + $(call import-binary-plug-classes,$(PLUG_TEMPDIR)/awt.clist) +import-binary-plug-dc-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/dc.clist + $(call import-binary-plug-classes,$(PLUG_TEMPDIR)/dc.clist) + +# Import all classes from the jar file + +import-binary-plug-jar: \ + import-binary-plug-jmf-classes \ + import-binary-plug-sound-classes \ + import-binary-plug-awt-classes \ + import-binary-plug-dc-classes + +# Import native libraries + +$(LIB_LOCATION)/$(PLUG_T2K_LIBRARY): \ + $(PLUG_IMPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_T2K_LIBRARY) + $(import-binary-plug-file) +ifeq ($(PLATFORM),windows) +$(LIBFILES_DIR)/t2k.lib: $(PLUG_IMPORT_DIR)/libfiles/t2k.lib + $(import-binary-plug-file) +endif # windows +$(LIB_LOCATION)/$(PLUG_DCPR_LIBRARY): \ + $(PLUG_IMPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_DCPR_LIBRARY) + $(import-binary-plug-file) +$(LIB_LOCATION)/$(PLUG_JSOUND_LIBRARY): \ + $(PLUG_IMPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUND_LIBRARY) + $(import-binary-plug-file) +$(LIB_LOCATION)/$(PLUG_JSOUNDALSA_LIBRARY): \ + $(PLUG_IMPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUNDALSA_LIBRARY) + $(import-binary-plug-file) +$(LIB_LOCATION)/$(PLUG_JSOUNDDS_LIBRARY): \ + $(PLUG_IMPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUNDDS_LIBRARY) + $(import-binary-plug-file) + +# Rules only used by lower level makefiles + +ifeq ($(PLATFORM),windows) +import-binary-plug-t2k-library: \ + $(LIBFILES_DIR)/t2k.lib $(LIB_LOCATION)/$(PLUG_T2K_LIBRARY) + $(RM) $(OBJDIR)/t2k.lib + $(CP) $(LIBFILES_DIR)/t2k.lib $(OBJDIR) +else # !windows +import-binary-plug-t2k-library: \ + $(LIB_LOCATION)/$(PLUG_T2K_LIBRARY) +endif # windows +import-binary-plug-dcpr-library: \ + $(LIB_LOCATION)/$(PLUG_DCPR_LIBRARY) +import-binary-plug-jsound-library: \ + $(LIB_LOCATION)/$(PLUG_JSOUND_LIBRARY) +import-binary-plug-jsoundalsa-library: \ + $(LIB_LOCATION)/$(PLUG_JSOUNDALSA_LIBRARY) +import-binary-plug-jsoundds-library: \ + $(LIB_LOCATION)/$(PLUG_JSOUNDDS_LIBRARY) + +# Binary plug start/complete messages + +import-binary-plugs-started: + @$(ECHO) "BinaryPlugs import started: `date`" + @$(ECHO) "BINARY_PLUGS_PATH=$(BINARY_PLUGS_PATH)" +import-binary-plugs-completed: + @$(ECHO) "BinaryPlugs import completed: `date`" + +# Import lib files (only if they don't exist already) + +import-binary-plugs-libs: \ + $(PLUG_JARNAMES:%=$(LIBDIR)/%) \ + $(PLUG_LIBRARY_NAMES:%=$(LIB_LOCATION)/%) + +# Import everything + +import-binary-plugs: \ + import-binary-plugs-started \ + import-binary-plugs-libs \ + import-binary-plug-jar \ + import-binary-plugs-completed + +# All these targets are phony (no filenames) + +.PHONY: import-binary-plugs-started \ + import-binary-plugs-completed \ + import-binary-plugs-libs \ + import-binary-plugs \ + import-binary-plug-jar \ + import-binary-plug-jmf-classes \ + import-binary-plug-sound-classes \ + import-binary-plug-awt-classes \ + import-binary-plug-dc-classes \ + import-binary-plug-t2k-library \ + import-binary-plug-dcpr-library \ + import-binary-plug-jsound-library \ + import-binary-plug-jsoundalsa-library \ + import-binary-plug-jsoundds-library + +else # !OPENJDK + +# +# Specific to exporting binary plugs for OPENJDK (e.g. OPENJDK is NOT defined) +# + +# Export names (See make/common/Defs.gmk for BINARY_PLUGS_JARNAME definition) + +PLUG_EXPORT_DIRNAME=openjdk-binary-plugs-image +PLUG_EXPORT_DIR=$(OUTPUTDIR)/$(PLUG_EXPORT_DIRNAME) +PLUG_EXPORT_JARFILE=$(PLUG_EXPORT_DIR)/jre/lib/$(BINARY_PLUGS_JARNAME) + +# Export file command + +define export-binary-plug-file +@$(ECHO) "PLUG EXPORT: $(@F)" +$(install-file) +endef # export-binary-plug-file + +# OpenJDK Binary Plug License + +$(PLUG_EXPORT_DIR)/LICENSE: $(CLOSED_SHARE_SRC)/doc/openjdk/binary-plugs/LICENSE + $(export-binary-plug-file) +export-binary-plugs-license: $(PLUG_EXPORT_DIR)/LICENSE + +# Create jar file of plug classes (always created) + +$(PLUG_EXPORT_JARFILE): $(PLUG_TEMPDIR)/all.clist $(PLUG_TEMPDIR)/all.jargs + @$(prep-target) + @$(ECHO) "PLUG EXPORT: $(@F)" + @$(CAT) $(PLUG_TEMPDIR)/all.clist | $(SED) -e 's/^/PLUG EXPORT: /' + $(JAR_BOOT) cf $@ @$(PLUG_TEMPDIR)/all.jargs +export-binary-plugs-jar: $(PLUG_EXPORT_JARFILE) + +# Export lib jar files (only if needed) + +$(PLUG_EXPORT_DIR)/jre/lib/security/US_export_policy.jar: \ + $(LIBDIR)/security/US_export_policy.jar + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/jre/lib/security/local_policy.jar: \ + $(LIBDIR)/security/local_policy.jar + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/jre/lib/jce.jar: \ + $(LIBDIR)/jce.jar + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/jre/lib/ext/sunjce_provider.jar: \ + $(LIBDIR)/ext/sunjce_provider.jar + $(export-binary-plug-file) + +# Export native libraries + +$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_T2K_LIBRARY): \ + $(LIB_LOCATION)/$(PLUG_T2K_LIBRARY) + $(export-binary-plug-file) +ifeq ($(PLATFORM),windows) + $(RM) -r $(PLUG_EXPORT_DIR)/libfiles/t2k.lib + $(MKDIR) -p $(PLUG_EXPORT_DIR)/libfiles + $(CP) $(LIBFILES_DIR)/t2k.lib $(PLUG_EXPORT_DIR)/libfiles +endif # windows +$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_DCPR_LIBRARY): \ + $(LIB_LOCATION)/$(PLUG_DCPR_LIBRARY) + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUND_LIBRARY): \ + $(LIB_LOCATION)/$(PLUG_JSOUND_LIBRARY) + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUNDDS_LIBRARY): \ + $(LIB_LOCATION)/$(PLUG_JSOUNDDS_LIBRARY) + $(export-binary-plug-file) +$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/$(PLUG_JSOUNDALSA_LIBRARY): \ + $(LIB_LOCATION)/$(PLUG_JSOUNDALSA_LIBRARY) + $(export-binary-plug-file) + +# Export binary plug start/complete messages + +export-binary-plugs-started: + @$(ECHO) "BinaryPlugs export started: `date`" + @$(ECHO) "PLUG_EXPORT_DIR=$(PLUG_EXPORT_DIR)" + $(RM) -r $(PLUG_EXPORT_DIR) + @$(MKDIR) -p $(PLUG_EXPORT_DIR) + @$(MKDIR) -p $(PLUG_TEMPDIR) +export-binary-plugs-completed: + @$(RM) -r $(PLUG_TEMPDIR) + @$(ECHO) "BinaryPlugs export completed: `date`" + +# Export lib files (only if they don't exist already) + +export-binary-plugs-libs: \ + $(PLUG_JARNAMES:%=$(PLUG_EXPORT_DIR)/jre/lib/%) \ + $(PLUG_LIBRARY_NAMES:%=$(PLUG_EXPORT_DIR)/$(PLUG_LOCATION_SUBDIR)/%) + +# Export everything + +export-binary-plugs: \ + export-binary-plugs-started \ + export-binary-plugs-libs \ + export-binary-plugs-license \ + export-binary-plugs-jar \ + export-binary-plugs-completed + +# All these targets are phony (no filenames) + +.PHONY: export-binary-plugs-started \ + export-binary-plugs-license \ + export-binary-plugs-jar \ + export-binary-plugs-libs \ + export-binary-plugs-completed \ + export-binary-plugs + +# Rules that test the export and import of plugs (only when you can export) + +TEST_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-testing-plugs +TEST_PLUG_COPY=$(TEST_OUTPUTDIR)/$(PLUG_EXPORT_DIRNAME)-testcopy + +# Run export-binary-plugs first, then use this rule to test an import + +test-binary-plugs: $(TEST_PLUG_COPY) + $(RM) -r $(TEST_OUTPUTDIR)/$(PLUG_EXPORT_DIRNAME) + $(MKDIR) -p $(TEST_OUTPUTDIR) + @$(ECHO) "Testing import of plugs" + ($(CD) $(J2SE_TOPDIR)/make && \ + $(MAKE) OPENJDK=true \ + ALT_OUTPUTDIR=$(TEST_OUTPUTDIR) \ + ALT_JDK_IMPORT_PATH=$(JDK_IMPORT_PATH) \ + ALT_BINARY_PLUGS_PATH=$(TEST_PLUG_COPY) \ + import-binary-plugs ) + $(RM) -r $(TEST_OUTPUTDIR) + @$(ECHO) "Testing of plugs was successful" + +$(TEST_PLUG_COPY): + @$(ECHO) "Creating test plug copy" + $(RM) -r $@ + $(MKDIR) -p $(@D) + $(CP) -r -p $(PLUG_EXPORT_DIR) $@ + +.PHONY: test-binary-plugs + +endif # !OPENJDK + diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/Defs.gmk --- a/j2se/make/common/Defs.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/Defs.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -108,88 +108,63 @@ # and the JDK internal interfaces to these are reasonably stable this is not # a significant problem. But we do need to provide a way to locate them, # including a way to point to a new one when there have been changes. -# Use a similar mechanism as used to locate the VM. Allow overrides -# of the path (useful for builds of multiple architectures), and -# to specify the precise directory, useful for single architecture builds -# which is what most external developers will likely prefer. +# +# If you have a formal binary plugs download, set ALT_BINARY_PLUGS_PATH +# to the location. +# (Optionally you can set ALT_CLOSED_JDK_IMPORT_PATH to point to the latest +# build JDK, or last promotion for this JDK version, but will not work +# on windows). # -# But since these have to have been built at some point, they probably -# should be built under the OPENJDK target with access to the closed sources -# To that end a mechanism is provided to override this behaviour and -# the libraries will be built, rather than looking for pre-built ones. -# Although these variables are then available to the Makefiles for all -# libraries, only the ones that specify USE_CLOSED_LIB will copy them. -# The actual copying is according to rules in Library.gmk -# The logic ends up being a bit complicated but important goals are that -# - internally all platforms can be built without setting anything in the case -# that the previous promoted build can be used -# - externally a developer has to set just one variable to point either to a -# complete JRE or more probably to a directory containing just the required -# native closed libs and a jar file containing just the closed classes. -# In this latter case, ALT_CLOSED_LIB_DIR is the location of the required -# files: native libraries and a jar file containing compiled java classes. -# If necessary the latter can be separately overridden -# Usage notes : -# ALT_CLOSED_BUILD_PATH points to a directory containing builds of -# multiple architectures named using the standard conventions -# This is useful for build scripts that need to build multiple architectures -# of the OpenJDK against multiple builds of the 'production' JDK. -# This defaults to the location of the current promoted build. -# -# ALT_CLOSED_JDK_IMPORT_PATH points to the top-level of a specific platform -# JDK image. +# As the OPENJDK is built, the binary plugs are used instead of building the +# libraries. +# Individual Makefiles that specify USE_BINARY_PLUG_LIBRARY, will get +# the binary plug copy (or a copy from a previously built JDK). # -# ALT_CLOSED_LIB_DIR points to a directory containing precisely the -# binaries needed to build. This is created by the target -# gnumake closed-binaries-dir -# after a full JDK build is completed. This creates a directory at -# the top-level of the build called 'closed' The directory will contain -# shared objects and a jar archive named 'closed.jar' +# See common/BinaryPlugs.gmk for more information. +# +# Usage notes: # -# ALT_CLOSED_JAR_FILE is probably rarely needed. It can be used -# to identify the exact jar file to be used. -# The precedence is that -# 1. ALT_CLOSED_JAR_FILE overrides any other location of the classes -# 2. ALT_CLOSED_LIB_DIR overrides any other location of the shared objects. -# 3. In the absence of the first two, ALT_CLOSED_JDK_IMPORT_PATH is -# used to locate classes and shared objects -# 4. In the additional absence of ALT_CLOSED_JDK_IMPORT_PATH, its -# location is derived from ALT_CLOSED_BUILD_PATH -# 5. If none of these are specified then the current promoted build -# location is presumed, and this will work only if you have access to -# /java/re via the standard NFS or windows drive mounts. +# ALT_BINARY_PLUGS_JARFILE is probably rarely needed. It can be used +# to identify the exact jar file to be used for all closed classes.. +# +# ALT_BINARY_PLUGS_PATH points to a directory containing precisely the +# binaries needed to build. +# +# ALT_BINARY_PLUGS_SET points to a directory containing binary plug dirs +# multiple architectures named using the standard conventions +# This is useful for build scripts that need to build multiple architectures +# of the OpenJDK. +# +# ALT_CLOSED_JDK_IMPORT_PATH points to the top-level of a specific platform +# JDK image. +# +# The precedence is that +# 1. ALT_BINARY_PLUGS_JARFILE overrides any other location of the classes +# 2. ALT_BINARY_PLUGS_PATH overrides all locations of classes and libraries +# 3. ALT_BINARY_PLUGS_SET is used to find a ALT_BINARY_PLUGS_PATH +# 4. ALT_CLOSED_JDK_IMPORT_PATH is used to locate classes and libraries +# + +# Always needed, defines the name of the imported/exported jarfile +BINARY_PLUGS_JARNAME = rt-closed.jar + ifdef OPENJDK - - ifdef ALT_CLOSED_BUILD_PATH - CLOSED_BUILD_PATH = $(ALT_CLOSED_BUILD_PATH) - else - CLOSED_BUILD_PATH = $(PROMOTED_BUILD_BINARIES) - endif - ifdef ALT_CLOSED_JDK_IMPORT_PATH - CLOSED_JDK_IMPORT_PATH = $(ALT_CLOSED_JDK_IMPORT_PATH) - else - CLOSED_JDK_IMPORT_PATH = $(CLOSED_BUILD_PATH)/$(PLATFORM)-$(ARCH) + CLOSED_JDK_IMPORT_PATH = $(ALT_CLOSED_JDK_IMPORT_PATH) + BINARY_PLUGS_PATH = $(CLOSED_JDK_IMPORT_PATH) + BINARY_PLUGS_JARFILE = $(CLOSED_JDK_IMPORT_PATH)/jre/lib/rt.jar endif - - ifdef ALT_CLOSED_LIB_DIR - CLOSED_LIB_DIR = $(ALT_CLOSED_LIB_DIR) - else - ifeq ($(PLATFORM), windows) - CLOSED_LIB_DIR = $(CLOSED_JDK_IMPORT_PATH)/jre/bin - else - CLOSED_LIB_DIR = $(CLOSED_JDK_IMPORT_PATH)/jre/lib/$(LIBARCH) - endif + ifdef ALT_BINARY_PLUGS_SET + BINARY_PLUGS_SET = $(ALT_BINARY_PLUGS_SET) + BINARY_PLUGS_PATH = $(BINARY_PLUGS_SET)/$(PLATFORM)-$(ARCH) + BINARY_PLUGS_JARFILE = $(BINARY_PLUGS_PATH)/jre/lib/$(BINARY_PLUGS_JARNAME) endif - - ifdef ALT_CLOSED_JAR_FILE - CLOSED_JAR_FILE = $(ALT_CLOSED_JAR_FILE) - else - ifdef ALT_CLOSED_LIB_DIR - CLOSED_JAR_FILE = $(ALT_CLOSED_LIB_DIR)/closed.jar - else - CLOSED_JAR_FILE = $(CLOSED_JDK_IMPORT_PATH)/jre/lib/rt.jar - endif + ifdef ALT_BINARY_PLUGS_PATH + BINARY_PLUGS_PATH = $(ALT_BINARY_PLUGS_PATH) + BINARY_PLUGS_JARFILE = $(BINARY_PLUGS_PATH)/jre/lib/$(BINARY_PLUGS_JARNAME) + endif + ifdef ALT_BINARY_PLUGS_JARFILE + BINARY_PLUGS_JARFILE = $(ALT_BINARY_PLUGS_JARFILE) endif endif # OPENJDK @@ -293,6 +268,8 @@ # for generated libraries LIBDIR = $(OUTPUTDIR)/lib ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib +# Optional place to save the windows .lib files +LIBFILES_DIR = $(OUTPUTDIR)/libfiles # for ext jre files EXTDIR = $(LIBDIR)/ext # for generated include files @@ -798,9 +775,9 @@ # this should be moved into Defs-.gmk..... ifeq ($(PLATFORM), windows) - VERSION_DEFINES = -DRELEASE="\"$(RELEASE)\"" -DFULL_VERSION="\"$(FULL_VERSION)\"" + VERSION_DEFINES = -DRELEASE="\"$(RELEASE)\"" else - VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' -DFULL_VERSION='"$(FULL_VERSION)"' + VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' endif # Note: As a rule, GNU Make rules should not appear in any of the @@ -851,18 +828,4 @@ $(install-file) endef -# Install of closed files into an openjdk build image (CLOSED_JDK_IMPORT_PATH) -define install-closed-file -@$(ECHO) "ASSEMBLY_EXCEPTION: $(@F)" -$(install-file) -endef - -# Install closed classes into CLASSDESTDIR (CLOSED_JDK_IMPORT_PATH rt.jar) -# Example: $(call install-closed-classes,files_or_dirs) -define install-closed-classes -$(MKDIR) -p $(CLASSDESTDIR) -($(CD) $(CLASSDESTDIR) && $(JAR_BOOT) xvf $(CLOSED_JAR_FILE) $1) \ - | $(SED) -e "s/^extracted:/ASSEMBLY_EXCEPTION:/" -endef - .PHONY: all build clean clobber diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/Library.gmk --- a/j2se/make/common/Library.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/Library.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -90,7 +90,7 @@ endif # If a Makefile has specified a pre-compiled closed src lib, just copy it. -ifdef USE_CLOSED_LIB +ifdef USE_BINARY_PLUG_LIBRARY COMPILE_IT=false endif @@ -260,22 +260,14 @@ else # COMPILE_IT +# OpenJDK rule is first so any lib is preferentially copied from that location. +ifndef USE_BINARY_PLUG_LIBRARY + # In this case we are just copying the file. - ifneq ($(LIBRARY), fdlibm) # Copies in the file from the JDK_IMPORT_PATH area -# OpenJDK rule is first so any lib is preferentially copied from that location. -ifdef USE_CLOSED_LIB -$(ACTUAL_LIBRARY_DIR)/%: $(CLOSED_LIB_DIR)/% - $(install-closed-file) -ifeq ($(PLATFORM),windows) -$(OBJDIR)/%.lib: $(CLOSED_LIB_DIR)/%.lib - $(install-closed-file) -endif # windows -else $(ACTUAL_LIBRARY_DIR)/%: $(JDK_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/% $(install-import-file) -endif # USE_CLOSED_LIB $(ACTUAL_LIBRARY_DIR)/%: $(JDK_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/native_threads/% $(install-import-file) $(ACTUAL_LIBRARY_DIR)/%: $(JDK_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/headless/% @@ -289,6 +281,8 @@ $(prep-target) endif # fdlibm +endif # USE_BINARY_PLUG_LIBRARY + endif # COMPILE_IT # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/Program.gmk --- a/j2se/make/common/Program.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/Program.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -255,8 +255,10 @@ # this may not be necessary... ifeq ($(PLATFORM), windows) OTHER_CPPFLAGS += -DPROGNAME="\"$(PROGRAM)\"" +VERSION_DEFINES += -DFULL_VERSION="\"$(FULL_VERSION)\"" else OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"' +VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"' endif VERSION_DEFINES += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/Release.gmk --- a/j2se/make/common/Release.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/Release.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -220,9 +220,19 @@ compare-image-jre compare-image-jdk sec-files sec-files-win jgss-files :: @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."; +# +# Export binary plugs if not building OPENJDK +# +ifdef OPENJDK + EXPORT_BINARY_PLUGS = +else # !OPENJDK + EXPORT_BINARY_PLUGS = export-binary-plugs test-binary-plugs +endif # OPENJDK + # Order is important here, trim jre after jdk image is created images:: sanity-images post-sanity-images \ - $(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \ + $(EXPORT_BINARY_PLUGS) \ + $(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \ trim-image-jre trim-image-jdk \ process-image-jre process-image-jdk sec-files sec-files-win jgss-files @@ -230,113 +240,6 @@ image-jre:: initial-image-jre trim-image-jre process-image-jre image-jdk:: initial-image-jdk trim-image-jdk process-image-jdk -ifndef OPENJDK -CLOSED_DIR=$(ABS_OUTPUTDIR)/closed - -ifeq ($(PLATFORM), windows) -LIB1=dcpr.dll -LIB2=t2k.dll -closed-binaries-dir-t2klib: - $(MKDIR) -p $(CLOSED_DIR) - $(CP) $(ABS_OUTPUTDIR)/tmp/sun/sun.font/t2k/$(OBJDIRNAME)/t2k.lib $(CLOSED_DIR) -else -LIB1=libdcpr.so -LIB2=libt2k.so -closed-binaries-dir-t2klib: -endif - -# JavaSound closed libs -closed-binaries-dir-jsound: - -# windows & linux have additional libraries -# see /make/javax/sound/Makefile & subdir's Makefiles for more details -ifeq ($(PLATFORM), windows) - JSOUND_LIB=jsound.dll - # include DirectSound implementation -closed-binaries-dir-jsound: - $(MKDIR) -p $(CLOSED_DIR) - $(CP) $(LIB_LOCATION)/jsoundds.dll $(CLOSED_DIR) -else # !(PLATFORM windows) - JSOUND_LIB=libjsound.so - ifeq ($(PLATFORM), linux) - # include ALSA implementation -closed-binaries-dir-jsound: - $(MKDIR) -p $(CLOSED_DIR) - $(CP) $(LIB_LOCATION)/libjsoundalsa.so $(CLOSED_DIR) - endif # PLATFORM linux -endif # PLATFORM windows - - -CLOSED_CLASSES = \ -sun/dc \ -java/awt/color/CMMException.class \ -java/awt/color/ColorSpace.class \ -java/awt/color/ICC_ColorSpace.class \ -java/awt/color/ICC_Profile\$$1.class \ -java/awt/color/ICC_Profile\$$2.class \ -java/awt/color/ICC_Profile\$$3.class \ -java/awt/color/ICC_Profile.class \ -java/awt/color/ICC_ProfileGray.class \ -java/awt/color/ICC_ProfileRGB.class \ -java/awt/image/BandedSampleModel.class \ -java/awt/image/ColorConvertOp.class \ -java/awt/image/ComponentSampleModel.class \ -java/awt/image/DataBuffer\$$1.class \ -java/awt/image/DataBuffer.class \ -java/awt/image/DataBufferByte.class \ -java/awt/image/DataBufferInt.class \ -java/awt/image/DataBufferShort.class \ -java/awt/image/DataBufferUShort.class \ -java/awt/image/MultiPixelPackedSampleModel.class \ -java/awt/image/Raster.class \ -java/awt/image/RenderedImage.class \ -java/awt/image/SampleModel.class \ -java/awt/image/SinglePixelPackedSampleModel.class \ -java/awt/image/WritableRaster.class \ -java/awt/image/WritableRenderedImage.class \ -java/awt/image/renderable/ContextualRenderedImageFactory.class \ -java/awt/image/renderable/ParameterBlock.class \ -java/awt/image/renderable/RenderableImage.class \ -java/awt/image/renderable/RenderableImageOp.class \ -java/awt/image/renderable/RenderableImageProducer.class \ -java/awt/image/renderable/RenderContext.class \ -java/awt/image/renderable/RenderedImageFactory.class \ -com/sun/jmx/snmp/SnmpDataTypeEnums.class \ -com/sun/jmx/snmp/SnmpDefinitions.class \ -com/sun/jmx/snmp/SnmpOid.class \ -com/sun/jmx/snmp/SnmpOidDatabase.class \ -com/sun/jmx/snmp/SnmpOidDatabaseSupport.class \ -com/sun/jmx/snmp/SnmpOidRecord.class \ -com/sun/jmx/snmp/SnmpOidTable.class \ -com/sun/jmx/snmp/SnmpOidTableSupport.class \ -com/sun/jmx/snmp/SnmpParameters.class \ -com/sun/jmx/snmp/SnmpPduPacket.class \ -com/sun/jmx/snmp/SnmpPeer.class \ -com/sun/jmx/snmp/SnmpTimeticks.class \ -com/sun/jmx/snmp/SnmpVarBind.class \ -com/sun/jmx/snmp/SnmpVarBindList.class \ -com/sun/jmx/snmp/Timestamp.class \ -com/sun/jmx/snmp/daemon/SendQ.class \ -com/sun/jmx/snmp/daemon/SnmpInformRequest.class \ -com/sun/jmx/snmp/daemon/SnmpQManager.class \ -com/sun/jmx/snmp/daemon/SnmpRequestCounter.class \ -com/sun/jmx/snmp/daemon/SnmpResponseHandler.class \ -com/sun/jmx/snmp/daemon/SnmpSendServer.class \ -com/sun/jmx/snmp/daemon/SnmpSession.class \ -com/sun/jmx/snmp/daemon/SnmpSocket.class \ -com/sun/jmx/snmp/daemon/SnmpTimerServer.class \ -com/sun/jmx/snmp/daemon/WaitQ.class \ -com/sun/media/sound - -ABSJAR = $(ABS_BINDIR)/jar -closed-binaries-dir: closed-binaries-dir-t2klib closed-binaries-dir-jsound - $(MKDIR) -p $(CLOSED_DIR) - (cd $(CLASSBINDIR) ; $(ABSJAR) c0f $(CLOSED_DIR)/closed.jar $(CLOSED_CLASSES)) - $(CP) $(LIB_LOCATION)/$(LIB1) $(CLOSED_DIR) - $(CP) $(LIB_LOCATION)/$(LIB2) $(CLOSED_DIR) - $(CP) $(LIB_LOCATION)/$(JSOUND_LIB) $(CLOSED_DIR) -endif - # # Sources we ship in the SDK. # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/Sanity.gmk --- a/j2se/make/common/Sanity.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/Sanity.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -85,7 +85,7 @@ sane-classpath \ sane-java_home \ sane-fonts \ - sane-closed-binaries \ + sane-binary-plugs \ sane-variant \ sane-ld_library_path \ sane-ld_library_path_64 \ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/shared/Sanity-Settings.gmk --- a/j2se/make/common/shared/Sanity-Settings.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/shared/Sanity-Settings.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -122,6 +122,7 @@ ALL_SETTINGS+=$(call addHeading,"Build Directives") +ALL_SETTINGS+=$(call addOptionalSetting,OPENJDK) ALL_SETTINGS+=$(call addOptionalSetting,USE_ONLY_BOOTDIR_TOOLS) ALL_SETTINGS+=$(call addOptionalSetting,USE_HOTSPOT_INTERPRETER_MODE) ALL_SETTINGS+=$(call addOptionalSetting,PEDANTIC) @@ -239,16 +240,28 @@ endif ifdef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,CLOSED_BUILD_PATH) + ALL_SETTINGS+=$(call addHeading,"OPENJDK Import Binary Plug Settings") + ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_JARFILE) + ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_PATH) + ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_SET) ALL_SETTINGS+=$(call addAltSetting,CLOSED_JDK_IMPORT_PATH) - ALL_SETTINGS+=$(call addAltSetting,CLOSED_LIB_DIR) - ALL_SETTINGS+=$(call addAltSetting,CLOSED_JAR_FILE) else + ALL_SETTINGS+=$(call addHeading,"OPENJDK Export Binary Plug Settings") + ALL_SETTINGS+=$(call addRequiredSetting,PLUG_EXPORT_DIRNAME) +endif +ALL_SETTINGS+=$(call addRequiredSetting,PLUG_LIBRARY_NAMES) +ALL_SETTINGS+=$(call addRequiredSetting,PLUG_JARNAMES) +ifeq ($(PLATFORM),windows) + ALL_SETTINGS+=$(call addRequiredSetting,PLUG_LIB_NAMES) +endif + +ifdef OPENJDK ALL_SETTINGS+=$(call addHeading,"Previous JDK Settings") ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_PATH) ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_VERSION) ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_FILE) ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JRE_FILE) + ifdef MASTER_ROOT ALL_SETTINGS+=$(call addHeading,"Control Workspace Settings") ALL_SETTINGS+=$(call addAltSetting,CONTROL_MASTER) @@ -266,5 +279,6 @@ ALL_SETTINGS+=$(call addAltSetting,DEPLOY_TOPDIR) ALL_SETTINGS+=$(call addAltSetting,COPYRIGHT_YEAR) endif + endif diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/common/shared/Sanity.gmk --- a/j2se/make/common/shared/Sanity.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/common/shared/Sanity.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -132,7 +132,7 @@ sane-classpath \ sane-java_home \ sane-fonts \ - sane-closed-binaries \ + sane-binary-plugs \ sane-variant \ sane-ld_library_path \ sane-ld_library_path_64 \ @@ -476,45 +476,17 @@ ###################################################### # If building OPENJDK check pre-built binaries are -# available for closed source components. +# available for binary plug source components. ###################################################### ifdef OPENJDK -sane-closed-binaries: sane-closed-1 sane-closed-2 - -sane-closed-1: - @if [ ! -d $(CLOSED_LIB_DIR) ]; then \ +sane-binary-plugs: + @if [ ! -d "$(BINARY_PLUGS_PATH)" ]; then \ $(ECHO) "ERROR: Can't locate pre-built libraries. \n" \ " Please check your access to \n" \ - " $(CLOSED_LIB_DIR) \n" \ - " and/or check your value of ALT_CLOSED_LIB_DIR. \n" \ - "" >> $(ERROR_FILE); \ - fi - @if [ ! -f $(CLOSED_JAR_FILE) ]; then \ - $(ECHO) "ERROR: Can't locate pre-built libraries. \n" \ - " Please check your access to \n" \ - " $(CLOSED_JAR_FILE) \n" \ - " and/or check your value of ALT_CLOSED_JAR_FILE. \n" \ + " $(BINARY_PLUGS_PATH) \n" \ + " and/or check your value of ALT_BINARY_PLUGS_PATH. \n" \ "" >> $(ERROR_FILE); \ fi - -sane-closed-2: -ifeq ($(PLATFORM), windows) - @if [ ! -f $(CLOSED_LIB_DIR)/t2k.lib ]; then \ - $(ECHO) "ERROR: Can't locate t2k import library. \n" \ - " Please check your access to \n" \ - " $(CLOSED_LIB_DIR)/t2k.lib \n" \ - " and/or check your value of ALT_CLOSED_LIB_DIR. \n" \ - "" >> $(ERROR_FILE); \ - fi -else - @if [ ! -f $(CLOSED_LIB_DIR)/libt2k.so ]; then \ - $(ECHO) "ERROR: Can't locate t2k library. \n" \ - " Please check your access to \n" \ - " $(CLOSED_LIB_DIR)/libt2k.so \n" \ - " and/or check your value of ALT_CLOSED_LIB_DIR. \n" \ - "" >> $(ERROR_FILE); \ - fi -endif endif ###################################################### @@ -816,6 +788,7 @@ ###################################################### # Check for existence of Motif in the bootstrap area ###################################################### +MOTIF_CHECK_FILE=$(MOTIF_INCLUDE)/Xm/AtomMgr.h sane-motif: ifneq ($(PLATFORM), windows) ifdef MOTIF_REQUIRED @@ -838,10 +811,10 @@ fi endif endif - @if [ ! -r $(MOTIF_INCLUDE)/Xm/AccTextT.h ]; then \ + @if [ ! -r $(MOTIF_CHECK_FILE) ]; then \ $(ECHO) "ERROR: You do not have access to valid Motif 2.1 header files. \n" \ " Please check your access to (for example) \n" \ - " $(MOTIF_INCLUDE)/Xm/AccTextT.h \n" \ + " $(MOTIF_CHECK_FILE) \n" \ " and/or check your value of ALT_MOTIF_DIR. \n" \ "" >> $(ERROR_FILE) ; \ fi diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/java/awt/Makefile --- a/j2se/make/java/awt/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/java/awt/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -28,50 +28,22 @@ PRODUCT = sun include $(BUILDDIR)/common/Defs.gmk +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + # # Files # AUTO_FILES_JAVA_DIRS = java/awt sun/awt/geom +# +# Specific to OPENJDK +# ifdef OPENJDK -CLOSED_AWT_CLASSES = \ -java/awt/color/CMMException.class \ -java/awt/color/ColorSpace.class \ -java/awt/color/ICC_ColorSpace.class \ -java/awt/color/ICC_Profile\$$1.class \ -java/awt/color/ICC_Profile\$$2.class \ -java/awt/color/ICC_Profile\$$3.class \ -java/awt/color/ICC_Profile.class \ -java/awt/color/ICC_ProfileGray.class \ -java/awt/color/ICC_ProfileRGB.class \ -java/awt/image/BandedSampleModel.class \ -java/awt/image/ColorConvertOp.class \ -java/awt/image/ComponentSampleModel.class \ -java/awt/image/DataBuffer\$$1.class \ -java/awt/image/DataBuffer.class \ -java/awt/image/DataBufferByte.class \ -java/awt/image/DataBufferInt.class \ -java/awt/image/DataBufferShort.class \ -java/awt/image/DataBufferUShort.class \ -java/awt/image/MultiPixelPackedSampleModel.class \ -java/awt/image/Raster.class \ -java/awt/image/RenderedImage.class \ -java/awt/image/SampleModel.class \ -java/awt/image/SinglePixelPackedSampleModel.class \ -java/awt/image/WritableRaster.class \ -java/awt/image/WritableRenderedImage.class \ -java/awt/image/renderable/ContextualRenderedImageFactory.class \ -java/awt/image/renderable/ParameterBlock.class \ -java/awt/image/renderable/RenderableImage.class \ -java/awt/image/renderable/RenderableImageOp.class \ -java/awt/image/renderable/RenderableImageProducer.class \ -java/awt/image/renderable/RenderContext.class \ -java/awt/image/renderable/RenderedImageFactory.class + +build: import-binary-plug-awt-classes -copy-closed-src-classes: - $(call install-closed-classes,$(CLOSED_AWT_CLASSES)) -build: copy-closed-src-classes -.PHONY: copy-closed-src-classes +include $(BUILDDIR)/common/BinaryPlugs.gmk + endif build: sources properties cursors diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/java/java/FILES_java.gmk --- a/j2se/make/java/java/FILES_java.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/java/java/FILES_java.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -1,23 +1,23 @@ # # Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Sun designates this # particular file as subject to the "Classpath" exception as provided # by Sun in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, # CA 95054 USA or visit www.sun.com if you need additional information or # have any questions. @@ -158,7 +158,6 @@ $(TARGDIR)sun/util/calendar/JulianCalendar.java \ $(TARGDIR)sun/util/calendar/LocalGregorianCalendar.java \ $(TARGDIR)java/util/Currency.java \ - $(TARGDIR)java/util/CurrencyData.java \ $(TARGDIR)java/util/Date.java \ $(TARGDIR)java/util/Dictionary.java \ $(TARGDIR)java/util/EmptyStackException.java \ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/java/java/Makefile --- a/j2se/make/java/java/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/java/java/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -314,27 +314,30 @@ $(RM) -r $(LIBDIR)/$(PROPS) $(TZMAP) # -# Rules to create java/util/CurrencyData.java +# Rules to create lib/currency.data # +CURDATA = $(LIBDIR)/currency.data GENCUROUT = $(TEMPDIR)/GenerateCurrencyData -$(GENSRCDIR)/java/util/CurrencyData.java: \ +build: $(CURDATA) + +$(CURDATA): \ $(BUILDDIR)/tools/GenerateCurrencyData/GenerateCurrencyData.java \ $(SHARE_SRC)/classes/java/util/CurrencyData.properties - @$(prep-target) + $(RM) $(CURDATA) $(RM) -r $(GENCUROUT) $(MKDIR) -p $(GENCUROUT) $(JAVAC_BOOT) -d $(GENCUROUT) \ $(BUILDDIR)/tools/GenerateCurrencyData/GenerateCurrencyData.java - @$(RM) $@.temp $(JAVA_BOOT) -classpath $(GENCUROUT) GenerateCurrencyData \ -o $@.temp \ < $(SHARE_SRC)/classes/java/util/CurrencyData.properties $(MV) $@.temp $@ + $(CHMOD) 444 $@ clean:: - $(RM) $(GENSRCDIR)/java/util/CurrencyData.java + $(RM) $(CURDATA) $(RM) -r $(GENCUROUT) diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/java/redist/Makefile --- a/j2se/make/java/redist/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/java/redist/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -259,23 +259,16 @@ endif # windows endif # INCLUDE_SA -# Internal import files +# +# Specific to OpenJDK building +# ifdef OPENJDK -$(LIBDIR)/jce.jar: \ - $(CLOSED_JDK_IMPORT_PATH)/jre/lib/jce.jar - $(install-closed-file) -$(EXTDIR)/sunjce_provider.jar: \ - $(CLOSED_JDK_IMPORT_PATH)/jre/lib/ext/sunjce_provider.jar - $(install-closed-file) -$(LIBDIR)/security/US_export_policy.jar: \ - $(CLOSED_JDK_IMPORT_PATH)/jre/lib/security/US_export_policy.jar - $(install-closed-file) -$(LIBDIR)/security/local_policy.jar: \ - $(CLOSED_JDK_IMPORT_PATH)/jre/lib/security/local_policy.jar - $(install-closed-file) +include $(BUILDDIR)/common/BinaryPlugs.gmk -else +build: import-binary-plugs + +else # !OPENJDK $(LIBDIR)/jce.jar: \ $(BUILDDIR)/closed/tools/crypto/jce/jce.jar @@ -290,7 +283,7 @@ $(BUILDDIR)/closed/tools/crypto/jce/local_policy.jar $(install-file) -endif #OPENJDK +endif # OPENJDK $(JSUM_CLASSDIR)/AddJsum.class: $(SHARINGDIR)/AddJsum.java @$(prep-target) @@ -303,79 +296,8 @@ $(JAVA_BOOT) -cp $(JSUM_CLASSDIR) AddJsum $(SHARINGDIR)/classlist.$(PLATFORM) $@.temp $(MV) $@.temp $@ -ifdef OPENJDK -# Copy closed source pre-built class files -# We need to do this here because these classes may be referenced by -# other classes which must find them to compile before the make files -# for these packages are invoked -# They are still copied in their actual build directories too, so -# that a local clobber and remake works. -CLOSED_CLASSES = \ -sun/dc \ -java/awt/color/CMMException.class \ -java/awt/color/ColorSpace.class \ -java/awt/color/ICC_ColorSpace.class \ -java/awt/color/ICC_Profile\$$1.class \ -java/awt/color/ICC_Profile\$$2.class \ -java/awt/color/ICC_Profile\$$3.class \ -java/awt/color/ICC_Profile.class \ -java/awt/color/ICC_ProfileGray.class \ -java/awt/color/ICC_ProfileRGB.class \ -java/awt/image/BandedSampleModel.class \ -java/awt/image/ColorConvertOp.class \ -java/awt/image/ComponentSampleModel.class \ -java/awt/image/DataBuffer\$$1.class \ -java/awt/image/DataBuffer.class \ -java/awt/image/DataBufferByte.class \ -java/awt/image/DataBufferInt.class \ -java/awt/image/DataBufferShort.class \ -java/awt/image/DataBufferUShort.class \ -java/awt/image/MultiPixelPackedSampleModel.class \ -java/awt/image/Raster.class \ -java/awt/image/RenderedImage.class \ -java/awt/image/SampleModel.class \ -java/awt/image/SinglePixelPackedSampleModel.class \ -java/awt/image/WritableRaster.class \ -java/awt/image/WritableRenderedImage.class \ -java/awt/image/renderable/ContextualRenderedImageFactory.class \ -java/awt/image/renderable/ParameterBlock.class \ -java/awt/image/renderable/RenderableImage.class \ -java/awt/image/renderable/RenderableImageOp.class \ -java/awt/image/renderable/RenderableImageProducer.class \ -java/awt/image/renderable/RenderContext.class \ -java/awt/image/renderable/RenderedImageFactory.class \ -com/sun/jmx/snmp/SnmpDataTypeEnums.class \ -com/sun/jmx/snmp/SnmpDefinitions.class \ -com/sun/jmx/snmp/SnmpOid.class \ -com/sun/jmx/snmp/SnmpOidDatabase.class \ -com/sun/jmx/snmp/SnmpOidDatabaseSupport.class \ -com/sun/jmx/snmp/SnmpOidRecord.class \ -com/sun/jmx/snmp/SnmpOidTable.class \ -com/sun/jmx/snmp/SnmpOidTableSupport.class \ -com/sun/jmx/snmp/SnmpParameters.class \ -com/sun/jmx/snmp/SnmpPduPacket.class \ -com/sun/jmx/snmp/SnmpPeer.class \ -com/sun/jmx/snmp/SnmpTimeticks.class \ -com/sun/jmx/snmp/SnmpVarBind.class \ -com/sun/jmx/snmp/SnmpVarBindList.class \ -com/sun/jmx/snmp/Timestamp.class \ -com/sun/jmx/snmp/daemon/SendQ.class \ -com/sun/jmx/snmp/daemon/SnmpInformRequest.class \ -com/sun/jmx/snmp/daemon/SnmpQManager.class \ -com/sun/jmx/snmp/daemon/SnmpRequestCounter.class \ -com/sun/jmx/snmp/daemon/SnmpResponseHandler.class \ -com/sun/jmx/snmp/daemon/SnmpSendServer.class \ -com/sun/jmx/snmp/daemon/SnmpSession.class \ -com/sun/jmx/snmp/daemon/SnmpSocket.class \ -com/sun/jmx/snmp/daemon/SnmpTimerServer.class \ -com/sun/jmx/snmp/daemon/WaitQ.class \ -com/sun/media/sound +ifndef OPENJDK -build: openjdkredist -openjdkredist: - $(call install-closed-classes,$(CLOSED_CLASSES)) - -else # (!OPENJDK) # Lucida font files are not included in the OpenJDK distribution. # Get names of font files include FILES.gmk @@ -412,7 +334,7 @@ $(install-file) endif # linux -endif # OPENJDK +endif # !OPENJDK PARTIAL_SECURITY_CLASSFILE_LIST = \ $(CLASSBINDIR)/javax/net/ssl/SSLException.class \ @@ -487,5 +409,5 @@ $(RM) $(IMPORT_LIST) $(RM) $(INTERNAL_IMPORT_LIST) -.PHONY: import_files import_internal_files import_classes openjdkredist +.PHONY: import_files import_internal_files import_classes diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/java/util/FILES_properties.gmk --- a/j2se/make/java/util/FILES_properties.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/java/util/FILES_properties.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -121,6 +121,7 @@ sun/util/resources/CurrencyNames_ca_ES.properties \ sun/util/resources/CurrencyNames_cs_CZ.properties \ sun/util/resources/CurrencyNames_da_DK.properties \ + sun/util/resources/CurrencyNames_de.properties \ sun/util/resources/CurrencyNames_de_AT.properties \ sun/util/resources/CurrencyNames_de_CH.properties \ sun/util/resources/CurrencyNames_de_DE.properties \ @@ -139,6 +140,7 @@ sun/util/resources/CurrencyNames_en_SG.properties \ sun/util/resources/CurrencyNames_en_US.properties \ sun/util/resources/CurrencyNames_en_ZA.properties \ + sun/util/resources/CurrencyNames_es.properties \ sun/util/resources/CurrencyNames_es_AR.properties \ sun/util/resources/CurrencyNames_es_BO.properties \ sun/util/resources/CurrencyNames_es_CL.properties \ @@ -161,6 +163,7 @@ sun/util/resources/CurrencyNames_es_VE.properties \ sun/util/resources/CurrencyNames_et_EE.properties \ sun/util/resources/CurrencyNames_fi_FI.properties \ + sun/util/resources/CurrencyNames_fr.properties \ sun/util/resources/CurrencyNames_fr_BE.properties \ sun/util/resources/CurrencyNames_fr_CA.properties \ sun/util/resources/CurrencyNames_fr_CH.properties \ @@ -171,6 +174,7 @@ sun/util/resources/CurrencyNames_hu_HU.properties \ sun/util/resources/CurrencyNames_in_ID.properties \ sun/util/resources/CurrencyNames_is_IS.properties \ + sun/util/resources/CurrencyNames_it.properties \ sun/util/resources/CurrencyNames_it_CH.properties \ sun/util/resources/CurrencyNames_it_IT.properties \ sun/util/resources/CurrencyNames_lt_LT.properties \ @@ -192,6 +196,7 @@ sun/util/resources/CurrencyNames_sr_BA.properties \ sun/util/resources/CurrencyNames_sr_CS.properties \ sun/util/resources/CurrencyNames_sr_ME.properties \ + sun/util/resources/CurrencyNames_sv.properties \ sun/util/resources/CurrencyNames_sv_SE.properties \ sun/util/resources/CurrencyNames_tr_TR.properties \ sun/util/resources/CurrencyNames_uk_UA.properties diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/javax/sound/Makefile --- a/j2se/make/javax/sound/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/javax/sound/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -23,6 +23,8 @@ # have any questions. # +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + BUILDDIR = ../.. PACKAGE = javax.sound LIBRARY = jsound @@ -77,10 +79,6 @@ FILES_c += $(FILES_engine) $(FILES_$(PLATFORM)) - -# NOTE: don't forget to update /make/common/Release.gmk to copy all additianal -# libraries to "closed" dir (see "closed-binaries-dir" rule) - # # system dependent flags # @@ -157,23 +155,20 @@ FILES_export += $(DAUDIOFILES_export) endif - +# +# Specific to OpenJDK building +# ifdef OPENJDK -# the package is built before new jar utility so we use boot jar -copy-closed-class-files: - $(call install-closed-classes,com/sun/media/sound) +# Plug lib will be copied instead of compiling. +USE_BINARY_PLUG_LIBRARY=true -build: copy-closed-class-files +build: import-binary-plug-sound-classes import-binary-plug-jsound-library -.PHONY: copy-closed-class-files - -# precompiled lib will be copied by the rules in Library.gmk instead of compiling. -USE_CLOSED_LIB=true +include $(BUILDDIR)/common/BinaryPlugs.gmk endif # OPENJDK - # # Include rules # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/javax/sound/jsoundalsa/Makefile --- a/j2se/make/javax/sound/jsoundalsa/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/javax/sound/jsoundalsa/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -23,6 +23,8 @@ # have any questions. # +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + BUILDDIR = ../../.. PACKAGE = javax.sound LIBRARY = jsoundalsa @@ -74,17 +76,22 @@ -DUSE_PLATFORM_MIDI_IN=TRUE \ -DUSE_EXTERNAL_SYNTH=TRUE - +# +# Specific to OpenJDK building +# ifdef OPENJDK -# precompiled lib will be copied by the rules in Library.gmk instead of compiling. -USE_CLOSED_LIB=true + +# Plug lib will be copied instead of compiling. +USE_BINARY_PLUG_LIBRARY=true + +build: import-binary-plug-jsoundalsa-library + +include $(BUILDDIR)/common/BinaryPlugs.gmk + endif # OPENJDK - # # Include rules # include $(BUILDDIR)/common/Library.gmk - - diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/javax/sound/jsoundds/Makefile --- a/j2se/make/javax/sound/jsoundds/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/javax/sound/jsoundds/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -23,6 +23,8 @@ # have any questions. # +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + BUILDDIR = ../../.. PACKAGE = javax.sound LIBRARY = jsoundds @@ -53,14 +55,22 @@ CPPFLAGS += -DUSE_DAUDIO=TRUE \ -I$(DXSDK_INCLUDE_PATH) - +# +# Specific to OpenJDK building +# ifdef OPENJDK -# precompiled lib will be copied by the rules in Library.gmk instead of compiling. -USE_CLOSED_LIB=true + +# Plug lib will be copied instead of compiling. +USE_BINARY_PLUG_LIBRARY=true + +build: import-binary-plug-jsoundds-library + +include $(BUILDDIR)/common/BinaryPlugs.gmk + endif # OPENJDK - # # Include rules # include $(BUILDDIR)/common/Library.gmk + diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/jdk_generic_profile.sh --- a/j2se/make/jdk_generic_profile.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/jdk_generic_profile.sh Fri Jul 20 21:22:05 2007 +0000 @@ -78,6 +78,7 @@ # Attempts to set these variables for the JDK builds: # ALT_COMPILER_PATH # ALT_BOOTDIR +# ALT_BINARY_PLUGS_PATH # ALT_CLOSED_JDK_IMPORT_PATH # Windows Only: # ALT_UNIXCOMMAND_PATH @@ -132,24 +133,6 @@ # Place compiler path early in PATH to avoid 'cc' conflicts. path4sdk=${ALT_COMPILER_PATH}:/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin - # Get the previous JDK to be used to bootstrap the build - if [ "${ALT_BOOTDIR}" = "" ] ; then - ALT_BOOTDIR=${jdk_instances}/${bootjdk} - export ALT_BOOTDIR - fi - if [ ! -d ${ALT_BOOTDIR} ] ; then - echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}" - fi - - # Get the latest JDK build to import pre-built binaries - if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" ] ; then - ALT_CLOSED_JDK_IMPORT_PATH=${jdk_instances}/${importjdk} - export ALT_CLOSED_JDK_IMPORT_PATH - fi - if [ ! -d ${ALT_CLOSED_JDK_IMPORT_PATH} ] ; then - echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}" - fi - umask 002 elif [ "${osname}" = Linux ] ; then @@ -160,24 +143,6 @@ # Use compilers from /usr/bin path4sdk=/usr/bin:/bin:/usr/sbin:/sbin - # Get the previous JDK to be used to bootstrap the build - if [ "${ALT_BOOTDIR}" = "" ] ; then - ALT_BOOTDIR=${jdk_instances}/${bootjdk} - export ALT_BOOTDIR - fi - if [ ! -d ${ALT_BOOTDIR} ] ; then - echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}" - fi - - # Get the latest JDK build to import pre-built binaries - if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" ] ; then - ALT_CLOSED_JDK_IMPORT_PATH=${jdk_instances}/${importjdk} - export ALT_CLOSED_JDK_IMPORT_PATH - fi - if [ ! -d ${ALT_CLOSED_JDK_IMPORT_PATH} ] ; then - echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}" - fi - umask 002 else @@ -305,24 +270,6 @@ INCLUDE="${include4sdk}" export INCLUDE - # Get the previous JDK to be used to bootstrap the build - if [ "${ALT_BOOTDIR}" = "" ] ; then - ALT_BOOTDIR=${jdk_instances}/${bootjdk} - export ALT_BOOTDIR - fi - if [ ! -d ${ALT_BOOTDIR} ] ; then - echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}" - fi - - # Get the latest JDK build to import pre-built binaries - if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" ] ; then - ALT_CLOSED_JDK_IMPORT_PATH=${jdk_instances}/${importjdk} - export ALT_CLOSED_JDK_IMPORT_PATH - fi - if [ ! -d ${ALT_CLOSED_JDK_IMPORT_PATH} ] ; then - echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}" - fi - # Turn all \\ into /, remove duplicates and trailing / slash_path="$(echo ${path4sdk} | sed -e 's@\\\\@/@g' -e 's@//@/@g' -e 's@/$@@' -e 's@/;@;@g')" path4sdk="${slash_path}" @@ -332,6 +279,43 @@ fi +# Get the previous JDK to be used to bootstrap the build +if [ "${ALT_BOOTDIR}" = "" ] ; then + ALT_BOOTDIR=${jdk_instances}/${bootjdk} + export ALT_BOOTDIR +fi +if [ ! -d ${ALT_BOOTDIR} ] ; then + echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}" +fi + +# Get the import JDK to be used to get hotspot VM if not built +if [ "${ALT_JDK_IMPORT_PATH}" = "" -a -d ${jdk_instances}/${importjdk} ] ; then + ALT_JDK_IMPORT_PATH=${jdk_instances}/${importjdk} + export ALT_JDK_IMPORT_PATH +fi + +# Get the latest JDK binary plugs or build to import pre-built binaries +if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then + binplugs=${jdk_instances}/openjdk-binary-plugs + jdkplugs=${jdk_instances}/${importjdk} + if [ -d ${binplugs} ] ; then + ALT_BINARY_PLUGS_PATH=${binplugs} + export ALT_BINARY_PLUGS_PATH + elif [ "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" -a -d ${jdkplugs} ] ; then + ALT_CLOSED_JDK_IMPORT_PATH=${jdkplugs} + export ALT_CLOSED_JDK_IMPORT_PATH + fi + if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then + echo "WARNING: Missing ALT_BINARY_PLUGS_PATH: ${binplugs}" + fi +fi +if [ "${ALT_BINARY_PLUGS_PATH}" != "" -a ! -d "${ALT_BINARY_PLUGS_PATH}" ] ; then + echo "WARNING: Cannot access ALT_BINARY_PLUGS_PATH=${ALT_BINARY_PLUGS_PATH}" +fi +if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" != "" -a ! -d "${ALT_CLOSED_JDK_IMPORT_PATH}" ] ; then + echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}" +fi + # Export PATH setting PATH="${path4sdk}" export PATH diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/jprt.config --- a/j2se/make/jprt.config Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/jprt.config Fri Jul 20 21:22:05 2007 +0000 @@ -32,6 +32,7 @@ # ALT_BOOTDIR # ALT_SLASH_JAVA # ALT_JDK_IMPORT_PATH +# OPENJDK # Windows Only: # PATH # VS71COMNTOOLS @@ -39,11 +40,16 @@ # ROOTDIR # # Output variable settings: -# make Full path to GNU make +# make Full path to GNU make +# compiler_path Path to compiler bin directory +# compiler_name Unique name of this compiler # # Output environment variables: # PATH # ALT_COMPILER_PATH +# OPENJDK only: +# ALT_CLOSED_JDK_IMPORT_PATH +# ALT_JDK_DEVTOOLS_DIR # Windows Only: # ALT_MSDEVTOOLS_PATH # ALT_DEVTOOLS_PATH (To avoid the C:/UTILS default) @@ -87,10 +93,18 @@ slashjava="${ALT_SLASH_JAVA}" jdk_import="${ALT_JDK_IMPORT_PATH}" +jdk_devtools="${slashjava}/devtools" + # Check input dirMustExist "${bootdir}" ALT_BOOTDIR dirMustExist "${slashjava}" ALT_SLASH_JAVA dirMustExist "${jdk_import}" ALT_JDK_IMPORT_PATH + +# Use the JDK import for now (FIXME: use the binary plugs?) +if [ "${OPENJDK}" = true ] ; then + ALT_CLOSED_JDK_IMPORT_PATH="${jdk_import}" + export ALT_CLOSED_JDK_IMPORT_PATH +fi # Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise. osname=`uname -s` @@ -105,7 +119,8 @@ fi # Get the SS11 compilers into path (make sure it matches ALT setting) - compiler_path=${slashjava}/devtools/${solaris_arch}/SUNWspro/SS11/bin + compiler_path=${jdk_devtools}/${solaris_arch}/SUNWspro/SS11/bin + compiler_name=SS11 ALT_COMPILER_PATH="${compiler_path}" export ALT_COMPILER_PATH dirMustExist "${compiler_path}" ALT_COMPILER_PATH @@ -122,7 +137,7 @@ if [ ! -f ${make} ] ; then make=/opt/sfw/bin/gmake if [ ! -f ${make} ] ; then - make=${slashjava}/devtools/${solaris_arch}/bin/gnumake + make=${jdk_devtools}/${solaris_arch}/bin/gnumake fi fi fileMustExist "${make}" make @@ -142,6 +157,7 @@ # Get the compilers into path (make sure it matches ALT setting) compiler_path=/usr/bin + compiler_name=usr_bin ALT_COMPILER_PATH="${compiler_path}" export ALT_COMPILER_PATH dirMustExist "${compiler_path}" ALT_COMPILER_PATH @@ -158,6 +174,13 @@ fileMustExist "${make}" make umask 002 + + # Linux platform may be old, use motif files from the devtools area + if [ "${OPENJDK}" = true ] ; then + ALT_JDK_DEVTOOLS_DIR="${jdk_devtools}" + export ALT_JDK_DEVTOOLS_DIR + fi + else @@ -188,7 +211,7 @@ unixcommand_path="${mkshome}/mksnt" path4sdk="${unixcommand_path}" dirMustExist "${unixcommand_path}" ALT_UNIXCOMMAND_PATH - devtools_path="${slashjava}/devtools/win32/bin" + devtools_path="${jdk_devtools}/win32/bin" path4sdk="${devtools_path};${path4sdk}" # Normally this need not be set, but on Windows it's default is C:/UTILS ALT_DEVTOOLS_PATH="${devtools_path}" @@ -225,6 +248,7 @@ msdevtools_path="${msdev_root}/bin" vc7_root="${vs_root}/Vc7" compiler_path="${vc7_root}/bin" + compiler_name=VS2003 platform_sdk="${vc7_root}/PlatformSDK" # LIB and INCLUDE must use ; as a separator include4sdk="${vc7_root}/atlmfc/include" @@ -253,6 +277,7 @@ platform_sdk=`${dosname} "C:/Program Files/Microsoft Platform SDK/"` fi compiler_path="${platform_sdk}/Bin/win64/x86/AMD64" + compiler_name=VS2005_PSDK msdevtools_path="${platform_sdk}/Bin" # LIB and INCLUDE must use ; as a separator include4sdk="${platform_sdk}/Include" diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/netbeans/README --- a/j2se/make/netbeans/README Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/netbeans/README Fri Jul 20 21:22:05 2007 +0000 @@ -93,7 +93,7 @@ make.options=\ ALT_BOOTDIR=/home/me/bin/jdk1.6.0 \ - ALT_CLOSED_JDK_IMPORT_PATH=/home/me/bin/jdk1.7.0 \ + ALT_BINARY_PLUGS_PATH=/home/me/bin/openjdk-binary-plugs \ ALT_MOTIF_DIR=/home/me/lib/motif \ ALT_JDK_IMPORT_PATH=/home/me/bin/jdk1.7.0 \ OPENJDK=true diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/sun/dcpr/Makefile --- a/j2se/make/sun/dcpr/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/sun/dcpr/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -23,6 +23,8 @@ # have any questions. # +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + BUILDDIR = ../.. PACKAGE = sun.dc LIBRARY = dcpr @@ -35,6 +37,7 @@ include FILES_c.gmk ifndef OPENJDK + FILES_java = \ sun/dc/DuctusRenderingEngine.java \ sun/dc/path/FastPathProducer.java \ @@ -55,16 +58,17 @@ else -copy-closed-src-classes: - $(call install-closed-classes,sun/dc) - -build: copy-closed-src-classes +# +# Specific to OpenJDK building +# -.PHONY: copy-closed-src-classes +# Plug lib will be copied instead of compiling. +USE_BINARY_PLUG_LIBRARY=true -# When building OPENJDK (ie no closed sources), name the precompiled lib to -# be copied by the rules in Library.gmk instead of compiling. -USE_CLOSED_LIB=true +build: import-binary-plug-dc-classes import-binary-plug-dcpr-library + +include $(BUILDDIR)/common/BinaryPlugs.gmk + endif # OPENJDK # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/sun/font/t2k/Makefile --- a/j2se/make/sun/font/t2k/Makefile Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/sun/font/t2k/Makefile Fri Jul 20 21:22:05 2007 +0000 @@ -23,6 +23,8 @@ # have any questions. # +# WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/BinaryPlugs.gmk + # # Makefile for building t2k rasteriser. # @@ -74,22 +76,41 @@ endif # PLATFORM -# Setting this variable is sufficient to trigger copying a pre-built -# library using rules in Library.gmk instead of building. +# +# Specific to OpenJDK building +# ifdef OPENJDK - USE_CLOSED_LIB=true - FILES_export = -endif + +FILES_export = + +# Plug lib will be copied instead of compiling. +USE_BINARY_PLUG_LIBRARY=true + +build: import-binary-plug-t2k-library + +include $(BUILDDIR)/common/BinaryPlugs.gmk + +endif # OPENJDK include $(BUILDDIR)/common/Mapfile-vers.gmk include $(BUILDDIR)/common/Library.gmk -ifdef OPENJDK -ifeq ($(PLATFORM),windows) -# Need to copy the import file to link against. -build: $(OBJDIR)/t2k.lib -endif -endif +# +# Export the t2k.lib for the openjdk binary plug exporting +# + +ifndef OPENJDK + + ifeq ($(PLATFORM), windows) + +# Make sure we export this t2k.lib file +build: $(LIBFILES_DIR)/t2k.lib +$(LIBFILES_DIR)/t2k.lib: $(OBJDIR)/t2k.lib + $(install-file) + + endif # windows + +endif # !OPENJDK # # Add to the ambient vpath to pick up files in subdirectories diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/sun/text/FILES_java.gmk --- a/j2se/make/sun/text/FILES_java.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/sun/text/FILES_java.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -83,6 +83,8 @@ $(TARGDIR)sun/text/resources/FormatData_zh_SG.java \ $(TARGDIR)sun/text/resources/FormatData_zh_TW.java \ \ + $(TARGDIR)sun/util/resources/CurrencyNames_zh_HK.java \ + $(TARGDIR)sun/util/resources/CurrencyNames_zh_SG.java \ $(TARGDIR)sun/util/resources/LocaleNames_zh_HK.java \ $(TARGDIR)sun/util/resources/TimeZoneNames_hi.java \ $(TARGDIR)sun/util/resources/TimeZoneNames_ja.java \ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/sun/text/FILES_properties.gmk --- a/j2se/make/sun/text/FILES_properties.gmk Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/sun/text/FILES_properties.gmk Fri Jul 20 21:22:05 2007 +0000 @@ -63,11 +63,11 @@ sun/util/resources/CurrencyNames_ar_YE.properties \ sun/util/resources/CurrencyNames_hi_IN.properties \ sun/util/resources/CurrencyNames_iw_IL.properties \ + sun/util/resources/CurrencyNames_ja.properties \ sun/util/resources/CurrencyNames_ja_JP.properties \ + sun/util/resources/CurrencyNames_ko.properties \ sun/util/resources/CurrencyNames_ko_KR.properties \ sun/util/resources/CurrencyNames_th_TH.properties \ sun/util/resources/CurrencyNames_vi_VN.properties \ sun/util/resources/CurrencyNames_zh_CN.properties \ - sun/util/resources/CurrencyNames_zh_HK.properties \ - sun/util/resources/CurrencyNames_zh_SG.properties \ sun/util/resources/CurrencyNames_zh_TW.properties diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/make/tools/GenerateCurrencyData/GenerateCurrencyData.java --- a/j2se/make/tools/GenerateCurrencyData/GenerateCurrencyData.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/make/tools/GenerateCurrencyData/GenerateCurrencyData.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.FileNotFoundException; -import java.io.PrintStream; +import java.io.DataOutputStream; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; @@ -35,42 +35,49 @@ import java.util.TimeZone; /** - * Reads currency data in properties format from the standard input stream - * and generates an equivalent Java source file on the standard output stream. + * Reads currency data in properties format from the file specified in the + * command line and generates a binary data file as specified in the command line. + * + * Output of this tool is a binary file that contains the data in + * the following order: + * + * - magic number (int): always 0x43757244 ('CurD') + * - formatVersion (int) + * - dataVersion (int) + * - mainTable (int[26*26]) + * - specialCaseCount (int) + * - specialCaseCutOverTimes (long[specialCaseCount]) + * - specialCaseOldCurrencies (String[specialCaseCount]) + * - specialCaseNewCurrencies (String[specialCaseCount]) + * - specialCaseOldCurrenciesDefaultFractionDigits (int[specialCaseCount]) + * - specialCaseNewCurrenciesDefaultFractionDigits (int[specialCaseCount]) + * - specialCaseOldCurrenciesNumericCode (int[specialCaseCount]) + * - specialCaseNewCurrenciesNumericCode (int[specialCaseCount]) + * - otherCurrenciesCount (int) + * - otherCurrencies (String) + * - otherCurrenciesDefaultFractionDigits (int[otherCurrenciesCount]) + * - otherCurrenciesNumericCode (int[otherCurrenciesCount]) + * * See CurrencyData.properties for the input format description and * Currency.java for the format descriptions of the generated tables. */ public class GenerateCurrencyData { - // To deal with output - private static PrintStream out; + private static DataOutputStream out; // input data: currency data obtained from properties on input stream private static Properties currencyData; - private static String version; + private static String formatVersion; + private static String dataVersion; private static String validCurrencyCodes; private static String currenciesWith0MinorUnitDecimals; private static String currenciesWith1MinorUnitDecimal; private static String currenciesWith3MinorUnitDecimal; private static String currenciesWithMinorUnitsUndefined; - // generated data - private static String mainTable; - - private static final int maxSpecialCases = 30; - private static int specialCaseCount = 0; - private static long[] specialCaseCutOverTimes = new long[maxSpecialCases]; - private static String[] specialCaseOldCurrencies = new String[maxSpecialCases]; - private static String[] specialCaseNewCurrencies = new String[maxSpecialCases]; - private static int[] specialCaseOldCurrenciesDefaultFractionDigits = new int[maxSpecialCases]; - private static int[] specialCaseNewCurrenciesDefaultFractionDigits = new int[maxSpecialCases]; - - private static final int maxOtherCurrencies = 60; - private static int otherCurrenciesCount = 0; - private static StringBuffer otherCurrencies = new StringBuffer(); - private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies]; - // handy constants - must match definitions in java.util.Currency + // magic number + private static final int MAGIC_NUMBER = 0x43757244; // number of characters from A to Z private static final int A_TO_Z = ('Z' - 'A') + 1; // entry for invalid country codes @@ -93,6 +100,29 @@ private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1; // mask for distinguishing simple and special case countries private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK; + // mask for the numeric code of the currency + private static final int NUMERIC_CODE_MASK = 0x0003FF00; + // shift count for the numeric code of the currency + private static final int NUMERIC_CODE_SHIFT = 8; + + // generated data + private static int[] mainTable = new int[A_TO_Z * A_TO_Z]; + + private static final int maxSpecialCases = 30; + private static int specialCaseCount = 0; + private static long[] specialCaseCutOverTimes = new long[maxSpecialCases]; + private static String[] specialCaseOldCurrencies = new String[maxSpecialCases]; + private static String[] specialCaseNewCurrencies = new String[maxSpecialCases]; + private static int[] specialCaseOldCurrenciesDefaultFractionDigits = new int[maxSpecialCases]; + private static int[] specialCaseNewCurrenciesDefaultFractionDigits = new int[maxSpecialCases]; + private static int[] specialCaseOldCurrenciesNumericCode = new int[maxSpecialCases]; + private static int[] specialCaseNewCurrenciesNumericCode = new int[maxSpecialCases]; + + private static final int maxOtherCurrencies = 60; + private static int otherCurrenciesCount = 0; + private static StringBuffer otherCurrencies = new StringBuffer(); + private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies]; + private static int[] otherCurrenciesNumericCode= new int[maxOtherCurrencies]; // date format for parsing cut-over times private static SimpleDateFormat format; @@ -100,21 +130,17 @@ public static void main(String[] args) { // Look for "-o outputfilename" option - if ( args.length > 0 ) { - if ( args.length == 2 && args[0].equals("-o") ) { - try { - out = new PrintStream(new FileOutputStream(args[1])); - } catch ( FileNotFoundException e ) { - System.err.println("Error: " + e.getMessage()); - e.printStackTrace(System.err); - System.exit(1); - } - } else { - System.err.println("Error: Illegal arg count"); - System.exit(1); + if ( args.length == 2 && args[0].equals("-o") ) { + try { + out = new DataOutputStream(new FileOutputStream(args[1])); + } catch ( FileNotFoundException e ) { + System.err.println("Error: " + e.getMessage()); + e.printStackTrace(System.err); + System.exit(1); } } else { - out = System.out; + System.err.println("Error: Illegal arg count"); + System.exit(1); } format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US); @@ -126,13 +152,13 @@ buildMainAndSpecialCaseTables(); buildOtherTables(); writeOutput(); + out.flush(); + out.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); e.printStackTrace(System.err); System.exit(1); } - out.flush(); - out.close(); } private static void readInput() throws IOException { @@ -140,13 +166,15 @@ currencyData.load(System.in); // initialize other lookup strings - version = (String) currencyData.get("version"); + formatVersion = (String) currencyData.get("formatVersion"); + dataVersion = (String) currencyData.get("dataVersion"); validCurrencyCodes = (String) currencyData.get("all"); currenciesWith0MinorUnitDecimals = (String) currencyData.get("minor0"); currenciesWith1MinorUnitDecimal = (String) currencyData.get("minor1"); currenciesWith3MinorUnitDecimal = (String) currencyData.get("minor3"); currenciesWithMinorUnitsUndefined = (String) currencyData.get("minorUndefined"); - if (version == null || + if (formatVersion == null || + dataVersion == null || validCurrencyCodes == null || currenciesWith0MinorUnitDecimals == null || currenciesWith1MinorUnitDecimal == null || @@ -157,7 +185,6 @@ } private static void buildMainAndSpecialCaseTables() throws Exception { - char[] mainTableArray = new char[A_TO_Z*A_TO_Z]; for (int first = 0; first < A_TO_Z; first++) { for (int second = 0; second < A_TO_Z; second++) { char firstChar = (char) ('A' + first); @@ -181,9 +208,14 @@ if (digits < 0 || digits > 3) { throw new RuntimeException("fraction digits out of range for " + currencyInfo); } + int numericCode= getNumericCode(currencyInfo); + if (numericCode < 0 || numericCode >= 1000 ) { + throw new RuntimeException("numeric code out of range for " + currencyInfo); + } tableEntry = SIMPLE_CASE_COUNTRY_MASK | (currencyInfo.charAt(2) - 'A') - | (digits << SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT); + | (digits << SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT) + | (numericCode << NUMERIC_CODE_SHIFT); } else { tableEntry = SPECIAL_CASE_COUNTRY_MASK | (makeSpecialCaseEntry(currencyInfo) + SPECIAL_CASE_COUNTRY_INDEX_DELTA); } @@ -191,10 +223,9 @@ tableEntry = SPECIAL_CASE_COUNTRY_MASK | (makeSpecialCaseEntry(currencyInfo) + SPECIAL_CASE_COUNTRY_INDEX_DELTA); } } - mainTableArray[first * A_TO_Z + second] = (char) tableEntry; + mainTable[first * A_TO_Z + second] = tableEntry; } } - mainTable = new String(mainTableArray); } private static int getDefaultFractionDigits(String currencyCode) { @@ -211,6 +242,12 @@ } } + private static int getNumericCode(String currencyCode) { + int index = validCurrencyCodes.indexOf(currencyCode); + String numericCode = validCurrencyCodes.substring(index + 3, index + 6); + return Integer.parseInt(numericCode); + } + static HashMap specialCaseMap = new HashMap(); private static int makeSpecialCaseEntry(String currencyInfo) throws Exception { @@ -226,8 +263,10 @@ specialCaseCutOverTimes[specialCaseCount] = Long.MAX_VALUE; specialCaseOldCurrencies[specialCaseCount] = currencyInfo; specialCaseOldCurrenciesDefaultFractionDigits[specialCaseCount] = getDefaultFractionDigits(currencyInfo); + specialCaseOldCurrenciesNumericCode[specialCaseCount] = getNumericCode(currencyInfo); specialCaseNewCurrencies[specialCaseCount] = null; specialCaseNewCurrenciesDefaultFractionDigits[specialCaseCount] = 0; + specialCaseNewCurrenciesNumericCode[specialCaseCount] = 0; } else { int length = currencyInfo.length(); if (currencyInfo.charAt(3) != ';' || @@ -246,24 +285,28 @@ specialCaseCutOverTimes[specialCaseCount] = time; specialCaseOldCurrencies[specialCaseCount] = oldCurrency; specialCaseOldCurrenciesDefaultFractionDigits[specialCaseCount] = getDefaultFractionDigits(oldCurrency); + specialCaseOldCurrenciesNumericCode[specialCaseCount] = getNumericCode(oldCurrency); specialCaseNewCurrencies[specialCaseCount] = newCurrency; specialCaseNewCurrenciesDefaultFractionDigits[specialCaseCount] = getDefaultFractionDigits(newCurrency); + specialCaseNewCurrenciesNumericCode[specialCaseCount] = getNumericCode(newCurrency); } specialCaseMap.put(currencyInfo, new Integer(specialCaseCount)); return specialCaseCount++; } private static void buildOtherTables() { - if (validCurrencyCodes.length() % 4 != 3) { + if (validCurrencyCodes.length() % 7 != 6) { throw new RuntimeException("\"all\" entry has incorrect size"); } - for (int i = 0; i < (validCurrencyCodes.length() + 1) / 4; i++) { - if (i > 0 && validCurrencyCodes.charAt(i * 4 - 1) != '-') { + for (int i = 0; i < (validCurrencyCodes.length() + 1) / 7; i++) { + if (i > 0 && validCurrencyCodes.charAt(i * 7 - 1) != '-') { throw new RuntimeException("incorrect separator in \"all\" entry"); } - String currencyCode = validCurrencyCodes.substring(i * 4, i * 4 + 3); + String currencyCode = validCurrencyCodes.substring(i * 7, i * 7 + 3); + int numericCode = Integer.parseInt( + validCurrencyCodes.substring(i * 7 + 3, i * 7 + 6)); checkCurrencyCode(currencyCode); - int tableEntry = mainTable.charAt((currencyCode.charAt(0) - 'A') * A_TO_Z + (currencyCode.charAt(1) - 'A')); + int tableEntry = mainTable[(currencyCode.charAt(0) - 'A') * A_TO_Z + (currencyCode.charAt(1) - 'A')]; if (tableEntry == INVALID_COUNTRY_ENTRY || (tableEntry & SPECIAL_CASE_COUNTRY_MASK) != 0 || (tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK) != (currencyCode.charAt(2) - 'A')) { @@ -275,6 +318,7 @@ } otherCurrencies.append(currencyCode); otherCurrenciesDefaultFractionDigits[otherCurrenciesCount] = getDefaultFractionDigits(currencyCode); + otherCurrenciesNumericCode[otherCurrenciesCount] = getNumericCode(currencyCode); otherCurrenciesCount++; } } @@ -295,94 +339,41 @@ } } - private static void writeOutput() { - out.println("package java.util;\n"); - out.println("class CurrencyData {\n"); - writeStaticString("version", version, A_TO_Z); - writeStaticString("mainTable", mainTable, A_TO_Z); - writeStaticLongArray("scCutOverTimes", specialCaseCutOverTimes, specialCaseCount); - writeStaticStringArray("scOldCurrencies", specialCaseOldCurrencies, specialCaseCount); - writeStaticStringArray("scNewCurrencies", specialCaseNewCurrencies, specialCaseCount); - writeStaticIntArray("scOldCurrenciesDFD", specialCaseOldCurrenciesDefaultFractionDigits, specialCaseCount); - writeStaticIntArray("scNewCurrenciesDFD", specialCaseNewCurrenciesDefaultFractionDigits, specialCaseCount); - writeStaticString("otherCurrencies", otherCurrencies.toString(), otherCurrenciesCount * 4); - writeStaticIntArray("otherCurrenciesDFD", otherCurrenciesDefaultFractionDigits, otherCurrenciesCount); - out.println("}\n"); - } - - private static void writeStaticString(String name, String content, int chunkSize) { - String prefix = " static final String " + name + " = "; - out.print(prefix); - out.print("\""); - int inChunk = 0; - for (int i = 0; i < content.length(); i++) { - if (inChunk == chunkSize) { - out.print("\" +\n"); - for (int j = 0; j < prefix.length(); j++) { - out.print(" "); - } - out.print("\""); - inChunk = 0; - } - writeChar(content.charAt(i)); - inChunk++; - } - out.println("\";\n"); + private static void writeOutput() throws IOException { + out.writeInt(MAGIC_NUMBER); + out.writeInt(Integer.parseInt(formatVersion)); + out.writeInt(Integer.parseInt(dataVersion)); + writeIntArray(mainTable, mainTable.length); + out.writeInt(specialCaseCount); + writeLongArray(specialCaseCutOverTimes, specialCaseCount); + writeStringArray(specialCaseOldCurrencies, specialCaseCount); + writeStringArray(specialCaseNewCurrencies, specialCaseCount); + writeIntArray(specialCaseOldCurrenciesDefaultFractionDigits, specialCaseCount); + writeIntArray(specialCaseNewCurrenciesDefaultFractionDigits, specialCaseCount); + writeIntArray(specialCaseOldCurrenciesNumericCode, specialCaseCount); + writeIntArray(specialCaseNewCurrenciesNumericCode, specialCaseCount); + out.writeInt(otherCurrenciesCount); + out.writeUTF(otherCurrencies.toString()); + writeIntArray(otherCurrenciesDefaultFractionDigits, otherCurrenciesCount); + writeIntArray(otherCurrenciesNumericCode, otherCurrenciesCount); } - - private static void writeStaticStringArray(String name, String[] content, int count) { - out.print(" static final String[] " + name + " = { "); - for (int i = 0; i < count; i++) { - if (content[i] == null) { - out.print("null"); - } else { - writeString(content[i]); - } - out.print(", "); - } - out.println("};\n"); - } - - private static void writeStaticIntArray(String name, int[] content, int count) { - out.print(" static final int[] " + name + " = { "); - for (int i = 0; i < count; i++) { - out.print(content[i]); - out.print(", "); - } - out.println("};\n"); + + private static void writeIntArray(int[] ia, int count) throws IOException { + for (int i = 0; i < count; i ++) { + out.writeInt(ia[i]); + } } - - private static void writeStaticLongArray(String name, long[] content, int count) { - out.print(" static final long[] " + name + " = { "); - for (int i = 0; i < count; i++) { - out.print(content[i]); - out.print("L, "); - } - out.println("};\n"); - } - - private static void writeString(String string) { - out.print("\""); - for (int i = 0; i < string.length(); i++) { - writeChar(string.charAt(i)); - } - out.print("\""); + + private static void writeLongArray(long[] la, int count) throws IOException { + for (int i = 0; i < count; i ++) { + out.writeLong(la[i]); + } } - - private static void writeChar(char aChar) { - if (aChar == '\n') { - out.print("\\n"); - } else if (aChar == '\r') { - out.print("\\r"); - } else if (aChar >= '\u0020' && aChar < '\u007F') { - out.print(aChar); - } else { - out.print("\\u"); - String hexString = Integer.toHexString(aChar); - for (int i = 0; i < 4 - hexString.length(); i++) { - out.print("0"); - } - out.print(hexString); - } + + private static void writeStringArray(String[] sa, int count) throws IOException { + for (int i = 0; i < count; i ++) { + String str = (sa[i] != null) ? sa[i] : ""; + out.writeUTF(str); + } } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/corba/se/impl/activation/CommandHandler.java --- a/j2se/src/share/classes/com/sun/corba/se/impl/activation/CommandHandler.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/corba/se/impl/activation/CommandHandler.java Fri Jul 20 21:22:05 2007 +0000 @@ -29,7 +29,7 @@ import java.io.PrintStream; /** - * @version 1.21, 07/07/05 + * @version 1.21, 07/07/20 * @author Rohit Garg * @since JDK1.2 */ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/security/auth/login/ConfigFile.java --- a/j2se/src/share/classes/com/sun/security/auth/login/ConfigFile.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/security/auth/login/ConfigFile.java Fri Jul 20 21:22:05 2007 +0000 @@ -86,7 +86,7 @@ * is exactly that syntax specified in the * javax.security.auth.login.Configuration class. * - * @version 1.31, 05/05/07 + * @version 1.32, 06/22/07 * @see javax.security.auth.login.LoginContext */ public class ConfigFile extends javax.security.auth.login.Configuration { @@ -203,8 +203,7 @@ } catch (java.net.MalformedURLException mue) { File configFile = new File(extra_config); if (configFile.exists()) { - configURL = new URL("file:" + - configFile.getCanonicalPath()); + configURL = configFile.toURI().toURL(); } else { MessageFormat form = new MessageFormat (ResourcesMgr.getString @@ -267,7 +266,7 @@ // No longer throws an exception when there's no config file // at all. Returns an empty Configuration instead. if (new File(userConfigFile).exists()) { - init(new URL("file:" + userConfigFile), + init(new File(userConfigFile).toURI().toURL(), newConfig); } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/attach/spi/AttachProvider.java --- a/j2se/src/share/classes/com/sun/tools/attach/spi/AttachProvider.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/attach/spi/AttachProvider.java Fri Jul 20 21:22:05 2007 +0000 @@ -34,7 +34,7 @@ import com.sun.tools.attach.VirtualMachineDescriptor; import com.sun.tools.attach.AttachPermission; import com.sun.tools.attach.AttachNotSupportedException; -import sun.misc.Service; +import java.util.ServiceLoader; /** * Attach provider class for attaching to a Java virtual machine. @@ -248,8 +248,11 @@ if (providers == null) { providers = new ArrayList(); - Iterator i = Service.providers(AttachProvider.class, - AttachProvider.class.getClassLoader()); + ServiceLoader providerLoader = + ServiceLoader.load(AttachProvider.class, + AttachProvider.class.getClassLoader()); + + Iterator i = providerLoader.iterator(); while (i.hasNext()) { try { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/corba/se/idl/first.set --- a/j2se/src/share/classes/com/sun/tools/corba/se/idl/first.set Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/corba/se/idl/first.set Fri Jul 20 21:22:05 2007 +0000 @@ -6,7 +6,7 @@ * THIS PRODUCT CONTAINS RESTRICTED MATERIALS OF IBM * 5639-D57, (C) COPYRIGHT International Business Machines Corp., 1997, 1998 * - * @(#) 1.3 @(#)first.set 1.3 04/30/07 19:05:31 [07/05/07 00:46:51] + * @(#) 1.3 @(#)first.set 1.3 04/30/07 19:05:31 [07/20/07 00:30:59] */ CORBA IDL diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/corba/se/idl/follow.set --- a/j2se/src/share/classes/com/sun/tools/corba/se/idl/follow.set Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/corba/se/idl/follow.set Fri Jul 20 21:22:05 2007 +0000 @@ -6,7 +6,7 @@ * THIS PRODUCT CONTAINS RESTRICTED MATERIALS OF IBM * 5639-D57, (C) COPYRIGHT International Business Machines Corp., 1997, 1998 * - * @(#) 1.3 @(#)follow.set 1.3 04/30/07 19:05:31 [07/05/07 00:46:51] + * @(#) 1.3 @(#)follow.set 1.3 04/30/07 19:05:31 [07/20/07 00:30:59] */ CORBA IDL diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/debug/tty/MessageOutput.java --- a/j2se/src/share/classes/com/sun/tools/example/debug/tty/MessageOutput.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/debug/tty/MessageOutput.java Fri Jul 20 21:22:05 2007 +0000 @@ -33,7 +33,7 @@ * the only class that should be printing directly or otherwise * accessing System.[out,err]. * - * @version @(#) MessageOutput.java 1.14 07/05/05 00:46:58 + * @version @(#) MessageOutput.java 1.14 07/05/05 00:31:04 * @bug 4348376 * @author Tim Bell */ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/doc/index.html --- a/j2se/src/share/classes/com/sun/tools/example/doc/index.html Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/doc/index.html Fri Jul 20 21:22:05 2007 +0000 @@ -79,7 +79,7 @@
    java-debugger@java.sun.com

    -@(#) index.html 1.2 01/06/04 00:46:58 +@(#) index.html 1.2 01/06/04 00:31:04

    diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/doc/javadt.html --- a/j2se/src/share/classes/com/sun/tools/example/doc/javadt.html Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/doc/javadt.html Fri Jul 20 21:22:05 2007 +0000 @@ -169,7 +169,7 @@
    java-debugger@java.sun.com

    -@(#) javadt.html 1.3 07/04/04 00:46:58 +@(#) javadt.html 1.3 07/04/04 00:31:04

    diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/doc/jdb.html --- a/j2se/src/share/classes/com/sun/tools/example/doc/jdb.html Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/doc/jdb.html Fri Jul 20 21:22:05 2007 +0000 @@ -99,7 +99,7 @@
    java-debugger@java.sun.com

    -@(#) jdb.html 1.3 07/04/04 00:46:58 +@(#) jdb.html 1.3 07/04/04 00:31:04

    diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/doc/trace.html --- a/j2se/src/share/classes/com/sun/tools/example/doc/trace.html Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/doc/trace.html Fri Jul 20 21:22:05 2007 +0000 @@ -66,7 +66,7 @@
    java-debugger@java.sun.com

    -@(#) trace.html 1.4 07/04/04 00:46:58 +@(#) trace.html 1.4 07/04/04 00:31:04

    diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/trace/EventThread.java --- a/j2se/src/share/classes/com/sun/tools/example/trace/EventThread.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/trace/EventThread.java Fri Jul 20 21:22:05 2007 +0000 @@ -35,7 +35,7 @@ /** * This class processes incoming JDI events and displays them * - * @version @(#) EventThread.java 1.12 07/05/05 00:46:58 + * @version @(#) EventThread.java 1.12 07/05/05 00:31:04 * @author Robert Field */ public class EventThread extends Thread { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/trace/StreamRedirectThread.java --- a/j2se/src/share/classes/com/sun/tools/example/trace/StreamRedirectThread.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/trace/StreamRedirectThread.java Fri Jul 20 21:22:05 2007 +0000 @@ -31,7 +31,7 @@ * StreamRedirectThread is a thread which copies it's input to * it's output and terminates when it completes. * - * @version @(#) StreamRedirectThread.java 1.12 07/05/05 00:46:58 + * @version @(#) StreamRedirectThread.java 1.12 07/05/05 00:31:04 * @author Robert Field */ class StreamRedirectThread extends Thread { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/example/trace/Trace.java --- a/j2se/src/share/classes/com/sun/tools/example/trace/Trace.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/example/trace/Trace.java Fri Jul 20 21:22:05 2007 +0000 @@ -42,7 +42,7 @@ * See "java Trace -help". * It is a simple example of the use of the Java Debug Interface. * - * @version @(#) Trace.java 1.12 07/05/05 00:46:58 + * @version @(#) Trace.java 1.12 07/05/05 00:31:04 * @author Robert Field */ public class Trace { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java --- a/j2se/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -330,7 +330,7 @@ ListBuffer elements = new ListBuffer(); for (JCCompilationUnit unit : units) { for (JCTree node : unit.defs) - if (node.tag == JCTree.CLASSDEF) + if (node.getTag() == JCTree.CLASSDEF) elements.append(((JCTree.JCClassDecl) node).sym); } return elements.toList(); @@ -383,7 +383,7 @@ // where private void handleFlowResults(List> list, ListBuffer elems) { for (Env env: list) { - switch (env.tree.tag) { + switch (env.tree.getTag()) { case JCTree.CLASSDEF: JCClassDecl cdef = (JCClassDecl) env.tree; if (cdef.sym != null) diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Annotate.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Annotate.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Annotate.java Fri Jul 20 21:22:05 2007 +0000 @@ -40,7 +40,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Annotate.java 1.43 07/05/05") +@Version("@(#)Annotate.java 1.44 07/06/14") public class Annotate { protected static final Context.Key annotateKey = new Context.Key(); @@ -149,7 +149,7 @@ return new Attribute.Compound(a.type, List.>nil()); } List args = a.args; - if (args.length() == 1 && args.head.tag != JCTree.ASSIGN) { + if (args.length() == 1 && args.head.getTag() != JCTree.ASSIGN) { // special case: elided "value=" assumed args.head = make.at(args.head.pos). Assign(make.Ident(names.value), args.head); @@ -158,12 +158,12 @@ new ListBuffer>(); for (List tl = args; tl.nonEmpty(); tl = tl.tail) { JCExpression t = tl.head; - if (t.tag != JCTree.ASSIGN) { + if (t.getTag() != JCTree.ASSIGN) { log.error(t.pos(), "annotation.value.must.be.name.value"); continue; } JCAssign assign = (JCAssign)t; - if (assign.lhs.tag != JCTree.IDENT) { + if (assign.lhs.getTag() != JCTree.IDENT) { log.error(t.pos(), "annotation.value.must.be.name.value"); continue; } @@ -213,14 +213,14 @@ (((JCFieldAccess) tree).selected).type); } if ((expected.tsym.flags() & Flags.ANNOTATION) != 0) { - if (tree.tag != JCTree.ANNOTATION) { + if (tree.getTag() != JCTree.ANNOTATION) { log.error(tree.pos(), "annotation.value.must.be.annotation"); expected = syms.errorType; } return enterAnnotation((JCAnnotation)tree, expected, env); } if (expected.tag == TypeTags.ARRAY) { // should really be isArray() - if (tree.tag != JCTree.NEWARRAY) { + if (tree.getTag() != JCTree.NEWARRAY) { tree = make.at(tree.pos). NewArray(null, List.nil(), List.of(tree)); } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Attr.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Attr.java Fri Jul 20 21:22:05 2007 +0000 @@ -64,7 +64,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Attr.java 1.228 07/05/05") +@Version("@(#)Attr.java 1.229 07/06/19") public class Attr extends JCTree.Visitor { protected static final Context.Key attrKey = new Context.Key(); @@ -215,7 +215,7 @@ ((v.flags() & HASINIT) != 0 || !((base == null || - (base.tag == JCTree.IDENT && TreeInfo.name(base) == names._this)) && + (base.getTag() == JCTree.IDENT && TreeInfo.name(base) == names._this)) && isAssignableAsBlankFinal(v, env)))) { log.error(pos, "cant.assign.val.to.final.var", v); } @@ -227,7 +227,7 @@ * @param tree The candidate tree. */ boolean isStaticReference(JCTree tree) { - if (tree.tag == JCTree.SELECT) { + if (tree.getTag() == JCTree.SELECT) { Symbol lsym = TreeInfo.symbol(((JCFieldAccess) tree).selected); if (lsym == null || lsym.kind != TYP) { return false; @@ -564,7 +564,7 @@ // disable implicit outer instance from being passed. // (This would be an illegal access to "this before super"). if (env.info.isSelfCall && - env.tree.tag == JCTree.NEWCLASS && + env.tree.getTag() == JCTree.NEWCLASS && ((JCNewClass) env.tree).encl == null) { c.flags_field |= NOOUTERTHIS; @@ -713,7 +713,7 @@ chk.checkDeprecatedAnnotation(tree.pos(), v); if (tree.init != null) { - if ((v.flags_field & FINAL) != 0 && tree.init.tag != JCTree.NEWCLASS) { + if ((v.flags_field & FINAL) != 0 && tree.init.getTag() != JCTree.NEWCLASS) { // In this case, `v' is final. Ensure that it's initializer is // evaluated. v.getConstValue(); // ensure initializer is evaluated @@ -819,8 +819,8 @@ public void visitLabelled(JCLabeledStatement tree) { // Check that label is not used in an enclosing statement Env env1 = env; - while (env1 != null && env1.tree.tag != JCTree.CLASSDEF) { - if (env1.tree.tag == JCTree.LABELLED && + while (env1 != null && env1.tree.getTag() != JCTree.CLASSDEF) { + if (env1.tree.getTag() == JCTree.LABELLED && ((JCLabeledStatement) env1.tree).label == tree.label) { log.error(tree.pos(), "label.already.in.use", tree.label); @@ -891,14 +891,14 @@ private static void addVars(List stats, Scope switchScope) { for (;stats.nonEmpty(); stats = stats.tail) { JCTree stat = stats.head; - if (stat.tag == JCTree.VARDEF) + if (stat.getTag() == JCTree.VARDEF) switchScope.enter(((JCVariableDecl) stat).sym); } } // where /** Return the selected enumeration constant symbol, or null. */ private Symbol enumConstant(JCTree tree, Type enumType) { - if (tree.tag != JCTree.IDENT) { + if (tree.getTag() != JCTree.IDENT) { log.error(tree.pos(), "enum.label.must.be.unqualified.enum"); return syms.errSymbol; } @@ -1066,12 +1066,12 @@ } public void visitBreak(JCBreak tree) { - tree.target = findJumpTarget(tree.pos(), tree.tag, tree.label, env); + tree.target = findJumpTarget(tree.pos(), tree.getTag(), tree.label, env); result = null; } public void visitContinue(JCContinue tree) { - tree.target = findJumpTarget(tree.pos(), tree.tag, tree.label, env); + tree.target = findJumpTarget(tree.pos(), tree.getTag(), tree.label, env); result = null; } //where @@ -1096,16 +1096,16 @@ Env env1 = env; LOOP: while (env1 != null) { - switch (env1.tree.tag) { + switch (env1.tree.getTag()) { case JCTree.LABELLED: JCLabeledStatement labelled = (JCLabeledStatement)env1.tree; if (label == labelled.label) { // If jump is a continue, check that target is a loop. if (tag == JCTree.CONTINUE) { - if (labelled.body.tag != JCTree.DOLOOP && - labelled.body.tag != JCTree.WHILELOOP && - labelled.body.tag != JCTree.FORLOOP && - labelled.body.tag != JCTree.FOREACHLOOP) + if (labelled.body.getTag() != JCTree.DOLOOP && + labelled.body.getTag() != JCTree.WHILELOOP && + labelled.body.getTag() != JCTree.FORLOOP && + labelled.body.getTag() != JCTree.FOREACHLOOP) log.error(pos, "not.loop.label", label); // Found labelled statement target, now go inwards // to next non-labelled tree. @@ -1226,7 +1226,7 @@ if (site.getEnclosingType().tag == CLASS) { // we are calling a nested class - if (tree.meth.tag == JCTree.SELECT) { + if (tree.meth.getTag() == JCTree.SELECT) { JCTree qualifier = ((JCFieldAccess) tree.meth).selected; // We are seeing a prefixed call, of the form @@ -1242,7 +1242,7 @@ rs.resolveImplicitThis(tree.meth.pos(), localEnv, site); } - } else if (tree.meth.tag == JCTree.SELECT) { + } else if (tree.meth.getTag() == JCTree.SELECT) { log.error(tree.meth.pos(), "illegal.qual.not.icls", site.tsym); } @@ -1295,7 +1295,7 @@ // as a special case, array.clone() has a result that is // the same as static type of the array being cloned - if (tree.meth.tag == JCTree.SELECT && + if (tree.meth.getTag() == JCTree.SELECT && allowCovariantReturns && methName == names.clone && types.isArray(((JCFieldAccess) tree.meth).selected.type)) @@ -1304,7 +1304,7 @@ // as a special case, x.getClass() has type Class if (allowGenerics && methName == names.getClass && tree.args.isEmpty()) { - Type qualifier = (tree.meth.tag == JCTree.SELECT) + Type qualifier = (tree.meth.getTag() == JCTree.SELECT) ? ((JCFieldAccess) tree.meth).selected.type : env.enclClass.sym.type; restype = new @@ -1331,7 +1331,7 @@ JCMethodDecl enclMethod = env.enclMethod; if (enclMethod != null && enclMethod.name == names.init) { JCBlock body = enclMethod.body; - if (body.stats.head.tag == JCTree.EXEC && + if (body.stats.head.getTag() == JCTree.EXEC && ((JCExpressionStatement) body.stats.head).expr == tree) return true; } @@ -1362,7 +1362,7 @@ // complete class name to be fully qualified JCExpression clazz = tree.clazz; // Class field following new JCExpression clazzid = // Identifier in class field - (clazz.tag == JCTree.TYPEAPPLY) + (clazz.getTag() == JCTree.TYPEAPPLY) ? ((JCTypeApply) clazz).clazz : clazz; @@ -1381,7 +1381,7 @@ attribExpr(tree.encl, env)); clazzid1 = make.at(clazz.pos).Select(make.Type(encltype), ((JCIdent) clazzid).name); - if (clazz.tag == JCTree.TYPEAPPLY) + if (clazz.getTag() == JCTree.TYPEAPPLY) clazz = make.at(tree.pos). TypeApply(clazzid1, ((JCTypeApply) clazz).arguments); @@ -1423,7 +1423,7 @@ // Enums may not be instantiated except implicitly if (allowEnums && (clazztype.tsym.flags_field&Flags.ENUM) != 0 && - (env.tree.tag != JCTree.VARDEF || + (env.tree.getTag() != JCTree.VARDEF || (((JCVariableDecl) env.tree).mods.flags&Flags.ENUM) == 0 || ((JCVariableDecl) env.tree).init != tree)) log.error(tree.pos(), "enum.cant.be.instantiated"); @@ -1601,13 +1601,13 @@ Type operand = attribExpr(tree.rhs, env); // Find operator. Symbol operator = tree.operator = rs.resolveBinaryOperator( - tree.pos(), tree.tag - JCTree.ASGOffset, env, + tree.pos(), tree.getTag() - JCTree.ASGOffset, env, owntype, operand); if (operator.kind == MTH) { chk.checkOperator(tree.pos(), (OperatorSymbol)operator, - tree.tag - JCTree.ASGOffset, + tree.getTag() - JCTree.ASGOffset, owntype, operand); if (types.isSameType(operator.type.getReturnType(), syms.stringType)) { @@ -1627,17 +1627,17 @@ public void visitUnary(JCUnary tree) { // Attribute arguments. - Type argtype = (JCTree.PREINC <= tree.tag && tree.tag <= JCTree.POSTDEC) + Type argtype = (JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC) ? attribTree(tree.arg, env, VAR, Type.noType) : chk.checkNonVoid(tree.arg.pos(), attribExpr(tree.arg, env)); // Find operator. Symbol operator = tree.operator = - rs.resolveUnaryOperator(tree.pos(), tree.tag, env, argtype); + rs.resolveUnaryOperator(tree.pos(), tree.getTag(), env, argtype); Type owntype = syms.errType; if (operator.kind == MTH) { - owntype = (JCTree.PREINC <= tree.tag && tree.tag <= JCTree.POSTDEC) + owntype = (JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC) ? tree.arg.type : operator.type.getReturnType(); int opc = ((OperatorSymbol)operator).opcode; @@ -1669,15 +1669,15 @@ // Find operator. Symbol operator = tree.operator = - rs.resolveBinaryOperator(tree.pos(), tree.tag, env, left, right); + rs.resolveBinaryOperator(tree.pos(), tree.getTag(), env, left, right); Type owntype = syms.errType; if (operator.kind == MTH) { owntype = operator.type.getReturnType(); int opc = chk.checkOperator(tree.lhs.pos(), (OperatorSymbol)operator, - tree.tag, - left, + tree.getTag(), + left, right); // If both arguments are constants, fold them. @@ -2204,7 +2204,7 @@ canOwnInitializer(env.info.scope.owner) && v.owner == env.info.scope.owner.enclClass() && ((v.flags() & STATIC) != 0) == Resolve.isStatic(env) && - (env.tree.tag != JCTree.ASSIGN || + (env.tree.getTag() != JCTree.ASSIGN || TreeInfo.skipParens(((JCAssign) env.tree).lhs) != tree)) { if (!onlyWarning || isNonStaticEnumField(v)) { @@ -2390,7 +2390,7 @@ "unchecked.generic.array.creation", argtype); Type elemtype = types.elemtype(argtype); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.APPLY: ((JCMethodInvocation) tree).varargsElement = elemtype; break; @@ -2472,9 +2472,9 @@ Type clazzOuter = clazztype.getEnclosingType(); if (clazzOuter.tag == CLASS) { Type site; - if (tree.clazz.tag == JCTree.IDENT) { + if (tree.clazz.getTag() == JCTree.IDENT) { site = env.enclClass.sym.type; - } else if (tree.clazz.tag == JCTree.SELECT) { + } else if (tree.clazz.getTag() == JCTree.SELECT) { site = ((JCFieldAccess) tree.clazz).selected.type; } else throw new AssertionError(""+tree); if (clazzOuter.tag == CLASS && site != clazzOuter) { @@ -2745,7 +2745,7 @@ ((c.flags() & STATIC) == 0 || c.name == names.empty) && (TreeInfo.flags(l.head) & (STATIC | INTERFACE)) != 0) { Symbol sym = null; - if (l.head.tag == JCTree.VARDEF) sym = ((JCVariableDecl) l.head).sym; + if (l.head.getTag() == JCTree.VARDEF) sym = ((JCVariableDecl) l.head).sym; if (sym == null || sym.kind != VAR || ((VarSymbol) sym).getConstValue() == null) diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Check.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Check.java Fri Jul 20 21:22:05 2007 +0000 @@ -52,7 +52,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Check.java 1.173 07/05/05") +@Version("@(#)Check.java 1.174 07/06/14") public class Check { protected static final Context.Key checkKey = new Context.Key(); @@ -693,7 +693,7 @@ * not final. */ private long implicitEnumFinalFlag(JCTree tree) { - if (tree.tag != JCTree.CLASSDEF) return 0; + if (tree.getTag() != JCTree.CLASSDEF) return 0; class SpecialTreeVisitor extends JCTree.Visitor { boolean specialized; SpecialTreeVisitor() { @@ -819,7 +819,7 @@ // not parameterized at all. if (tree.type.getEnclosingType().isRaw()) log.error(tree.pos(), "improperly.formed.type.inner.raw.param"); - if (tree.clazz.tag == JCTree.SELECT) + if (tree.clazz.getTag() == JCTree.SELECT) visitSelectInternal((JCFieldAccess)tree.clazz); } } @@ -1792,14 +1792,14 @@ // count them off as they're annotated for (JCTree arg : a.args) { - if (arg.tag != JCTree.ASSIGN) continue; // recovery + if (arg.getTag() != JCTree.ASSIGN) continue; // recovery JCAssign assign = (JCAssign) arg; Symbol m = TreeInfo.symbol(assign.lhs); if (m == null || m.type.isErroneous()) continue; if (!members.remove(m)) log.error(arg.pos(), "duplicate.annotation.member.value", m.name, a.type); - if (assign.rhs.tag == ANNOTATION) + if (assign.rhs.getTag() == ANNOTATION) validateAnnotation((JCAnnotation)assign.rhs); } @@ -1815,12 +1815,12 @@ a.args.tail == null) return; - if (a.args.head.tag != JCTree.ASSIGN) return; // error recovery + if (a.args.head.getTag() != JCTree.ASSIGN) return; // error recovery JCAssign assign = (JCAssign) a.args.head; Symbol m = TreeInfo.symbol(assign.lhs); if (m.name != names.value) return; JCTree rhs = assign.rhs; - if (rhs.tag != JCTree.NEWARRAY) return; + if (rhs.getTag() != JCTree.NEWARRAY) return; JCNewArray na = (JCNewArray) rhs; Set targets = new HashSet(); for (JCTree elem : na.elems) { @@ -1852,7 +1852,7 @@ try { tree.sym.flags_field |= LOCKED; for (JCTree def : tree.defs) { - if (def.tag != JCTree.METHODDEF) continue; + if (def.getTag() != JCTree.METHODDEF) continue; JCMethodDecl meth = (JCMethodDecl)def; checkAnnotationResType(meth.pos(), meth.restype.type); } @@ -1996,7 +1996,7 @@ * Check for empty statements after if */ void checkEmptyIf(JCIf tree) { - if (tree.thenpart.tag == JCTree.SKIP && tree.elsepart == null && lint.isEnabled(Lint.LintCategory.EMPTY)) + if (tree.thenpart.getTag() == JCTree.SKIP && tree.elsepart == null && lint.isEnabled(Lint.LintCategory.EMPTY)) log.warning(tree.thenpart.pos(), "empty.if"); } @@ -2085,7 +2085,7 @@ } // where private boolean isCanonical(JCTree tree) { - while (tree.tag == JCTree.SELECT) { + while (tree.getTag() == JCTree.SELECT) { JCFieldAccess s = (JCFieldAccess) tree; if (s.sym.owner != TreeInfo.symbol(s.selected)) return false; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Enter.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Enter.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Enter.java Fri Jul 20 21:22:05 2007 +0000 @@ -89,7 +89,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Enter.java 1.140 07/05/05") +@Version("@(#)Enter.java 1.141 07/06/14") public class Enter extends JCTree.Visitor { protected static final Context.Key enterKey = new Context.Key(); @@ -221,7 +221,7 @@ * only, and members go into the class member scope. */ Scope enterScope(Env env) { - return (env.tree.tag == JCTree.CLASSDEF) + return (env.tree.getTag() == JCTree.CLASSDEF) ? ((JCClassDecl) env.tree).sym.members_field : env.info.scope; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Env.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Env.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Env.java Fri Jul 20 21:22:05 2007 +0000 @@ -42,7 +42,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Env.java 1.29 07/05/05") +@Version("@(#)Env.java 1.30 07/06/14") public class Env implements Iterable> { /** The next enclosing environment. @@ -120,7 +120,7 @@ */ public Env enclosing(int tag) { Env env1 = this; - while (env1 != null && env1.tree.tag != tag) env1 = env1.next; + while (env1 != null && env1.tree.getTag() != tag) env1 = env1.next; return env1; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Flow.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Flow.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Flow.java Fri Jul 20 21:22:05 2007 +0000 @@ -173,7 +173,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Flow.java 1.95 07/05/05") +@Version("@(#)Flow.java 1.96 07/06/14") public class Flow extends TreeScanner { protected static final Context.Key flowKey = new Context.Key(); @@ -385,7 +385,7 @@ */ void letInit(JCTree tree) { tree = TreeInfo.skipParens(tree); - if (tree.tag == JCTree.IDENT || tree.tag == JCTree.SELECT) { + if (tree.getTag() == JCTree.IDENT || tree.getTag() == JCTree.SELECT) { Symbol sym = TreeInfo.symbol(tree); letInit(tree.pos(), (VarSymbol)sym); } @@ -419,7 +419,7 @@ pendingExits = oldPendingExits; for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; - if (exit.tree.tag == JCTree.BREAK && + if (exit.tree.getTag() == JCTree.BREAK && ((JCBreak) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); @@ -438,7 +438,7 @@ pendingExits = new ListBuffer(); for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; - if (exit.tree.tag == JCTree.CONTINUE && + if (exit.tree.getTag() == JCTree.CONTINUE && ((JCContinue) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); @@ -483,7 +483,7 @@ */ void scanDef(JCTree tree) { scanStat(tree); - if (tree != null && tree.tag == JCTree.BLOCK && !alive) { + if (tree != null && tree.getTag() == JCTree.BLOCK && !alive) { log.error(tree.pos(), "initializer.must.be.able.to.complete.normally"); } @@ -494,7 +494,7 @@ void scanStat(JCTree tree) { if (!alive && tree != null) { log.error(tree.pos(), "unreachable.stmt"); - if (tree.tag != JCTree.SKIP) alive = true; + if (tree.getTag() != JCTree.SKIP) alive = true; } scan(tree); } @@ -578,7 +578,7 @@ try { // define all the static fields for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag == JCTree.VARDEF) { + if (l.head.getTag() == JCTree.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) != 0) { VarSymbol sym = def.sym; @@ -590,7 +590,7 @@ // process all the static initializers for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag != JCTree.METHODDEF && + if (l.head.getTag() != JCTree.METHODDEF && (TreeInfo.flags(l.head) & STATIC) != 0) { scanDef(l.head); errorUncaught(); @@ -617,7 +617,7 @@ // define all the instance fields for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag == JCTree.VARDEF) { + if (l.head.getTag() == JCTree.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) == 0) { VarSymbol sym = def.sym; @@ -629,7 +629,7 @@ // process all the instance initializers for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag != JCTree.METHODDEF && + if (l.head.getTag() != JCTree.METHODDEF && (TreeInfo.flags(l.head) & STATIC) == 0) { scanDef(l.head); errorUncaught(); @@ -652,7 +652,7 @@ // process all the methods for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag == JCTree.METHODDEF) { + if (l.head.getTag() == JCTree.METHODDEF) { scan(l.head); errorUncaught(); } @@ -721,7 +721,7 @@ PendingExit exit = exits.head; exits = exits.tail; if (exit.thrown == null) { - assert exit.tree.tag == JCTree.RETURN; + assert exit.tree.getTag() == JCTree.RETURN; if (isInitialConstructor) { inits = exit.inits; for (int i = firstadr; i < nextadr; i++) @@ -941,7 +941,7 @@ Bits uninits) { for (;stats.nonEmpty(); stats = stats.tail) { JCTree stat = stats.head; - if (stat.tag == JCTree.VARDEF) { + if (stat.getTag() == JCTree.VARDEF) { int adr = ((JCVariableDecl) stat).sym.adr; inits.excl(adr); uninits.incl(adr); @@ -1177,7 +1177,7 @@ } public void visitUnary(JCUnary tree) { - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.NOT: scanCond(tree.arg); Bits t = initsWhenFalse; @@ -1198,7 +1198,7 @@ } public void visitBinary(JCBinary tree) { - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.AND: scanCond(tree.lhs); Bits initsWhenFalseLeft = initsWhenFalse; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Lower.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Lower.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Lower.java Fri Jul 20 21:22:05 2007 +0000 @@ -53,7 +53,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Lower.java 1.172 07/05/05") +@Version("@(#)Lower.java 1.173 07/06/14") public class Lower extends TreeTranslator { protected static final Context.Key lowerKey = new Context.Key(); @@ -301,7 +301,7 @@ Symbol constructor = TreeInfo.symbol(tree.meth); ClassSymbol c = (ClassSymbol)constructor.owner; if (c.hasOuterInstance() && - tree.meth.tag != JCTree.SELECT && + tree.meth.getTag() != JCTree.SELECT && outerThisStack.head != null) visitSymbol(outerThisStack.head); } @@ -535,7 +535,7 @@ JCAssignOp makeAssignop(int optag, JCTree lhs, JCTree rhs) { JCAssignOp tree = make.Assignop(optag, lhs, rhs); tree.operator = rs.resolveBinaryOperator( - make_pos, tree.tag - JCTree.ASGOffset, attrEnv, lhs.type, rhs.type); + make_pos, tree.getTag() - JCTree.ASGOffset, attrEnv, lhs.type, rhs.type); tree.type = lhs.type; return tree; } @@ -723,13 +723,13 @@ private static int accessCode(JCTree tree, JCTree enclOp) { if (enclOp == null) return DEREFcode; - else if (enclOp.tag == JCTree.ASSIGN && + else if (enclOp.getTag() == JCTree.ASSIGN && tree == TreeInfo.skipParens(((JCAssign) enclOp).lhs)) return ASSIGNcode; - else if (JCTree.PREINC <= enclOp.tag && enclOp.tag <= JCTree.POSTDEC && + else if (JCTree.PREINC <= enclOp.getTag() && enclOp.getTag() <= JCTree.POSTDEC && tree == TreeInfo.skipParens(((JCUnary) enclOp).arg)) - return (enclOp.tag - JCTree.PREINC) * 2 + PREINCcode; - else if (JCTree.BITOR_ASG <= enclOp.tag && enclOp.tag <= JCTree.MOD_ASG && + return (enclOp.getTag() - JCTree.PREINC) * 2 + PREINCcode; + else if (JCTree.BITOR_ASG <= enclOp.getTag() && enclOp.getTag() <= JCTree.MOD_ASG && tree == TreeInfo.skipParens(((JCAssignOp) enclOp).lhs)) return accessCode(((OperatorSymbol) ((JCAssignOp) enclOp).operator).opcode); else @@ -924,7 +924,7 @@ if (!currentClass.isSubClass(sym.owner, types)) return true; if ((sym.flags() & STATIC) != 0 || - tree.tag != JCTree.SELECT || + tree.getTag() != JCTree.SELECT || TreeInfo.name(((JCFieldAccess) tree).selected) == names._super) return false; return !((JCFieldAccess) tree).selected.type.tsym.isSubClass(currentClass, types); @@ -939,7 +939,7 @@ if (protAccess) { Symbol qualifier = null; ClassSymbol c = currentClass; - if (tree.tag == JCTree.SELECT && (sym.flags() & STATIC) == 0) { + if (tree.getTag() == JCTree.SELECT && (sym.flags() & STATIC) == 0) { qualifier = ((JCFieldAccess) tree).selected.type.tsym; while (!qualifier.isSubClass(c, types)) { c = c.owner.enclClass(); @@ -979,7 +979,7 @@ assert sym != null && (sym.flags_field & FINAL) != 0; tree = make.at(tree.pos).Ident(sym); } - JCExpression base = (tree.tag == JCTree.SELECT) ? ((JCFieldAccess) tree).selected : null; + JCExpression base = (tree.getTag() == JCTree.SELECT) ? ((JCFieldAccess) tree).selected : null; switch (sym.kind) { case TYP: if (sym.owner.kind != PCK) { @@ -989,11 +989,11 @@ while (base != null && TreeInfo.symbol(base) != null && TreeInfo.symbol(base).kind != PCK) { - base = (base.tag == JCTree.SELECT) + base = (base.getTag() == JCTree.SELECT) ? ((JCFieldAccess) base).selected : null; } - if (tree.tag == JCTree.IDENT) { + if (tree.getTag() == JCTree.IDENT) { ((JCIdent) tree).name = flatname; } else if (base == null) { tree = make.at(tree.pos).Ident(sym); @@ -1821,7 +1821,7 @@ */ JCTree abstractRval(JCTree rval, Type type, TreeBuilder builder) { rval = TreeInfo.skipParens(rval); - switch (rval.tag) { + switch (rval.getTag()) { case JCTree.LITERAL: return builder.build(rval); case JCTree.IDENT: @@ -1855,7 +1855,7 @@ // place both the indexed expression and the index value in temps. JCTree abstractLval(JCTree lval, final TreeBuilder builder) { lval = TreeInfo.skipParens(lval); - switch (lval.tag) { + switch (lval.getTag()) { case JCTree.IDENT: return builder.build(lval); case JCTree.SELECT: { @@ -2079,7 +2079,7 @@ for (List defs = tree.defs; defs.nonEmpty(); defs=defs.tail) { - if (defs.head.tag == JCTree.VARDEF && (((JCVariableDecl) defs.head).mods.flags & ENUM) != 0) { + if (defs.head.getTag() == JCTree.VARDEF && (((JCVariableDecl) defs.head).mods.flags & ENUM) != 0) { JCVariableDecl var = (JCVariableDecl)defs.head; visitEnumConstantDef(var, nextOrdinal++); values.append(make.QualIdent(var.sym)); @@ -2490,7 +2490,7 @@ // first argument. if (c.hasOuterInstance()) { JCExpression thisArg; - if (tree.meth.tag == JCTree.SELECT) { + if (tree.meth.getTag() == JCTree.SELECT) { thisArg = attr. makeNullCheck(translate(((JCFieldAccess) tree.meth).selected)); tree.meth = make.Ident(constructor); @@ -2511,7 +2511,7 @@ // If the translated method itself is an Apply tree, we are // seeing an access method invocation. In this case, append // the method arguments to the arguments of the access method. - if (tree.meth.tag == JCTree.APPLY) { + if (tree.meth.getTag() == JCTree.APPLY) { JCMethodInvocation app = (JCMethodInvocation)tree.meth; app.args = tree.args.prependList(app.args); result = app; @@ -2636,7 +2636,7 @@ // If translated left hand side is an Apply, we are // seeing an access method invocation. In this case, append // right hand side as last argument of the access method. - if (tree.lhs.tag == JCTree.APPLY) { + if (tree.lhs.getTag() == JCTree.APPLY) { JCMethodInvocation app = (JCMethodInvocation)tree.lhs; app.args = List.of(tree.rhs).prependList(app.args); result = app; @@ -2651,12 +2651,12 @@ // boxing required; need to rewrite as x = (unbox typeof x)(x op y); // or if x == (typeof x)z then z = (unbox typeof x)((typeof x)z op y) // (but without recomputing x) - JCTree arg = (tree.lhs.tag == JCTree.TYPECAST) + JCTree arg = (tree.lhs.getTag() == JCTree.TYPECAST) ? ((JCTypeCast)tree.lhs).expr : tree.lhs; JCTree newTree = abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree lhs) { - int newTag = tree.tag - JCTree.ASGOffset; + int newTag = tree.getTag() - JCTree.ASGOffset; // Erasure (TransTypes) can change the type of // tree.lhs. However, we can still get the // unerased type of tree.lhs as it is stored @@ -2686,7 +2686,7 @@ // If translated left hand side is an Apply, we are // seeing an access method invocation. In this case, append // right hand side as last argument of the access method. - if (tree.lhs.tag == JCTree.APPLY) { + if (tree.lhs.getTag() == JCTree.APPLY) { JCMethodInvocation app = (JCMethodInvocation)tree.lhs; // if operation is a += on strings, // make sure to convert argument to string @@ -2706,13 +2706,13 @@ // or // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2 // where OP is += or -= - final boolean cast = tree.arg.tag == JCTree.TYPECAST; + final boolean cast = tree.arg.getTag() == JCTree.TYPECAST; final JCExpression arg = cast ? ((JCTypeCast)tree.arg).expr : tree.arg; return abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree tmp1) { return abstractRval(tmp1, tree.arg.type, new TreeBuilder() { public JCTree build(final JCTree tmp2) { - int opcode = (tree.tag == JCTree.POSTINC) + int opcode = (tree.getTag() == JCTree.POSTINC) ? JCTree.PLUS_ASG : JCTree.MINUS_ASG; JCTree lhs = cast ? make.TypeCast(tree.arg.type, (JCExpression)tmp1) @@ -2729,15 +2729,15 @@ public void visitUnary(JCUnary tree) { boolean isUpdateOperator = - JCTree.PREINC <= tree.tag && tree.tag <= JCTree.POSTDEC; + JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC; if (isUpdateOperator && !tree.arg.type.isPrimitive()) { - switch(tree.tag) { + switch(tree.getTag()) { case JCTree.PREINC: // ++ e // translate to e += 1 case JCTree.PREDEC: // -- e // translate to e -= 1 { - int opcode = (tree.tag == JCTree.PREINC) + int opcode = (tree.getTag() == JCTree.PREINC) ? JCTree.PLUS_ASG : JCTree.MINUS_ASG; JCAssignOp newTree = makeAssignop(opcode, tree.arg, @@ -2757,14 +2757,14 @@ tree.arg = boxIfNeeded(translate(tree.arg, tree), tree.type); - if (tree.tag == JCTree.NOT && tree.arg.type.constValue() != null) { + if (tree.getTag() == JCTree.NOT && tree.arg.type.constValue() != null) { tree.type = cfolder.fold1(bool_not, tree.arg.type); } // If translated left hand side is an Apply, we are // seeing an access method invocation. In this case, return // that access method invokation as result. - if (isUpdateOperator && tree.arg.tag == JCTree.APPLY) { + if (isUpdateOperator && tree.arg.getTag() == JCTree.APPLY) { result = tree.arg; } else { result = tree; @@ -2774,7 +2774,7 @@ public void visitBinary(JCBinary tree) { List formals = tree.operator.type.getParameterTypes(); JCTree lhs = tree.lhs = translate(tree.lhs, formals.head); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.OR: if (lhs.type.isTrue()) { result = lhs; @@ -3060,7 +3060,7 @@ // need to special case-access of the form C.super.x // these will always need an access method. boolean qualifiedSuperAccess = - tree.selected.tag == JCTree.SELECT && + tree.selected.getTag() == JCTree.SELECT && TreeInfo.name(tree.selected) == names._super; tree.selected = translate(tree.selected); if (tree.name == names._class) @@ -3101,7 +3101,7 @@ endPositions = env.toplevel.endPositions; currentClass = null; currentMethodDef = null; - outermostClassDef = (cdef.tag == JCTree.CLASSDEF) ? (JCClassDecl)cdef : null; + outermostClassDef = (cdef.getTag() == JCTree.CLASSDEF) ? (JCClassDecl)cdef : null; outermostMemberDef = null; this.translated = new ListBuffer(); classdefs = new HashMap(); diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Fri Jul 20 21:22:05 2007 +0000 @@ -53,7 +53,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)MemberEnter.java 1.71 07/05/05") +@Version("@(#)MemberEnter.java 1.72 07/06/14") public class MemberEnter extends JCTree.Visitor implements Completer { protected static final Context.Key memberEnterKey = new Context.Key(); @@ -625,7 +625,7 @@ tree.sym = v; if (tree.init != null) { v.flags_field |= HASINIT; - if ((v.flags_field & FINAL) != 0 && tree.init.tag != JCTree.NEWCLASS) + if ((v.flags_field & FINAL) != 0 && tree.init.getTag() != JCTree.NEWCLASS) v.setLazyConstValue(initEnv(tree, env), log, attr, tree.init); } if (chk.checkUnique(tree.pos(), v, enclScope)) { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/j2se/src/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/comp/Resolve.java Fri Jul 20 21:22:05 2007 +0000 @@ -47,7 +47,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Resolve.java 1.140 07/05/05") +@Version("@(#)Resolve.java 1.141 07/06/14") public class Resolve { protected static final Context.Key resolveKey = new Context.Key(); @@ -960,7 +960,7 @@ staticOnly = true; } - if (env.tree.tag != JCTree.IMPORT) { + if (env.tree.getTag() != JCTree.IMPORT) { sym = findGlobalType(env, env.toplevel.namedImportScope, name); if (sym.exists()) return sym; else if (sym.kind < bestSoFar.kind) bestSoFar = sym; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/jvm/CRTable.java --- a/j2se/src/share/classes/com/sun/tools/javac/jvm/CRTable.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/jvm/CRTable.java Fri Jul 20 21:22:05 2007 +0000 @@ -41,7 +41,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)CRTable.java 1.32 07/05/05") +@Version("@(#)CRTable.java 1.33 07/06/14") public class CRTable implements CRTFlags { @@ -532,7 +532,7 @@ */ public int endPos(JCTree tree) { if (tree == null) return Position.NOPOS; - if (tree.tag == JCTree.BLOCK) + if (tree.getTag() == JCTree.BLOCK) return ((JCBlock) tree).endpos; Integer endpos = endPositions.get(tree); if (endpos != null) diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/jvm/Gen.java --- a/j2se/src/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/jvm/Gen.java Fri Jul 20 21:22:05 2007 +0000 @@ -52,7 +52,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Gen.java 1.153 07/05/05") +@Version("@(#)Gen.java 1.154 07/06/14") public class Gen extends JCTree.Visitor { protected static final Context.Key genKey = new Context.Key(); @@ -429,7 +429,7 @@ */ boolean hasFinally(JCTree target, Env env) { while (env.tree != target) { - if (env.tree.tag == JCTree.TRY && env.info.finalize.hasFinalizer()) + if (env.tree.getTag() == JCTree.TRY && env.info.finalize.hasFinalizer()) return true; env = env.next; } @@ -455,7 +455,7 @@ // - methodDefs for method definitions for (List l = defs; l.nonEmpty(); l = l.tail) { JCTree def = l.head; - switch (def.tag) { + switch (def.getTag()) { case JCTree.BLOCK: JCBlock block = (JCBlock)def; if ((block.flags & STATIC) != 0) @@ -703,7 +703,7 @@ } int startpc = code.curPc(); genStat(tree, env); - if (tree.tag == JCTree.BLOCK) crtFlags |= CRT_BLOCK; + if (tree.getTag() == JCTree.BLOCK) crtFlags |= CRT_BLOCK; code.crt.put(tree, crtFlags, startpc, code.curPc()); } @@ -713,7 +713,7 @@ if (code.isAlive()) { code.statBegin(tree.pos); genDef(tree, env); - } else if (env.info.isSwitch && tree.tag == JCTree.VARDEF) { + } else if (env.info.isSwitch && tree.getTag() == JCTree.VARDEF) { // variables whose declarations are in a switch // can be used even if the decl is unreachable. code.newLocal(((JCVariableDecl) tree).sym); @@ -780,7 +780,7 @@ */ public CondItem genCond(JCTree _tree, boolean markBranches) { JCTree inner_tree = TreeInfo.skipParens(_tree); - if (inner_tree.tag == JCTree.CONDEXPR) { + if (inner_tree.getTag() == JCTree.CONDEXPR) { JCConditional tree = (JCConditional)inner_tree; CondItem cond = genCond(tree.cond, CRT_FLOW_CONTROLLER); if (cond.isTrue()) { @@ -1027,7 +1027,7 @@ Env localEnv = env.dup(tree, new GenContext()); genStats(tree.stats, localEnv); // End the scope of all block-local variables in variable info. - if (env.tree.tag != JCTree.METHODDEF) { + if (env.tree.getTag() != JCTree.METHODDEF) { code.statBegin(tree.endpos); code.endScopes(limit); code.pendingStatPos = Position.NOPOS; @@ -1615,8 +1615,15 @@ public void visitExec(JCExpressionStatement tree) { // Optimize x++ to ++x and x-- to --x. - if (tree.expr.tag == JCTree.POSTINC) tree.expr.tag = JCTree.PREINC; - else if (tree.expr.tag == JCTree.POSTDEC) tree.expr.tag = JCTree.PREDEC; + JCExpression e = tree.expr; + switch (e.getTag()) { + case JCTree.POSTINC: + ((JCUnary) e).setTag(JCTree.PREINC); + break; + case JCTree.POSTDEC: + ((JCUnary) e).setTag(JCTree.PREDEC); + break; + } genExpr(tree.expr, tree.expr.type).drop(); } @@ -1798,13 +1805,13 @@ // If we have an increment of -32768 to +32767 of a local // int variable we can use an incr instruction instead of // proceeding further. - if ((tree.tag == JCTree.PLUS_ASG || tree.tag == JCTree.MINUS_ASG) && + if ((tree.getTag() == JCTree.PLUS_ASG || tree.getTag() == JCTree.MINUS_ASG) && l instanceof LocalItem && tree.lhs.type.tag <= INT && tree.rhs.type.tag <= INT && tree.rhs.type.constValue() != null) { int ival = ((Number) tree.rhs.type.constValue()).intValue(); - if (tree.tag == JCTree.MINUS_ASG) ival = -ival; + if (tree.getTag() == JCTree.MINUS_ASG) ival = -ival; ((LocalItem)l).incr(ival); result = l; return; @@ -1820,12 +1827,12 @@ public void visitUnary(JCUnary tree) { OperatorSymbol operator = (OperatorSymbol)tree.operator; - if (tree.tag == JCTree.NOT) { + if (tree.getTag() == JCTree.NOT) { CondItem od = genCond(tree.arg, false); result = od.negate(); } else { Item od = genExpr(tree.arg, operator.type.getParameterTypes().head); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.POS: result = od.load(); break; @@ -1842,7 +1849,7 @@ od.duplicate(); if (od instanceof LocalItem && (operator.opcode == iadd || operator.opcode == isub)) { - ((LocalItem)od).incr(tree.tag == JCTree.PREINC ? 1 : -1); + ((LocalItem)od).incr(tree.getTag() == JCTree.PREINC ? 1 : -1); result = od; } else { od.load(); @@ -1861,7 +1868,7 @@ if (od instanceof LocalItem && (operator.opcode == iadd || operator.opcode == isub)) { Item res = od.load(); - ((LocalItem)od).incr(tree.tag == JCTree.POSTINC ? 1 : -1); + ((LocalItem)od).incr(tree.getTag() == JCTree.POSTINC ? 1 : -1); result = res; } else { Item res = od.load(); @@ -1905,7 +1912,7 @@ // Convert buffer to string. bufferToString(tree.pos()); result = items.makeStackItem(syms.stringType); - } else if (tree.tag == JCTree.AND) { + } else if (tree.getTag() == JCTree.AND) { CondItem lcond = genCond(tree.lhs, CRT_FLOW_CONTROLLER); if (!lcond.isFalse()) { Chain falseJumps = lcond.jumpFalse(); @@ -1919,7 +1926,7 @@ } else { result = lcond; } - } else if (tree.tag == JCTree.OR) { + } else if (tree.getTag() == JCTree.OR) { CondItem lcond = genCond(tree.lhs, CRT_FLOW_CONTROLLER); if (!lcond.isTrue()) { Chain trueJumps = lcond.jumpTrue(); @@ -1976,7 +1983,7 @@ */ void appendStrings(JCTree tree) { tree = TreeInfo.skipParens(tree); - if (tree.tag == JCTree.PLUS && tree.type.constValue() == null) { + if (tree.getTag() == JCTree.PLUS && tree.type.constValue() == null) { JCBinary op = (JCBinary) tree; if (op.operator.kind == MTH && ((OperatorSymbol) op.operator).opcode == string_add) { @@ -2219,7 +2226,7 @@ if (nerrs != 0) { // if errors, discard code for (List l = cdef.defs; l.nonEmpty(); l = l.tail) { - if (l.head.tag == JCTree.METHODDEF) + if (l.head.getTag() == JCTree.METHODDEF) ((JCMethodDecl) l.head).sym.code = null; } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/j2se/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Jul 20 21:22:05 2007 +0000 @@ -74,7 +74,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)JavaCompiler.java 1.116 07/05/05") +@Version("@(#)JavaCompiler.java 1.117 07/06/14") public class JavaCompiler implements ClassReader.SourceCompleter { /** The context key for the compiler. */ protected static final Context.Key compilerKey = @@ -1362,7 +1362,7 @@ ListBuffer newdefs = lb(); for (List it = tree.defs; it.tail != null; it = it.tail) { JCTree t = it.head; - switch (t.tag) { + switch (t.getTag()) { case JCTree.CLASSDEF: if (isInterface || (((JCClassDecl) t).mods.flags & (Flags.PROTECTED|Flags.PUBLIC)) != 0 || diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/model/JavacElements.java --- a/j2se/src/share/classes/com/sun/tools/javac/model/JavacElements.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/model/JavacElements.java Fri Jul 20 21:22:05 2007 +0000 @@ -59,7 +59,7 @@ * risk. This code and its internal interfaces are subject to change * or deletion without notice.

    */ -@Version("@(#)JavacElements.java 1.19 07/05/05") +@Version("@(#)JavacElements.java 1.20 07/06/14") public class JavacElements implements Elements { private JavaCompiler javaCompiler; @@ -298,7 +298,7 @@ } } public void visitArray(Attribute.Array array) { - if (tree.tag == JCTree.NEWARRAY && + if (tree.getTag() == JCTree.NEWARRAY && types.elemtype(array.type).tsym == findme.type.tsym) { List elems = ((JCNewArray) tree).elems; for (Attribute value : array.values) { @@ -337,7 +337,7 @@ scan(t.args); } public void visitAssign(JCAssign t) { - if (t.lhs.tag == JCTree.IDENT) { + if (t.lhs.getTag() == JCTree.IDENT) { JCIdent ident = (JCIdent) t.lhs; if (ident.sym == sym) result = t.rhs; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/parser/Parser.java --- a/j2se/src/share/classes/com/sun/tools/javac/parser/Parser.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/parser/Parser.java Fri Jul 20 21:22:05 2007 +0000 @@ -48,7 +48,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Parser.java 1.107 07/05/05") +@Version("@(#)Parser.java 1.108 07/06/14") public class Parser { /** A factory for creating parsers. */ @@ -746,7 +746,7 @@ assert top == 0; t = odStack[0]; - if (t.tag == JCTree.PLUS) { + if (t.getTag() == JCTree.PLUS) { StringBuffer buf = foldStrings(t); if (buf != null) { t = toP(F.at(startPos).Literal(TypeTags.CLASS, buf.toString())); @@ -777,7 +777,7 @@ protected StringBuffer foldStrings(JCTree tree) { List buf = List.nil(); while (true) { - if (tree.tag == JCTree.LITERAL) { + if (tree.getTag() == JCTree.LITERAL) { JCLiteral lit = (JCLiteral) tree; if (lit.typetag == TypeTags.CLASS) { StringBuffer sbuf = @@ -788,9 +788,9 @@ } return sbuf; } - } else if (tree.tag == JCTree.PLUS) { + } else if (tree.getTag() == JCTree.PLUS) { JCBinary op = (JCBinary)tree; - if (op.rhs.tag == JCTree.LITERAL) { + if (op.rhs.getTag() == JCTree.LITERAL) { JCLiteral lit = (JCLiteral) op.rhs; if (lit.typetag == TypeTags.CLASS) { buf = buf.prepend((String) lit.value); @@ -1579,7 +1579,7 @@ default: Name name = S.name(); JCExpression t = term(EXPR | TYPE); - if (S.token() == COLON && t.tag == JCTree.IDENT) { + if (S.token() == COLON && t.getTag() == JCTree.IDENT) { S.nextToken(); JCStatement stat = statement(); stats.append(F.at(pos).Labelled(name, stat)); @@ -1656,7 +1656,7 @@ accept(LPAREN); List inits = S.token() == SEMI ? List.nil() : forInit(); if (inits.length() == 1 && - inits.head.tag == JCTree.VARDEF && + inits.head.getTag() == JCTree.VARDEF && ((JCVariableDecl) inits.head).init == null && S.token() == COLON) { checkForeach(); @@ -1778,7 +1778,7 @@ default: Name name = S.name(); JCExpression expr = expression(); - if (S.token() == COLON && expr.tag == JCTree.IDENT) { + if (S.token() == COLON && expr.getTag() == JCTree.IDENT) { S.nextToken(); JCStatement stat = statement(); return F.at(pos).Labelled(name, stat); @@ -2012,7 +2012,7 @@ if (S.token() == IDENTIFIER) { mode = EXPR; JCExpression t1 = term1(); - if (t1.tag == JCTree.IDENT && S.token() == EQ) { + if (t1.getTag() == JCTree.IDENT && S.token() == EQ) { int pos = S.pos(); accept(EQ); return toP(F.at(pos).Assign(t1, annotationValue())); @@ -2503,7 +2503,7 @@ } else { type = type(); } - if (S.token() == LPAREN && !isInterface && type.tag == JCTree.IDENT) { + if (S.token() == LPAREN && !isInterface && type.getTag() == JCTree.IDENT) { if (isInterface || name != className) log.error(pos, "invalid.meth.decl.ret.type.req"); return List.of(methodDeclaratorRest( @@ -2686,7 +2686,7 @@ /** Check that given tree is a legal expression statement. */ protected JCExpression checkExprStat(JCExpression t) { - switch(t.tag) { + switch(t.getTag()) { case JCTree.PREINC: case JCTree.PREDEC: case JCTree.POSTINC: case JCTree.POSTDEC: case JCTree.ASSIGN: diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/j2se/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Jul 20 21:22:05 2007 +0000 @@ -80,7 +80,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)JavacProcessingEnvironment.java 1.34 07/05/05") +@Version("@(#)JavacProcessingEnvironment.java 1.35 07/06/14") public class JavacProcessingEnvironment implements ProcessingEnvironment, Closeable { Options options; @@ -914,7 +914,7 @@ List classes = List.nil(); for (JCCompilationUnit unit : units) { for (JCTree node : unit.defs) { - if (node.tag == JCTree.CLASSDEF) { + if (node.getTag() == JCTree.CLASSDEF) { classes = classes.prepend(((JCClassDecl) node).sym); } } @@ -1280,7 +1280,7 @@ } public String toString() { - return "javac ProcessingEnvironment version @(#)JavacProcessingEnvironment.java 1.34 07/05/05"; + return "javac ProcessingEnvironment version @(#)JavacProcessingEnvironment.java 1.35 07/06/14"; } public static boolean isValidOptionName(String optionName) { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/tree/JCTree.java --- a/j2se/src/share/classes/com/sun/tools/javac/tree/JCTree.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/tree/JCTree.java Fri Jul 20 21:22:05 2007 +0000 @@ -79,7 +79,7 @@ * @see TreeTranslator * @see Pretty */ -@Version("@(#)JCTree.java 1.83 07/05/05") +@Version("@(#)JCTree.java 1.84 07/06/14") public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition { /* Tree tag values, identifying kinds of trees */ @@ -335,13 +335,7 @@ /* The tag of this node -- one of the constants declared above. */ - public int tag; - - /** Initialize tree with given tag. - */ - public JCTree(int tag) { - this.tag = tag; - } + public abstract int getTag(); /** Convert a tree to a pretty-printed string. */ public String toString() { @@ -449,7 +443,6 @@ PackageSymbol packge, Scope namedImportScope, Scope starImportScope) { - super(TOPLEVEL); this.packageAnnotations = packageAnnotations; this.pid = pid; this.defs = defs; @@ -468,7 +461,7 @@ public List getImports() { ListBuffer imports = new ListBuffer(); for (JCTree tree : defs) { - if (tree.tag == IMPORT) + if (tree.getTag() == IMPORT) imports.append((JCImport)tree); else break; @@ -485,7 +478,7 @@ public List getTypeDecls() { List typeDefs; for (typeDefs = defs; !typeDefs.isEmpty(); typeDefs = typeDefs.tail) - if (typeDefs.head.tag != IMPORT) + if (typeDefs.head.getTag() != IMPORT) break; return typeDefs; } @@ -493,6 +486,11 @@ public R accept(TreeVisitor v, D d) { return v.visitCompilationUnit(this, d); } + + @Override + public int getTag() { + return TOPLEVEL; + } } /** @@ -503,7 +501,6 @@ public boolean staticImport; public JCTree qualid; protected JCImport(JCTree qualid, boolean importStatic) { - super(IMPORT); this.qualid = qualid; this.staticImport = importStatic; } @@ -518,12 +515,14 @@ public R accept(TreeVisitor v, D d) { return v.visitImport(this, d); } + + @Override + public int getTag() { + return IMPORT; + } } public static abstract class JCStatement extends JCTree implements StatementTree { - public JCStatement(int tag) { - super(tag); - } @Override public JCStatement setType(Type type) { super.setType(type); @@ -537,9 +536,6 @@ } public static abstract class JCExpression extends JCTree implements ExpressionTree { - public JCExpression(int tag) { - super(tag); - } @Override public JCExpression setType(Type type) { super.setType(type); @@ -578,7 +574,6 @@ List defs, ClassSymbol sym) { - super(CLASSDEF); this.mods = mods; this.name = name; this.typarams = typarams; @@ -607,6 +602,11 @@ public R accept(TreeVisitor v, D d) { return v.visitClass(this, d); } + + @Override + public int getTag() { + return CLASSDEF; + } } /** @@ -640,7 +640,6 @@ JCExpression defaultValue, MethodSymbol sym) { - super(METHODDEF); this.mods = mods; this.name = name; this.restype = restype; @@ -675,6 +674,11 @@ public R accept(TreeVisitor v, D d) { return v.visitMethod(this, d); } + + @Override + public int getTag() { + return METHODDEF; + } } /** @@ -696,7 +700,6 @@ JCExpression vartype, JCExpression init, VarSymbol sym) { - super(VARDEF); this.mods = mods; this.name = name; this.vartype = vartype; @@ -717,6 +720,11 @@ public R accept(TreeVisitor v, D d) { return v.visitVariable(this, d); } + + @Override + public int getTag() { + return VARDEF; + } } /** @@ -724,7 +732,6 @@ */ public static class JCSkip extends JCStatement implements EmptyStatementTree { protected JCSkip() { - super(SKIP); } @Override public void accept(Visitor v) { v.visitSkip(this); } @@ -734,6 +741,11 @@ public R accept(TreeVisitor v, D d) { return v.visitEmptyStatement(this, d); } + + @Override + public int getTag() { + return SKIP; + } } /** @@ -747,7 +759,6 @@ /** Position of closing brace, optional. */ public int endpos = Position.NOPOS; protected JCBlock(long flags, List stats) { - super(BLOCK); this.stats = stats; this.flags = flags; } @@ -763,6 +774,11 @@ public R accept(TreeVisitor v, D d) { return v.visitBlock(this, d); } + + @Override + public int getTag() { + return BLOCK; + } } /** @@ -772,7 +788,6 @@ public JCStatement body; public JCExpression cond; protected JCDoWhileLoop(JCStatement body, JCExpression cond) { - super(DOLOOP); this.body = body; this.cond = cond; } @@ -786,6 +801,11 @@ public R accept(TreeVisitor v, D d) { return v.visitDoWhileLoop(this, d); } + + @Override + public int getTag() { + return DOLOOP; + } } /** @@ -795,7 +815,6 @@ public JCExpression cond; public JCStatement body; protected JCWhileLoop(JCExpression cond, JCStatement body) { - super(WHILELOOP); this.cond = cond; this.body = body; } @@ -809,6 +828,11 @@ public R accept(TreeVisitor v, D d) { return v.visitWhileLoop(this, d); } + + @Override + public int getTag() { + return WHILELOOP; + } } /** @@ -824,7 +848,6 @@ List update, JCStatement body) { - super(FORLOOP); this.init = init; this.cond = cond; this.step = update; @@ -846,6 +869,11 @@ public R accept(TreeVisitor v, D d) { return v.visitForLoop(this, d); } + + @Override + public int getTag() { + return FORLOOP; + } } /** @@ -856,7 +884,6 @@ public JCExpression expr; public JCStatement body; protected JCEnhancedForLoop(JCVariableDecl var, JCExpression expr, JCStatement body) { - super(FOREACHLOOP); this.var = var; this.expr = expr; this.body = body; @@ -872,6 +899,10 @@ public R accept(TreeVisitor v, D d) { return v.visitEnhancedForLoop(this, d); } + @Override + public int getTag() { + return FOREACHLOOP; + } } /** @@ -881,13 +912,11 @@ public Name label; public JCStatement body; protected JCLabeledStatement(Name label, JCStatement body) { - super(LABELLED); this.label = label; this.body = body; } @Override public void accept(Visitor v) { v.visitLabelled(this); } - public Kind getKind() { return Kind.LABELED_STATEMENT; } public Name getLabel() { return label; } public JCStatement getStatement() { return body; } @@ -895,6 +924,10 @@ public R accept(TreeVisitor v, D d) { return v.visitLabeledStatement(this, d); } + @Override + public int getTag() { + return LABELLED; + } } /** @@ -904,7 +937,6 @@ public JCExpression selector; public List cases; protected JCSwitch(JCExpression selector, List cases) { - super(SWITCH); this.selector = selector; this.cases = cases; } @@ -918,6 +950,10 @@ public R accept(TreeVisitor v, D d) { return v.visitSwitch(this, d); } + @Override + public int getTag() { + return SWITCH; + } } /** @@ -927,7 +963,6 @@ public JCExpression pat; public List stats; protected JCCase(JCExpression pat, List stats) { - super(CASE); this.pat = pat; this.stats = stats; } @@ -941,6 +976,10 @@ public R accept(TreeVisitor v, D d) { return v.visitCase(this, d); } + @Override + public int getTag() { + return CASE; + } } /** @@ -950,7 +989,6 @@ public JCExpression lock; public JCBlock body; protected JCSynchronized(JCExpression lock, JCBlock body) { - super(SYNCHRONIZED); this.lock = lock; this.body = body; } @@ -964,6 +1002,10 @@ public R accept(TreeVisitor v, D d) { return v.visitSynchronized(this, d); } + @Override + public int getTag() { + return SYNCHRONIZED; + } } /** @@ -974,7 +1016,6 @@ public List catchers; public JCBlock finalizer; protected JCTry(JCBlock body, List catchers, JCBlock finalizer) { - super(TRY); this.body = body; this.catchers = catchers; this.finalizer = finalizer; @@ -992,6 +1033,10 @@ public R accept(TreeVisitor v, D d) { return v.visitTry(this, d); } + @Override + public int getTag() { + return TRY; + } } /** @@ -1001,7 +1046,6 @@ public JCVariableDecl param; public JCBlock body; protected JCCatch(JCVariableDecl param, JCBlock body) { - super(CATCH); this.param = param; this.body = body; } @@ -1015,6 +1059,10 @@ public R accept(TreeVisitor v, D d) { return v.visitCatch(this, d); } + @Override + public int getTag() { + return CATCH; + } } /** @@ -1028,7 +1076,6 @@ JCExpression truepart, JCExpression falsepart) { - super(CONDEXPR); this.cond = cond; this.truepart = truepart; this.falsepart = falsepart; @@ -1044,6 +1091,10 @@ public R accept(TreeVisitor v, D d) { return v.visitConditionalExpression(this, d); } + @Override + public int getTag() { + return CONDEXPR; + } } /** @@ -1057,7 +1108,6 @@ JCStatement thenpart, JCStatement elsepart) { - super(IF); this.cond = cond; this.thenpart = thenpart; this.elsepart = elsepart; @@ -1073,6 +1123,10 @@ public R accept(TreeVisitor v, D d) { return v.visitIf(this, d); } + @Override + public int getTag() { + return IF; + } } /** @@ -1083,7 +1137,6 @@ public JCExpression expr; protected JCExpressionStatement(JCExpression expr) { - super(EXEC); this.expr = expr; } @Override @@ -1095,6 +1148,10 @@ public R accept(TreeVisitor v, D d) { return v.visitExpressionStatement(this, d); } + @Override + public int getTag() { + return EXEC; + } } /** @@ -1104,7 +1161,6 @@ public Name label; public JCTree target; protected JCBreak(Name label, JCTree target) { - super(BREAK); this.label = label; this.target = target; } @@ -1117,6 +1173,10 @@ public R accept(TreeVisitor v, D d) { return v.visitBreak(this, d); } + @Override + public int getTag() { + return BREAK; + } } /** @@ -1126,7 +1186,6 @@ public Name label; public JCTree target; protected JCContinue(Name label, JCTree target) { - super(CONTINUE); this.label = label; this.target = target; } @@ -1139,6 +1198,10 @@ public R accept(TreeVisitor v, D d) { return v.visitContinue(this, d); } + @Override + public int getTag() { + return CONTINUE; + } } /** @@ -1147,7 +1210,6 @@ public static class JCReturn extends JCStatement implements ReturnTree { public JCExpression expr; protected JCReturn(JCExpression expr) { - super(RETURN); this.expr = expr; } @Override @@ -1159,6 +1221,10 @@ public R accept(TreeVisitor v, D d) { return v.visitReturn(this, d); } + @Override + public int getTag() { + return RETURN; + } } /** @@ -1167,7 +1233,6 @@ public static class JCThrow extends JCStatement implements ThrowTree { public JCExpression expr; protected JCThrow(JCTree expr) { - super(THROW); this.expr = (JCExpression)expr; } @Override @@ -1179,6 +1244,10 @@ public R accept(TreeVisitor v, D d) { return v.visitThrow(this, d); } + @Override + public int getTag() { + return THROW; + } } /** @@ -1188,7 +1257,6 @@ public JCExpression cond; public JCExpression detail; protected JCAssert(JCExpression cond, JCExpression detail) { - super(ASSERT); this.cond = cond; this.detail = detail; } @@ -1202,6 +1270,10 @@ public R accept(TreeVisitor v, D d) { return v.visitAssert(this, d); } + @Override + public int getTag() { + return ASSERT; + } } /** @@ -1216,7 +1288,6 @@ JCExpression meth, List args) { - super(APPLY); this.typeargs = (typeargs == null) ? List.nil() : typeargs; this.meth = meth; @@ -1242,6 +1313,10 @@ super.setType(type); return this; } + @Override + public int getTag() { + return(APPLY); + } } /** @@ -1261,7 +1336,6 @@ List args, JCClassDecl def) { - super(NEWCLASS); this.encl = encl; this.typeargs = (typeargs == null) ? List.nil() : typeargs; @@ -1288,6 +1362,10 @@ public R accept(TreeVisitor v, D d) { return v.visitNewClass(this, d); } + @Override + public int getTag() { + return NEWCLASS; + } } /** @@ -1301,7 +1379,6 @@ List dims, List elems) { - super(NEWARRAY); this.elemtype = elemtype; this.dims = dims; this.elems = elems; @@ -1321,6 +1398,10 @@ public R accept(TreeVisitor v, D d) { return v.visitNewArray(this, d); } + @Override + public int getTag() { + return NEWARRAY; + } } /** @@ -1329,7 +1410,6 @@ public static class JCParens extends JCExpression implements ParenthesizedTree { public JCExpression expr; protected JCParens(JCExpression expr) { - super(PARENS); this.expr = expr; } @Override @@ -1341,6 +1421,10 @@ public R accept(TreeVisitor v, D d) { return v.visitParenthesized(this, d); } + @Override + public int getTag() { + return PARENS; + } } /** @@ -1350,7 +1434,6 @@ public JCExpression lhs; public JCExpression rhs; protected JCAssign(JCExpression lhs, JCExpression rhs) { - super(ASSIGN); this.lhs = lhs; this.rhs = rhs; } @@ -1364,17 +1447,22 @@ public R accept(TreeVisitor v, D d) { return v.visitAssignment(this, d); } + @Override + public int getTag() { + return ASSIGN; + } } /** * An assignment with "+=", "|=" ... */ public static class JCAssignOp extends JCExpression implements CompoundAssignmentTree { + private int opcode; public JCExpression lhs; public JCExpression rhs; public Symbol operator; protected JCAssignOp(int opcode, JCTree lhs, JCTree rhs, Symbol operator) { - super(opcode); + this.opcode = opcode; this.lhs = (JCExpression)lhs; this.rhs = (JCExpression)rhs; this.operator = operator; @@ -1382,7 +1470,7 @@ @Override public void accept(Visitor v) { v.visitAssignop(this); } - public Kind getKind() { return TreeInfo.tagToKind(tag); } + public Kind getKind() { return TreeInfo.tagToKind(getTag()); } public JCExpression getVariable() { return lhs; } public JCExpression getExpression() { return rhs; } public Symbol getOperator() { @@ -1392,22 +1480,27 @@ public R accept(TreeVisitor v, D d) { return v.visitCompoundAssignment(this, d); } + @Override + public int getTag() { + return opcode; + } } /** * A unary operation. */ public static class JCUnary extends JCExpression implements UnaryTree { + private int opcode; public JCExpression arg; public Symbol operator; protected JCUnary(int opcode, JCExpression arg) { - super(opcode); + this.opcode = opcode; this.arg = arg; } @Override public void accept(Visitor v) { v.visitUnary(this); } - public Kind getKind() { return TreeInfo.tagToKind(tag); } + public Kind getKind() { return TreeInfo.tagToKind(getTag()); } public JCExpression getExpression() { return arg; } public Symbol getOperator() { return operator; @@ -1416,12 +1509,21 @@ public R accept(TreeVisitor v, D d) { return v.visitUnary(this, d); } + @Override + public int getTag() { + return opcode; + } + + public void setTag(int tag) { + opcode = tag; + } } /** * A binary operation. */ public static class JCBinary extends JCExpression implements BinaryTree { + private int opcode; public JCExpression lhs; public JCExpression rhs; public Symbol operator; @@ -1429,7 +1531,7 @@ JCExpression lhs, JCExpression rhs, Symbol operator) { - super(opcode); + this.opcode = opcode; this.lhs = lhs; this.rhs = rhs; this.operator = operator; @@ -1437,7 +1539,7 @@ @Override public void accept(Visitor v) { v.visitBinary(this); } - public Kind getKind() { return TreeInfo.tagToKind(tag); } + public Kind getKind() { return TreeInfo.tagToKind(getTag()); } public JCExpression getLeftOperand() { return lhs; } public JCExpression getRightOperand() { return rhs; } public Symbol getOperator() { @@ -1447,6 +1549,10 @@ public R accept(TreeVisitor v, D d) { return v.visitBinary(this, d); } + @Override + public int getTag() { + return opcode; + } } /** @@ -1456,7 +1562,6 @@ public JCTree clazz; public JCExpression expr; protected JCTypeCast(JCTree clazz, JCExpression expr) { - super(TYPECAST); this.clazz = clazz; this.expr = expr; } @@ -1470,6 +1575,10 @@ public R accept(TreeVisitor v, D d) { return v.visitTypeCast(this, d); } + @Override + public int getTag() { + return TYPECAST; + } } /** @@ -1479,7 +1588,6 @@ public JCExpression expr; public JCTree clazz; protected JCInstanceOf(JCExpression expr, JCTree clazz) { - super(TYPETEST); this.expr = expr; this.clazz = clazz; } @@ -1493,6 +1601,10 @@ public R accept(TreeVisitor v, D d) { return v.visitInstanceOf(this, d); } + @Override + public int getTag() { + return TYPETEST; + } } /** @@ -1502,7 +1614,6 @@ public JCExpression indexed; public JCExpression index; protected JCArrayAccess(JCExpression indexed, JCExpression index) { - super(INDEXED); this.indexed = indexed; this.index = index; } @@ -1516,6 +1627,10 @@ public R accept(TreeVisitor v, D d) { return v.visitArrayAccess(this, d); } + @Override + public int getTag() { + return INDEXED; + } } /** @@ -1529,7 +1644,6 @@ public Name name; public Symbol sym; protected JCFieldAccess(JCExpression selected, Name name, Symbol sym) { - super(SELECT); this.selected = selected; this.name = name; this.sym = sym; @@ -1544,6 +1658,10 @@ return v.visitMemberSelect(this, d); } public Name getIdentifier() { return name; } + @Override + public int getTag() { + return SELECT; + } } /** @@ -1555,7 +1673,6 @@ public Name name; public Symbol sym; protected JCIdent(Name name, Symbol sym) { - super(IDENT); this.name = name; this.sym = sym; } @@ -1568,6 +1685,9 @@ public R accept(TreeVisitor v, D d) { return v.visitIdentifier(this, d); } + public int getTag() { + return IDENT; + } } /** @@ -1578,7 +1698,6 @@ public int typetag; public Object value; protected JCLiteral(int typetag, Object value) { - super(LITERAL); this.typetag = typetag; this.value = value; } @@ -1631,6 +1750,10 @@ super.setType(type); return this; } + @Override + public int getTag() { + return LITERAL; + } } /** @@ -1641,7 +1764,6 @@ public static class JCPrimitiveTypeTree extends JCExpression implements PrimitiveTypeTree { public int typetag; protected JCPrimitiveTypeTree(int typetag) { - super(TYPEIDENT); this.typetag = typetag; } @Override @@ -1676,6 +1798,10 @@ public R accept(TreeVisitor v, D d) { return v.visitPrimitiveType(this, d); } + @Override + public int getTag() { + return TYPEIDENT; + } } /** @@ -1684,7 +1810,6 @@ public static class JCArrayTypeTree extends JCExpression implements ArrayTypeTree { public JCExpression elemtype; protected JCArrayTypeTree(JCExpression elemtype) { - super(TYPEARRAY); this.elemtype = elemtype; } @Override @@ -1696,6 +1821,10 @@ public R accept(TreeVisitor v, D d) { return v.visitArrayType(this, d); } + @Override + public int getTag() { + return TYPEARRAY; + } } /** @@ -1705,7 +1834,6 @@ public JCExpression clazz; public List arguments; protected JCTypeApply(JCExpression clazz, List arguments) { - super(TYPEAPPLY); this.clazz = clazz; this.arguments = arguments; } @@ -1721,6 +1849,10 @@ public R accept(TreeVisitor v, D d) { return v.visitParameterizedType(this, d); } + @Override + public int getTag() { + return TYPEAPPLY; + } } /** @@ -1732,7 +1864,6 @@ public Name name; public List bounds; protected JCTypeParameter(Name name, List bounds) { - super(TYPEPARAMETER); this.name = name; this.bounds = bounds; } @@ -1748,13 +1879,16 @@ public R accept(TreeVisitor v, D d) { return v.visitTypeParameter(this, d); } + @Override + public int getTag() { + return TYPEPARAMETER; + } } public static class JCWildcard extends JCExpression implements WildcardTree { public TypeBoundKind kind; public JCTree inner; protected JCWildcard(TypeBoundKind kind, JCTree inner) { - super(WILDCARD); kind.getClass(); // null-check this.kind = kind; this.inner = inner; @@ -1779,12 +1913,15 @@ public R accept(TreeVisitor v, D d) { return v.visitWildcard(this, d); } + @Override + public int getTag() { + return WILDCARD; + } } public static class TypeBoundKind extends JCTree { public BoundKind kind; protected TypeBoundKind(BoundKind kind) { - super(TYPEBOUNDKIND); this.kind = kind; } @Override @@ -1797,13 +1934,16 @@ public R accept(TreeVisitor v, D d) { throw new AssertionError("TypeBoundKind is not part of a public API"); } + @Override + public int getTag() { + return TYPEBOUNDKIND; + } } public static class JCAnnotation extends JCExpression implements AnnotationTree { public JCTree annotationType; public List args; protected JCAnnotation(JCTree annotationType, List args) { - super(ANNOTATION); this.annotationType = annotationType; this.args = args; } @@ -1819,13 +1959,16 @@ public R accept(TreeVisitor v, D d) { return v.visitAnnotation(this, d); } + @Override + public int getTag() { + return ANNOTATION; + } } public static class JCModifiers extends JCTree implements com.sun.source.tree.ModifiersTree { public long flags; public List annotations; protected JCModifiers(long flags, List annotations) { - super(MODIFIERS); this.flags = flags; this.annotations = annotations; } @@ -1843,13 +1986,16 @@ public R accept(TreeVisitor v, D d) { return v.visitModifiers(this, d); } + @Override + public int getTag() { + return MODIFIERS; + } } public static class JCErroneous extends JCExpression implements com.sun.source.tree.ErroneousTree { public List errs; protected JCErroneous(List errs) { - super(ERRONEOUS); this.errs = errs; } @Override @@ -1865,6 +2011,10 @@ public R accept(TreeVisitor v, D d) { return v.visitErroneous(this, d); } + @Override + public int getTag() { + return ERRONEOUS; + } } /** (let int x = 3; in x+2) */ @@ -1872,7 +2022,6 @@ public List defs; public JCTree expr; protected LetExpr(List defs, JCTree expr) { - super(LETEXPR); this.defs = defs; this.expr = expr; } @@ -1880,12 +2029,16 @@ public void accept(Visitor v) { v.visitLetExpr(this); } public Kind getKind() { - throw new AssertionError("TypeBoundKind is not part of a public API"); + throw new AssertionError("LetExpr is not part of a public API"); } @Override public R accept(TreeVisitor v, D d) { throw new AssertionError("LetExpr is not part of a public API"); } + @Override + public int getTag() { + return LETEXPR; + } } /** An interface for tree factories @@ -2027,4 +2180,5 @@ public void visitTree(JCTree that) { assert false; } } + } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/tree/Pretty.java --- a/j2se/src/share/classes/com/sun/tools/javac/tree/Pretty.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/tree/Pretty.java Fri Jul 20 21:22:05 2007 +0000 @@ -44,7 +44,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)Pretty.java 1.75 07/05/05") +@Version("@(#)Pretty.java 1.76 07/06/14") public class Pretty extends JCTree.Visitor { public Pretty(Writer out, boolean sourceOutput) { @@ -311,7 +311,7 @@ /** Is the given tree an enumerator definition? */ boolean isEnumerator(JCTree t) { - return t.tag == JCTree.VARDEF && (((JCVariableDecl) t).mods.flags & ENUM) != 0; + return t.getTag() == JCTree.VARDEF && (((JCVariableDecl) t).mods.flags & ENUM) != 0; } /** Print unit consisting of package clause and import statements in toplevel, @@ -332,9 +332,9 @@ } boolean firstImport = true; for (List l = tree.defs; - l.nonEmpty() && (cdef == null || l.head.tag == JCTree.IMPORT); + l.nonEmpty() && (cdef == null || l.head.getTag() == JCTree.IMPORT); l = l.tail) { - if (l.head.tag == JCTree.IMPORT) { + if (l.head.getTag() == JCTree.IMPORT) { JCImport imp = (JCImport)l.head; Name name = TreeInfo.name(imp.qualid); if (name == name.table.asterisk || @@ -528,7 +528,7 @@ printStat(tree.body); align(); print(" while "); - if (tree.cond.tag == JCTree.PARENS) { + if (tree.cond.getTag() == JCTree.PARENS) { printExpr(tree.cond); } else { print("("); @@ -544,7 +544,7 @@ public void visitWhileLoop(JCWhileLoop tree) { try { print("while "); - if (tree.cond.tag == JCTree.PARENS) { + if (tree.cond.getTag() == JCTree.PARENS) { printExpr(tree.cond); } else { print("("); @@ -562,7 +562,7 @@ try { print("for ("); if (tree.init.nonEmpty()) { - if (tree.init.head.tag == JCTree.VARDEF) { + if (tree.init.head.getTag() == JCTree.VARDEF) { printExpr(tree.init.head); for (List l = tree.init.tail; l.nonEmpty(); l = l.tail) { JCVariableDecl vdef = (JCVariableDecl)l.head; @@ -609,7 +609,7 @@ public void visitSwitch(JCSwitch tree) { try { print("switch "); - if (tree.selector.tag == JCTree.PARENS) { + if (tree.selector.getTag() == JCTree.PARENS) { printExpr(tree.selector); } else { print("("); @@ -648,7 +648,7 @@ public void visitSynchronized(JCSynchronized tree) { try { print("synchronized "); - if (tree.lock.tag == JCTree.PARENS) { + if (tree.lock.getTag() == JCTree.PARENS) { printExpr(tree.lock); } else { print("("); @@ -706,7 +706,7 @@ public void visitIf(JCIf tree) { try { print("if "); - if (tree.cond.tag == JCTree.PARENS) { + if (tree.cond.getTag() == JCTree.PARENS) { printExpr(tree.cond); } else { print("("); @@ -793,7 +793,7 @@ public void visitApply(JCMethodInvocation tree) { try { if (!tree.typeargs.isEmpty()) { - if (tree.meth.tag == JCTree.SELECT) { + if (tree.meth.getTag() == JCTree.SELECT) { JCFieldAccess left = (JCFieldAccess)tree.meth; printExpr(left.selected); print(".<"); @@ -935,7 +935,7 @@ try { open(prec, TreeInfo.assignopPrec); printExpr(tree.lhs, TreeInfo.assignopPrec + 1); - print(" " + operatorName(tree.tag - JCTree.ASGOffset) + "= "); + print(" " + operatorName(tree.getTag() - JCTree.ASGOffset) + "= "); printExpr(tree.rhs, TreeInfo.assignopPrec); close(prec, TreeInfo.assignopPrec); } catch (IOException e) { @@ -945,10 +945,10 @@ public void visitUnary(JCUnary tree) { try { - int ownprec = TreeInfo.opPrec(tree.tag); - String opname = operatorName(tree.tag); + int ownprec = TreeInfo.opPrec(tree.getTag()); + String opname = operatorName(tree.getTag()); open(prec, ownprec); - if (tree.tag <= JCTree.PREDEC) { + if (tree.getTag() <= JCTree.PREDEC) { print(opname); printExpr(tree.arg, ownprec); } else { @@ -963,8 +963,8 @@ public void visitBinary(JCBinary tree) { try { - int ownprec = TreeInfo.opPrec(tree.tag); - String opname = operatorName(tree.tag); + int ownprec = TreeInfo.opPrec(tree.getTag()); + String opname = operatorName(tree.getTag()); open(prec, ownprec); printExpr(tree.lhs, ownprec); print(" " + opname + " "); diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java --- a/j2se/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java Fri Jul 20 21:22:05 2007 +0000 @@ -98,14 +98,14 @@ JCAssignOp t = (JCAssignOp) node; JCTree lhs = copy(t.lhs, p); JCTree rhs = copy(t.rhs, p); - return M.at(t.pos).Assignop(t.tag, lhs, rhs); + return M.at(t.pos).Assignop(t.getTag(), lhs, rhs); } public JCTree visitBinary(BinaryTree node, P p) { JCBinary t = (JCBinary) node; JCExpression lhs = copy(t.lhs, p); JCExpression rhs = copy(t.rhs, p); - return M.at(t.pos).Binary(t.tag, lhs, rhs); + return M.at(t.pos).Binary(t.getTag(), lhs, rhs); } public JCTree visitBlock(BlockTree node, P p) { @@ -373,7 +373,7 @@ public JCTree visitUnary(UnaryTree node, P p) { JCUnary t = (JCUnary) node; JCExpression arg = copy(t.arg, p); - return M.at(t.pos).Unary(t.tag, arg); + return M.at(t.pos).Unary(t.getTag(), arg); } public JCTree visitVariable(VariableTree node, P p) { @@ -400,7 +400,7 @@ public JCTree visitOther(Tree node, P p) { JCTree tree = (JCTree) node; - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.LETEXPR: { LetExpr t = (LetExpr) node; List defs = copy(t.defs, p); @@ -408,7 +408,7 @@ return M.at(t.pos).LetExpr(defs, expr); } default: - throw new AssertionError("unknown tree tag: " + tree.tag); + throw new AssertionError("unknown tree tag: " + tree.getTag()); } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java --- a/j2se/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Fri Jul 20 21:22:05 2007 +0000 @@ -44,7 +44,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -@Version("@(#)TreeInfo.java 1.56 07/05/05") +@Version("@(#)TreeInfo.java 1.57 07/06/14") public class TreeInfo { protected static final Context.Key treeInfoKey = new Context.Key(); @@ -104,7 +104,7 @@ /** Is tree a constructor declaration? */ public static boolean isConstructor(JCTree tree) { - if (tree.tag == JCTree.METHODDEF) { + if (tree.getTag() == JCTree.METHODDEF) { Name name = ((JCMethodDecl) tree).name; return name == name.table.init; } else { @@ -123,11 +123,11 @@ /** Is statement an initializer for a synthetic field? */ public static boolean isSyntheticInit(JCTree stat) { - if (stat.tag == JCTree.EXEC) { + if (stat.getTag() == JCTree.EXEC) { JCExpressionStatement exec = (JCExpressionStatement)stat; - if (exec.expr.tag == JCTree.ASSIGN) { + if (exec.expr.getTag() == JCTree.ASSIGN) { JCAssign assign = (JCAssign)exec.expr; - if (assign.lhs.tag == JCTree.SELECT) { + if (assign.lhs.getTag() == JCTree.SELECT) { JCFieldAccess select = (JCFieldAccess)assign.lhs; if (select.sym != null && (select.sym.flags() & SYNTHETIC) != 0) { @@ -144,9 +144,9 @@ /** If the expression is a method call, return the method name, null * otherwise. */ public static Name calledMethodName(JCTree tree) { - if (tree.tag == JCTree.EXEC) { + if (tree.getTag() == JCTree.EXEC) { JCExpressionStatement exec = (JCExpressionStatement)tree; - if (exec.expr.tag == JCTree.APPLY) { + if (exec.expr.getTag() == JCTree.APPLY) { Name mname = TreeInfo.name(((JCMethodInvocation) exec.expr).meth); return mname; } @@ -190,7 +190,7 @@ /** Return the first call in a constructor definition. */ public static JCMethodInvocation firstConstructorCall(JCTree tree) { - if (tree.tag != JCTree.METHODDEF) return null; + if (tree.getTag() != JCTree.METHODDEF) return null; JCMethodDecl md = (JCMethodDecl) tree; Name.Table names = md.name.table; if (md.name != names.init) return null; @@ -200,15 +200,15 @@ while (stats.nonEmpty() && isSyntheticInit(stats.head)) stats = stats.tail; if (stats.isEmpty()) return null; - if (stats.head.tag != JCTree.EXEC) return null; + if (stats.head.getTag() != JCTree.EXEC) return null; JCExpressionStatement exec = (JCExpressionStatement) stats.head; - if (exec.expr.tag != JCTree.APPLY) return null; + if (exec.expr.getTag() != JCTree.APPLY) return null; return (JCMethodInvocation)exec.expr; } /** Return true if a tree represents the null literal. */ public static boolean isNull(JCTree tree) { - if (tree.tag != JCTree.LITERAL) + if (tree.getTag() != JCTree.LITERAL) return false; JCLiteral lit = (JCLiteral) tree; return (lit.typetag == TypeTags.BOT); @@ -218,7 +218,7 @@ * the block itself if it is empty. */ public static int firstStatPos(JCTree tree) { - if (tree.tag == JCTree.BLOCK && ((JCBlock) tree).stats.nonEmpty()) + if (tree.getTag() == JCTree.BLOCK && ((JCBlock) tree).stats.nonEmpty()) return ((JCBlock) tree).stats.head.pos; else return tree.pos; @@ -228,11 +228,11 @@ * defined endpos. */ public static int endPos(JCTree tree) { - if (tree.tag == JCTree.BLOCK && ((JCBlock) tree).endpos != Position.NOPOS) + if (tree.getTag() == JCTree.BLOCK && ((JCBlock) tree).endpos != Position.NOPOS) return ((JCBlock) tree).endpos; - else if (tree.tag == JCTree.SYNCHRONIZED) + else if (tree.getTag() == JCTree.SYNCHRONIZED) return endPos(((JCSynchronized) tree).body); - else if (tree.tag == JCTree.TRY) { + else if (tree.getTag() == JCTree.TRY) { JCTry t = (JCTry) tree; return endPos((t.finalizer != null) ? t.finalizer @@ -251,7 +251,7 @@ if (tree == null) return Position.NOPOS; - switch(tree.tag) { + switch(tree.getTag()) { case(JCTree.APPLY): return getStartPos(((JCMethodInvocation) tree).meth); case(JCTree.ASSIGN): @@ -332,7 +332,7 @@ if (mapPos != null) return mapPos; - switch(tree.tag) { + switch(tree.getTag()) { case(JCTree.BITOR_ASG): case(JCTree.BITXOR_ASG): case(JCTree.BITAND_ASG): case(JCTree.SL_ASG): case(JCTree.SR_ASG): case(JCTree.USR_ASG): case(JCTree.PLUS_ASG): case(JCTree.MINUS_ASG): case(JCTree.MUL_ASG): @@ -426,11 +426,11 @@ /** The position of the finalizer of given try/synchronized statement. */ public static int finalizerPos(JCTree tree) { - if (tree.tag == JCTree.TRY) { + if (tree.getTag() == JCTree.TRY) { JCTry t = (JCTry) tree; assert t.finalizer != null; return firstStatPos(t.finalizer); - } else if (tree.tag == JCTree.SYNCHRONIZED) { + } else if (tree.getTag() == JCTree.SYNCHRONIZED) { return endPos(((JCSynchronized) tree).body); } else { throw new AssertionError(); @@ -526,8 +526,8 @@ public static JCTree referencedStatement(JCLabeledStatement tree) { JCTree t = tree; do t = ((JCLabeledStatement) t).body; - while (t.tag == JCTree.LABELLED); - switch (t.tag) { + while (t.getTag() == JCTree.LABELLED); + switch (t.getTag()) { case JCTree.DOLOOP: case JCTree.WHILELOOP: case JCTree.FORLOOP: case JCTree.FOREACHLOOP: case JCTree.SWITCH: return t; default: @@ -538,7 +538,7 @@ /** Skip parens and return the enclosed expression */ public static JCExpression skipParens(JCExpression tree) { - while (tree.tag == JCTree.PARENS) { + while (tree.getTag() == JCTree.PARENS) { tree = ((JCParens) tree).expr; } return tree; @@ -547,7 +547,7 @@ /** Skip parens and return the enclosed expression */ public static JCTree skipParens(JCTree tree) { - if (tree.tag == JCTree.PARENS) + if (tree.getTag() == JCTree.PARENS) return skipParens((JCParens)tree); else return tree; @@ -566,7 +566,7 @@ * return its name, otherwise return null. */ public static Name name(JCTree tree) { - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.IDENT: return ((JCIdent) tree).name; case JCTree.SELECT: @@ -583,7 +583,7 @@ */ public static Name fullName(JCTree tree) { tree = skipParens(tree); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.IDENT: return ((JCIdent) tree).name; case JCTree.SELECT: @@ -596,7 +596,7 @@ public static Symbol symbolFor(JCTree node) { node = skipParens(node); - switch (node.tag) { + switch (node.getTag()) { case JCTree.CLASSDEF: return ((JCClassDecl) node).sym; case JCTree.METHODDEF: @@ -613,7 +613,7 @@ */ public static Symbol symbol(JCTree tree) { tree = skipParens(tree); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.IDENT: return ((JCIdent) tree).sym; case JCTree.SELECT: @@ -628,7 +628,7 @@ /** Return true if this is a nonstatic selection. */ public static boolean nonstaticSelect(JCTree tree) { tree = skipParens(tree); - if (tree.tag != JCTree.SELECT) return false; + if (tree.getTag() != JCTree.SELECT) return false; JCFieldAccess s = (JCFieldAccess) tree; Symbol e = symbol(s.selected); return e == null || (e.kind != Kinds.PCK && e.kind != Kinds.TYP); @@ -638,7 +638,7 @@ */ public static void setSymbol(JCTree tree, Symbol sym) { tree = skipParens(tree); - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.IDENT: ((JCIdent) tree).sym = sym; break; case JCTree.SELECT: @@ -651,7 +651,7 @@ * otherwise return 0. */ public static long flags(JCTree tree) { - switch (tree.tag) { + switch (tree.getTag()) { case JCTree.VARDEF: return ((JCVariableDecl) tree).mods.flags; case JCTree.METHODDEF: diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java --- a/j2se/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -1042,7 +1042,7 @@ Name asterisk = tsym.name.table.asterisk; for (JCTree t : compenv.toplevel.defs) { - if (t.tag == JCTree.IMPORT) { + if (t.getTag() == JCTree.IMPORT) { JCTree imp = ((JCImport) t).qualid; if ((TreeInfo.name(imp) != asterisk) && (imp.type.tsym.kind & Kinds.TYP) != 0) { @@ -1083,7 +1083,7 @@ if (compenv == null) return new PackageDocImpl[0]; for (JCTree t : compenv.toplevel.defs) { - if (t.tag == JCTree.IMPORT) { + if (t.getTag() == JCTree.IMPORT) { JCTree imp = ((JCImport) t).qualid; if (TreeInfo.name(imp) == names.asterisk) { JCFieldAccess sel = (JCFieldAccess)imp; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/javadoc/JavadocTool.java --- a/j2se/src/share/classes/com/sun/tools/javadoc/JavadocTool.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/javadoc/JavadocTool.java Fri Jul 20 21:22:05 2007 +0000 @@ -359,7 +359,7 @@ ListBuffer result = new ListBuffer(); for (JCCompilationUnit t : trees) { for (JCTree def : t.defs) { - if (def.tag == JCTree.CLASSDEF) + if (def.getTag() == JCTree.CLASSDEF) result.append((JCClassDecl)def); } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java --- a/j2se/src/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -521,7 +521,12 @@ validateMirrorOrNull(returnValue); - StackFrameImpl sf = (StackFrameImpl)frame(0); + StackFrameImpl sf; + try { + sf = (StackFrameImpl)frame(0); + } catch (IndexOutOfBoundsException exc) { + throw new InvalidStackFrameException("No more frames on the stack"); + } sf.validateStackFrame(); MethodImpl meth = (MethodImpl)sf.location().method(); ValueImpl convertedValue = ValueImpl.prepareForAssignment(returnValue, diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java --- a/j2se/src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -37,8 +37,7 @@ import java.util.ResourceBundle; import java.io.IOException; -import sun.misc.Service; // slated to move to java.util in tiger. -import sun.misc.ServiceConfigurationError; +import java.util.ServiceLoader; /* Public for use by com.sun.jdi.Bootstrap */ public class VirtualMachineManagerImpl implements VirtualMachineManagerService { @@ -84,8 +83,11 @@ /* * Load the connectors */ - Iterator connectors = Service.providers(Connector.class, - Connector.class.getClassLoader()); + ServiceLoader connectorLoader = + ServiceLoader.load(Connector.class, Connector.class.getClassLoader()); + + Iterator connectors = connectorLoader.iterator(); + while (connectors.hasNext()) { Connector connector; @@ -108,8 +110,13 @@ * Load any transport services and encapsulate them with * an attaching and listening connector. */ - Iterator transportServices = Service.providers(TransportService.class, - TransportService.class.getClassLoader()); + ServiceLoader transportLoader = + ServiceLoader.load(TransportService.class, + TransportService.class.getClassLoader()); + + Iterator transportServices = + transportLoader.iterator(); + while (transportServices.hasNext()) { TransportService transportService; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Class.java --- a/j2se/src/share/classes/java/lang/Class.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Class.java Fri Jul 20 21:22:05 2007 +0000 @@ -68,23 +68,23 @@ import sun.reflect.annotation.*; /** - * Instances of the class Class represent classes and + * Instances of the class {@code Class} represent classes and * interfaces in a running Java application. An enum is a kind of * class and an annotation is a kind of interface. Every array also - * belongs to a class that is reflected as a Class object + * belongs to a class that is reflected as a {@code Class} object * that is shared by all arrays with the same element type and number - * of dimensions. The primitive Java types (boolean, - * byte, char, short, - * int, long, float, and - * double), and the keyword void are also - * represented as Class objects. + * of dimensions. The primitive Java types ({@code boolean}, + * {@code byte}, {@code char}, {@code short}, + * {@code int}, {@code long}, {@code float}, and + * {@code double}), and the keyword {@code void} are also + * represented as {@code Class} objects. * - *

    Class has no public constructor. Instead Class + *

    {@code Class} has no public constructor. Instead {@code Class} * objects are constructed automatically by the Java Virtual Machine as classes - * are loaded and by calls to the defineClass method in the class + * are loaded and by calls to the {@code defineClass} method in the class * loader. * - *

    The following example uses a Class object to print the + *

    The following example uses a {@code Class} object to print the * class name of an object: * *

    @@ -94,14 +94,14 @@
      *     }
      * 
    * - *

    It is also possible to get the Class object for a named + *

    It is also possible to get the {@code Class} object for a named * type (or for void) using a class literal * (JLS Section 15.8.2). * For example: * - *

    - *     System.out.println("The name of class Foo is: "+Foo.class.getName());
    - * 
    + *

    + * {@code System.out.println("The name of class Foo is: "+Foo.class.getName());} + *
    * * @param the type of the class modeled by this {@code Class} * object. For example, the type of {@code String.class} is {@code @@ -109,7 +109,7 @@ * unknown. * * @author unascribed - * @version 1.209, 05/05/07 + * @version 1.210, 06/22/07 * @see java.lang.ClassLoader#defineClass(byte[], int, int) * @since JDK1.0 */ @@ -138,9 +138,9 @@ * Converts the object to a string. The string representation is the * string "class" or "interface", followed by a space, and then by the * fully qualified name of the class in the format returned by - * getName. If this Class object represents a + * {@code getName}. If this {@code Class} object represents a * primitive type, this method returns the name of the primitive type. If - * this Class object represents void this method returns + * this {@code Class} object represents void this method returns * "void". * * @return a string representation of this class object. @@ -152,30 +152,30 @@ /** - * Returns the Class object associated with the class or + * Returns the {@code Class} object associated with the class or * interface with the given string name. Invoking this method is * equivalent to: * - *
    -     *  Class.forName(className, true, currentLoader)
    -     * 
    + *
    + * {@code Class.forName(className, true, currentLoader)} + *
    * - * where currentLoader denotes the defining class loader of + * where {@code currentLoader} denotes the defining class loader of * the current class. * *

    For example, the following code fragment returns the - * runtime Class descriptor for the class named - * java.lang.Thread: + * runtime {@code Class} descriptor for the class named + * {@code java.lang.Thread}: * - *

    -     *   Class t = Class.forName("java.lang.Thread")
    -     * 
    + *
    + * {@code Class t = Class.forName("java.lang.Thread")} + *
    *

    - * A call to forName("X") causes the class named - * X to be initialized. + * A call to {@code forName("X")} causes the class named + * {@code X} to be initialized. * * @param className the fully qualified name of the desired class. - * @return the Class object for the class with the + * @return the {@code Class} object for the class with the * specified name. * @exception LinkageError if the linkage fails * @exception ExceptionInInitializerError if the initialization provoked @@ -189,37 +189,37 @@ /** - * Returns the Class object associated with the class or + * Returns the {@code Class} object associated with the class or * interface with the given string name, using the given class loader. * Given the fully qualified name for a class or interface (in the same - * format returned by getName) this method attempts to + * format returned by {@code getName}) this method attempts to * locate, load, and link the class or interface. The specified class * loader is used to load the class or interface. If the parameter - * loader is null, the class is loaded through the bootstrap + * {@code loader} is null, the class is loaded through the bootstrap * class loader. The class is initialized only if the - * initialize parameter is true and if it has + * {@code initialize} parameter is {@code true} and if it has * not been initialized earlier. * - *

    If name denotes a primitive type or void, an attempt + *

    If {@code name} denotes a primitive type or void, an attempt * will be made to locate a user-defined class in the unnamed package whose - * name is name. Therefore, this method cannot be used to - * obtain any of the Class objects representing primitive + * name is {@code name}. Therefore, this method cannot be used to + * obtain any of the {@code Class} objects representing primitive * types or void. * - *

    If name denotes an array class, the component type of + *

    If {@code name} denotes an array class, the component type of * the array class is loaded but not initialized. * *

    For example, in an instance method the expression: * - *

    -     *  Class.forName("Foo")
    -     * 
    + *
    + * {@code Class.forName("Foo")} + *
    * * is equivalent to: * - *
    -     *  Class.forName("Foo", true, this.getClass().getClassLoader())
    -     * 
    + *
    + * {@code Class.forName("Foo", true, this.getClass().getClassLoader())} + *
    * * Note that this method throws errors related to loading, linking or * initializing as specified in Sections 12.2, 12.3 and 12.4 of The @@ -227,10 +227,10 @@ * Note that this method does not check whether the requested class * is accessible to its caller. * - *

    If the loader is null, and a security + *

    If the {@code loader} is {@code null}, and a security * manager is present, and the caller's class loader is not null, then this - * method calls the security manager's checkPermission method - * with a RuntimePermission("getClassLoader") permission to + * method calls the security manager's {@code checkPermission} method + * with a {@code RuntimePermission("getClassLoader")} permission to * ensure it's ok to access the bootstrap class loader. * * @param name fully qualified name of the desired class @@ -271,8 +271,8 @@ throws ClassNotFoundException; /** - * Creates a new instance of the class represented by this Class - * object. The class is instantiated as if by a new + * Creates a new instance of the class represented by this {@code Class} + * object. The class is instantiated as if by a {@code new} * expression with an empty argument list. The class is initialized if it * has not already been initialized. * @@ -291,7 +291,7 @@ * @exception IllegalAccessException if the class or its nullary * constructor is not accessible. * @exception InstantiationException - * if this Class represents an abstract class, + * if this {@code Class} represents an abstract class, * an interface, an array class, a primitive type, or void; * or if the class has no nullary constructor; * or if the instantiation fails for some other reason. @@ -304,14 +304,14 @@ *

      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * creation of new instances of this class * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -382,32 +382,32 @@ /** - * Determines if the specified Object is assignment-compatible - * with the object represented by this Class. This method is - * the dynamic equivalent of the Java language instanceof - * operator. The method returns true if the specified - * Object argument is non-null and can be cast to the - * reference type represented by this Class object without - * raising a ClassCastException. It returns false + * Determines if the specified {@code Object} is assignment-compatible + * with the object represented by this {@code Class}. This method is + * the dynamic equivalent of the Java language {@code instanceof} + * operator. The method returns {@code true} if the specified + * {@code Object} argument is non-null and can be cast to the + * reference type represented by this {@code Class} object without + * raising a {@code ClassCastException.} It returns {@code false} * otherwise. * - *

    Specifically, if this Class object represents a - * declared class, this method returns true if the specified - * Object argument is an instance of the represented class (or - * of any of its subclasses); it returns false otherwise. If - * this Class object represents an array class, this method - * returns true if the specified Object argument + *

    Specifically, if this {@code Class} object represents a + * declared class, this method returns {@code true} if the specified + * {@code Object} argument is an instance of the represented class (or + * of any of its subclasses); it returns {@code false} otherwise. If + * this {@code Class} object represents an array class, this method + * returns {@code true} if the specified {@code Object} argument * can be converted to an object of the array class by an identity * conversion or by a widening reference conversion; it returns - * false otherwise. If this Class object - * represents an interface, this method returns true if the - * class or any superclass of the specified Object argument - * implements this interface; it returns false otherwise. If - * this Class object represents a primitive type, this method - * returns false. + * {@code false} otherwise. If this {@code Class} object + * represents an interface, this method returns {@code true} if the + * class or any superclass of the specified {@code Object} argument + * implements this interface; it returns {@code false} otherwise. If + * this {@code Class} object represents a primitive type, this method + * returns {@code false}. * * @param obj the object to check - * @return true if obj is an instance of this class + * @return true if {@code obj} is an instance of this class * * @since JDK1.1 */ @@ -416,24 +416,24 @@ /** * Determines if the class or interface represented by this - * Class object is either the same as, or is a superclass or + * {@code Class} object is either the same as, or is a superclass or * superinterface of, the class or interface represented by the specified - * Class parameter. It returns true if so; - * otherwise it returns false. If this Class + * {@code Class} parameter. It returns {@code true} if so; + * otherwise it returns {@code false}. If this {@code Class} * object represents a primitive type, this method returns - * true if the specified Class parameter is - * exactly this Class object; otherwise it returns - * false. + * {@code true} if the specified {@code Class} parameter is + * exactly this {@code Class} object; otherwise it returns + * {@code false}. * *

    Specifically, this method tests whether the type represented by the - * specified Class parameter can be converted to the type - * represented by this Class object via an identity conversion + * specified {@code Class} parameter can be converted to the type + * represented by this {@code Class} object via an identity conversion * or via a widening reference conversion. See The Java Language * Specification, sections 5.1.1 and 5.1.4 , for details. * - * @param cls the Class object to be checked - * @return the boolean value indicating whether objects of the - * type cls can be assigned to objects of this class + * @param cls the {@code Class} object to be checked + * @return the {@code boolean} value indicating whether objects of the + * type {@code cls} can be assigned to objects of this class * @exception NullPointerException if the specified Class parameter is * null. * @since JDK1.1 @@ -442,39 +442,39 @@ /** - * Determines if the specified Class object represents an + * Determines if the specified {@code Class} object represents an * interface type. * - * @return true if this object represents an interface; - * false otherwise. + * @return {@code true} if this object represents an interface; + * {@code false} otherwise. */ public native boolean isInterface(); /** - * Determines if this Class object represents an array class. + * Determines if this {@code Class} object represents an array class. * - * @return true if this object represents an array class; - * false otherwise. + * @return {@code true} if this object represents an array class; + * {@code false} otherwise. * @since JDK1.1 */ public native boolean isArray(); /** - * Determines if the specified Class object represents a + * Determines if the specified {@code Class} object represents a * primitive type. * - *

    There are nine predefined Class objects to represent + *

    There are nine predefined {@code Class} objects to represent * the eight primitive types and void. These are created by the Java * Virtual Machine, and have the same names as the primitive types that - * they represent, namely boolean, byte, - * char, short, int, - * long, float, and double. + * they represent, namely {@code boolean}, {@code byte}, + * {@code char}, {@code short}, {@code int}, + * {@code long}, {@code float}, and {@code double}. * *

    These objects may only be accessed via the following public static - * final variables, and are the only Class objects for which - * this method returns true. + * final variables, and are the only {@code Class} objects for which + * this method returns {@code true}. * * @return true if and only if this class represents a primitive type * @@ -492,12 +492,12 @@ public native boolean isPrimitive(); /** - * Returns true if this Class object represents an annotation + * Returns true if this {@code Class} object represents an annotation * type. Note that if this method returns true, {@link #isInterface()} * would also return true, as all annotation types are also interfaces. * - * @return true if this class object represents an annotation - * type; false otherwise + * @return {@code true} if this class object represents an annotation + * type; {@code false} otherwise * @since 1.5 */ public boolean isAnnotation() { @@ -505,9 +505,9 @@ } /** - * Returns true if this class is a synthetic class; - * returns false otherwise. - * @return true if and only if this class is a synthetic class as + * Returns {@code true} if this class is a synthetic class; + * returns {@code false} otherwise. + * @return {@code true} if and only if this class is a synthetic class as * defined by the Java Language Specification. * @since 1.5 */ @@ -517,20 +517,20 @@ /** * Returns the name of the entity (class, interface, array class, - * primitive type, or void) represented by this Class object, - * as a String. + * primitive type, or void) represented by this {@code Class} object, + * as a {@code String}. * *

    If this class object represents a reference type that is not an * array type then the binary name of the class is returned, as specified * by the Java Language Specification, Second Edition. * *

    If this class object represents a primitive type or void, then the - * name returned is a String equal to the Java language + * name returned is a {@code String} equal to the Java language * keyword corresponding to the primitive type or void. * *

    If this class object represents a class of arrays, then the internal * form of the name consists of the name of the element type preceded by - * one or more '[' characters representing the depth of the array + * one or more '{@code [}' characters representing the depth of the array * nesting. The encoding of element type names is as follows: * *

    @@ -584,8 +584,8 @@ *

    If a security manager is present, and the caller's class loader is * not null and the caller's class loader is not the same as or an ancestor of * the class loader for the class whose class loader is requested, then - * this method calls the security manager's checkPermission - * method with a RuntimePermission("getClassLoader") + * this method calls the security manager's {@code checkPermission} + * method with a {@code RuntimePermission("getClassLoader")} * permission to ensure it's ok to access the class loader for the class. * *

    If this object @@ -595,7 +595,7 @@ * represented by this object. * @throws SecurityException * if a security manager exists and its - * checkPermission method denies + * {@code checkPermission} method denies * access to the class loader for the class. * @see java.lang.ClassLoader * @see SecurityManager#checkPermission @@ -620,13 +620,13 @@ /** - * Returns an array of TypeVariable objects that represent the + * Returns an array of {@code TypeVariable} objects that represent the * type variables declared by the generic declaration represented by this - * GenericDeclaration object, in declaration order. Returns an + * {@code GenericDeclaration} object, in declaration order. Returns an * array of length 0 if the underlying generic declaration declares no type * variables. * - * @return an array of TypeVariable objects that represent + * @return an array of {@code TypeVariable} objects that represent * the type variables declared by this generic declaration * @throws GenericSignatureFormatError if the generic * signature of this generic declaration does not conform to @@ -643,12 +643,12 @@ /** - * Returns the Class representing the superclass of the entity + * Returns the {@code Class} representing the superclass of the entity * (class, interface, primitive type or void) represented by this - * Class. If this Class represents either the - * Object class, an interface, a primitive type, or void, then + * {@code Class}. If this {@code Class} represents either the + * {@code Object} class, an interface, a primitive type, or void, then * null is returned. If this object represents an array class then the - * Class object representing the Object class is + * {@code Class} object representing the {@code Object} class is * returned. * * @return the superclass of the class represented by this object. @@ -657,21 +657,21 @@ /** - * Returns the Type representing the direct superclass of + * Returns the {@code Type} representing the direct superclass of * the entity (class, interface, primitive type or void) represented by - * this Class. + * this {@code Class}. * - *

    If the superclass is a parameterized type, the Type + *

    If the superclass is a parameterized type, the {@code Type} * object returned must accurately reflect the actual type * parameters used in the source code. The parameterized type * representing the superclass is created if it had not been * created before. See the declaration of {@link * java.lang.reflect.ParameterizedType ParameterizedType} for the * semantics of the creation process for parameterized types. If - * this Class represents either the Object + * this {@code Class} represents either the {@code Object} * class, an interface, a primitive type, or void, then null is * returned. If this object represents an array class then the - * Class object representing the Object class is + * {@code Class} object representing the {@code Object} class is * returned. * * @throws GenericSignatureFormatError if the generic @@ -724,29 +724,29 @@ *

    If this object represents a class, the return value is an array * containing objects representing all interfaces implemented by the * class. The order of the interface objects in the array corresponds to - * the order of the interface names in the implements clause + * the order of the interface names in the {@code implements} clause * of the declaration of the class represented by this object. For * example, given the declaration: - *

    -     * class Shimmer implements FloorWax, DessertTopping { ... }
    -     * 
    - * suppose the value of s is an instance of - * Shimmer; the value of the expression: - *
    -     * s.getClass().getInterfaces()[0]
    -     * 
    - * is the Class object that represents interface - * FloorWax; and the value of: - *
    -     * s.getClass().getInterfaces()[1]
    -     * 
    - * is the Class object that represents interface - * DessertTopping. + *
    + * {@code class Shimmer implements FloorWax, DessertTopping { ... }} + *
    + * suppose the value of {@code s} is an instance of + * {@code Shimmer}; the value of the expression: + *
    + * {@code s.getClass().getInterfaces()[0]} + *
    + * is the {@code Class} object that represents interface + * {@code FloorWax}; and the value of: + *
    + * {@code s.getClass().getInterfaces()[1]} + *
    + * is the {@code Class} object that represents interface + * {@code DessertTopping}. * *

    If this object represents an interface, the array contains objects * representing all interfaces extended by the interface. The order of the * interface objects in the array corresponds to the order of the interface - * names in the extends clause of the declaration of the + * names in the {@code extends} clause of the declaration of the * interface represented by this object. * *

    If this object represents a class or interface that implements no @@ -760,12 +760,12 @@ public native Class[] getInterfaces(); /** - * Returns the Types representing the interfaces + * Returns the {@code Type}s representing the interfaces * directly implemented by the class or interface represented by * this object. * *

    If a superinterface is a parameterized type, the - * Type object returned for it must accurately reflect + * {@code Type} object returned for it must accurately reflect * the actual type parameters used in the source code. The * parameterized type representing each superinterface is created * if it had not been created before. See the declaration of @@ -777,16 +777,16 @@ * array containing objects representing all interfaces * implemented by the class. The order of the interface objects in * the array corresponds to the order of the interface names in - * the implements clause of the declaration of the class + * the {@code implements} clause of the declaration of the class * represented by this object. In the case of an array class, the - * interfaces Cloneable and Serializable are + * interfaces {@code Cloneable} and {@code Serializable} are * returned in that order. * *

    If this object represents an interface, the array contains * objects representing all interfaces directly extended by the * interface. The order of the interface objects in the array * corresponds to the order of the interface names in the - * extends clause of the declaration of the interface + * {@code extends} clause of the declaration of the interface * represented by this object. * *

    If this object represents a class or interface that @@ -816,11 +816,11 @@ /** - * Returns the Class representing the component type of an + * Returns the {@code Class} representing the component type of an * array. If this class does not represent an array class this method * returns null. * - * @return the Class representing the component type of this + * @return the {@code Class} representing the component type of this * class if this class is an array * @see java.lang.reflect.Array * @since JDK1.1 @@ -831,27 +831,27 @@ /** * Returns the Java language modifiers for this class or interface, encoded * in an integer. The modifiers consist of the Java Virtual Machine's - * constants for public, protected, - * private, final, static, - * abstract and interface; they should be decoded - * using the methods of class Modifier. + * constants for {@code public}, {@code protected}, + * {@code private}, {@code final}, {@code static}, + * {@code abstract} and {@code interface}; they should be decoded + * using the methods of class {@code Modifier}. * *

    If the underlying class is an array class, then its - * public, private and protected + * {@code public}, {@code private} and {@code protected} * modifiers are the same as those of its component type. If this - * Class represents a primitive type or void, its - * public modifier is always true, and its - * protected and private modifiers are always - * false. If this object represents an array class, a - * primitive type or void, then its final modifier is always - * true and its interface modifier is always - * false. The values of its other modifiers are not determined + * {@code Class} represents a primitive type or void, its + * {@code public} modifier is always {@code true}, and its + * {@code protected} and {@code private} modifiers are always + * {@code false}. If this object represents an array class, a + * primitive type or void, then its {@code final} modifier is always + * {@code true} and its interface modifier is always + * {@code false}. The values of its other modifiers are not determined * by this specification. * *

    The modifier encodings are defined in The Java Virtual Machine * Specification, table 4.1. * - * @return the int representing the modifiers for this class + * @return the {@code int} representing the modifiers for this class * @see java.lang.reflect.Modifier * @since JDK1.1 */ @@ -876,18 +876,18 @@ /** - * If this Class object represents a local or anonymous + * If this {@code Class} object represents a local or anonymous * class within a method, returns a {@link * java.lang.reflect.Method Method} object representing the * immediately enclosing method of the underlying class. Returns - * null otherwise. + * {@code null} otherwise. * - * In particular, this method returns null if the underlying + * In particular, this method returns {@code null} if the underlying * class is a local or anonymous class immediately enclosed by a type * declaration, instance initializer or static initializer. * * @return the immediately enclosing method of the underlying class, if - * that class is a local or anonymous class; otherwise null. + * that class is a local or anonymous class; otherwise {@code null}. * @since 1.5 */ public Method getEnclosingMethod() { @@ -1005,17 +1005,17 @@ } /** - * If this Class object represents a local or anonymous + * If this {@code Class} object represents a local or anonymous * class within a constructor, returns a {@link * java.lang.reflect.Constructor Constructor} object representing * the immediately enclosing constructor of the underlying - * class. Returns null otherwise. In particular, this - * method returns null if the underlying class is a local + * class. Returns {@code null} otherwise. In particular, this + * method returns {@code null} if the underlying class is a local * or anonymous class immediately enclosed by a type declaration, * instance initializer or static initializer. * * @return the immediately enclosing constructor of the underlying class, if - * that class is a local or anonymous class; otherwise null. + * that class is a local or anonymous class; otherwise {@code null}. * @since 1.5 */ public Constructor getEnclosingConstructor() { @@ -1064,11 +1064,11 @@ /** - * If the class or interface represented by this Class object - * is a member of another class, returns the Class object + * If the class or interface represented by this {@code Class} object + * is a member of another class, returns the {@code Class} object * representing the class in which it was declared. This method returns * null if this class or interface is not a member of any other class. If - * this Class object represents an array class, a primitive + * this {@code Class} object represents an array class, a primitive * type, or void,then this method returns null. * * @return the declaring class for this class @@ -1080,7 +1080,7 @@ /** * Returns the immediately enclosing class of the underlying * class. If the underlying class is a top level class this - * method returns null. + * method returns {@code null}. * @return the immediately enclosing class of the underlying class * @since 1.5 */ @@ -1157,7 +1157,7 @@ } /** - * Character.isDigit answers true to some non-ascii + * Character.isDigit answers {@code true} to some non-ascii * digits. This one does not. */ private static boolean isAsciiDigit(char c) { @@ -1171,7 +1171,7 @@ * it is a local or anonymous class or an array whose component * type does not have a canonical name). * @return the canonical name of the underlying class if it exists, and - * null otherwise. + * {@code null} otherwise. * @since 1.5 */ public String getCanonicalName() { @@ -1196,10 +1196,10 @@ } /** - * Returns true if and only if the underlying class + * Returns {@code true} if and only if the underlying class * is an anonymous class. * - * @return true if and only if this class is an anonymous class. + * @return {@code true} if and only if this class is an anonymous class. * @since 1.5 */ public boolean isAnonymousClass() { @@ -1207,10 +1207,10 @@ } /** - * Returns true if and only if the underlying class + * Returns {@code true} if and only if the underlying class * is a local class. * - * @return true if and only if this class is a local class. + * @return {@code true} if and only if this class is a local class. * @since 1.5 */ public boolean isLocalClass() { @@ -1218,10 +1218,10 @@ } /** - * Returns true if and only if the underlying class + * Returns {@code true} if and only if the underlying class * is a member class. * - * @return true if and only if this class is a member class. + * @return {@code true} if and only if this class is a member class. * @since 1.5 */ public boolean isMemberClass() { @@ -1231,7 +1231,7 @@ /** * Returns the "simple binary name" of the underlying class, i.e., * the binary name without the leading enclosing class name. - * Returns null if the underlying class is a top level + * Returns {@code null} if the underlying class is a top level * class. */ private String getSimpleBinaryName() { @@ -1247,8 +1247,8 @@ } /** - * Returns true if this is a local class or an anonymous - * class. Returns false otherwise. + * Returns {@code true} if this is a local class or an anonymous + * class. Returns {@code false} otherwise. */ private boolean isLocalOrAnonymousClass() { // JVM Spec 4.8.6: A class must have an EnclosingMethod @@ -1258,17 +1258,17 @@ } /** - * Returns an array containing Class objects representing all + * Returns an array containing {@code Class} objects representing all * the public classes and interfaces that are members of the class - * represented by this Class object. This includes public + * represented by this {@code Class} object. This includes public * class and interface members inherited from superclasses and public class * and interface members declared by the class. This method returns an - * array of length 0 if this Class object has no public member + * array of length 0 if this {@code Class} object has no public member * classes or interfaces. This method also returns an array of length 0 if - * this Class object represents a primitive type, an array + * this {@code Class} object represents a primitive type, an array * class, or void. * - * @return the array of Class objects representing the public + * @return the array of {@code Class} objects representing the public * members of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1277,14 +1277,14 @@ *

      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} method + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} method * denies access to the classes within this class * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -1327,26 +1327,26 @@ /** - * Returns an array containing Field objects reflecting all + * Returns an array containing {@code Field} objects reflecting all * the accessible public fields of the class or interface represented by - * this Class object. The elements in the array returned are + * this {@code Class} object. The elements in the array returned are * not sorted and are not in any particular order. This method returns an * array of length 0 if the class or interface has no accessible public * fields, or if it represents an array class, a primitive type, or void. * - *

    Specifically, if this Class object represents a class, + *

    Specifically, if this {@code Class} object represents a class, * this method returns the public fields of this class and of all its - * superclasses. If this Class object represents an + * superclasses. If this {@code Class} object represents an * interface, this method returns the fields of this interface and of all * its superinterfaces. * *

    The implicit length field for array class is not reflected by this - * method. User code should use the methods of class Array to + * method. User code should use the methods of class {@code Array} to * manipulate arrays. * *

    See The Java Language Specification, sections 8.2 and 8.3. * - * @return the array of Field objects representing the + * @return the array of {@code Field} objects representing the * public fields * @exception SecurityException * If a security manager, s, is present and any of the @@ -1355,14 +1355,14 @@ *

      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the fields within this class * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -1379,25 +1379,25 @@ /** - * Returns an array containing Method objects reflecting all + * Returns an array containing {@code Method} objects reflecting all * the public member methods of the class or interface represented - * by this Class object, including those declared by the class + * by this {@code Class} object, including those declared by the class * or interface and those inherited from superclasses and * superinterfaces. Array classes return all the (public) member methods - * inherited from the Object class. The elements in the array + * inherited from the {@code Object} class. The elements in the array * returned are not sorted and are not in any particular order. This - * method returns an array of length 0 if this Class object + * method returns an array of length 0 if this {@code Class} object * represents a class or interface that has no public member methods, or if - * this Class object represents a primitive type or void. + * this {@code Class} object represents a primitive type or void. * - *

    The class initialization method <clinit> is not + *

    The class initialization method {@code } is not * included in the returned array. If the class declares multiple public * member methods with the same parameter types, they are all included in * the returned array. * *

    See The Java Language Specification, sections 8.2 and 8.4. * - * @return the array of Method objects representing the + * @return the array of {@code Method} objects representing the * public methods of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1406,14 +1406,14 @@ *

      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the methods within this class * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -1430,9 +1430,9 @@ /** - * Returns an array containing Constructor objects reflecting + * Returns an array containing {@code Constructor} objects reflecting * all the public constructors of the class represented by this - * Class object. An array of length 0 is returned if the + * {@code Class} object. An array of length 0 is returned if the * class has no public constructors, or if the class is an array class, or * if the class reflects a primitive type or void. * @@ -1446,7 +1446,7 @@ * different classes, which would violate the type guarantees of * {@code Constructor[]}. * - * @return the array of Constructor objects representing the + * @return the array of {@code Constructor} objects representing the * public constructors of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1455,14 +1455,14 @@ *
      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the constructors within this class * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -1479,10 +1479,10 @@ /** - * Returns a Field object that reflects the specified public + * Returns a {@code Field} object that reflects the specified public * member field of the class or interface represented by this - * Class object. The name parameter is a - * String specifying the simple name of the desired field. + * {@code Class} object. The {@code name} parameter is a + * {@code String} specifying the simple name of the desired field. * *

    The field to be reflected is determined by the algorithm that * follows. Let C be the class represented by this object: @@ -1494,18 +1494,18 @@ * superinterfaces are searched in the order they were declared. *

  • If no field was found in steps 1 and 2 above, and C has a * superclass S, then this algorithm is invoked recursively upon S. - * If C has no superclass, then a NoSuchFieldException + * If C has no superclass, then a {@code NoSuchFieldException} * is thrown.
  • * * *

    See The Java Language Specification, sections 8.2 and 8.3. * * @param name the field name - * @return the Field object of this class specified by - * name + * @return the {@code Field} object of this class specified by + * {@code name} * @exception NoSuchFieldException if a field with the specified name is * not found. - * @exception NullPointerException if name is null + * @exception NullPointerException if {@code name} is {@code null} * @exception SecurityException * If a security manager, s, is present and any of the * following conditions is met: @@ -1513,14 +1513,14 @@ *

      * *
    • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the field * *
    • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
    @@ -1542,17 +1542,17 @@ /** - * Returns a Method object that reflects the specified public + * Returns a {@code Method} object that reflects the specified public * member method of the class or interface represented by this - * Class object. The name parameter is a - * String specifying the simple name of the desired method. The - * parameterTypes parameter is an array of Class + * {@code Class} object. The {@code name} parameter is a + * {@code String} specifying the simple name of the desired method. The + * {@code parameterTypes} parameter is an array of {@code Class} * objects that identify the method's formal parameter types, in declared - * order. If parameterTypes is null, it is + * order. If {@code parameterTypes} is {@code null}, it is * treated as if it were an empty array. * - *

    If the name is "{@code };"or "{@code }" a - * NoSuchMethodException is raised. Otherwise, the method to + *

    If the {@code name} is "{@code };"or "{@code }" a + * {@code NoSuchMethodException} is raised. Otherwise, the method to * be reflected is determined by the algorithm that follows. Let C be the * class represented by this object: *

      @@ -1586,11 +1586,11 @@ * * @param name the name of the method * @param parameterTypes the list of parameters - * @return the Method object that matches the specified - * name and parameterTypes + * @return the {@code Method} object that matches the specified + * {@code name} and {@code parameterTypes} * @exception NoSuchMethodException if a matching method is not found * or if the name is "<init>"or "<clinit>". - * @exception NullPointerException if name is null + * @exception NullPointerException if {@code name} is {@code null} * @exception SecurityException * If a security manager, s, is present and any of the * following conditions is met: @@ -1598,14 +1598,14 @@ *
        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the method * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1627,23 +1627,23 @@ /** - * Returns a Constructor object that reflects the specified - * public constructor of the class represented by this Class - * object. The parameterTypes parameter is an array of - * Class objects that identify the constructor's formal + * Returns a {@code Constructor} object that reflects the specified + * public constructor of the class represented by this {@code Class} + * object. The {@code parameterTypes} parameter is an array of + * {@code Class} objects that identify the constructor's formal * parameter types, in declared order. * - * If this Class object represents an inner class + * If this {@code Class} object represents an inner class * declared in a non-static context, the formal parameter types * include the explicit enclosing instance as the first parameter. * *

      The constructor to reflect is the public constructor of the class - * represented by this Class object whose formal parameter - * types match those specified by parameterTypes. + * represented by this {@code Class} object whose formal parameter + * types match those specified by {@code parameterTypes}. * * @param parameterTypes the parameter array - * @return the Constructor object of the public constructor that - * matches the specified parameterTypes + * @return the {@code Constructor} object of the public constructor that + * matches the specified {@code parameterTypes} * @exception NoSuchMethodException if a matching method is not found. * @exception SecurityException * If a security manager, s, is present and any of the @@ -1652,14 +1652,14 @@ *

        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.PUBLIC)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.PUBLIC)} denies * access to the constructor * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1677,16 +1677,16 @@ /** - * Returns an array of Class objects reflecting all the + * Returns an array of {@code Class} objects reflecting all the * classes and interfaces declared as members of the class represented by - * this Class object. This includes public, protected, default + * this {@code Class} object. This includes public, protected, default * (package) access, and private classes and interfaces declared by the * class, but excludes inherited classes and interfaces. This method * returns an array of length 0 if the class declares no classes or - * interfaces as members, or if this Class object represents a + * interfaces as members, or if this {@code Class} object represents a * primitive type, an array class, or void. * - * @return the array of Class objects representing all the + * @return the array of {@code Class} objects representing all the * declared members of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1695,14 +1695,14 @@ *
        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared classes within this class * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1719,18 +1719,18 @@ /** - * Returns an array of Field objects reflecting all the fields + * Returns an array of {@code Field} objects reflecting all the fields * declared by the class or interface represented by this - * Class object. This includes public, protected, default + * {@code Class} object. This includes public, protected, default * (package) access, and private fields, but excludes inherited fields. * The elements in the array returned are not sorted and are not in any * particular order. This method returns an array of length 0 if the class - * or interface declares no fields, or if this Class object + * or interface declares no fields, or if this {@code Class} object * represents a primitive type, an array class, or void. * *

      See The Java Language Specification, sections 8.2 and 8.3. * - * @return the array of Field objects representing all the + * @return the array of {@code Field} objects representing all the * declared fields of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1739,14 +1739,14 @@ *

        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared fields within this class * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1763,22 +1763,22 @@ /** - * Returns an array of Method objects reflecting all the + * Returns an array of {@code Method} objects reflecting all the * methods declared by the class or interface represented by this - * Class object. This includes public, protected, default + * {@code Class} object. This includes public, protected, default * (package) access, and private methods, but excludes inherited methods. * The elements in the array returned are not sorted and are not in any * particular order. This method returns an array of length 0 if the class - * or interface declares no methods, or if this Class object + * or interface declares no methods, or if this {@code Class} object * represents a primitive type, an array class, or void. The class - * initialization method <clinit> is not included in the + * initialization method {@code } is not included in the * returned array. If the class declares multiple public member methods * with the same parameter types, they are all included in the returned * array. * *

      See The Java Language Specification, section 8.2. * - * @return the array of Method objects representing all the + * @return the array of {@code Method} objects representing all the * declared methods of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1787,14 +1787,14 @@ *

        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared methods within this class * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1811,19 +1811,19 @@ /** - * Returns an array of Constructor objects reflecting all the + * Returns an array of {@code Constructor} objects reflecting all the * constructors declared by the class represented by this - * Class object. These are public, protected, default + * {@code Class} object. These are public, protected, default * (package) access, and private constructors. The elements in the array * returned are not sorted and are not in any particular order. If the * class has a default constructor, it is included in the returned array. - * This method returns an array of length 0 if this Class + * This method returns an array of length 0 if this {@code Class} * object represents an interface, a primitive type, an array class, or * void. * *

      See The Java Language Specification, section 8.2. * - * @return the array of Constructor objects representing all the + * @return the array of {@code Constructor} objects representing all the * declared constructors of this class * @exception SecurityException * If a security manager, s, is present and any of the @@ -1832,14 +1832,14 @@ *

        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared constructors within this class * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1856,18 +1856,18 @@ /** - * Returns a Field object that reflects the specified declared - * field of the class or interface represented by this Class - * object. The name parameter is a String that + * Returns a {@code Field} object that reflects the specified declared + * field of the class or interface represented by this {@code Class} + * object. The {@code name} parameter is a {@code String} that * specifies the simple name of the desired field. Note that this method - * will not reflect the length field of an array class. + * will not reflect the {@code length} field of an array class. * * @param name the name of the field - * @return the Field object for the specified field in this + * @return the {@code Field} object for the specified field in this * class * @exception NoSuchFieldException if a field with the specified name is * not found. - * @exception NullPointerException if name is null + * @exception NullPointerException if {@code name} is {@code null} * @exception SecurityException * If a security manager, s, is present and any of the * following conditions is met: @@ -1875,14 +1875,14 @@ *
        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared field * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1904,25 +1904,25 @@ /** - * Returns a Method object that reflects the specified + * Returns a {@code Method} object that reflects the specified * declared method of the class or interface represented by this - * Class object. The name parameter is a - * String that specifies the simple name of the desired - * method, and the parameterTypes parameter is an array of - * Class objects that identify the method's formal parameter + * {@code Class} object. The {@code name} parameter is a + * {@code String} that specifies the simple name of the desired + * method, and the {@code parameterTypes} parameter is an array of + * {@code Class} objects that identify the method's formal parameter * types, in declared order. If more than one method with the same * parameter types is declared in a class, and one of these methods has a * return type that is more specific than any of the others, that method is * returned; otherwise one of the methods is chosen arbitrarily. If the - * name is "<init>"or "<clinit>" a NoSuchMethodException + * name is "<init>"or "<clinit>" a {@code NoSuchMethodException} * is raised. * * @param name the name of the method * @param parameterTypes the parameter array - * @return the Method object for the method of this class + * @return the {@code Method} object for the method of this class * matching the specified name and parameters * @exception NoSuchMethodException if a matching method is not found. - * @exception NullPointerException if name is null + * @exception NullPointerException if {@code name} is {@code null} * @exception SecurityException * If a security manager, s, is present and any of the * following conditions is met: @@ -1930,14 +1930,14 @@ *
        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared method * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -1959,18 +1959,18 @@ /** - * Returns a Constructor object that reflects the specified + * Returns a {@code Constructor} object that reflects the specified * constructor of the class or interface represented by this - * Class object. The parameterTypes parameter is - * an array of Class objects that identify the constructor's + * {@code Class} object. The {@code parameterTypes} parameter is + * an array of {@code Class} objects that identify the constructor's * formal parameter types, in declared order. * - * If this Class object represents an inner class + * If this {@code Class} object represents an inner class * declared in a non-static context, the formal parameter types * include the explicit enclosing instance as the first parameter. * * @param parameterTypes the parameter array - * @return The Constructor object for the constructor with the + * @return The {@code Constructor} object for the constructor with the * specified parameter list * @exception NoSuchMethodException if a matching method is not found. * @exception SecurityException @@ -1980,14 +1980,14 @@ *
        * *
      • invocation of - * {@link SecurityManager#checkMemberAccess - * s.checkMemberAccess(this, Member.DECLARED)} denies + * {@link SecurityManager#checkMemberAccess + * s.checkMemberAccess(this, Member.DECLARED)} denies * access to the declared constructor * *
      • the caller's class loader is not the same as or an * ancestor of the class loader for the current class and - * invocation of {@link SecurityManager#checkPackageAccess - * s.checkPackageAccess()} denies access to the package + * invocation of {@link SecurityManager#checkPackageAccess + * s.checkPackageAccess()} denies access to the package * of this class * *
      @@ -2016,26 +2016,26 @@ * *
        * - *
      • If the name begins with a '/' + *
      • If the {@code name} begins with a {@code '/'} * ('\u002f'), then the absolute name of the resource is the - * portion of the name following the '/'. + * portion of the {@code name} following the {@code '/'}. * *
      • Otherwise, the absolute name is of the following form: * - *
        -     *   modified_package_name/name
        -     * 
        + *
        + * {@code modified_package_name/name} + *
        * - *

        Where the modified_package_name is the package name of this - * object with '/' substituted for '.' + *

        Where the {@code modified_package_name} is the package name of this + * object with {@code '/'} substituted for {@code '.'} * ('\u002e'). * *

      * * @param name name of the desired resource - * @return A {@link java.io.InputStream} object or null if + * @return A {@link java.io.InputStream} object or {@code null} if * no resource with this name is found - * @throws NullPointerException If name is null + * @throws NullPointerException If {@code name} is {@code null} * @since JDK1.1 */ public InputStream getResourceAsStream(String name) { @@ -2061,24 +2061,24 @@ * *
        * - *
      • If the name begins with a '/' + *
      • If the {@code name} begins with a {@code '/'} * ('\u002f'), then the absolute name of the resource is the - * portion of the name following the '/'. + * portion of the {@code name} following the {@code '/'}. * *
      • Otherwise, the absolute name is of the following form: * - *
        -     *   modified_package_name/name
        -     * 
        + *
        + * {@code modified_package_name/name} + *
        * - *

        Where the modified_package_name is the package name of this - * object with '/' substituted for '.' + *

        Where the {@code modified_package_name} is the package name of this + * object with {@code '/'} substituted for {@code '.'} * ('\u002e'). * *

      * * @param name name of the desired resource - * @return A {@link java.net.URL} object or null if no + * @return A {@link java.net.URL} object or {@code null} if no * resource with this name is found * @since JDK1.1 */ @@ -2099,18 +2099,18 @@ /** - * Returns the ProtectionDomain of this class. If there is a + * Returns the {@code ProtectionDomain} of this class. If there is a * security manager installed, this method first calls the security - * manager's checkPermission method with a - * RuntimePermission("getProtectionDomain") permission to + * manager's {@code checkPermission} method with a + * {@code RuntimePermission("getProtectionDomain")} permission to * ensure it's ok to get the - * ProtectionDomain. + * {@code ProtectionDomain}. * * @return the ProtectionDomain of this class * * @throws SecurityException * if a security manager exists and its - * checkPermission method doesn't allow + * {@code checkPermission} method doesn't allow * getting the ProtectionDomain. * * @see java.security.ProtectionDomain @@ -2808,9 +2808,9 @@ * A Class instance is written initially into an ObjectOutputStream in the * following format: *
      -     *      TC_CLASS ClassDescriptor
      +     *      {@code TC_CLASS} ClassDescriptor
            *      A ClassDescriptor is a special cased serialization of 
      -     *      a java.io.ObjectStreamClass instance. 
      +     *      a {@code java.io.ObjectStreamClass} instance. 
            * 
      * A new handle is generated for the initial time the class descriptor * is written into the stream. Future references to the class descriptor @@ -2993,7 +2993,7 @@ /** * Casts an object to the class or interface represented - * by this Class object. + * by this {@code Class} object. * * @param obj the object to be cast * @return the object after casting, or null if obj is null @@ -3011,21 +3011,21 @@ } /** - * Casts this Class object to represent a subclass of the class + * Casts this {@code Class} object to represent a subclass of the class * represented by the specified class object. Checks that that the cast - * is valid, and throws a ClassCastException if it is not. If + * is valid, and throws a {@code ClassCastException} if it is not. If * this method succeeds, it always returns a reference to this class object. * *

      This method is useful when a client needs to "narrow" the type of - * a Class object to pass it to an API that restricts the - * Class objects that it is willing to accept. A cast would + * a {@code Class} object to pass it to an API that restricts the + * {@code Class} objects that it is willing to accept. A cast would * generate a compile-time warning, as the correctness of the cast * could not be checked at runtime (because generic types are implemented * by erasure). * - * @return this Class object, cast to represent a subclass of + * @return this {@code Class} object, cast to represent a subclass of * the specified class object. - * @throws ClassCastException if this Class object does not + * @throws ClassCastException if this {@code Class} object does not * represent a subclass of the specified class (here "subclass" includes * the class itself). * @since 1.5 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Integer.java --- a/j2se/src/share/classes/java/lang/Integer.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Integer.java Fri Jul 20 21:22:05 2007 +0000 @@ -45,7 +45,7 @@ * @author Arthur van Hoff * @author Josh Bloch * @author Joseph D. Darcy - * @version 1.100, 05/05/07 + * @version 1.101, 06/26/07 * @since JDK1.0 */ public final class Integer extends Number implements Comparable { @@ -958,7 +958,7 @@ // If number is Integer.MIN_VALUE, we'll end up here. The next line // handles this case, and causes any genuine format error to be // rethrown. - String constant = negative ? new String("-" + nm.substring(index)) + String constant = negative ? ("-" + nm.substring(index)) : nm.substring(index); result = Integer.valueOf(constant, radix); } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Long.java --- a/j2se/src/share/classes/java/lang/Long.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Long.java Fri Jul 20 21:22:05 2007 +0000 @@ -45,7 +45,7 @@ * @author Arthur van Hoff * @author Josh Bloch * @author Joseph D. Darcy - * @version 1.89, 05/05/07 + * @version 1.90, 06/26/07 * @since JDK1.0 */ public final class Long extends Number implements Comparable { @@ -670,7 +670,7 @@ // If number is Long.MIN_VALUE, we'll end up here. The next line // handles this case, and causes any genuine format error to be // rethrown. - String constant = negative ? new String("-" + nm.substring(index)) + String constant = negative ? ("-" + nm.substring(index)) : nm.substring(index); result = Long.valueOf(constant, radix); } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Math.java --- a/j2se/src/share/classes/java/lang/Math.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Math.java Fri Jul 20 21:22:05 2007 +0000 @@ -81,7 +81,7 @@ * * @author unascribed * @author Joseph D. Darcy - * @version 1.79, 05/05/07 + * @version 1.80, 06/20/07 * @since JDK1.0 */ @@ -719,13 +719,12 @@ * If the argument is negative, the negation of the argument is returned. * *

      Note that if the argument is equal to the value of - * {@code Integer.MIN_VALUE}, the most negative representable + * {@link Integer#MIN_VALUE}, the most negative representable * {@code int} value, the result is that same value, which is * negative. * * @param a the argument whose absolute value is to be determined * @return the absolute value of the argument. - * @see java.lang.Integer#MIN_VALUE */ public static int abs(int a) { return (a < 0) ? -a : a; @@ -737,13 +736,12 @@ * If the argument is negative, the negation of the argument is returned. * *

      Note that if the argument is equal to the value of - * {@code Long.MIN_VALUE}, the most negative representable + * {@link Long#MIN_VALUE}, the most negative representable * {@code long} value, the result is that same value, which * is negative. * * @param a the argument whose absolute value is to be determined * @return the absolute value of the argument. - * @see java.lang.Long#MIN_VALUE */ public static long abs(long a) { return (a < 0) ? -a : a; @@ -790,13 +788,12 @@ /** * Returns the greater of two {@code int} values. That is, the * result is the argument closer to the value of - * {@code Integer.MAX_VALUE}. If the arguments have the same value, + * {@link Integer#MAX_VALUE}. If the arguments have the same value, * the result is that same value. * * @param a an argument. * @param b another argument. * @return the larger of {@code a} and {@code b}. - * @see java.lang.Long#MAX_VALUE */ public static int max(int a, int b) { return (a >= b) ? a : b; @@ -805,13 +802,12 @@ /** * Returns the greater of two {@code long} values. That is, the * result is the argument closer to the value of - * {@code Long.MAX_VALUE}. If the arguments have the same value, + * {@link Long#MAX_VALUE}. If the arguments have the same value, * the result is that same value. * * @param a an argument. * @param b another argument. * @return the larger of {@code a} and {@code b}. - * @see java.lang.Long#MAX_VALUE */ public static long max(long a, long b) { return (a >= b) ? a : b; @@ -869,13 +865,12 @@ /** * Returns the smaller of two {@code int} values. That is, * the result the argument closer to the value of - * {@code Integer.MIN_VALUE}. If the arguments have the same + * {@link Integer#MIN_VALUE}. If the arguments have the same * value, the result is that same value. * * @param a an argument. * @param b another argument. * @return the smaller of {@code a} and {@code b}. - * @see java.lang.Long#MIN_VALUE */ public static int min(int a, int b) { return (a <= b) ? a : b; @@ -884,13 +879,12 @@ /** * Returns the smaller of two {@code long} values. That is, * the result is the argument closer to the value of - * {@code Long.MIN_VALUE}. If the arguments have the same + * {@link Long#MIN_VALUE}. If the arguments have the same * value, the result is that same value. * * @param a an argument. * @param b another argument. * @return the smaller of {@code a} and {@code b}. - * @see java.lang.Long#MIN_VALUE */ public static long min(long a, long b) { return (a <= b) ? a : b; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Package.java --- a/j2se/src/share/classes/java/lang/Package.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Package.java Fri Jul 20 21:22:05 2007 +0000 @@ -52,10 +52,10 @@ import java.lang.annotation.Annotation; /** - * Package objects contain version information + * {@code Package} objects contain version information * about the implementation and specification of a Java package. * This versioning information is retrieved and made available - * by the {@link ClassLoader ClassLoader} instance that + * by the {@link ClassLoader} instance that * loaded the class(es). Typically, it is stored in the manifest that is * distributed with the classes. * @@ -63,8 +63,9 @@ * particular specification and if so the specification title, version number, * and vendor strings identify that specification. * An application can ask if the package is - * compatible with a particular version, see the {@link #isCompatibleWith - * isCompatibleWith} method for details. + * compatible with a particular version, see the {@link + * #isCompatibleWith isCompatibleWith} + * method for details. * *

      Specification version numbers use a syntax that consists of nonnegative * decimal integers separated by periods ".", for example "2.0" or @@ -77,15 +78,15 @@ *

      Digits RefinedVersionopt *

      RefinedVersion: - *
      . Digits - *
      . Digits RefinedVersion + *
      {@code .} Digits + *
      {@code .} Digits RefinedVersion * *

      Digits: *
      Digit *
      Digits * *

      Digit: - *
      any character for which {@link Character#isDigit} returns true, + *
      any character for which {@link Character#isDigit} returns {@code true}, * e.g. 0, 1, 2, ... * * @@ -97,7 +98,7 @@ * implementation version strings have no specified syntax and should * only be compared for equality with desired version identifiers. * - *

      Within each ClassLoader instance all classes from the same + *

      Within each {@code ClassLoader} instance all classes from the same * java package have the same Package object. The static methods allow a package * to be found by name or the set of all packages known to the current class * loader to be found. @@ -111,7 +112,7 @@ * @return The fully-qualified name of this package as defined in the * Java Language Specification, Third Edition * - * §6.5.3, for example, java.lang + * §6.5.3, for example, {@code java.lang} */ public String getName() { return pkgName; @@ -257,11 +258,11 @@ } /** - * Find a package by name in the callers ClassLoader instance. - * The callers ClassLoader instance is used to find the package + * Find a package by name in the callers {@code ClassLoader} instance. + * The callers {@code ClassLoader} instance is used to find the package * instance corresponding to the named class. If the callers - * ClassLoader instance is null then the set of packages loaded - * by the system ClassLoader instance is searched to find the + * {@code ClassLoader} instance is null then the set of packages loaded + * by the system {@code ClassLoader} instance is searched to find the * named package.

      * * Packages have attributes for versions and specifications only if the class @@ -282,15 +283,15 @@ } /** - * Get all the packages currently known for the caller's ClassLoader + * Get all the packages currently known for the caller's {@code ClassLoader} * instance. Those packages correspond to classes loaded via or accessible by - * name to that ClassLoader instance. If the caller's - * ClassLoader instance is the bootstrap ClassLoader - * instance, which may be represented by null in some implementations, + * name to that {@code ClassLoader} instance. If the caller's + * {@code ClassLoader} instance is the bootstrap {@code ClassLoader} + * instance, which may be represented by {@code null} in some implementations, * only packages corresponding to classes loaded by the bootstrap - * ClassLoader instance will be returned. + * {@code ClassLoader} instance will be returned. * - * @return a new array of packages known to the callers ClassLoader + * @return a new array of packages known to the callers {@code ClassLoader} * instance. An zero length array is returned if none are known. */ public static Package[] getPackages() { @@ -307,7 +308,7 @@ * The class's class loader is used to find the package instance * corresponding to the specified class. If the class loader * is the bootstrap class loader, which may be represented by - * null in some implementations, then the set of packages + * {@code null} in some implementations, then the set of packages * loaded by the bootstrap class loader is searched to find the package. *

      * Packages have attributes for versions and specifications only diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/StrictMath.java --- a/j2se/src/share/classes/java/lang/StrictMath.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/StrictMath.java Fri Jul 20 21:22:05 2007 +0000 @@ -58,7 +58,7 @@ * * @author unascribed * @author Joseph D. Darcy - * @version 1.36, 05/05/07 + * @version 1.37, 06/20/07 * @since 1.3 */ @@ -655,13 +655,12 @@ * If the argument is negative, the negation of the argument is returned. * *

      Note that if the argument is equal to the value of - * {@code Integer.MIN_VALUE}, the most negative representable + * {@link Integer#MIN_VALUE}, the most negative representable * {@code int} value, the result is that same value, which is * negative. * * @param a the argument whose absolute value is to be determined. * @return the absolute value of the argument. - * @see java.lang.Integer#MIN_VALUE */ public static int abs(int a) { return (a < 0) ? -a : a; @@ -673,13 +672,12 @@ * If the argument is negative, the negation of the argument is returned. * *

      Note that if the argument is equal to the value of - * {@code Long.MIN_VALUE}, the most negative representable + * {@link Long#MIN_VALUE}, the most negative representable * {@code long} value, the result is that same value, which * is negative. * * @param a the argument whose absolute value is to be determined. * @return the absolute value of the argument. - * @see java.lang.Long#MIN_VALUE */ public static long abs(long a) { return (a < 0) ? -a : a; @@ -726,13 +724,12 @@ /** * Returns the greater of two {@code int} values. That is, the * result is the argument closer to the value of - * {@code Integer.MAX_VALUE}. If the arguments have the same value, + * {@link Integer#MAX_VALUE}. If the arguments have the same value, * the result is that same value. * * @param a an argument. * @param b another argument. * @return the larger of {@code a} and {@code b}. - * @see java.lang.Long#MAX_VALUE */ public static int max(int a, int b) { return (a >= b) ? a : b; @@ -741,14 +738,13 @@ /** * Returns the greater of two {@code long} values. That is, the * result is the argument closer to the value of - * {@code Long.MAX_VALUE}. If the arguments have the same value, + * {@link Long#MAX_VALUE}. If the arguments have the same value, * the result is that same value. * * @param a an argument. * @param b another argument. * @return the larger of {@code a} and {@code b}. - * @see java.lang.Long#MAX_VALUE - */ + */ public static long max(long a, long b) { return (a >= b) ? a : b; } @@ -805,13 +801,12 @@ /** * Returns the smaller of two {@code int} values. That is, * the result the argument closer to the value of - * {@code Integer.MIN_VALUE}. If the arguments have the same + * {@link Integer#MIN_VALUE}. If the arguments have the same * value, the result is that same value. * * @param a an argument. * @param b another argument. * @return the smaller of {@code a} and {@code b}. - * @see java.lang.Long#MIN_VALUE */ public static int min(int a, int b) { return (a <= b) ? a : b; @@ -820,13 +815,12 @@ /** * Returns the smaller of two {@code long} values. That is, * the result is the argument closer to the value of - * {@code Long.MIN_VALUE}. If the arguments have the same + * {@link Long#MIN_VALUE}. If the arguments have the same * value, the result is that same value. * * @param a an argument. * @param b another argument. * @return the smaller of {@code a} and {@code b}. - * @see java.lang.Long#MIN_VALUE */ public static long min(long a, long b) { return (a <= b) ? a : b; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/Thread.java --- a/j2se/src/share/classes/java/lang/Thread.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/Thread.java Fri Jul 20 21:22:05 2007 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1994-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1994-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -122,7 +122,7 @@ * a thread is created, a new name is generated for it. * * @author unascribed - * @version 1.179, 05/05/07 + * @version 1.182, 06/25/07 * @see Runnable * @see Runtime#exit(int) * @see #run() @@ -267,36 +267,43 @@ */ public static native void yield(); - /** - * Causes the currently executing thread to sleep (temporarily cease - * execution) for the specified number of milliseconds, subject to - * the precision and accuracy of system timers and schedulers. The thread + /** + * Causes the currently executing thread to sleep (temporarily cease + * execution) for the specified number of milliseconds, subject to + * the precision and accuracy of system timers and schedulers. The thread * does not lose ownership of any monitors. * - * @param millis the length of time to sleep in milliseconds. - * @exception InterruptedException if any thread has interrupted - * the current thread. The interrupted status of the - * current thread is cleared when this exception is thrown. - * @see Object#notify() + * @param millis + * the length of time to sleep in milliseconds + * + * @throws InterruptedException + * if any thread has interrupted the current thread. The + * interrupted status of the current thread is + * cleared when this exception is thrown. */ public static native void sleep(long millis) throws InterruptedException; /** - * Causes the currently executing thread to sleep (cease execution) - * for the specified number of milliseconds plus the specified number - * of nanoseconds, subject to the precision and accuracy of system - * timers and schedulers. The thread does not lose ownership of any + * Causes the currently executing thread to sleep (temporarily cease + * execution) for the specified number of milliseconds plus the specified + * number of nanoseconds, subject to the precision and accuracy of system + * timers and schedulers. The thread does not lose ownership of any * monitors. * - * @param millis the length of time to sleep in milliseconds. - * @param nanos 0-999999 additional nanoseconds to sleep. - * @exception IllegalArgumentException if the value of millis is - * negative or the value of nanos is not in the range - * 0-999999. - * @exception InterruptedException if any thread has interrupted - * the current thread. The interrupted status of the - * current thread is cleared when this exception is thrown. - * @see Object#notify() + * @param millis + * the length of time to sleep in milliseconds + * + * @param nanos + * 0-999999 additional nanoseconds to sleep + * + * @throws IllegalArgumentException + * if the value of millis is negative or the value of nanos + * is not in the range 0-999999 + * + * @throws InterruptedException + * if any thread has interrupted the current thread. The + * interrupted status of the current thread is + * cleared when this exception is thrown. */ public static void sleep(long millis, int nanos) throws InterruptedException { @@ -1225,24 +1232,21 @@ } /** - * Marks this thread as either a daemon thread or a user thread. The - * Java Virtual Machine exits when the only threads running are all - * daemon threads. - *

      - * This method must be called before the thread is started. - *

      - * This method first calls the checkAccess method - * of this thread - * with no arguments. This may result in throwing a - * SecurityException (in the current thread). - * - * @param on if true, marks this thread as a - * daemon thread. - * @exception IllegalThreadStateException if this thread is active. - * @exception SecurityException if the current thread cannot modify - * this thread. - * @see #isDaemon() - * @see #checkAccess + * Marks this thread as either a {@linkplain #isDaemon daemon} thread + * or a user thread. The Java Virtual Machine exits when the only + * threads running are all daemon threads. + * + *

      This method must be invoked before the thread is started. + * + * @param on + * if {@code true}, marks this thread as a daemon thread + * + * @throws IllegalThreadStateException + * if this thread is {@linkplain #isAlive alive} + * + * @throws SecurityException + * if {@link #checkAccess} determines that the current + * thread cannot modify this thread */ public final void setDaemon(boolean on) { checkAccess(); @@ -1395,7 +1399,8 @@ /** * Returns an array of stack trace elements representing the stack dump * of this thread. This method will return a zero-length array if - * this thread has not started or has terminated. + * this thread has not started, has started but has not yet been + * scheduled to run by the system, or has terminated. * If the returned array is of non-zero length then the first element of * the array represents the top of the stack, which is the most recent * method invocation in the sequence. The last element of the array @@ -1435,10 +1440,19 @@ security.checkPermission( SecurityConstants.GET_STACK_TRACE_PERMISSION); } + // optimization so we do not call into the vm for threads that + // have not yet started or have terminated if (!isAlive()) { return EMPTY_STACK_TRACE; } - return dumpThreads(new Thread[] {this})[0]; + StackTraceElement[][] stackTraceArray = dumpThreads(new Thread[] {this}); + StackTraceElement[] stackTrace = stackTraceArray[0]; + // a thread that was alive during the previous isAlive call may have + // since terminated, therefore not having a stacktrace. + if (stackTrace == null) { + stackTrace = EMPTY_STACK_TRACE; + } + return stackTrace; } else { // Don't need JVM help for current thread return (new Exception()).getStackTrace(); @@ -1496,13 +1510,11 @@ Map m = new HashMap(threads.length); for (int i = 0; i < threads.length; i++) { - if (threads[i].isAlive()) { - StackTraceElement[] stackTrace = traces[i]; - if (stackTrace == null) { - stackTrace = EMPTY_STACK_TRACE; - } + StackTraceElement[] stackTrace = traces[i]; + if (stackTrace != null) { m.put(threads[i], stackTrace); - } + } + // else terminated so we don't put it in the map } return m; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/AccessibleObject.java --- a/j2se/src/share/classes/java/lang/reflect/AccessibleObject.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/AccessibleObject.java Fri Jul 20 21:22:05 2007 +0000 @@ -39,7 +39,7 @@ * methods, or to create and initialize new instances of classes, * respectively. * - *

      Setting the accessible flag in a reflected object + *

      Setting the {@code accessible} flag in a reflected object * permits sophisticated applications with sufficient privilege, such * as Java Object Serialization or other persistence mechanisms, to * manipulate objects in a manner that would normally be prohibited. @@ -62,25 +62,25 @@ new ReflectPermission("suppressAccessChecks"); /** - * Convenience method to set the accessible flag for an + * Convenience method to set the {@code accessible} flag for an * array of objects with a single security check (for efficiency). * *

      First, if there is a security manager, its - * checkPermission method is called with a - * ReflectPermission("suppressAccessChecks") permission. + * {@code checkPermission} method is called with a + * {@code ReflectPermission("suppressAccessChecks")} permission. * - *

      A SecurityException is raised if flag is - * true but accessibility of any of the elements of the input - * array may not be changed (for example, if the element + *

      A {@code SecurityException} is raised if {@code flag} is + * {@code true} but accessibility of any of the elements of the input + * {@code array} may not be changed (for example, if the element * object is a {@link Constructor} object for the class {@link * java.lang.Class}). In the event of such a SecurityException, the - * accessibility of objects is set to flag for array elements + * accessibility of objects is set to {@code flag} for array elements * upto (and excluding) the element for which the exception occurred; the * accessibility of elements beyond (and including) the element for which * the exception occurred is unchanged. * * @param array the array of AccessibleObjects - * @param flag the new value for the accessible flag + * @param flag the new value for the {@code accessible} flag * in each object * @throws SecurityException if the request is denied. * @see SecurityManager#checkPermission @@ -96,26 +96,26 @@ } /** - * Set the accessible flag for this object to - * the indicated boolean value. A value of true indicates that + * Set the {@code accessible} flag for this object to + * the indicated boolean value. A value of {@code true} indicates that * the reflected object should suppress Java language access - * checking when it is used. A value of false indicates + * checking when it is used. A value of {@code false} indicates * that the reflected object should enforce Java language access checks. * *

      First, if there is a security manager, its - * checkPermission method is called with a - * ReflectPermission("suppressAccessChecks") permission. + * {@code checkPermission} method is called with a + * {@code ReflectPermission("suppressAccessChecks")} permission. * - *

      A SecurityException is raised if flag is - * true but accessibility of this object may not be changed + *

      A {@code SecurityException} is raised if {@code flag} is + * {@code true} but accessibility of this object may not be changed * (for example, if this element object is a {@link Constructor} object for * the class {@link java.lang.Class}). * - *

      A SecurityException is raised if this object is a {@link + *

      A {@code SecurityException} is raised if this object is a {@link * java.lang.reflect.Constructor} object for the class - * java.lang.Class, and flag is true. + * {@code java.lang.Class}, and {@code flag} is true. * - * @param flag the new value for the accessible flag + * @param flag the new value for the {@code accessible} flag * @throws SecurityException if the request is denied. * @see SecurityManager#checkPermission * @see java.lang.RuntimePermission @@ -141,9 +141,9 @@ } /** - * Get the value of the accessible flag for this object. + * Get the value of the {@code accessible} flag for this object. * - * @return the value of the object's accessible flag + * @return the value of the object's {@code accessible} flag */ public boolean isAccessible() { return override; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Array.java --- a/j2se/src/share/classes/java/lang/reflect/Array.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Array.java Fri Jul 20 21:22:05 2007 +0000 @@ -26,11 +26,11 @@ package java.lang.reflect; /** - * The Array class provides static methods to dynamically create and + * The {@code Array} class provides static methods to dynamically create and * access Java arrays. * - *

      Array permits widening conversions to occur during a get or set - * operation, but throws an IllegalArgumentException if a narrowing + *

      {@code Array} permits widening conversions to occur during a get or set + * operation, but throws an {@code IllegalArgumentException} if a narrowing * conversion would occur. * * @author Nakul Saraiya @@ -55,14 +55,14 @@ * * * - * @param componentType the Class object representing the + * @param componentType the {@code Class} object representing the * component type of the new array * @param length the length of the new array * @return the new array * @exception NullPointerException if the specified - * componentType parameter is null + * {@code componentType} parameter is null * @exception IllegalArgumentException if componentType is {@link Void#TYPE} - * @exception NegativeArraySizeException if the specified length + * @exception NegativeArraySizeException if the specified {@code length} * is negative */ public static Object newInstance(Class componentType, int length) @@ -73,35 +73,35 @@ /** * Creates a new array * with the specified component type and dimensions. - * If componentType + * If {@code componentType} * represents a non-array class or interface, the new array - * has dimensions.length dimensions and - * componentType as its component type. If - * componentType represents an array class, the + * has {@code dimensions.length} dimensions and + * {@code componentType} as its component type. If + * {@code componentType} represents an array class, the * number of dimensions of the new array is equal to the sum - * of dimensions.length and the number of - * dimensions of componentType. In this case, the + * of {@code dimensions.length} and the number of + * dimensions of {@code componentType}. In this case, the * component type of the new array is the component type of - * componentType. + * {@code componentType}. * *

      The number of dimensions of the new array must not * exceed the number of array dimensions supported by the * implementation (typically 255). * - * @param componentType the Class object representing the component + * @param componentType the {@code Class} object representing the component * type of the new array - * @param dimensions an array of int representing the dimensions of + * @param dimensions an array of {@code int} representing the dimensions of * the new array * @return the new array * @exception NullPointerException if the specified - * componentType argument is null - * @exception IllegalArgumentException if the specified dimensions + * {@code componentType} argument is null + * @exception IllegalArgumentException if the specified {@code dimensions} * argument is a zero-dimensional array, or if the number of * requested dimensions exceeds the limit on the number of array dimensions * supported by the implementation (typically 255), or if componentType * is {@link Void#TYPE}. * @exception NegativeArraySizeException if any of the components in - * the specified dimensions argument is negative. + * the specified {@code dimensions} argument is negative. */ public static Object newInstance(Class componentType, int... dimensions) throws IllegalArgumentException, NegativeArraySizeException { @@ -109,7 +109,7 @@ } /** - * Returns the length of the specified array object, as an int. + * Returns the length of the specified array object, as an {@code int}. * * @param array the array * @return the length of the array @@ -131,7 +131,7 @@ * @exception NullPointerException If the specified object is null * @exception IllegalArgumentException If the specified object is not * an array - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array */ @@ -140,7 +140,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a boolean. + * array object, as a {@code boolean}. * * @param array the array * @param index the index @@ -149,7 +149,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -159,7 +159,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a byte. + * array object, as a {@code byte}. * * @param array the array * @param index the index @@ -168,7 +168,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -178,7 +178,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a char. + * array object, as a {@code char}. * * @param array the array * @param index the index @@ -187,7 +187,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -197,7 +197,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a short. + * array object, as a {@code short}. * * @param array the array * @param index the index @@ -206,7 +206,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -216,7 +216,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as an int. + * array object, as an {@code int}. * * @param array the array * @param index the index @@ -225,7 +225,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -235,7 +235,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a long. + * array object, as a {@code long}. * * @param array the array * @param index the index @@ -244,7 +244,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -254,7 +254,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a float. + * array object, as a {@code float}. * * @param array the array * @param index the index @@ -263,7 +263,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -273,7 +273,7 @@ /** * Returns the value of the indexed component in the specified - * array object, as a double. + * array object, as a {@code double}. * * @param array the array * @param index the index @@ -282,7 +282,7 @@ * @exception IllegalArgumentException If the specified object is not * an array, or if the indexed element cannot be converted to the * return type by an identity or widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to the * length of the specified array * @see Array#get @@ -303,7 +303,7 @@ * @exception IllegalArgumentException If the specified object argument * is not an array, or if the array component type is primitive and * an unwrapping conversion fails - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array */ @@ -312,7 +312,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified boolean value. + * object to the specified {@code boolean} value. * @param array the array * @param index the index into the array * @param z the new value of the indexed component @@ -322,7 +322,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -332,7 +332,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified byte value. + * object to the specified {@code byte} value. * @param array the array * @param index the index into the array * @param b the new value of the indexed component @@ -342,7 +342,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -352,7 +352,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified char value. + * object to the specified {@code char} value. * @param array the array * @param index the index into the array * @param c the new value of the indexed component @@ -362,7 +362,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -372,7 +372,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified short value. + * object to the specified {@code short} value. * @param array the array * @param index the index into the array * @param s the new value of the indexed component @@ -382,7 +382,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -392,7 +392,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified int value. + * object to the specified {@code int} value. * @param array the array * @param index the index into the array * @param i the new value of the indexed component @@ -402,7 +402,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -412,7 +412,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified long value. + * object to the specified {@code long} value. * @param array the array * @param index the index into the array * @param l the new value of the indexed component @@ -422,7 +422,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -432,7 +432,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified float value. + * object to the specified {@code float} value. * @param array the array * @param index the index into the array * @param f the new value of the indexed component @@ -442,7 +442,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set @@ -452,7 +452,7 @@ /** * Sets the value of the indexed component of the specified array - * object to the specified double value. + * object to the specified {@code double} value. * @param array the array * @param index the index into the array * @param d the new value of the indexed component @@ -462,7 +462,7 @@ * is not an array, or if the specified value cannot be converted * to the underlying array's component type by an identity or a * primitive widening conversion - * @exception ArrayIndexOutOfBoundsException If the specified index + * @exception ArrayIndexOutOfBoundsException If the specified {@code index} * argument is negative, or if it is greater than or equal to * the length of the specified array * @see Array#set diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Constructor.java --- a/j2se/src/share/classes/java/lang/reflect/Constructor.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Constructor.java Fri Jul 20 21:22:05 2007 +0000 @@ -38,13 +38,13 @@ import java.lang.reflect.Modifier; /** - * Constructor provides information about, and access to, a single + * {@code Constructor} provides information about, and access to, a single * constructor for a class. * - *

      Constructor permits widening conversions to occur when matching the + *

      {@code Constructor} permits widening conversions to occur when matching the * actual parameters to newInstance() with the underlying * constructor's formal parameters, but throws an - * IllegalArgumentException if a narrowing conversion would occur. + * {@code IllegalArgumentException} if a narrowing conversion would occur. * * @param the class in which the constructor is declared * @@ -161,8 +161,8 @@ } /** - * Returns the Class object representing the class that declares - * the constructor represented by this Constructor object. + * Returns the {@code Class} object representing the class that declares + * the constructor represented by this {@code Constructor} object. */ public Class getDeclaringClass() { return clazz; @@ -179,8 +179,8 @@ /** * Returns the Java language modifiers for the constructor - * represented by this Constructor object, as an integer. The - * Modifier class should be used to decode the modifiers. + * represented by this {@code Constructor} object, as an integer. The + * {@code Modifier} class should be used to decode the modifiers. * * @see Modifier */ @@ -189,13 +189,13 @@ } /** - * Returns an array of TypeVariable objects that represent the + * Returns an array of {@code TypeVariable} objects that represent the * type variables declared by the generic declaration represented by this - * GenericDeclaration object, in declaration order. Returns an + * {@code GenericDeclaration} object, in declaration order. Returns an * array of length 0 if the underlying generic declaration declares no type * variables. * - * @return an array of TypeVariable objects that represent + * @return an array of {@code TypeVariable} objects that represent * the type variables declared by this generic declaration * @throws GenericSignatureFormatError if the generic * signature of this generic declaration does not conform to @@ -212,9 +212,9 @@ /** - * Returns an array of Class objects that represent the formal + * Returns an array of {@code Class} objects that represent the formal * parameter types, in declaration order, of the constructor - * represented by this Constructor object. Returns an array of + * represented by this {@code Constructor} object. Returns an array of * length 0 if the underlying constructor takes no parameters. * * @return the parameter types for the constructor this object @@ -226,19 +226,19 @@ /** - * Returns an array of Type objects that represent the formal + * Returns an array of {@code Type} objects that represent the formal * parameter types, in declaration order, of the method represented by - * this Constructor object. Returns an array of length 0 if the + * this {@code Constructor} object. Returns an array of length 0 if the * underlying method takes no parameters. * *

      If a formal parameter type is a parameterized type, - * the Type object returned for it must accurately reflect + * the {@code Type} object returned for it must accurately reflect * the actual type parameters used in the source code. * *

      If a formal parameter type is a type variable or a parameterized * type, it is created. Otherwise, it is resolved. * - * @return an array of Types that represent the formal + * @return an array of {@code Type}s that represent the formal * parameter types of the underlying method, in declaration order * @throws GenericSignatureFormatError * if the generic method signature does not conform to the format @@ -260,10 +260,10 @@ /** - * Returns an array of Class objects that represent the types + * Returns an array of {@code Class} objects that represent the types * of exceptions declared to be thrown by the underlying constructor - * represented by this Constructor object. Returns an array of - * length 0 if the constructor declares no exceptions in its throws clause. + * represented by this {@code Constructor} object. Returns an array of + * length 0 if the constructor declares no exceptions in its {@code throws} clause. * * @return the exception types declared as being thrown by the * constructor this object represents @@ -274,12 +274,12 @@ /** - * Returns an array of Type objects that represent the - * exceptions declared to be thrown by this Constructor object. + * Returns an array of {@code Type} objects that represent the + * exceptions declared to be thrown by this {@code Constructor} object. * Returns an array of length 0 if the underlying method declares - * no exceptions in its throws clause. + * no exceptions in its {@code throws} clause. * - *

      If an exception type is a parameterized type, the Type + *

      If an exception type is a parameterized type, the {@code Type} * object returned for it must accurately reflect the actual type * parameters used in the source code. * @@ -292,9 +292,9 @@ * if the generic method signature does not conform to the format * specified in the Java Virtual Machine Specification, 3rd edition * @throws TypeNotPresentException if the underlying method's - * throws clause refers to a non-existent type declaration + * {@code throws} clause refers to a non-existent type declaration * @throws MalformedParameterizedTypeException if - * the underlying method's throws clause refers to a + * the underlying method's {@code throws} clause refers to a * parameterized type that cannot be instantiated for any reason * @since 1.5 */ @@ -308,8 +308,8 @@ } /** - * Compares this Constructor against the specified object. - * Returns true if the objects are the same. Two Constructor objects are + * Compares this {@code Constructor} against the specified object. + * Returns true if the objects are the same. Two {@code Constructor} objects are * the same if they were declared by the same class and have the * same formal parameter types. */ @@ -333,7 +333,7 @@ } /** - * Returns a hashcode for this Constructor. The hashcode is + * Returns a hashcode for this {@code Constructor}. The hashcode is * the same as the hashcode for the underlying constructor's * declaring class name. */ @@ -342,7 +342,7 @@ } /** - * Returns a string describing this Constructor. The string is + * Returns a string describing this {@code Constructor}. The string is * formatted as the constructor access modifiers, if any, * followed by the fully-qualified name of the declaring class, * followed by a parenthesized, comma-separated list of the @@ -352,8 +352,8 @@ * * *

      The only possible modifiers for constructors are the access - * modifiers public, protected or - * private. Only one of these may appear, or none if the + * modifiers {@code public}, {@code protected} or + * {@code private}. Only one of these may appear, or none if the * constructor has default (package) access. */ public String toString() { @@ -388,7 +388,7 @@ } /** - * Returns a string describing this Constructor, + * Returns a string describing this {@code Constructor}, * including type parameters. The string is formatted as the * constructor access modifiers, if any, followed by an * angle-bracketed comma separated list of the constructor's type @@ -398,8 +398,8 @@ * * If this constructor was declared to take a variable number of * arguments, instead of denoting the last parameter as - * "Type[]", it is denoted as - * "Type...". + * "Type[]", it is denoted as + * "Type...". * * A space is used to separate access modifiers from one another * and from the type parameters or return type. If there are no @@ -407,15 +407,15 @@ * parameter list is present, a space separates the list from the * class name. If the constructor is declared to throw * exceptions, the parameter list is followed by a space, followed - * by the word "throws" followed by a + * by the word "{@code throws}" followed by a * comma-separated list of the thrown exception types. * *

      The only possible modifiers for constructors are the access - * modifiers public, protected or - * private. Only one of these may appear, or none if the + * modifiers {@code public}, {@code protected} or + * {@code private}. Only one of these may appear, or none if the * constructor has default (package) access. * - * @return a string describing this Constructor, + * @return a string describing this {@code Constructor}, * include type parameters * * @since 1.5 @@ -427,17 +427,16 @@ if (mod != 0) { sb.append(Modifier.toString(mod) + " "); } - Type[] typeparms = getTypeParameters(); + TypeVariable[] typeparms = getTypeParameters(); if (typeparms.length > 0) { boolean first = true; sb.append("<"); - for(Type typeparm: typeparms) { + for(TypeVariable typeparm: typeparms) { if (!first) sb.append(","); - if (typeparm instanceof Class) - sb.append(((Class)typeparm).getName()); - else - sb.append(typeparm.toString()); + // Class objects can't occur here; no need to test + // and call Class.getName(). + sb.append(typeparm.toString()); first = false; } sb.append("> "); @@ -446,8 +445,8 @@ sb.append("("); Type[] params = getGenericParameterTypes(); for (int j = 0; j < params.length; j++) { - String param = (params[j] instanceof Class)? - Field.getTypeName((Class)params[j]): + String param = (params[j] instanceof Class)? + Field.getTypeName((Class)params[j]): (params[j].toString()); if (isVarArgs() && (j == params.length - 1)) // replace T[] with T... param = param.replaceFirst("\\[\\]$", "..."); @@ -474,7 +473,7 @@ } /** - * Uses the constructor represented by this Constructor object to + * Uses the constructor represented by this {@code Constructor} object to * create and initialize a new instance of the constructor's * declaring class, with the specified initialization parameters. * Individual parameters are automatically unwrapped to match @@ -482,7 +481,7 @@ * parameters are subject to method invocation conversions as necessary. * *

      If the number of formal parameters required by the underlying constructor - * is 0, the supplied initargs array may be of length 0 or null. + * is 0, the supplied {@code initargs} array may be of length 0 or null. * *

      If the constructor's declaring class is an inner class in a * non-static context, the first argument to the constructor needs @@ -498,13 +497,13 @@ * * @param initargs array of objects to be passed as arguments to * the constructor call; values of primitive types are wrapped in - * a wrapper object of the appropriate type (e.g. a float + * a wrapper object of the appropriate type (e.g. a {@code float} * in a {@link java.lang.Float Float}) * * @return a new object created by calling the constructor * this object represents * - * @exception IllegalAccessException if this Constructor object + * @exception IllegalAccessException if this {@code Constructor} object * enforces Java language access control and the underlying * constructor is inaccessible. * @exception IllegalArgumentException if the number of actual @@ -541,11 +540,11 @@ } /** - * Returns true if this constructor was declared to take - * a variable number of arguments; returns false + * Returns {@code true} if this constructor was declared to take + * a variable number of arguments; returns {@code false} * otherwise. * - * @return true if an only if this constructor was declared to + * @return {@code true} if an only if this constructor was declared to * take a variable number of arguments. * @since 1.5 */ @@ -554,8 +553,8 @@ } /** - * Returns true if this constructor is a synthetic - * constructor; returns false otherwise. + * Returns {@code true} if this constructor is a synthetic + * constructor; returns {@code false} otherwise. * * @return true if and only if this constructor is a synthetic * constructor as defined by the Java Language Specification. @@ -651,7 +650,7 @@ /** * Returns an array of arrays that represent the annotations on the formal * parameters, in declaration order, of the method represented by - * this Constructor object. (Returns an array of length zero if the + * this {@code Constructor} object. (Returns an array of length zero if the * underlying method is parameterless. If the method has one or more * parameters, a nested array of length zero is returned for each parameter * with no annotations.) The annotation objects contained in the returned diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Field.java --- a/j2se/src/share/classes/java/lang/reflect/Field.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Field.java Fri Jul 20 21:22:05 2007 +0000 @@ -37,12 +37,12 @@ /** - * A Field provides information about, and dynamic access to, a + * A {@code Field} provides information about, and dynamic access to, a * single field of a class or an interface. The reflected field may * be a class (static) field or an instance field. * - *

      A Field permits widening conversions to occur during a get or - * set access operation, but throws an IllegalArgumentException if a + *

      A {@code Field} permits widening conversions to occur during a get or + * set access operation, but throws an {@code IllegalArgumentException} if a * narrowing conversion would occur. * * @see Member @@ -151,15 +151,15 @@ } /** - * Returns the Class object representing the class or interface - * that declares the field represented by this Field object. + * Returns the {@code Class} object representing the class or interface + * that declares the field represented by this {@code Field} object. */ public Class getDeclaringClass() { return clazz; } /** - * Returns the name of the field represented by this Field object. + * Returns the name of the field represented by this {@code Field} object. */ public String getName() { return name; @@ -167,7 +167,7 @@ /** * Returns the Java language modifiers for the field represented - * by this Field object, as an integer. The Modifier class should + * by this {@code Field} object, as an integer. The {@code Modifier} class should * be used to decode the modifiers. * * @see Modifier @@ -177,10 +177,10 @@ } /** - * Returns true if this field represents an element of - * an enumerated type; returns false otherwise. + * Returns {@code true} if this field represents an element of + * an enumerated type; returns {@code false} otherwise. * - * @return true if and only if this field represents an element of + * @return {@code true} if and only if this field represents an element of * an enumerated type. * @since 1.5 */ @@ -189,8 +189,8 @@ } /** - * Returns true if this field is a synthetic - * field; returns false otherwise. + * Returns {@code true} if this field is a synthetic + * field; returns {@code false} otherwise. * * @return true if and only if this field is a synthetic * field as defined by the Java Language Specification. @@ -201,11 +201,11 @@ } /** - * Returns a Class object that identifies the + * Returns a {@code Class} object that identifies the * declared type for the field represented by this - * Field object. + * {@code Field} object. * - * @return a Class object identifying the declared + * @return a {@code Class} object identifying the declared * type of the field represented by this object */ public Class getType() { @@ -213,18 +213,18 @@ } /** - * Returns a Type object that represents the declared type for - * the field represented by this Field object. + * Returns a {@code Type} object that represents the declared type for + * the field represented by this {@code Field} object. * - *

      If the Type is a parameterized type, the - * Type object returned must accurately reflect the + *

      If the {@code Type} is a parameterized type, the + * {@code Type} object returned must accurately reflect the * actual type parameters used in the source code. * *

      If the type of the underlying field is a type variable or a * parameterized type, it is created. Otherwise, it is resolved. * - * @return a Type object that represents the declared type for - * the field represented by this Field object + * @return a {@code Type} object that represents the declared type for + * the field represented by this {@code Field} object * @throws GenericSignatureFormatError if the generic field * signature does not conform to the format specified in the Java * Virtual Machine Specification, 3rd edition @@ -245,8 +245,8 @@ /** - * Compares this Field against the specified object. Returns - * true if the objects are the same. Two Field objects are the same if + * Compares this {@code Field} against the specified object. Returns + * true if the objects are the same. Two {@code Field} objects are the same if * they were declared by the same class and have the same name * and type. */ @@ -261,7 +261,7 @@ } /** - * Returns a hashcode for this Field. This is computed as the + * Returns a hashcode for this {@code Field}. This is computed as the * exclusive-or of the hashcodes for the underlying field's * declaring class name and its name. */ @@ -270,7 +270,7 @@ } /** - * Returns a string describing this Field. The format is + * Returns a string describing this {@code Field}. The format is * the access modifiers for the field, if any, followed * by the field type, followed by a space, followed by * the fully-qualified name of the class declaring the field, @@ -282,10 +282,10 @@ * * *

      The modifiers are placed in canonical order as specified by - * "The Java Language Specification". This is public, - * protected or private first, and then other - * modifiers in the following order: static, final, - * transient, volatile. + * "The Java Language Specification". This is {@code public}, + * {@code protected} or {@code private} first, and then other + * modifiers in the following order: {@code static}, {@code final}, + * {@code transient}, {@code volatile}. */ public String toString() { int mod = getModifiers(); @@ -296,7 +296,7 @@ } /** - * Returns a string describing this Field, including + * Returns a string describing this {@code Field}, including * its generic type. The format is the access modifiers for the * field, if any, followed by the generic field type, followed by * a space, followed by the fully-qualified name of the class @@ -304,12 +304,12 @@ * of the field. * *

      The modifiers are placed in canonical order as specified by - * "The Java Language Specification". This is public, - * protected or private first, and then other - * modifiers in the following order: static, final, - * transient, volatile. + * "The Java Language Specification". This is {@code public}, + * {@code protected} or {@code private} first, and then other + * modifiers in the following order: {@code static}, {@code final}, + * {@code transient}, {@code volatile}. * - * @return a string describing this Field, including + * @return a string describing this {@code Field}, including * its generic type * * @since 1.5 @@ -325,24 +325,24 @@ } /** - * Returns the value of the field represented by this Field, on + * Returns the value of the field represented by this {@code Field}, on * the specified object. The value is automatically wrapped in an * object if it has a primitive type. * *

      The underlying field's value is obtained as follows: * - *

      If the underlying field is a static field, the obj argument + *

      If the underlying field is a static field, the {@code obj} argument * is ignored; it may be null. * *

      Otherwise, the underlying field is an instance field. If the - * specified obj argument is null, the method throws a - * NullPointerException. If the specified object is not an + * specified {@code obj} argument is null, the method throws a + * {@code NullPointerException}. If the specified object is not an * instance of the class or interface declaring the underlying - * field, the method throws an IllegalArgumentException. + * field, the method throws an {@code IllegalArgumentException}. * - *

      If this Field object enforces Java language access control, and + *

      If this {@code Field} object enforces Java language access control, and * the underlying field is inaccessible, the method throws an - * IllegalAccessException. + * {@code IllegalAccessException}. * If the underlying field is static, the class that declared the * field is initialized if it has not already been initialized. * @@ -351,13 +351,13 @@ * is wrapped in an object before being returned, otherwise it is * returned as is. * - *

      If the field is hidden in the type of obj, + *

      If the field is hidden in the type of {@code obj}, * the field's value is obtained according to the preceding rules. * * @param obj object from which the represented field's value is * to be extracted * @return the value of the represented field in object - * obj; primitive values are wrapped in an appropriate + * {@code obj}; primitive values are wrapped in an appropriate * object before being returned * * @exception IllegalAccessException if the underlying field @@ -377,11 +377,11 @@ } /** - * Gets the value of a static or instance boolean field. + * Gets the value of a static or instance {@code boolean} field. * - * @param obj the object to extract the boolean value + * @param obj the object to extract the {@code boolean} value * from - * @return the value of the boolean field + * @return the value of the {@code boolean} field * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -389,7 +389,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type boolean by a + * converted to the type {@code boolean} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -404,11 +404,11 @@ } /** - * Gets the value of a static or instance byte field. + * Gets the value of a static or instance {@code byte} field. * - * @param obj the object to extract the byte value + * @param obj the object to extract the {@code byte} value * from - * @return the value of the byte field + * @return the value of the {@code byte} field * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -416,7 +416,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type byte by a + * converted to the type {@code byte} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -432,12 +432,12 @@ /** * Gets the value of a static or instance field of type - * char or of another primitive type convertible to - * type char via a widening conversion. + * {@code char} or of another primitive type convertible to + * type {@code char} via a widening conversion. * - * @param obj the object to extract the char value + * @param obj the object to extract the {@code char} value * from - * @return the value of the field converted to type char + * @return the value of the field converted to type {@code char} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -445,7 +445,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type char by a + * converted to the type {@code char} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -461,12 +461,12 @@ /** * Gets the value of a static or instance field of type - * short or of another primitive type convertible to - * type short via a widening conversion. + * {@code short} or of another primitive type convertible to + * type {@code short} via a widening conversion. * - * @param obj the object to extract the short value + * @param obj the object to extract the {@code short} value * from - * @return the value of the field converted to type short + * @return the value of the field converted to type {@code short} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -474,7 +474,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type short by a + * converted to the type {@code short} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -490,12 +490,12 @@ /** * Gets the value of a static or instance field of type - * int or of another primitive type convertible to - * type int via a widening conversion. + * {@code int} or of another primitive type convertible to + * type {@code int} via a widening conversion. * - * @param obj the object to extract the int value + * @param obj the object to extract the {@code int} value * from - * @return the value of the field converted to type int + * @return the value of the field converted to type {@code int} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -503,7 +503,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type int by a + * converted to the type {@code int} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -519,12 +519,12 @@ /** * Gets the value of a static or instance field of type - * long or of another primitive type convertible to - * type long via a widening conversion. + * {@code long} or of another primitive type convertible to + * type {@code long} via a widening conversion. * - * @param obj the object to extract the long value + * @param obj the object to extract the {@code long} value * from - * @return the value of the field converted to type long + * @return the value of the field converted to type {@code long} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -532,7 +532,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type long by a + * converted to the type {@code long} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -548,12 +548,12 @@ /** * Gets the value of a static or instance field of type - * float or of another primitive type convertible to - * type float via a widening conversion. + * {@code float} or of another primitive type convertible to + * type {@code float} via a widening conversion. * - * @param obj the object to extract the float value + * @param obj the object to extract the {@code float} value * from - * @return the value of the field converted to type float + * @return the value of the field converted to type {@code float} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -561,7 +561,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type float by a + * converted to the type {@code float} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -577,12 +577,12 @@ /** * Gets the value of a static or instance field of type - * double or of another primitive type convertible to - * type double via a widening conversion. + * {@code double} or of another primitive type convertible to + * type {@code double} via a widening conversion. * - * @param obj the object to extract the double value + * @param obj the object to extract the {@code double} value * from - * @return the value of the field converted to type double + * @return the value of the field converted to type {@code double} * * @exception IllegalAccessException if the underlying field * is inaccessible. @@ -590,7 +590,7 @@ * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be - * converted to the type double by a + * converted to the type {@code double} by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. @@ -605,29 +605,29 @@ } /** - * Sets the field represented by this Field object on the + * Sets the field represented by this {@code Field} object on the * specified object argument to the specified new value. The new * value is automatically unwrapped if the underlying field has a * primitive type. * *

      The operation proceeds as follows: * - *

      If the underlying field is static, the obj argument is + *

      If the underlying field is static, the {@code obj} argument is * ignored; it may be null. * *

      Otherwise the underlying field is an instance field. If the * specified object argument is null, the method throws a - * NullPointerException. If the specified object argument is not + * {@code NullPointerException}. If the specified object argument is not * an instance of the class or interface declaring the underlying - * field, the method throws an IllegalArgumentException. + * field, the method throws an {@code IllegalArgumentException}. * - *

      If this Field object enforces Java language access control, and + *

      If this {@code Field} object enforces Java language access control, and * the underlying field is inaccessible, the method throws an - * IllegalAccessException. + * {@code IllegalAccessException}. * *

      If the underlying field is final, the method throws an - * IllegalAccessException unless - * setAccessible(true) has succeeded for this field + * {@code IllegalAccessException} unless + * {@code setAccessible(true)} has succeeded for this field * and this field is non-static. Setting a final field in this way * is meaningful only during deserialization or reconstruction of * instances of classes with blank final fields, before they are @@ -639,23 +639,23 @@ *

      If the underlying field is of a primitive type, an unwrapping * conversion is attempted to convert the new value to a value of * a primitive type. If this attempt fails, the method throws an - * IllegalArgumentException. + * {@code IllegalArgumentException}. * *

      If, after possible unwrapping, the new value cannot be * converted to the type of the underlying field by an identity or * widening conversion, the method throws an - * IllegalArgumentException. + * {@code IllegalArgumentException}. * *

      If the underlying field is static, the class that declared the * field is initialized if it has not already been initialized. * *

      The field is set to the possibly unwrapped and widened new value. * - *

      If the field is hidden in the type of obj, + *

      If the field is hidden in the type of {@code obj}, * the field's value is set according to the preceding rules. * * @param obj the object whose field should be modified - * @param value the new value for the field of obj + * @param value the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -676,14 +676,14 @@ } /** - * Sets the value of a field as a boolean on the specified object. + * Sets the value of a field as a {@code boolean} on the specified object. * This method is equivalent to - * set(obj, zObj), - * where zObj is a Boolean object and - * zObj.booleanValue() == z. + * {@code set(obj, zObj)}, + * where {@code zObj} is a {@code Boolean} object and + * {@code zObj.booleanValue() == z}. * * @param obj the object whose field should be modified - * @param z the new value for the field of obj + * @param z the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -705,14 +705,14 @@ } /** - * Sets the value of a field as a byte on the specified object. + * Sets the value of a field as a {@code byte} on the specified object. * This method is equivalent to - * set(obj, bObj), - * where bObj is a Byte object and - * bObj.byteValue() == b. + * {@code set(obj, bObj)}, + * where {@code bObj} is a {@code Byte} object and + * {@code bObj.byteValue() == b}. * * @param obj the object whose field should be modified - * @param b the new value for the field of obj + * @param b the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -734,14 +734,14 @@ } /** - * Sets the value of a field as a char on the specified object. + * Sets the value of a field as a {@code char} on the specified object. * This method is equivalent to - * set(obj, cObj), - * where cObj is a Character object and - * cObj.charValue() == c. + * {@code set(obj, cObj)}, + * where {@code cObj} is a {@code Character} object and + * {@code cObj.charValue() == c}. * * @param obj the object whose field should be modified - * @param c the new value for the field of obj + * @param c the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -763,14 +763,14 @@ } /** - * Sets the value of a field as a short on the specified object. + * Sets the value of a field as a {@code short} on the specified object. * This method is equivalent to - * set(obj, sObj), - * where sObj is a Short object and - * sObj.shortValue() == s. + * {@code set(obj, sObj)}, + * where {@code sObj} is a {@code Short} object and + * {@code sObj.shortValue() == s}. * * @param obj the object whose field should be modified - * @param s the new value for the field of obj + * @param s the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -792,14 +792,14 @@ } /** - * Sets the value of a field as an int on the specified object. + * Sets the value of a field as an {@code int} on the specified object. * This method is equivalent to - * set(obj, iObj), - * where iObj is a Integer object and - * iObj.intValue() == i. + * {@code set(obj, iObj)}, + * where {@code iObj} is a {@code Integer} object and + * {@code iObj.intValue() == i}. * * @param obj the object whose field should be modified - * @param i the new value for the field of obj + * @param i the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -821,14 +821,14 @@ } /** - * Sets the value of a field as a long on the specified object. + * Sets the value of a field as a {@code long} on the specified object. * This method is equivalent to - * set(obj, lObj), - * where lObj is a Long object and - * lObj.longValue() == l. + * {@code set(obj, lObj)}, + * where {@code lObj} is a {@code Long} object and + * {@code lObj.longValue() == l}. * * @param obj the object whose field should be modified - * @param l the new value for the field of obj + * @param l the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -850,14 +850,14 @@ } /** - * Sets the value of a field as a float on the specified object. + * Sets the value of a field as a {@code float} on the specified object. * This method is equivalent to - * set(obj, fObj), - * where fObj is a Float object and - * fObj.floatValue() == f. + * {@code set(obj, fObj)}, + * where {@code fObj} is a {@code Float} object and + * {@code fObj.floatValue() == f}. * * @param obj the object whose field should be modified - * @param f the new value for the field of obj + * @param f the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field @@ -879,14 +879,14 @@ } /** - * Sets the value of a field as a double on the specified object. + * Sets the value of a field as a {@code double} on the specified object. * This method is equivalent to - * set(obj, dObj), - * where dObj is a Double object and - * dObj.doubleValue() == d. + * {@code set(obj, dObj)}, + * where {@code dObj} is a {@code Double} object and + * {@code dObj.doubleValue() == d}. * * @param obj the object whose field should be modified - * @param d the new value for the field of obj + * @param d the new value for the field of {@code obj} * being modified * * @exception IllegalAccessException if the underlying field diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/GenericArrayType.java --- a/j2se/src/share/classes/java/lang/reflect/GenericArrayType.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/GenericArrayType.java Fri Jul 20 21:22:05 2007 +0000 @@ -26,13 +26,13 @@ package java.lang.reflect; /** - * GenericArrayType represents an array type whose component + * {@code GenericArrayType} represents an array type whose component * type is either a parameterized type or a type variable. * @since 1.5 */ public interface GenericArrayType extends Type { /** - * Returns a Type object representing the component type + * Returns a {@code Type} object representing the component type * of this array. This method creates the component type of the * array. See the declaration of {@link * java.lang.reflect.ParameterizedType ParameterizedType} for the @@ -40,7 +40,7 @@ * see {@link java.lang.reflect.TypeVariable TypeVariable} for the * creation process for type variables. * - * @return a Type object representing the component type + * @return a {@code Type} object representing the component type * of this array * @throws TypeNotPresentException if the underlying array type's * component type refers to a non-existent type declaration diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/GenericDeclaration.java --- a/j2se/src/share/classes/java/lang/reflect/GenericDeclaration.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/GenericDeclaration.java Fri Jul 20 21:22:05 2007 +0000 @@ -32,13 +32,13 @@ */ public interface GenericDeclaration { /** - * Returns an array of TypeVariable objects that + * Returns an array of {@code TypeVariable} objects that * represent the type variables declared by the generic - * declaration represented by this GenericDeclaration + * declaration represented by this {@code GenericDeclaration} * object, in declaration order. Returns an array of length 0 if * the underlying generic declaration declares no type variables. * - * @return an array of TypeVariable objects that represent + * @return an array of {@code TypeVariable} objects that represent * the type variables declared by this generic declaration * @throws GenericSignatureFormatError if the generic * signature of this generic declaration does not conform to diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/InvocationHandler.java --- a/j2se/src/share/classes/java/lang/reflect/InvocationHandler.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/InvocationHandler.java Fri Jul 20 21:22:05 2007 +0000 @@ -26,16 +26,16 @@ package java.lang.reflect; /** - * InvocationHandler is the interface implemented by + * {@code InvocationHandler} is the interface implemented by * the invocation handler of a proxy instance. * *

      Each proxy instance has an associated invocation handler. * When a method is invoked on a proxy instance, the method - * invocation is encoded and dispatched to the invoke + * invocation is encoded and dispatched to the {@code invoke} * method of its invocation handler. * * @author Peter Jones - * @version 1.17, 07/05/05 + * @version 1.18, 07/06/22 * @see Proxy * @since 1.3 */ @@ -49,18 +49,18 @@ * * @param proxy the proxy instance that the method was invoked on * - * @param method the Method instance corresponding to + * @param method the {@code Method} instance corresponding to * the interface method invoked on the proxy instance. The declaring - * class of the Method object will be the interface that + * class of the {@code Method} object will be the interface that * the method was declared in, which may be a superinterface of the * proxy interface that the proxy class inherits the method through. * * @param args an array of objects containing the values of the * arguments passed in the method invocation on the proxy instance, - * or null if interface method takes no arguments. + * or {@code null} if interface method takes no arguments. * Arguments of primitive types are wrapped in instances of the * appropriate primitive wrapper class, such as - * java.lang.Integer or java.lang.Boolean. + * {@code java.lang.Integer} or {@code java.lang.Boolean}. * * @return the value to return from the method invocation on the * proxy instance. If the declared return type of the interface @@ -68,22 +68,22 @@ * this method must be an instance of the corresponding primitive * wrapper class; otherwise, it must be a type assignable to the * declared return type. If the value returned by this method is - * null and the interface method's return type is - * primitive, then a NullPointerException will be + * {@code null} and the interface method's return type is + * primitive, then a {@code NullPointerException} will be * thrown by the method invocation on the proxy instance. If the * value returned by this method is otherwise not compatible with * the interface method's declared return type as described above, - * a ClassCastException will be thrown by the method + * a {@code ClassCastException} will be thrown by the method * invocation on the proxy instance. * * @throws Throwable the exception to throw from the method * invocation on the proxy instance. The exception's type must be * assignable either to any of the exception types declared in the - * throws clause of the interface method or to the - * unchecked exception types java.lang.RuntimeException - * or java.lang.Error. If a checked exception is + * {@code throws} clause of the interface method or to the + * unchecked exception types {@code java.lang.RuntimeException} + * or {@code java.lang.Error}. If a checked exception is * thrown by this method that is not assignable to any of the - * exception types declared in the throws clause of + * exception types declared in the {@code throws} clause of * the interface method, then an * {@link UndeclaredThrowableException} containing the * exception that was thrown by this method will be thrown by the diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/InvocationTargetException.java --- a/j2se/src/share/classes/java/lang/reflect/InvocationTargetException.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/InvocationTargetException.java Fri Jul 20 21:22:05 2007 +0000 @@ -56,8 +56,8 @@ private Throwable target; /** - * Constructs an InvocationTargetException with - * null as the target exception. + * Constructs an {@code InvocationTargetException} with + * {@code null} as the target exception. */ protected InvocationTargetException() { super((Throwable)null); // Disallow initCause @@ -100,7 +100,7 @@ /** * Returns the cause of this exception (the thrown target exception, - * which may be null). + * which may be {@code null}). * * @return the cause of this exception. * @since 1.4 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Member.java --- a/j2se/src/share/classes/java/lang/reflect/Member.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Member.java Fri Jul 20 21:22:05 2007 +0000 @@ -82,8 +82,8 @@ public int getModifiers(); /** - * Returns true if this member was introduced by - * the compiler; returns false otherwise. + * Returns {@code true} if this member was introduced by + * the compiler; returns {@code false} otherwise. * * @return true if and only if this member was introduced by * the compiler. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Method.java --- a/j2se/src/share/classes/java/lang/reflect/Method.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Method.java Fri Jul 20 21:22:05 2007 +0000 @@ -39,13 +39,13 @@ import java.util.Map; /** - * A Method provides information about, and access to, a single method + * A {@code Method} provides information about, and access to, a single method * on a class or interface. The reflected method may be a class method * or an instance method (including an abstract method). * - *

      A Method permits widening conversions to occur when matching the + *

      A {@code Method} permits widening conversions to occur when matching the * actual parameters to invoke with the underlying method's formal - * parameters, but it throws an IllegalArgumentException if a + * parameters, but it throws an {@code IllegalArgumentException} if a * narrowing conversion would occur. * * @see Member @@ -168,16 +168,16 @@ } /** - * Returns the Class object representing the class or interface - * that declares the method represented by this Method object. + * Returns the {@code Class} object representing the class or interface + * that declares the method represented by this {@code Method} object. */ public Class getDeclaringClass() { return clazz; } /** - * Returns the name of the method represented by this Method - * object, as a String. + * Returns the name of the method represented by this {@code Method} + * object, as a {@code String}. */ public String getName() { return name; @@ -185,7 +185,7 @@ /** * Returns the Java language modifiers for the method represented - * by this Method object, as an integer. The Modifier class should + * by this {@code Method} object, as an integer. The {@code Modifier} class should * be used to decode the modifiers. * * @see Modifier @@ -195,13 +195,13 @@ } /** - * Returns an array of TypeVariable objects that represent the + * Returns an array of {@code TypeVariable} objects that represent the * type variables declared by the generic declaration represented by this - * GenericDeclaration object, in declaration order. Returns an + * {@code GenericDeclaration} object, in declaration order. Returns an * array of length 0 if the underlying generic declaration declares no type * variables. * - * @return an array of TypeVariable objects that represent + * @return an array of {@code TypeVariable} objects that represent * the type variables declared by this generic declaration * @throws GenericSignatureFormatError if the generic * signature of this generic declaration does not conform to @@ -217,8 +217,8 @@ } /** - * Returns a Class object that represents the formal return type - * of the method represented by this Method object. + * Returns a {@code Class} object that represents the formal return type + * of the method represented by this {@code Method} object. * * @return the return type for the method this object represents */ @@ -227,17 +227,17 @@ } /** - * Returns a Type object that represents the formal return - * type of the method represented by this Method object. + * Returns a {@code Type} object that represents the formal return + * type of the method represented by this {@code Method} object. * *

      If the return type is a parameterized type, - * the Type object returned must accurately reflect + * the {@code Type} object returned must accurately reflect * the actual type parameters used in the source code. * *

      If the return type is a type variable or a parameterized type, it * is created. Otherwise, it is resolved. * - * @return a Type object that represents the formal return + * @return a {@code Type} object that represents the formal return * type of the underlying method * @throws GenericSignatureFormatError * if the generic method signature does not conform to the format @@ -257,9 +257,9 @@ /** - * Returns an array of Class objects that represent the formal + * Returns an array of {@code Class} objects that represent the formal * parameter types, in declaration order, of the method - * represented by this Method object. Returns an array of length + * represented by this {@code Method} object. Returns an array of length * 0 if the underlying method takes no parameters. * * @return the parameter types for the method this object @@ -270,13 +270,13 @@ } /** - * Returns an array of Type objects that represent the formal + * Returns an array of {@code Type} objects that represent the formal * parameter types, in declaration order, of the method represented by - * this Method object. Returns an array of length 0 if the + * this {@code Method} object. Returns an array of length 0 if the * underlying method takes no parameters. * *

      If a formal parameter type is a parameterized type, - * the Type object returned for it must accurately reflect + * the {@code Type} object returned for it must accurately reflect * the actual type parameters used in the source code. * *

      If a formal parameter type is a type variable or a parameterized @@ -304,11 +304,11 @@ /** - * Returns an array of Class objects that represent + * Returns an array of {@code Class} objects that represent * the types of the exceptions declared to be thrown * by the underlying method - * represented by this Method object. Returns an array of length - * 0 if the method declares no exceptions in its throws clause. + * represented by this {@code Method} object. Returns an array of length + * 0 if the method declares no exceptions in its {@code throws} clause. * * @return the exception types declared as being thrown by the * method this object represents @@ -318,12 +318,12 @@ } /** - * Returns an array of Type objects that represent the - * exceptions declared to be thrown by this Method object. + * Returns an array of {@code Type} objects that represent the + * exceptions declared to be thrown by this {@code Method} object. * Returns an array of length 0 if the underlying method declares - * no exceptions in its throws clause. + * no exceptions in its {@code throws} clause. * - *

      If an exception type is a parameterized type, the Type + *

      If an exception type is a parameterized type, the {@code Type} * object returned for it must accurately reflect the actual type * parameters used in the source code. * @@ -336,9 +336,9 @@ * if the generic method signature does not conform to the format * specified in the Java Virtual Machine Specification, 3rd edition * @throws TypeNotPresentException if the underlying method's - * throws clause refers to a non-existent type declaration + * {@code throws} clause refers to a non-existent type declaration * @throws MalformedParameterizedTypeException if - * the underlying method's throws clause refers to a + * the underlying method's {@code throws} clause refers to a * parameterized type that cannot be instantiated for any reason * @since 1.5 */ @@ -352,8 +352,8 @@ } /** - * Compares this Method against the specified object. Returns - * true if the objects are the same. Two Methods are the same if + * Compares this {@code Method} against the specified object. Returns + * true if the objects are the same. Two {@code Methods} are the same if * they were declared by the same class and have the same name * and formal parameter types and return type. */ @@ -380,7 +380,7 @@ } /** - * Returns a hashcode for this Method. The hashcode is computed + * Returns a hashcode for this {@code Method}. The hashcode is computed * as the exclusive-or of the hashcodes for the underlying * method's declaring class name and the method's name. */ @@ -389,7 +389,7 @@ } /** - * Returns a string describing this Method. The string is + * Returns a string describing this {@code Method}. The string is * formatted as the method access modifiers, if any, followed by * the method return type, followed by a space, followed by the * class declaring the method, followed by a period, followed by @@ -405,10 +405,10 @@ * *

      The access modifiers are placed in canonical order as * specified by "The Java Language Specification". This is - * public, protected or private first, + * {@code public}, {@code protected} or {@code private} first, * and then other modifiers in the following order: - * abstract, static, final, - * synchronized, native. + * {@code abstract}, {@code static}, {@code final}, + * {@code synchronized}, {@code native}. */ public String toString() { try { @@ -443,7 +443,7 @@ } /** - * Returns a string describing this Method, including + * Returns a string describing this {@code Method}, including * type parameters. The string is formatted as the method access * modifiers, if any, followed by an angle-bracketed * comma-separated list of the method's type parameters, if any, @@ -455,8 +455,8 @@ * * If this method was declared to take a variable number of * arguments, instead of denoting the last parameter as - * "Type[]", it is denoted as - * "Type...". + * "Type[]", it is denoted as + * "Type...". * * A space is used to separate access modifiers from one another * and from the type parameters or return type. If there are no @@ -470,12 +470,12 @@ * *

      The access modifiers are placed in canonical order as * specified by "The Java Language Specification". This is - * public, protected or private first, + * {@code public}, {@code protected} or {@code private} first, * and then other modifiers in the following order: - * abstract, static, final, - * synchronized native. + * {@code abstract}, {@code static}, {@code final}, + * {@code synchronized} {@code native}. * - * @return a string describing this Method, + * @return a string describing this {@code Method}, * include type parameters * * @since 1.5 @@ -487,25 +487,24 @@ if (mod != 0) { sb.append(Modifier.toString(mod) + " "); } - Type[] typeparms = getTypeParameters(); + TypeVariable[] typeparms = getTypeParameters(); if (typeparms.length > 0) { boolean first = true; sb.append("<"); - for(Type typeparm: typeparms) { + for(TypeVariable typeparm: typeparms) { if (!first) sb.append(","); - if (typeparm instanceof Class) - sb.append(((Class)typeparm).getName()); - else - sb.append(typeparm.toString()); + // Class objects can't occur here; no need to test + // and call Class.getName(). + sb.append(typeparm.toString()); first = false; } sb.append("> "); } Type genRetType = getGenericReturnType(); - sb.append( ((genRetType instanceof Class)? - Field.getTypeName((Class)genRetType):genRetType.toString()) + " "); + sb.append( ((genRetType instanceof Class)? + Field.getTypeName((Class)genRetType):genRetType.toString()) + " "); sb.append(Field.getTypeName(getDeclaringClass()) + "."); sb.append(getName() + "("); @@ -539,18 +538,18 @@ } /** - * Invokes the underlying method represented by this Method + * Invokes the underlying method represented by this {@code Method} * object, on the specified object with the specified parameters. * Individual parameters are automatically unwrapped to match * primitive formal parameters, and both primitive and reference * parameters are subject to method invocation conversions as * necessary. * - *

      If the underlying method is static, then the specified obj + *

      If the underlying method is static, then the specified {@code obj} * argument is ignored. It may be null. * *

      If the number of formal parameters required by the underlying method is - * 0, the supplied args array may be of length 0 or null. + * 0, the supplied {@code args} array may be of length 0 or null. * *

      If the underlying method is an instance method, it is invoked * using dynamic method lookup as documented in The Java Language @@ -572,10 +571,10 @@ * @param obj the object the underlying method is invoked from * @param args the arguments used for the method call * @return the result of dispatching the method represented by - * this object on obj with parameters - * args + * this object on {@code obj} with parameters + * {@code args} * - * @exception IllegalAccessException if this Method object + * @exception IllegalAccessException if this {@code Method} object * enforces Java language access control and the underlying * method is inaccessible. * @exception IllegalArgumentException if the method is an @@ -625,8 +624,8 @@ } /** - * Returns true if this method is a bridge - * method; returns false otherwise. + * Returns {@code true} if this method is a bridge + * method; returns {@code false} otherwise. * * @return true if and only if this method is a bridge * method as defined by the Java Language Specification. @@ -637,11 +636,11 @@ } /** - * Returns true if this method was declared to take - * a variable number of arguments; returns false + * Returns {@code true} if this method was declared to take + * a variable number of arguments; returns {@code false} * otherwise. * - * @return true if an only if this method was declared to + * @return {@code true} if an only if this method was declared to * take a variable number of arguments. * @since 1.5 */ @@ -650,8 +649,8 @@ } /** - * Returns true if this method is a synthetic - * method; returns false otherwise. + * Returns {@code true} if this method is a synthetic + * method; returns {@code false} otherwise. * * @return true if and only if this method is a synthetic * method as defined by the Java Language Specification. @@ -729,13 +728,13 @@ /** * Returns the default value for the annotation member represented by - * this Method instance. If the member is of a primitive type, + * this {@code Method} instance. If the member is of a primitive type, * an instance of the corresponding wrapper type is returned. Returns * null if no default is associated with the member, or if the method * instance does not represent a declared member of an annotation type. * * @return the default value for the annotation member represented - * by this Method instance. + * by this {@code Method} instance. * @throws TypeNotPresentException if the annotation is of type * {@link Class} and no definition can be found for the * default class value. @@ -759,7 +758,7 @@ /** * Returns an array of arrays that represent the annotations on the formal * parameters, in declaration order, of the method represented by - * this Method object. (Returns an array of length zero if the + * this {@code Method} object. (Returns an array of length zero if the * underlying method is parameterless. If the method has one or more * parameters, a nested array of length zero is returned for each parameter * with no annotations.) The annotation objects contained in the returned diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Modifier.java --- a/j2se/src/share/classes/java/lang/reflect/Modifier.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Modifier.java Fri Jul 20 21:22:05 2007 +0000 @@ -30,7 +30,7 @@ import sun.reflect.ReflectionFactory; /** - * The Modifier class provides static methods and + * The Modifier class provides {@code static} methods and * constants to decode class and member access modifiers. The sets of * modifiers are represented as integers with distinct bit positions * representing different modifiers. The values for the constants @@ -65,144 +65,144 @@ } /** - * Return true if the integer argument includes the - * public modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code public} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * public modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code public} modifier; {@code false} otherwise. */ public static boolean isPublic(int mod) { return (mod & PUBLIC) != 0; } /** - * Return true if the integer argument includes the - * private modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code private} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * private modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code private} modifier; {@code false} otherwise. */ public static boolean isPrivate(int mod) { return (mod & PRIVATE) != 0; } /** - * Return true if the integer argument includes the - * protected modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code protected} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * protected modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code protected} modifier; {@code false} otherwise. */ public static boolean isProtected(int mod) { return (mod & PROTECTED) != 0; } /** - * Return true if the integer argument includes the - * static modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code static} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * static modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code static} modifier; {@code false} otherwise. */ public static boolean isStatic(int mod) { return (mod & STATIC) != 0; } /** - * Return true if the integer argument includes the - * final modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code final} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * final modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code final} modifier; {@code false} otherwise. */ public static boolean isFinal(int mod) { return (mod & FINAL) != 0; } /** - * Return true if the integer argument includes the - * synchronized modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code synchronized} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * synchronized modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code synchronized} modifier; {@code false} otherwise. */ public static boolean isSynchronized(int mod) { return (mod & SYNCHRONIZED) != 0; } /** - * Return true if the integer argument includes the - * volatile modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code volatile} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * volatile modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code volatile} modifier; {@code false} otherwise. */ public static boolean isVolatile(int mod) { return (mod & VOLATILE) != 0; } /** - * Return true if the integer argument includes the - * transient modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code transient} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * transient modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code transient} modifier; {@code false} otherwise. */ public static boolean isTransient(int mod) { return (mod & TRANSIENT) != 0; } /** - * Return true if the integer argument includes the - * native modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code native} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * native modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code native} modifier; {@code false} otherwise. */ public static boolean isNative(int mod) { return (mod & NATIVE) != 0; } /** - * Return true if the integer argument includes the - * interface modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code interface} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * interface modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code interface} modifier; {@code false} otherwise. */ public static boolean isInterface(int mod) { return (mod & INTERFACE) != 0; } /** - * Return true if the integer argument includes the - * abstract modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code abstract} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * abstract modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code abstract} modifier; {@code false} otherwise. */ public static boolean isAbstract(int mod) { return (mod & ABSTRACT) != 0; } /** - * Return true if the integer argument includes the - * strictfp modifier, false otherwise. + * Return {@code true} if the integer argument includes the + * {@code strictfp} modifier, {@code false} otherwise. * * @param mod a set of modifiers - * @return true if mod includes the - * strictfp modifier; false otherwise. + * @return {@code true} if {@code mod} includes the + * {@code strictfp} modifier; {@code false} otherwise. */ public static boolean isStrict(int mod) { return (mod & STRICT) != 0; @@ -224,11 +224,11 @@ * §8.8.3, and * §9.1.1. * The full modifier ordering used by this method is: - *

      + *
      {@code * public protected private abstract static final transient * volatile synchronized native strictfp - * interface
      - * The interface modifier discussed in this class is + * interface }
      + * The {@code interface} modifier discussed in this class is * not a true modifier in the Java language and it appears after * all other modifiers listed by this method. This method may * return a string of modifiers that are not valid modifiers of a @@ -238,7 +238,7 @@ * * @param mod a set of modifiers * @return a string representation of the set of modifiers - * represented by mod + * represented by {@code mod} */ public static String toString(int mod) { StringBuffer sb = new StringBuffer(); @@ -271,73 +271,73 @@ */ /** - * The int value representing the public + * The {@code int} value representing the {@code public} * modifier. */ public static final int PUBLIC = 0x00000001; /** - * The int value representing the private + * The {@code int} value representing the {@code private} * modifier. */ public static final int PRIVATE = 0x00000002; /** - * The int value representing the protected + * The {@code int} value representing the {@code protected} * modifier. */ public static final int PROTECTED = 0x00000004; /** - * The int value representing the static + * The {@code int} value representing the {@code static} * modifier. */ public static final int STATIC = 0x00000008; /** - * The int value representing the final + * The {@code int} value representing the {@code final} * modifier. */ public static final int FINAL = 0x00000010; /** - * The int value representing the synchronized + * The {@code int} value representing the {@code synchronized} * modifier. */ public static final int SYNCHRONIZED = 0x00000020; /** - * The int value representing the volatile + * The {@code int} value representing the {@code volatile} * modifier. */ public static final int VOLATILE = 0x00000040; /** - * The int value representing the transient + * The {@code int} value representing the {@code transient} * modifier. */ public static final int TRANSIENT = 0x00000080; /** - * The int value representing the native + * The {@code int} value representing the {@code native} * modifier. */ public static final int NATIVE = 0x00000100; /** - * The int value representing the interface + * The {@code int} value representing the {@code interface} * modifier. */ public static final int INTERFACE = 0x00000200; /** - * The int value representing the abstract + * The {@code int} value representing the {@code abstract} * modifier. */ public static final int ABSTRACT = 0x00000400; /** - * The int value representing the strictfp + * The {@code int} value representing the {@code strictfp} * modifier. */ public static final int STRICT = 0x00000800; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/ParameterizedType.java --- a/j2se/src/share/classes/java/lang/reflect/ParameterizedType.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/ParameterizedType.java Fri Jul 20 21:22:05 2007 +0000 @@ -46,18 +46,18 @@ */ public interface ParameterizedType extends Type { /** - * Returns an array of Type objects representing the actual type + * Returns an array of {@code Type} objects representing the actual type * arguments to this type. * *

      Note that in some cases, the returned array be empty. This can occur * if this type represents a non-parameterized type nested within * a parameterized type. * - * @return an array of Type objects representing the actual type + * @return an array of {@code Type} objects representing the actual type * arguments to this type - * @throws TypeNotPresentException if any of the + * @throws TypeNotPresentException if any of the * actual type arguments refers to a non-existent type declaration - * @throws MalformedParameterizedTypeException if any of the + * @throws MalformedParameterizedTypeException if any of the * actual type parameters refer to a parameterized type that cannot * be instantiated for any reason * @since 1.5 @@ -65,28 +65,28 @@ Type[] getActualTypeArguments(); /** - * Returns the Type object representing the class or interface + * Returns the {@code Type} object representing the class or interface * that declared this type. * - * @return the Type object representing the class or interface + * @return the {@code Type} object representing the class or interface * that declared this type * @since 1.5 */ Type getRawType(); /** - * Returns a Type object representing the type that this type + * Returns a {@code Type} object representing the type that this type * is a member of. For example, if this type is {@code O.I}, * return a representation of {@code O}. * - *

      If this type is a top-level type, null is returned. + *

      If this type is a top-level type, {@code null} is returned. * - * @return a Type object representing the type that + * @return a {@code Type} object representing the type that * this type is a member of. If this type is a top-level type, - * null is returned - * @throws TypeNotPresentException if the owner type + * {@code null} is returned + * @throws TypeNotPresentException if the owner type * refers to a non-existent type declaration - * @throws MalformedParameterizedTypeException if the owner type + * @throws MalformedParameterizedTypeException if the owner type * refers to a parameterized type that cannot be instantiated * for any reason * @since 1.5 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/Proxy.java --- a/j2se/src/share/classes/java/lang/reflect/Proxy.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/Proxy.java Fri Jul 20 21:22:05 2007 +0000 @@ -37,11 +37,11 @@ import sun.misc.ProxyGenerator; /** - * Proxy provides static methods for creating dynamic proxy + * {@code Proxy} provides static methods for creating dynamic proxy * classes and instances, and it is also the superclass of all * dynamic proxy classes created by those methods. * - *

      To create a proxy for some interface Foo: + *

      To create a proxy for some interface {@code Foo}: *

        *     InvocationHandler handler = new MyInvocationHandler(...);
        *     Class proxyClass = Proxy.getProxyClass(
      @@ -72,8 +72,8 @@
        * A method invocation on a proxy instance through one of its proxy
        * interfaces will be dispatched to the {@link InvocationHandler#invoke
        * invoke} method of the instance's invocation handler, passing the proxy
      - * instance, a java.lang.reflect.Method object identifying
      - * the method that was invoked, and an array of type Object
      + * instance, a {@code java.lang.reflect.Method} object identifying
      + * the method that was invoked, and an array of type {@code Object}
        * containing the arguments.  The invocation handler processes the
        * encoded method invocation as appropriate and the result that it
        * returns will be returned as the result of the method invocation on
      @@ -85,10 +85,10 @@
        * 
    1. Proxy classes are public, final, and not abstract. * *
    2. The unqualified name of a proxy class is unspecified. The space - * of class names that begin with the string "$Proxy" + * of class names that begin with the string {@code "$Proxy"} * should be, however, reserved for proxy classes. * - *
    3. A proxy class extends java.lang.reflect.Proxy. + *
    4. A proxy class extends {@code java.lang.reflect.Proxy}. * *
    5. A proxy class implements exactly the interfaces specified at its * creation, in the same order. @@ -102,25 +102,25 @@ * signers. * *
    6. Since a proxy class implements all of the interfaces specified at - * its creation, invoking getInterfaces on its - * Class object will return an array containing the same + * its creation, invoking {@code getInterfaces} on its + * {@code Class} object will return an array containing the same * list of interfaces (in the order specified at its creation), invoking - * getMethods on its Class object will return - * an array of Method objects that include all of the - * methods in those interfaces, and invoking getMethod will + * {@code getMethods} on its {@code Class} object will return + * an array of {@code Method} objects that include all of the + * methods in those interfaces, and invoking {@code getMethod} will * find methods in the proxy interfaces as would be expected. * *
    7. The {@link Proxy#isProxyClass Proxy.isProxyClass} method will * return true if it is passed a proxy class-- a class returned by - * Proxy.getProxyClass or the class of an object returned by - * Proxy.newProxyInstance-- and false otherwise. + * {@code Proxy.getProxyClass} or the class of an object returned by + * {@code Proxy.newProxyInstance}-- and false otherwise. * - *
    8. The java.security.ProtectionDomain of a proxy class + *
    9. The {@code java.security.ProtectionDomain} of a proxy class * is the same as that of system classes loaded by the bootstrap class - * loader, such as java.lang.Object, because the code for a + * loader, such as {@code java.lang.Object}, because the code for a * proxy class is generated by trusted system code. This protection * domain will typically be granted - * java.security.AllPermission. + * {@code java.security.AllPermission}. * *
    10. Each proxy class has one public constructor that takes one argument, * an implementation of the interface {@link InvocationHandler}, to set @@ -135,16 +135,16 @@ *

      A proxy instance has the following properties: * *

        - *
      • Given a proxy instance proxy and one of the - * interfaces implemented by its proxy class Foo, the + *
      • Given a proxy instance {@code proxy} and one of the + * interfaces implemented by its proxy class {@code Foo}, the * following expression will return true: *
        - *     proxy instanceof Foo
        + *     {@code proxy instanceof Foo}
          * 
        * and the following cast operation will succeed (rather than throwing - * a ClassCastException): + * a {@code ClassCastException}): *
        - *     (Foo) proxy
        + *     {@code (Foo) proxy}
          * 
        * *
      • Each proxy instance has an associated invocation handler, the one @@ -158,17 +158,17 @@ * InvocationHandler#invoke invoke} method as described in the * documentation for that method. * - *
      • An invocation of the hashCode, - * equals, or toString methods declared in - * java.lang.Object on a proxy instance will be encoded and - * dispatched to the invocation handler's invoke method in + *
      • An invocation of the {@code hashCode}, + * {@code equals}, or {@code toString} methods declared in + * {@code java.lang.Object} on a proxy instance will be encoded and + * dispatched to the invocation handler's {@code invoke} method in * the same manner as interface method invocations are encoded and * dispatched, as described above. The declaring class of the - * Method object passed to invoke will be - * java.lang.Object. Other public methods of a proxy - * instance inherited from java.lang.Object are not + * {@code Method} object passed to {@code invoke} will be + * {@code java.lang.Object}. Other public methods of a proxy + * instance inherited from {@code java.lang.Object} are not * overridden by a proxy class, so invocations of those methods behave - * like they do for instances of java.lang.Object. + * like they do for instances of {@code java.lang.Object}. *
      * *

      Methods Duplicated in Multiple Proxy Interfaces

      @@ -176,46 +176,46 @@ *

      When two or more interfaces of a proxy class contain a method with * the same name and parameter signature, the order of the proxy class's * interfaces becomes significant. When such a duplicate method - * is invoked on a proxy instance, the Method object passed + * is invoked on a proxy instance, the {@code Method} object passed * to the invocation handler will not necessarily be the one whose * declaring class is assignable from the reference type of the interface * that the proxy's method was invoked through. This limitation exists * because the corresponding method implementation in the generated proxy * class cannot determine which interface it was invoked through. * Therefore, when a duplicate method is invoked on a proxy instance, - * the Method object for the method in the foremost interface + * the {@code Method} object for the method in the foremost interface * that contains the method (either directly or inherited through a * superinterface) in the proxy class's list of interfaces is passed to - * the invocation handler's invoke method, regardless of the + * the invocation handler's {@code invoke} method, regardless of the * reference type through which the method invocation occurred. * *

      If a proxy interface contains a method with the same name and - * parameter signature as the hashCode, equals, - * or toString methods of java.lang.Object, + * parameter signature as the {@code hashCode}, {@code equals}, + * or {@code toString} methods of {@code java.lang.Object}, * when such a method is invoked on a proxy instance, the - * Method object passed to the invocation handler will have - * java.lang.Object as its declaring class. In other words, - * the public, non-final methods of java.lang.Object + * {@code Method} object passed to the invocation handler will have + * {@code java.lang.Object} as its declaring class. In other words, + * the public, non-final methods of {@code java.lang.Object} * logically precede all of the proxy interfaces for the determination of - * which Method object to pass to the invocation handler. + * which {@code Method} object to pass to the invocation handler. * *

      Note also that when a duplicate method is dispatched to an - * invocation handler, the invoke method may only throw + * invocation handler, the {@code invoke} method may only throw * checked exception types that are assignable to one of the exception - * types in the throws clause of the method in all of + * types in the {@code throws} clause of the method in all of * the proxy interfaces that it can be invoked through. If the - * invoke method throws a checked exception that is not + * {@code invoke} method throws a checked exception that is not * assignable to any of the exception types declared by the method in one * of the proxy interfaces that it can be invoked through, then an - * unchecked UndeclaredThrowableException will be thrown by + * unchecked {@code UndeclaredThrowableException} will be thrown by * the invocation on the proxy instance. This restriction means that not * all of the exception types returned by invoking - * getExceptionTypes on the Method object - * passed to the invoke method can necessarily be thrown - * successfully by the invoke method. + * {@code getExceptionTypes} on the {@code Method} object + * passed to the {@code invoke} method can necessarily be thrown + * successfully by the {@code invoke} method. * * @author Peter Jones - * @version 1.29, 07/05/05 + * @version 1.30, 07/06/22 * @see InvocationHandler * @since 1.3 */ @@ -257,7 +257,7 @@ } /** - * Constructs a new Proxy instance from a subclass + * Constructs a new {@code Proxy} instance from a subclass * (typically, a dynamic proxy class) with the specified value * for its invocation handler. * @@ -268,7 +268,7 @@ } /** - * Returns the java.lang.Class object for a proxy class + * Returns the {@code java.lang.Class} object for a proxy class * given a class loader and an array of interfaces. The proxy class * will be defined by the specified class loader and will implement * all of the supplied interfaces. If a proxy class for the same @@ -278,19 +278,19 @@ * and defined by the class loader. * *

      There are several restrictions on the parameters that may be - * passed to Proxy.getProxyClass: + * passed to {@code Proxy.getProxyClass}: * *

        - *
      • All of the Class objects in the - * interfaces array must represent interfaces, not + *
      • All of the {@code Class} objects in the + * {@code interfaces} array must represent interfaces, not * classes or primitive types. * - *
      • No two elements in the interfaces array may - * refer to identical Class objects. + *
      • No two elements in the {@code interfaces} array may + * refer to identical {@code Class} objects. * *
      • All of the interface types must be visible by name through the * specified class loader. In other words, for class loader - * cl and every interface i, the following + * {@code cl} and every interface {@code i}, the following * expression must be true: *
              *     Class.forName(i.getName(), false, cl) == i
        @@ -315,15 +315,15 @@
              * 
      • The resulting proxy class must not exceed any limits imposed * on classes by the virtual machine. For example, the VM may limit * the number of interfaces that a class may implement to 65535; in - * that case, the size of the interfaces array must not + * that case, the size of the {@code interfaces} array must not * exceed 65535. *
      * *

      If any of these restrictions are violated, - * Proxy.getProxyClass will throw an - * IllegalArgumentException. If the interfaces - * array argument or any of its elements are null, a - * NullPointerException will be thrown. + * {@code Proxy.getProxyClass} will throw an + * {@code IllegalArgumentException}. If the {@code interfaces} + * array argument or any of its elements are {@code null}, a + * {@code NullPointerException} will be thrown. * *

      Note that the order of the specified proxy interfaces is * significant: two requests for a proxy class with the same combination @@ -336,10 +336,10 @@ * @return a proxy class that is defined in the specified class loader * and that implements the specified interfaces * @throws IllegalArgumentException if any of the restrictions on the - * parameters that may be passed to getProxyClass + * parameters that may be passed to {@code getProxyClass} * are violated - * @throws NullPointerException if the interfaces array - * argument or any of its elements are null + * @throws NullPointerException if the {@code interfaces} array + * argument or any of its elements are {@code null} */ public static Class getProxyClass(ClassLoader loader, Class... interfaces) @@ -565,9 +565,9 @@ * newInstance(new Object[] { handler }); *

    11. * - *

      Proxy.newProxyInstance throws - * IllegalArgumentException for the same reasons that - * Proxy.getProxyClass does. + *

      {@code Proxy.newProxyInstance} throws + * {@code IllegalArgumentException} for the same reasons that + * {@code Proxy.getProxyClass} does. * * @param loader the class loader to define the proxy class * @param interfaces the list of interfaces for the proxy class @@ -577,12 +577,12 @@ * proxy class that is defined by the specified class loader * and that implements the specified interfaces * @throws IllegalArgumentException if any of the restrictions on the - * parameters that may be passed to getProxyClass + * parameters that may be passed to {@code getProxyClass} * are violated - * @throws NullPointerException if the interfaces array - * argument or any of its elements are null, or - * if the invocation handler, h, is - * null + * @throws NullPointerException if the {@code interfaces} array + * argument or any of its elements are {@code null}, or + * if the invocation handler, {@code h}, is + * {@code null} */ public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, @@ -617,17 +617,17 @@ /** * Returns true if and only if the specified class was dynamically - * generated to be a proxy class using the getProxyClass - * method or the newProxyInstance method. + * generated to be a proxy class using the {@code getProxyClass} + * method or the {@code newProxyInstance} method. * *

      The reliability of this method is important for the ability * to use it to make security decisions, so its implementation should - * not just test if the class in question extends Proxy. + * not just test if the class in question extends {@code Proxy}. * * @param cl the class to test - * @return true if the class is a proxy class and - * false otherwise - * @throws NullPointerException if cl is null + * @return {@code true} if the class is a proxy class and + * {@code false} otherwise + * @throws NullPointerException if {@code cl} is {@code null} */ public static boolean isProxyClass(Class cl) { if (cl == null) { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/ReflectPermission.java --- a/j2se/src/share/classes/java/lang/reflect/ReflectPermission.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/ReflectPermission.java Fri Jul 20 21:22:05 2007 +0000 @@ -28,7 +28,7 @@ /** * The Permission class for reflective operations. A * ReflectPermission is a named permission and has no - * actions. The only name currently defined is suppressAccessChecks, + * actions. The only name currently defined is {@code suppressAccessChecks}, * which allows suppressing the standard Java language access checks * -- for public, default (package) access, protected, and private * members -- performed by reflected objects at their point of use. @@ -76,8 +76,8 @@ * * @param name the name of the ReflectPermission * - * @throws NullPointerException if name is null. - * @throws IllegalArgumentException if name is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public ReflectPermission(String name) { super(name); @@ -91,8 +91,8 @@ * * @param actions should be null * - * @throws NullPointerException if name is null. - * @throws IllegalArgumentException if name is empty. + * @throws NullPointerException if {@code name} is {@code null}. + * @throws IllegalArgumentException if {@code name} is empty. */ public ReflectPermission(String name, String actions) { super(name, actions); diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/TypeVariable.java --- a/j2se/src/share/classes/java/lang/reflect/TypeVariable.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/TypeVariable.java Fri Jul 20 21:22:05 2007 +0000 @@ -50,9 +50,9 @@ */ public interface TypeVariable extends Type { /** - * Returns an array of Type objects representing the + * Returns an array of {@code Type} objects representing the * upper bound(s) of this type variable. Note that if no upper bound is - * explicitly declared, the upper bound is Object. + * explicitly declared, the upper bound is {@code Object}. * *

      For each upper bound B:

      • if B is a parameterized * type or a type variable, it is created, (see {@link @@ -65,13 +65,13 @@ * @throws MalformedParameterizedTypeException if any of the * bounds refer to a parameterized type that cannot be instantiated * for any reason - * @return an array of Types representing the upper + * @return an array of {@code Type}s representing the upper * bound(s) of this type variable */ Type[] getBounds(); /** - * Returns the GenericDeclaration object representing the + * Returns the {@code GenericDeclaration} object representing the * generic declaration declared this type variable. * * @return the generic declaration declared for this type variable. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/UndeclaredThrowableException.java --- a/j2se/src/share/classes/java/lang/reflect/UndeclaredThrowableException.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/UndeclaredThrowableException.java Fri Jul 20 21:22:05 2007 +0000 @@ -28,18 +28,18 @@ /** * Thrown by a method invocation on a proxy instance if its invocation * handler's {@link InvocationHandler#invoke invoke} method throws a - * checked exception (a Throwable that is not assignable - * to RuntimeException or Error) that + * checked exception (a {@code Throwable} that is not assignable + * to {@code RuntimeException} or {@code Error}) that * is not assignable to any of the exception types declared in the - * throws clause of the method that was invoked on the + * {@code throws} clause of the method that was invoked on the * proxy instance and dispatched to the invocation handler. * - *

        An UndeclaredThrowableException instance contains + *

        An {@code UndeclaredThrowableException} instance contains * the undeclared checked exception that was thrown by the invocation * handler, and it can be retrieved with the - * getUndeclaredThrowable() method. - * UndeclaredThrowableException extends - * RuntimeException, so it is an unchecked exception + * {@code getUndeclaredThrowable()} method. + * {@code UndeclaredThrowableException} extends + * {@code RuntimeException}, so it is an unchecked exception * that wraps a checked exception. * *

        As of release 1.4, this exception has been retrofitted to @@ -52,7 +52,7 @@ * method." * * @author Peter Jones - * @version 1.21, 07/05/05 + * @version 1.22, 07/06/22 * @see InvocationHandler * @since 1.3 */ @@ -66,8 +66,8 @@ private Throwable undeclaredThrowable; /** - * Constructs an UndeclaredThrowableException with the - * specified Throwable. + * Constructs an {@code UndeclaredThrowableException} with the + * specified {@code Throwable}. * * @param undeclaredThrowable the undeclared checked exception * that was thrown @@ -78,8 +78,8 @@ } /** - * Constructs an UndeclaredThrowableException with the - * specified Throwable and a detail message. + * Constructs an {@code UndeclaredThrowableException} with the + * specified {@code Throwable} and a detail message. * * @param undeclaredThrowable the undeclared checked exception * that was thrown @@ -93,8 +93,8 @@ } /** - * Returns the Throwable instance wrapped in this - * UndeclaredThrowableException, which may be null. + * Returns the {@code Throwable} instance wrapped in this + * {@code UndeclaredThrowableException}, which may be {@code null}. * *

        This method predates the general-purpose exception chaining facility. * The {@link Throwable#getCause()} method is now the preferred means of @@ -107,9 +107,9 @@ } /** - * Returns the cause of this exception (the Throwable - * instance wrapped in this UndeclaredThrowableException, - * which may be null). + * Returns the cause of this exception (the {@code Throwable} + * instance wrapped in this {@code UndeclaredThrowableException}, + * which may be {@code null}). * * @return the cause of this exception. * @since 1.4 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/lang/reflect/WildcardType.java --- a/j2se/src/share/classes/java/lang/reflect/WildcardType.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/lang/reflect/WildcardType.java Fri Jul 20 21:22:05 2007 +0000 @@ -27,15 +27,15 @@ /** * WildcardType represents a wildcard type expression, such as - * ?, ? extends Number, or ? super Integer. + * {@code ?}, {@code ? extends Number}, or {@code ? super Integer}. * * @since 1.5 */ public interface WildcardType extends Type { /** - * Returns an array of Type objects representing the upper + * Returns an array of {@code Type} objects representing the upper * bound(s) of this type variable. Note that if no upper bound is - * explicitly declared, the upper bound is Object. + * explicitly declared, the upper bound is {@code Object}. * *

        For each upper bound B : *

          @@ -56,9 +56,9 @@ Type[] getUpperBounds(); /** - * Returns an array of Type objects representing the + * Returns an array of {@code Type} objects representing the * lower bound(s) of this type variable. Note that if no lower bound is - * explicitly declared, the lower bound is the type of null. + * explicitly declared, the lower bound is the type of {@code null}. * In this case, a zero length array is returned. * *

          For each lower bound B : diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/math/BigDecimal.java --- a/j2se/src/share/classes/java/math/BigDecimal.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/math/BigDecimal.java Fri Jul 20 21:22:05 2007 +0000 @@ -3230,7 +3230,7 @@ * * @param s the stream being read. */ - private synchronized void readObject(java.io.ObjectInputStream s) + private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in all fields s.defaultReadObject(); diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/math/MathContext.java --- a/j2se/src/share/classes/java/math/MathContext.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/math/MathContext.java Fri Jul 20 21:22:05 2007 +0000 @@ -331,7 +331,7 @@ * * @param s the stream being read. */ - private synchronized void readObject(java.io.ObjectInputStream s) + private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); // read in all fields // validate possibly bad fields diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/net/MulticastSocket.java --- a/j2se/src/share/classes/java/net/MulticastSocket.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/net/MulticastSocket.java Fri Jul 20 21:22:05 2007 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -208,14 +208,21 @@ /** * Set the default time-to-live for multicast packets sent out - * on this MulticastSocket in order to control the + * on this {@code MulticastSocket} in order to control the * scope of the multicasts. * - *

          The ttl must be in the range 0 <= ttl <= - * 255 or an IllegalArgumentException will be thrown. - * @exception IOException if an I/O exception occurs - * while setting the default time-to-live value - * @param ttl the time-to-live + *

          The ttl must be in the range {@code 0 <= ttl <= + * 255} or an {@code IllegalArgumentException} will be thrown. + * Multicast packets sent with a TTL of {@code 0} are not transmitted + * on the network but may be delivered locally. + * + * @param ttl + * the time-to-live + * + * @throws IOException + * if an I/O exception occurs while setting the + * default time-to-live value + * * @see #getTimeToLive() */ public void setTimeToLive(int ttl) throws IOException { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/security/BasicPermission.java --- a/j2se/src/share/classes/java/security/BasicPermission.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/security/BasicPermission.java Fri Jul 20 21:22:05 2007 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,7 +71,7 @@ * @see java.net.NetPermission * @see java.lang.SecurityManager * - * @version 1.51 07/05/05 + * @version 1.53 07/06/29 * * @author Marianne Mueller * @author Roland Schemers @@ -226,7 +226,7 @@ BasicPermission bp = (BasicPermission) obj; - return getCanonicalName().equals(bp.getCanonicalName()); + return getName().equals(bp.getName()); } @@ -240,7 +240,7 @@ */ public int hashCode() { - return this.getCanonicalName().hashCode(); + return this.getName().hashCode(); } /** @@ -272,7 +272,7 @@ */ public PermissionCollection newPermissionCollection() { - return new BasicPermissionCollection(); + return new BasicPermissionCollection(this.getClass()); } /** @@ -284,7 +284,7 @@ { s.defaultReadObject(); // init is called to initialize the rest of the values. - init(getCanonicalName()); + init(getName()); } /** @@ -314,7 +314,7 @@ * @see java.security.Permissions * @see java.security.PermissionsImpl * - * @version 1.51 05/05/07 + * @version 1.53 06/29/07 * * @author Roland Schemers * @@ -356,9 +356,10 @@ * */ - public BasicPermissionCollection() { + public BasicPermissionCollection(Class clazz) { perms = new HashMap(11); all_allowed = false; + permClass = clazz; } /** @@ -387,15 +388,17 @@ BasicPermission bp = (BasicPermission) permission; - if (perms.size() == 0) { - // adding first permission - permClass = bp.getClass(); - } else { - // make sure we only add new BasicPermissions of the same class - if (bp.getClass() != permClass) - throw new IllegalArgumentException("invalid permission: " + - permission); - } + // make sure we only add new BasicPermissions of the same class + // Also check null for compatibility with deserialized form from + // previous versions. + if (permClass == null) { + // adding first permission + permClass = bp.getClass(); + } else { + if (bp.getClass() != permClass) + throw new IllegalArgumentException("invalid permission: " + + permission); + } synchronized (this) { perms.put(bp.getCanonicalName(), permission); diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/text/StringCharacterIterator.java --- a/j2se/src/share/classes/java/text/StringCharacterIterator.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/text/StringCharacterIterator.java Fri Jul 20 21:22:05 2007 +0000 @@ -42,7 +42,7 @@ /** * StringCharacterIterator implements the - * CharacterIterater protocol for a String. + * CharacterIterator protocol for a String. * The StringCharacterIterator class iterates over the * entire String. * diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/util/Currency.java --- a/j2se/src/share/classes/java/util/Currency.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/util/Currency.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,13 +25,24 @@ package java.util; +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; import java.io.Serializable; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Pattern; +import java.util.regex.Matcher; import java.util.spi.CurrencyNameProvider; import java.util.spi.LocaleServiceProvider; import sun.util.LocaleServiceProviderPool; import sun.util.resources.LocaleData; +import sun.util.resources.OpenListResourceBundle; /** @@ -44,6 +55,21 @@ * Currency instance for any given currency. Therefore, there's * no public constructor. You obtain a Currency instance using * the getInstance methods. + *

          + * Users can supersede the Java runtime currency data by creating a properties + * file named <JAVA_HOME>/lib/currency.properties. The contents + * of the properties file are key/value pairs of the ISO 3166 country codes + * and the ISO 4217 currency data respectively. The value part consists of + * three ISO 4217 values of a currency, i.e., an alphabetic code, a numeric + * code, and a minor unit. Those three ISO 4217 values are separated by commas. + * The lines which start with '#'s are considered comment lines. For example, + *

          + * + * #Sample currency properties
          + * JP=JPZ,999,0 + *
          + *

          + * will supersede the currency data for Japan. * * @since 1.4 */ @@ -64,13 +90,20 @@ */ transient private final int defaultFractionDigits; + /** + * ISO 4217 numeric code for this currency. + * Set from currency data tables. + */ + transient private final int numericCode; + // class data: instance map - private static HashMap instances = new HashMap(7); + private static HashMap instances = new HashMap(7); + private static HashSet available; - // Class data: currency data obtained from java.util.CurrencyData. + // Class data: currency data obtained from currency.data file. // Purpose: // - determine valid country codes // - determine valid currency codes @@ -83,11 +116,13 @@ // // table formats: // - mainTable: - // - maps country code to 8-bit char + // - maps country code to 32-bit int // - 26*26 entries, corresponding to [A-Z]*[A-Z] // - \u007F -> not valid country - // - bit 7 - 1: special case, bits 0-4 indicate which one - // 0: simple country, bits 0-4 indicate final char of currency code + // - bits 18-31: unused + // - bits 8-17: numeric code (0 to 1023) + // - bit 7: 1 - special case, bits 0-4 indicate which one + // 0 - simple country, bits 0-4 indicate final char of currency code // - bits 5-6: fraction digits for simple countries, 0 for special cases // - bits 0-4: final char for currency code for simple country, or ID of special case // - special case IDs: @@ -106,16 +141,23 @@ // main currency of a simple country, separated by "-" // - otherCurrenciesDFD: decimal format digits for currencies in otherCurrencies, same order - static String mainTable; + static int formatVersion; + static int dataVersion; + static int[] mainTable; static long[] scCutOverTimes; static String[] scOldCurrencies; static String[] scNewCurrencies; static int[] scOldCurrenciesDFD; static int[] scNewCurrenciesDFD; + static int[] scOldCurrenciesNumericCode; + static int[] scNewCurrenciesNumericCode; static String otherCurrencies; static int[] otherCurrenciesDFD; + static int[] otherCurrenciesNumericCode; // handy constants - must match definitions in GenerateCurrencyData + // magic number + private static final int MAGIC_NUMBER = 0x43757244; // number of characters from A to Z private static final int A_TO_Z = ('Z' - 'A') + 1; // entry for invalid country codes @@ -138,31 +180,82 @@ private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1; // mask for distinguishing simple and special case countries private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK; + // mask for the numeric code of the currency + private static final int NUMERIC_CODE_MASK = 0x0003FF00; + // shift count for the numeric code of the currency + private static final int NUMERIC_CODE_SHIFT = 8; + + // Currency data format version + private static final int VALID_FORMAT_VERSION = 1; static { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { + String homeDir = System.getProperty("java.home"); try { - Class data = Class.forName("java.util.CurrencyData"); - mainTable = (String) data.getDeclaredField("mainTable").get(data); - scCutOverTimes = (long[]) data.getDeclaredField("scCutOverTimes").get(data); - scOldCurrencies = (String[]) data.getDeclaredField("scOldCurrencies").get(data); - scNewCurrencies = (String[]) data.getDeclaredField("scNewCurrencies").get(data); - scOldCurrenciesDFD = (int[]) data.getDeclaredField("scOldCurrenciesDFD").get(data); - scNewCurrenciesDFD = (int[]) data.getDeclaredField("scNewCurrenciesDFD").get(data); - otherCurrencies = (String) data.getDeclaredField("otherCurrencies").get(data); - otherCurrenciesDFD = (int[]) data.getDeclaredField("otherCurrenciesDFD").get(data); - } catch (ClassNotFoundException e) { - throw new InternalError(); - } catch (NoSuchFieldException e) { - throw new InternalError(); - } catch (IllegalAccessException e) { - throw new InternalError(); + String dataFile = homeDir + File.separator + + "lib" + File.separator + "currency.data"; + DataInputStream dis = new DataInputStream( + new BufferedInputStream( + new FileInputStream(dataFile))); + if (dis.readInt() != MAGIC_NUMBER) { + throw new InternalError("Currency data is possibly corrupted"); + } + formatVersion = dis.readInt(); + if (formatVersion != VALID_FORMAT_VERSION) { + throw new InternalError("Currency data format is incorrect"); + } + dataVersion = dis.readInt(); + mainTable = readIntArray(dis, A_TO_Z * A_TO_Z); + int scCount = dis.readInt(); + scCutOverTimes = readLongArray(dis, scCount); + scOldCurrencies = readStringArray(dis, scCount); + scNewCurrencies = readStringArray(dis, scCount); + scOldCurrenciesDFD = readIntArray(dis, scCount); + scNewCurrenciesDFD = readIntArray(dis, scCount); + scOldCurrenciesNumericCode = readIntArray(dis, scCount); + scNewCurrenciesNumericCode = readIntArray(dis, scCount); + int ocCount = dis.readInt(); + otherCurrencies = dis.readUTF(); + otherCurrenciesDFD = readIntArray(dis, ocCount); + otherCurrenciesNumericCode = readIntArray(dis, ocCount); + dis.close(); + } catch (IOException e) { + InternalError ie = new InternalError(); + ie.initCause(e); + throw ie; + } + + // look for the properties file for overrides + try { + File propFile = new File(homeDir + File.separator + + "lib" + File.separator + + "currency.properties"); + if (propFile.exists()) { + Properties props = new Properties(); + props.load(new FileReader(propFile)); + Set keys = props.stringPropertyNames(); + Pattern propertiesPattern = + Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])"); + for (String key : keys) { + replaceCurrencyData(propertiesPattern, + key.toUpperCase(Locale.ROOT), + props.getProperty(key).toUpperCase(Locale.ROOT)); + } + } + } catch (IOException e) { + log(Level.INFO, "currency.properties is ignored because of an IOException", e); } return null; } }); } + + /** + * Constants for retrieving localized names from the name providers. + */ + private static final int SYMBOL = 0; + private static final int DISPLAYNAME = 1; /** @@ -170,9 +263,10 @@ * so that we can insure that there's never more than one instance for a * given currency. */ - private Currency(String currencyCode, int defaultFractionDigits) { + private Currency(String currencyCode, int defaultFractionDigits, int numericCode) { this.currencyCode = currencyCode; this.defaultFractionDigits = defaultFractionDigits; + this.numericCode = numericCode; } /** @@ -185,15 +279,16 @@ * a supported ISO 4217 code. */ public static Currency getInstance(String currencyCode) { - return getInstance(currencyCode, Integer.MIN_VALUE); + return getInstance(currencyCode, Integer.MIN_VALUE, 0); } - private static Currency getInstance(String currencyCode, int defaultFractionDigits) { + private static Currency getInstance(String currencyCode, int defaultFractionDigits, + int numericCode) { synchronized (instances) { // Try to look up the currency code in the instances table. // This does the null pointer check as a side effect. // Also, if there already is an entry, the currencyCode must be valid. - Currency instance = (Currency) instances.get(currencyCode); + Currency instance = instances.get(currencyCode); if (instance != null) { return instance; } @@ -212,6 +307,7 @@ && tableEntry != INVALID_COUNTRY_ENTRY && currencyCode.charAt(2) - 'A' == (tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK)) { defaultFractionDigits = (tableEntry & SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK) >> SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT; + numericCode = (tableEntry & NUMERIC_CODE_MASK) >> NUMERIC_CODE_SHIFT; } else { // Check for '-' separately so we don't get false hits in the table. if (currencyCode.charAt(2) == '-') { @@ -222,10 +318,11 @@ throw new IllegalArgumentException(); } defaultFractionDigits = otherCurrenciesDFD[index / 4]; + numericCode = otherCurrenciesNumericCode[index / 4]; } } - instance = new Currency(currencyCode, defaultFractionDigits); + instance = new Currency(currencyCode, defaultFractionDigits, numericCode); instances.put(currencyCode, instance); return instance; } @@ -269,9 +366,10 @@ && tableEntry != INVALID_COUNTRY_ENTRY) { char finalChar = (char) ((tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK) + 'A'); int defaultFractionDigits = (tableEntry & SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK) >> SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT; + int numericCode = (tableEntry & NUMERIC_CODE_MASK) >> NUMERIC_CODE_SHIFT; StringBuffer sb = new StringBuffer(country); sb.append(finalChar); - return getInstance(sb.toString(), defaultFractionDigits); + return getInstance(sb.toString(), defaultFractionDigits, numericCode); } else { // special cases if (tableEntry == INVALID_COUNTRY_ENTRY) { @@ -282,15 +380,61 @@ } else { int index = (tableEntry & SPECIAL_CASE_COUNTRY_INDEX_MASK) - SPECIAL_CASE_COUNTRY_INDEX_DELTA; if (scCutOverTimes[index] == Long.MAX_VALUE || System.currentTimeMillis() < scCutOverTimes[index]) { - return getInstance(scOldCurrencies[index], scOldCurrenciesDFD[index]); + return getInstance(scOldCurrencies[index], scOldCurrenciesDFD[index], + scOldCurrenciesNumericCode[index]); } else { - return getInstance(scNewCurrencies[index], scNewCurrenciesDFD[index]); + return getInstance(scNewCurrencies[index], scNewCurrenciesDFD[index], + scNewCurrenciesNumericCode[index]); } } } } /** + * Gets the set of available currencies. The returned set of currencies + * contains all of the available currencies, which may include currencies + * that represent obsolete ISO 4217 codes. The set can be modified + * without affecting the available currencies in the runtime. + * + * @return the set of available currencies. If there is no currency + * available in the runtime, the returned set is empty. + * @since 1.7 + */ + public static Set getAvailableCurrencies() { + synchronized(Currency.class) { + if (available == null) { + available = new HashSet(256); + + // Add simple currencies first + for (char c1 = 'A'; c1 <= 'Z'; c1 ++) { + for (char c2 = 'A'; c2 <= 'Z'; c2 ++) { + int tableEntry = getMainTableEntry(c1, c2); + if ((tableEntry & COUNTRY_TYPE_MASK) == SIMPLE_CASE_COUNTRY_MASK + && tableEntry != INVALID_COUNTRY_ENTRY) { + char finalChar = (char) ((tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK) + 'A'); + int defaultFractionDigits = (tableEntry & SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK) >> SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT; + int numericCode = (tableEntry & NUMERIC_CODE_MASK) >> NUMERIC_CODE_SHIFT; + StringBuilder sb = new StringBuilder(); + sb.append(c1); + sb.append(c2); + sb.append(finalChar); + available.add(getInstance(sb.toString(), defaultFractionDigits, numericCode)); + } + } + } + + // Now add other currencies + StringTokenizer st = new StringTokenizer(otherCurrencies, "-"); + while (st.hasMoreElements()) { + available.add(getInstance((String)st.nextElement())); + } + } + } + + return (Set) available.clone(); + } + + /** * Gets the ISO 4217 currency code of this currency. * * @return the ISO 4217 currency code of this currency. @@ -337,7 +481,8 @@ // method. String symbol = pool.getLocalizedObject( CurrencyNameGetter.INSTANCE, - locale, null, currencyCode); + locale, (OpenListResourceBundle)null, + currencyCode, SYMBOL); if (symbol != null) { return symbol; } @@ -365,6 +510,70 @@ } /** + * Returns the ISO 4217 numeric code of this currency. + * + * @return the ISO 4217 numeric code of this currency + * @since 1.7 + */ + public int getNumericCode() { + return numericCode; + } + + /** + * Gets the name that is suitable for displaying this currency for + * the default locale. If there is no suitable display name found + * for the default locale, the ISO 4217 currency code is returned. + * + * @return the display name of this currency for the default locale + * @since 1.7 + */ + public String getDisplayName() { + return getDisplayName(Locale.getDefault()); + } + + /** + * Gets the name that is suitable for displaying this currency for + * the specified locale. If there is no suitable display name found + * for the specified locale, the ISO 4217 currency code is returned. + * + * @param locale the locale for which a display name for this currency is + * needed + * @return the display name of this currency for the specified locale + * @exception NullPointerException if locale is null + * @since 1.7 + */ + public String getDisplayName(Locale locale) { + try { + OpenListResourceBundle bundle = LocaleData.getCurrencyNames(locale); + String result = null; + String bundleKey = currencyCode.toLowerCase(Locale.ROOT); + + // Check whether a provider can provide an implementation that's closer + // to the requested locale than what the Java runtime itself can provide. + LocaleServiceProviderPool pool = + LocaleServiceProviderPool.getPool(CurrencyNameProvider.class); + if (pool.hasProviders()) { + result = pool.getLocalizedObject( + CurrencyNameGetter.INSTANCE, + locale, bundleKey, bundle, currencyCode, DISPLAYNAME); + } + + if (result == null) { + result = bundle.getString(bundleKey); + } + + if (result != null) { + return result; + } + } catch (MissingResourceException e) { + // fall through + } + + // use currency code as symbol of last resort + return currencyCode; + } + + /** * Returns the ISO 4217 currency code of this currency. * * @return the ISO 4217 currency code of this currency @@ -388,7 +597,18 @@ if (char1 < 'A' || char1 > 'Z' || char2 < 'A' || char2 > 'Z') { throw new IllegalArgumentException(); } - return mainTable.charAt((char1 - 'A') * A_TO_Z + (char2 - 'A')); + return mainTable[(char1 - 'A') * A_TO_Z + (char2 - 'A')]; + } + + /** + * Sets the main table entry for the country whose country code consists + * of char1 and char2. + */ + private static void setMainTableEntry(char char1, char char2, int entry) { + if (char1 < 'A' || char1 > 'Z' || char2 < 'A' || char2 > 'Z') { + throw new IllegalArgumentException(); + } + mainTable[(char1 - 'A') * A_TO_Z + (char2 - 'A')] = entry; } /** @@ -404,8 +624,116 @@ Locale locale, String key, Object... params) { - assert params.length == 0; - return currencyNameProvider.getSymbol(key, locale); + assert params.length == 1; + int type = (Integer)params[0]; + + switch(type) { + case SYMBOL: + return currencyNameProvider.getSymbol(key, locale); + case DISPLAYNAME: + return currencyNameProvider.getDisplayName(key, locale); + default: + assert false; // shouldn't happen + } + + return null; } } + + private static int[] readIntArray(DataInputStream dis, int count) throws IOException { + int[] ret = new int[count]; + for (int i = 0; i < count; i++) { + ret[i] = dis.readInt(); + } + + return ret; + } + + private static long[] readLongArray(DataInputStream dis, int count) throws IOException { + long[] ret = new long[count]; + for (int i = 0; i < count; i++) { + ret[i] = dis.readLong(); + } + + return ret; + } + + private static String[] readStringArray(DataInputStream dis, int count) throws IOException { + String[] ret = new String[count]; + for (int i = 0; i < count; i++) { + ret[i] = dis.readUTF(); + } + + return ret; + } + + /** + * Replaces currency data found in the currencydata.properties file + * + * @param pattern regex pattern for the properties + * @param ctry country code + * @param data currency data. This is a comma separated string that + * consists of "three-letter alphabet code", "three-digit numeric code", + * and "one-digit (0,1,2, or 3) default fraction digit". + * For example, "JPZ,392,0". + * @throws + */ + private static void replaceCurrencyData(Pattern pattern, String ctry, String curdata) { + + if (ctry.length() != 2) { + // ignore invalid country code + String message = new StringBuilder() + .append("The entry in currency.properties for ") + .append(ctry).append(" is ignored because of the invalid country code.") + .toString(); + log(Level.INFO, message, null); + return; + } + + Matcher m = pattern.matcher(curdata); + if (!m.find()) { + // format is not recognized. ignore the data + String message = new StringBuilder() + .append("The entry in currency.properties for ") + .append(ctry) + .append(" is ignored because the value format is not recognized.") + .toString(); + log(Level.INFO, message, null); + return; + } + + String code = m.group(1); + int numeric = Integer.parseInt(m.group(2)); + int fraction = Integer.parseInt(m.group(3)); + int entry = numeric << NUMERIC_CODE_SHIFT; + + int index; + for (index = 0; index < scOldCurrencies.length; index++) { + if (scOldCurrencies[index].equals(code)) { + break; + } + } + + if (index == scOldCurrencies.length) { + // simple case + entry |= (fraction << SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT) | + (code.charAt(2) - 'A'); + } else { + // special case + entry |= SPECIAL_CASE_COUNTRY_MASK | + (index + SPECIAL_CASE_COUNTRY_INDEX_DELTA); + } + setMainTableEntry(ctry.charAt(0), ctry.charAt(1), entry); + } + + private static void log(Level level, String message, Throwable t) { + Logger logger = Logger.getLogger("java.util.Currency"); + if (logger.isLoggable(level)) { + if (t != null) { + logger.log(level, message, t); + } else { + logger.log(level, message); + } + } + } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/util/CurrencyData.properties --- a/j2se/src/share/classes/java/util/CurrencyData.properties Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/util/CurrencyData.properties Fri Jul 20 21:22:05 2007 +0000 @@ -23,31 +23,37 @@ # have any questions. # -version=134 +formatVersion=1 + +# Version of the currency code information in this class. +# It is a serial number that accompanies with each amendment, such as +# 'MAxxx.doc' + +dataVersion=134 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. -all=ADP-AED-AFA-AFN-ALL-AMD-ANG-AOA-ARS-ATS-AUD-\ - AWG-AYM-AZM-AZN-BAM-BBD-BDT-BEF-BGL-BGN-BHD-BIF-\ - BMD-BND-BOB-BOV-BRL-BSD-BTN-BWP-BYB-BYR-\ - BZD-CAD-CDF-CHF-CLF-CLP-CNY-COP-CRC-CSD-CUP-\ - CVE-CYP-CZK-DEM-DJF-DKK-DOP-DZD-EEK-EGP-\ - ERN-ESP-ETB-EUR-FIM-FJD-FKP-FRF-GBP-GEL-\ - GHC-GIP-GMD-GNF-GRD-GTQ-GWP-GYD-HKD-HNL-\ - HRK-HTG-HUF-IDR-IEP-ILS-INR-IQD-IRR-ISK-\ - ITL-JMD-JOD-JPY-KES-KGS-KHR-KMF-KPW-KRW-\ - KWD-KYD-KZT-LAK-LBP-LKR-LRD-LSL-LTL-LUF-\ - LVL-LYD-MAD-MDL-MGA-MGF-MKD-MMK-MNT-MOP-MRO-\ - MTL-MUR-MVR-MWK-MXN-MXV-MYR-MZM-MZN-NAD-NGN-\ - NIO-NLG-NOK-NPR-NZD-OMR-PAB-PEN-PGK-PHP-\ - PKR-PLN-PTE-PYG-QAR-ROL-RON-RSD-RUB-RUR-RWF-SAR-\ - SBD-SCR-SDD-SEK-SGD-SHP-SIT-SKK-SLL-SOS-\ - SRD-SRG-STD-SVC-SYP-SZL-THB-TJS-TMM-TND-TOP-\ - TPE-TRL-TRY-TTD-TWD-TZS-UAH-UGX-USD-USN-USS-\ - UYU-UZS-VEB-VND-VUV-WST-XAF-XAG-XAU-XBA-\ - XBB-XBC-XBD-XCD-XDR-XFO-XFU-XOF-XPD-XPF-\ - XPT-XTS-XXX-YER-YUM-ZAR-ZMK-ZWD-ZWN +all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036-\ + AWG533-AYM945-AZM031-AZN944-BAM977-BBD052-BDT050-BEF056-BGL100-BGN975-BHD048-BIF108-\ + BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-\ + BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-\ + CVE132-CYP196-CZK203-DEM276-DJF262-DKK208-DOP214-DZD012-EEK233-EGP818-\ + ERN232-ESP724-ETB230-EUR978-FIM246-FJD242-FKP238-FRF250-GBP826-GEL981-\ + GHC288-GIP292-GMD270-GNF324-GRD300-GTQ320-GWP624-GYD328-HKD344-HNL340-\ + HRK191-HTG332-HUF348-IDR360-IEP372-ILS376-INR356-IQD368-IRR364-ISK352-\ + ITL380-JMD388-JOD400-JPY392-KES404-KGS417-KHR116-KMF174-KPW408-KRW410-\ + KWD414-KYD136-KZT398-LAK418-LBP422-LKR144-LRD430-LSL426-LTL440-LUF442-\ + LVL428-LYD434-MAD504-MDL498-MGA969-MGF450-MKD807-MMK104-MNT496-MOP446-MRO478-\ + MTL470-MUR480-MVR462-MWK454-MXN484-MXV979-MYR458-MZM508-MZN943-NAD516-NGN566-\ + NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\ + PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ + SBD090-SCR690-SDD736-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ + SRD968-SRG740-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TND788-TOP776-\ + TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\ + UYU858-UZS860-VEB862-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\ + XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\ + XPT962-XTS963-XXX999-YER886-YUM891-ZAR710-ZMK894-ZWD716-ZWN942 # Mappings from ISO 3166 country codes to ISO 4217 currency codes. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/util/ResourceBundle.java --- a/j2se/src/share/classes/java/util/ResourceBundle.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/util/ResourceBundle.java Fri Jul 20 21:22:05 2007 +0000 @@ -1423,6 +1423,11 @@ try { bundle = control.newBundle(cacheKey.getName(), targetLocale, format, cacheKey.getLoader(), reload); + } catch (LinkageError error) { + // We need to handle the LinkageError case due to + // inconsistent case-sensitivity in ClassLoader. + // See 6572242 for details. + cacheKey.setCause(error); } catch (Exception cause) { cacheKey.setCause(cause); } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/util/logging/Logger.java --- a/j2se/src/share/classes/java/util/logging/Logger.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/util/logging/Logger.java Fri Jul 20 21:22:05 2007 +0000 @@ -156,7 +156,7 @@ * All the other logging methods are implemented as calls on this * log(LogRecord) method. * - * @version 1.58, 05/18/07 + * @version 1.59, 06/06/07 * @since 1.4 */ @@ -439,7 +439,7 @@ * @exception SecurityException if a security manager exists and if * the caller does not have LoggingPermission("control"). */ - public void setFilter(Filter newFilter) throws SecurityException { + public synchronized void setFilter(Filter newFilter) throws SecurityException { checkAccess(); filter = newFilter; } @@ -449,7 +449,7 @@ * * @return a filter object (may be null) */ - public Filter getFilter() { + public synchronized Filter getFilter() { return filter; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/java/util/spi/CurrencyNameProvider.java --- a/j2se/src/share/classes/java/util/spi/CurrencyNameProvider.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/java/util/spi/CurrencyNameProvider.java Fri Jul 20 21:22:05 2007 +0000 @@ -30,7 +30,7 @@ /** * An abstract class for service providers that - * provide localized currency symbols for the + * provide localized currency symbols and display names for the * {@link java.util.Currency Currency} class. * Note that currency symbols are considered names when determining * behaviors described in the @@ -38,7 +38,7 @@ * specification. * * @since 1.6 - * @version @(#)CurrencyNameProvider.java 1.8 07/05/05 + * @version @(#)CurrencyNameProvider.java 1.9 07/05/31 */ public abstract class CurrencyNameProvider extends LocaleServiceProvider { @@ -71,4 +71,31 @@ * @see java.util.Currency#getSymbol(java.util.Locale) */ public abstract String getSymbol(String currencyCode, Locale locale); + + /** + * Returns a name for the currency that is appropriate for display to the + * user. The default implementation returns null. + * + * @param currencyCode the ISO 4217 currency code, which + * consists of three upper-case letters between 'A' (U+0041) and + * 'Z' (U+005A) + * @param locale the desired locale + * @return the name for the currency that is appropriate for display to the + * user, or null if the name is not available for the locale + * @exception IllegalArgumentException if currencyCode is not in + * the form of three upper-case letters, or locale isn't + * one of the locales returned from + * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() + * getAvailableLocales()}. + * @exception NullPointerException if currencyCode or + * locale is null + * @since 1.7 + */ + public String getDisplayName(String currencyCode, Locale locale) { + if (currencyCode == null || locale == null) { + throw new NullPointerException(); + } + + return null; + } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/javax/security/auth/Subject.java --- a/j2se/src/share/classes/javax/security/auth/Subject.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/javax/security/auth/Subject.java Fri Jul 20 21:22:05 2007 +0000 @@ -95,7 +95,7 @@ * Principal implementations associated with Subjects * must implement Serializable. * - * @version 1.134, 05/05/07 + * @version 1.135, 06/29/07 * @see java.security.Principal * @see java.security.DomainCombiner */ @@ -133,6 +133,9 @@ private static final int PUB_CREDENTIAL_SET = 2; private static final int PRIV_CREDENTIAL_SET = 3; + private static final ProtectionDomain[] NULL_PD_ARRAY + = new ProtectionDomain[0]; + /** * Create an instance of a Subject * with an empty Set of Principals and empty @@ -465,7 +468,7 @@ // for doPrivileged final AccessControlContext callerAcc = (acc == null ? - new AccessControlContext(new ProtectionDomain[0]) : + new AccessControlContext(NULL_PD_ARRAY) : acc); // call doPrivileged and push this new context on the stack @@ -528,7 +531,7 @@ // set up the new Subject-based AccessControlContext for doPrivileged final AccessControlContext callerAcc = (acc == null ? - new AccessControlContext(new ProtectionDomain[0]) : + new AccessControlContext(NULL_PD_ARRAY) : acc); // call doPrivileged and push this new context on the stack diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java --- a/j2se/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Fri Jul 20 21:22:05 2007 +0000 @@ -244,6 +244,14 @@ return validationStatus; } + // validate the signature + boolean sigValidity = sv.validate(vc); + if (!sigValidity) { + validationStatus = false; + validated = true; + return validationStatus; + } + // validate all References List refs = this.si.getReferences(); boolean validateRefs = true; @@ -265,14 +273,6 @@ return validationStatus; } - // validate the signature - boolean sigValidity = sv.validate(vc); - if (!sigValidity) { - validationStatus = false; - validated = true; - return validationStatus; - } - // validate Manifests, if property set boolean validateMans = true; if (Boolean.TRUE.equals(vc.getProperty diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/applet/AppletClassLoader.java --- a/j2se/src/share/classes/sun/applet/AppletClassLoader.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/applet/AppletClassLoader.java Fri Jul 20 21:22:05 2007 +0000 @@ -63,7 +63,7 @@ private URL base; /* applet code base URL */ private CodeSource codesource; /* codesource for the base URL */ private AccessControlContext acc; - private boolean exceptionStatus = false; + private boolean exceptionStatus = false; private final Object threadGroupSynchronizer = new Object(); private final Object grabReleaseSynchronizer = new Object(); @@ -183,7 +183,7 @@ // final String path = name.replace('.', '/').concat(".class").concat(cookie); String encodedName = ParseUtil.encodePath(name.replace('.', '/'), false); - final String path = (new StringBuffer(encodedName)).append(".class").append(cookie).toString(); + final String path = (new StringBuffer(encodedName)).append(".class").append(cookie).toString(); try { byte[] b = (byte[]) AccessController.doPrivileged( new PrivilegedExceptionAction() { @@ -572,7 +572,7 @@ // 6215746: Disable META-INF/* lookup from codebase in // applet/plugin classloader. [stanley.ho] - if (name.startsWith("META-INF/")) + if (name.startsWith("META-INF/")) return e; // 4668479: Option to turn off codebase lookup in AppletClassLoader @@ -653,7 +653,7 @@ private AppletThreadGroup threadGroup; private AppContext appContext; - ThreadGroup getThreadGroup() { + public ThreadGroup getThreadGroup() { synchronized (threadGroupSynchronizer) { if (threadGroup == null || threadGroup.isDestroyed()) { AccessController.doPrivileged(new PrivilegedAction() { @@ -692,7 +692,7 @@ /* * Get the AppContext, if any, corresponding to this AppletClassLoader. */ - AppContext getAppContext() { + public AppContext getAppContext() { return appContext; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/awt/EmbeddedFrame.java --- a/j2se/src/share/classes/sun/awt/EmbeddedFrame.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/awt/EmbeddedFrame.java Fri Jul 20 21:22:05 2007 +0000 @@ -102,6 +102,7 @@ protected EmbeddedFrame(long handle, boolean supportsXEmbed) { this.supportsXEmbed = supportsXEmbed; + registerListeners(); } /** diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/management/snmp/jvminstr/README --- a/j2se/src/share/classes/sun/management/snmp/jvminstr/README Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/management/snmp/jvminstr/README Fri Jul 20 21:22:05 2007 +0000 @@ -1,6 +1,6 @@ #============================================================================== # JVM Management MIB - Instrumentation Classes -# Date: 07/07/05, Version: 1.5 +# Date: 07/07/20, Version: 1.5 #============================================================================== In this directory: diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/security/tools/JarSigner.java --- a/j2se/src/share/classes/sun/security/tools/JarSigner.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/security/tools/JarSigner.java Fri Jul 20 21:22:05 2007 +0000 @@ -54,7 +54,7 @@ /** *

          The jarsigner utility. * - * @version 1.82, 05/05/07 + * @version 1.83, 06/21/07 * @author Roland Schemers * @author Jan Luehe */ @@ -908,6 +908,9 @@ Manifest manifest = new Manifest(); Map mfEntries = manifest.getEntries(); + // The Attributes of manifest before updating + Attributes oldAttr = null; + boolean mfModified = false; boolean mfCreated = false; byte[] mfRawBytes = null; @@ -921,6 +924,7 @@ // Manifest exists. Read its raw bytes. mfRawBytes = getBytes(zipFile, mfFile); manifest.read(new ByteArrayInputStream(mfRawBytes)); + oldAttr = (Attributes)(manifest.getMainAttributes().clone()); } else { // Create new manifest Attributes mattr = manifest.getMainAttributes(); @@ -984,7 +988,37 @@ if (mfModified) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); manifest.write(baos); - mfRawBytes = baos.toByteArray(); + byte[] newBytes = baos.toByteArray(); + if (mfRawBytes != null + && oldAttr.equals(manifest.getMainAttributes())) { + + /* + * Note: + * + * The Attributes object is based on HashMap and can handle + * continuation columns. Therefore, even if the contents are + * not changed (in a Map view), the bytes that it write() + * may be different from the original bytes that it read() + * from. Since the signature on the main attributes is based + * on raw bytes, we must retain the exact bytes. + */ + + int newPos = findHeaderEnd(newBytes); + int oldPos = findHeaderEnd(mfRawBytes); + + if (newPos == oldPos) { + System.arraycopy(mfRawBytes, 0, newBytes, 0, oldPos); + } else { + // cat oldHead newTail > newBytes + byte[] lastBytes = new byte[oldPos + + newBytes.length - newPos]; + System.arraycopy(mfRawBytes, 0, lastBytes, 0, oldPos); + System.arraycopy(newBytes, newPos, lastBytes, oldPos, + newBytes.length - newPos); + newBytes = lastBytes; + } + } + mfRawBytes = newBytes; } // Write out the manifest @@ -1200,6 +1234,21 @@ } /** + * Find the position of \r\n\r\n inside bs + */ + private int findHeaderEnd(byte[] bs) { + for (int i=0; i S getLocalizedObject(LocalizedObjectGetter getter, Locale locale, Object... params) { - return getLocalizedObjectImpl(getter, locale, true, null, null, params); + return getLocalizedObjectImpl(getter, locale, true, null, null, null, params); } /** @@ -281,16 +281,44 @@ OpenListResourceBundle bundle, String key, Object... params) { - return getLocalizedObjectImpl(getter, locale, false, bundle, key, params); + return getLocalizedObjectImpl(getter, locale, false, null, bundle, key, params); + } + + /** + * Returns the provider's localized name for the specified + * locale. + * + * @param getter an object on which getObject() method + * is called to obtain the provider's instance. + * @param locale the given locale that is used as the starting one + * @param bundleKey JRE specific bundle key. e.g., "USD" is for currency + symbol and "usd" is for currency display name in the JRE bundle. + * @param bundle JRE resource bundle that contains + * the localized names, or null for localized objects. + * @param key the key string if bundle is supplied, otherwise null. + * @param params provider specific parameters + * @return provider's instance, or null. + */ + public S getLocalizedObject(LocalizedObjectGetter getter, + Locale locale, + String bundleKey, + OpenListResourceBundle bundle, + String key, + Object... params) { + return getLocalizedObjectImpl(getter, locale, false, bundleKey, bundle, key, params); } private S getLocalizedObjectImpl(LocalizedObjectGetter getter, Locale locale, boolean isObjectProvider, + String bundleKey, OpenListResourceBundle bundle, String key, Object... params) { if (hasProviders()) { + if (bundleKey == null) { + bundleKey = key; + } Locale bundleLocale = (bundle != null ? bundle.getLocale() : null); Locale requested = locale; P lsp; @@ -322,7 +350,7 @@ while (bundle != null) { bundleLocale = bundle.getLocale(); - if (bundle.handleGetKeys().contains(key)) { + if (bundle.handleGetKeys().contains(bundleKey)) { // JRE has it. return null; } else { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames.properties --- a/j2se/src/share/classes/sun/util/resources/CurrencyNames.properties Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames.properties Fri Jul 20 21:22:05 2007 +0000 @@ -1,30 +1,44 @@ -# -# Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + # -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Sun designates this -# particular file as subject to the "Classpath" exception as provided -# by Sun in the LICENSE file that accompanied this code. +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. # -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. # -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. -# - -# currency symbols -# default is simply to use the ISO 4217 currency code itself +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! ADP=ADP AED=AED @@ -134,6 +148,7 @@ LYD=LYD MAD=MAD MDL=MDL +MGA=MGA MGF=MGF MKD=MKD MMK=MMK @@ -168,6 +183,7 @@ QAR=QAR ROL=ROL RON=RON +RSD=RSD RUB=RUB RUR=RUR RWF=RWF @@ -232,3 +248,210 @@ ZAR=ZAR ZMK=ZMK ZWD=ZWD +ZWN=ZWN +adp=Andorran Peseta +aed=United Arab Emirates Dirham +afa=Afghani (1927-2002) +afn=Afghani +all=Albanian Lek +amd=Armenian Dram +ang=Netherlands Antillan Guilder +aoa=Angolan Kwanza +ars=Argentine Peso +ats=Austrian Schilling +aud=Australian Dollar +awg=Aruban Guilder +azm=Azerbaijanian Manat (1993-2006) +azn=Azerbaijanian Manat +bam=Bosnia-Herzegovina Convertible Mark +bbd=Barbados Dollar +bdt=Bangladesh Taka +bef=Belgian Franc +bgl=Bulgarian Hard Lev +bgn=Bulgarian New Lev +bhd=Bahraini Dinar +bif=Burundi Franc +bmd=Bermudan Dollar +bnd=Brunei Dollar +bob=Boliviano +bov=Bolivian Mvdol +brl=Brazilian Real +bsd=Bahamian Dollar +btn=Bhutan Ngultrum +bwp=Botswanan Pula +byb=Belarussian New Ruble (1994-1999) +byr=Belarussian Ruble +bzd=Belize Dollar +cad=Canadian Dollar +cdf=Congolese Franc Congolais +chf=Swiss Franc +clf=Chilean Unidades de Fomento +clp=Chilean Peso +cny=Chinese Yuan Renminbi +cop=Colombian Peso +crc=Costa Rican Colon +csd=Serbian Dinar +cup=Cuban Peso +cve=Cape Verde Escudo +cyp=Cyprus Pound +czk=Czech Republic Koruna +dem=Deutsche Mark +djf=Djibouti Franc +dkk=Danish Krone +dop=Dominican Peso +dzd=Algerian Dinar +eek=Estonian Kroon +egp=Egyptian Pound +ern=Eritrean Nakfa +esp=Spanish Peseta +etb=Ethiopian Birr +eur=Euro +fim=Finnish Markka +fjd=Fiji Dollar +fkp=Falkland Islands Pound +frf=French Franc +gbp=British Pound Sterling +gel=Georgian Lari +ghc=Ghana Cedi +gip=Gibraltar Pound +gmd=Gambia Dalasi +gnf=Guinea Franc +grd=Greek Drachma +gtq=Guatemala Quetzal +gwp=Guinea-Bissau Peso +gyd=Guyana Dollar +hkd=Hong Kong Dollar +hnl=Hoduras Lempira +hrk=Croatian Kuna +htg=Haitian Gourde +huf=Hungarian Forint +idr=Indonesian Rupiah +iep=Irish Pound +ils=Israeli New Sheqel +inr=Indian Rupee +iqd=Iraqi Dinar +irr=Iranian Rial +isk=Icelandic Krona +itl=Italian Lira +jmd=Jamaican Dollar +jod=Jordanian Dinar +jpy=Japanese Yen +kes=Kenyan Shilling +kgs=Kyrgystan Som +khr=Cambodian Riel +kmf=Comoro Franc +kpw=North Korean Won +krw=South Korean Won +kwd=Kuwaiti Dinar +kyd=Cayman Islands Dollar +kzt=Kazakhstan Tenge +lak=Laotian Kip +lbp=Lebanese Pound +lkr=Sri Lanka Rupee +lrd=Liberian Dollar +lsl=Lesotho Loti +ltl=Lithuanian Lita +luf=Luxembourg Franc +lvl=Latvian Lats +lyd=Libyan Dinar +mad=Moroccan Dirham +mdl=Moldovan Leu +mga=Madagascar Ariary +mgf=Madagascar Franc +mkd=Macedonian Denar +mmk=Myanmar Kyat +mnt=Mongolian Tugrik +mop=Macao Pataca +mro=Mauritania Ouguiya +mtl=Maltese Lira +mur=Mauritius Rupee +mvr=Maldive Islands Rufiyaa +mwk=Malawi Kwacha +mxn=Mexican Peso +mxv=Mexican Unidad de Inversion (UDI) +myr=Malaysian Ringgit +mzm=Old Mozambique Metical +mzn=Mozambique Metical +nad=Namibia Dollar +ngn=Nigerian Naira +nio=Nicaraguan Cordoba Oro +nlg=Netherlands Guilder +nok=Norwegian Krone +npr=Nepalese Rupee +nzd=New Zealand Dollar +omr=Oman Rial +pab=Panamanian Balboa +pen=Peruvian Sol Nuevo +pgk=Papua New Guinea Kina +php=Philippine Peso +pkr=Pakistan Rupee +pln=Polish Zloty +pte=Portuguese Escudo +pyg=Paraguay Guarani +qar=Qatari Rial +rol=Old Romanian Leu +ron=Romanian Leu +rub=Russian Ruble +rur=Russian Ruble (1991-1998) +rwf=Rwandan Franc +sar=Saudi Riyal +sbd=Solomon Islands Dollar +scr=Seychelles Rupee +sdd=Sudanese Dinar +sek=Swedish Krona +sgd=Singapore Dollar +shp=Saint Helena Pound +sit=Slovenia Tolar +skk=Slovak Koruna +sll=Sierra Leone Leone +sos=Somali Shilling +srd=Surinam Dollar +srg=Suriname Guilder +std=Sao Tome and Principe Dobra +svc=El Salvador Colon +syp=Syrian Pound +szl=Swaziland Lilangeni +thb=Thai Baht +tjs=Tajikistan Somoni +tmm=Turkmenistan Manat +tnd=Tunisian Dinar +top=Tonga Pa\u02bbanga +tpe=Timor Escudo +trl=Turkish Lira +try=New Turkish Lira +ttd=Trinidad and Tobago Dollar +twd=Taiwan New Dollar +tzs=Tanzanian Shilling +uah=Ukrainian Hryvnia +ugx=Ugandan Shilling +usd=US Dollar +usn=US Dollar (Next day) +uss=US Dollar (Same day) +uyu=Uruguay Peso Uruguayo +uzs=Uzbekistan Sum +veb=Venezuelan Bolivar +vnd=Vietnamese Dong +vuv=Vanuatu Vatu +wst=Western Samoa Tala +xaf=CFA Franc BEAC +xag=Silver +xau=Gold +xba=European Composite Unit +xbb=European Monetary Unit +xbc=European Unit of Account (XBC) +xbd=European Unit of Account (XBD) +xcd=East Caribbean Dollar +xdr=Special Drawing Rights +xfo=French Gold Franc +xfu=French UIC-Franc +xof=CFA Franc BCEAO +xpd=Palladium +xpf=CFP Franc +xpt=Platinum +xts=Testing Currency Code +xxx=No Currency +yer=Yemeni Rial +yum=Yugoslavian Noviy Dinar +zar=South African Rand +zmk=Zambian Kwacha +zwd=Zimbabwe Dollar diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_de.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_de.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,237 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=Andorranische Pesete +aed=UAE Dirham +afa=Afghani (1927-2002) +afn=Afghani +all=Lek +amd=Dram +ang=Niederl. Antillen Gulden +aoa=Kwanza +ars=Argentinischer Peso +ats=\u00d6sterreichischer Schilling +aud=Australischer Dollar +awg=Aruba Florin +azm=Aserbeidschan Manat +bam=Konvertierbare Mark +bbd=Barbados-Dollar +bdt=Taka +bef=Belgischer Franc +bgl=Lew (1962-1999) +bgn=Lew +bhd=Bahrain-Dinar +bif=Burundi-Franc +bmd=Bermuda-Dollar +bnd=Brunei-Dollar +bob=Boliviano +bov=Mvdol +brl=Real +bsd=Bahama-Dollar +btn=Ngultrum +bwp=Pula +byb=Belarus Rubel (alt) +byr=Belarus Rubel (neu) +bzd=Belize-Dollar +cad=Kanadischer Dollar +cdf=Franc congolais +chf=Schweizer Franken +clf=Unidades de Fomento +clp=Chilenischer Peso +cny=Renminbi Yuan +cop=Kolumbianischer Peso +crc=Costa Rica Colon +cup=Kubanischer Peso +cve=Kap Verde Escudo +cyp=Zypern Pfund +czk=Tschechische Krone +dem=Deutsche Mark +djf=Dschibuti-Franc +dkk=D\u00e4nische Krone +dop=Dominikanischer Peso +dzd=Algerischer Dinar +eek=Estnische Krone +egp=\u00c4gyptisches Pfund +ern=Nakfa +esp=Spanische Pesete +etb=Birr +eur=Euro +fim=Finnische Mark +fjd=Fidschi Dollar +fkp=Falkland Pfund +frf=Franz\u00f6sischer Franc +gbp=Pfund Sterling +gel=Georgischer Lari +ghc=Cedi +gip=Gibraltar Pfund +gmd=Dalasi +gnf=Guinea Franc +grd=Griechische Drachme +gtq=Quetzal +gwp=Guinea Bissau Peso +gyd=Guyana Dollar +hkd=Hongkong Dollar +hnl=Lempira +hrk=Kuna +htg=Gourde +huf=Forint +idr=Rupiah +iep=Irisches Pfund +ils=Schekel +inr=Indische Rupie +iqd=Irak Dinar +irr=Rial +isk=Isl\u00e4ndische Krone +itl=Italienische Lire +jmd=Jamaika Dollar +jod=Jordanischer Dinar +jpy=Yen +kes=Kenia Schilling +kgs=Som +khr=Riel +kmf=Komoren Franc +kpw=Nordkoreanischer Won +krw=S\u00fcdkoreanischer Won +kwd=Kuwait Dinar +kyd=Kaiman-Dollar +kzt=Tenge +lak=Kip +lbp=Libanesisches Pfund +lkr=Sri Lanka Rupie +lrd=Liberianischer Dollar +lsl=Loti +ltl=Litauischer Litas +luf=Luxemburgischer Franc +lvl=Lettischer Lats +lyd=Libyscher Dinar +mad=Marokkanischer Dirham +mdl=Moldau Leu +mga=Madagaskar Ariary +mgf=Madagaskar Franc +mkd=Denar +mmk=Kyat +mnt=Tugrik +mop=Pataca +mro=Ouguiya +mtl=Maltesische Lira +mur=Mauritius Rupie +mvr=Rufiyaa +mwk=Malawi Kwacha +mxn=Mexikanischer Peso +mxv=Mexican Unidad de Inversion (UDI) +myr=Malaysischer Ringgit +mzm=Metical +nad=Namibia Dollar +ngn=Naira +nio=Gold-Cordoba +nlg=Holl\u00e4ndischer Gulden +nok=Norwegische Krone +npr=Nepalesische Rupie +nzd=Neuseeland Dollar +omr=Rial Omani +pab=Balboa +pen=Neuer Sol +pgk=Kina +php=Philippinischer Peso +pkr=Pakistanische Rupie +pln=Zloty +pte=Portugiesischer Escudo +pyg=Guarani +qar=Katar Riyal +rol=Leu +rub=Russischer Rubel (neu) +rur=Russischer Rubel (alt) +rwf=Ruanda Franc +sar=Saudi Riyal +sbd=Salomonen Dollar +scr=Seychellen Rupie +sdd=Sudanesischer Dinar +sek=Schwedische Krone +sgd=Singapur Dollar +shp=St. Helena Pfund +sit=Tolar +skk=Slowakische Krone +sll=Leone +sos=Somalia Schilling +srg=Suriname Gulden +std=Dobra +svc=El Salvador Colon +syp=Syrisches Pfund +szl=Lilangeni +thb=Baht +tjs=Tadschikistan Somoni +tmm=Turkmenistan-Manat +tnd=Tunesischer Dinar +top=Pa\u02bbanga +tpe=Timor Escudo +trl=T\u00fcrkische Lira +try=Neue T\u00fcrkische Lira +ttd=Trinidad und Tobago Dollar +twd=Neuer Taiwan Dollar +tzs=Tansania Schilling +uah=Hryvnia +ugx=Uganda Schilling +usd=US Dollar +usn=US Dollar (N\u00e4chster Tag) +uss=US Dollar (Gleicher Tag) +uyu=Uruguayischer Peso +uzs=Usbekistan Sum +veb=Bolivar +vnd=Dong +vuv=Vatu +wst=Tala +xaf=CFA Franc (\u00c4quatorial) +xau=Gold +xba=Europ\u00e4ische Rechnungseinheit +xbc=Europ\u00e4ische Rechnungseinheit (XBC) +xbd=Europ\u00e4ische Rechnungseinheit (XBD) +xcd=Ostkaribischer Dollar +xdr=Sonderziehungsrechte +xfo=Franz\u00f6sischer Gold-Franc +xfu=Franz\u00f6sischer UIC-Franc +xof=CFA Franc (West) +xpf=CFP Franc +yer=Jemen Rial +yum=Neuer Dinar +zar=Rand +zmk=Kwacha +zwd=Simbabwe Dollar diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_es.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_es.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,246 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=peseta andorrana +aed=dirham de los Emiratos \u00c1rabes Unidos +afa=afgani (1927-2002) +afn=afgani +all=lek alban\u00e9s +amd=dram armenio +ang=flor\u00edn de las Antillas Neerlandesas +aoa=kwanza angole\u00f1o +ars=peso argentino +ats=chel\u00edn austriaco +aud=d\u00f3lar australiano +awg=flor\u00edn de Aruba +azm=manat azer\u00ed +bam=marco convertible de Bosnia-Herzegovina +bbd=d\u00f3lar de Barbados +bdt=taka de Bangladesh +bef=franco belga +bgl=lev fuerte b\u00falgaro +bgn=nuevo lev b\u00falgaro +bhd=dinar bahrein\u00ed +bif=franco de Burundi +bmd=d\u00f3lar de Bermudas +bnd=d\u00f3lar de Brun\u00e9i +bob=boliviano +bov=MVDOL boliviano +brl=real brasile\u00f1o +bsd=d\u00f3lar de las Bahamas +btn=ngultrum butan\u00e9s +bwp=pula botsuano +byb=nuevo rublo bielorruso (1994-1999) +byr=rublo bielorruso +bzd=d\u00f3lar de Belice +cad=d\u00f3lar canadiense +cdf=franco congole\u00f1o +chf=franco suizo +clf=unidad de fomento chilena +clp=peso chileno +cny=yuan renminbi chino +cop=peso colombiano +crc=col\u00f3n costarricense +csd=dinar serbio +cup=peso cubano +cve=escudo de Cabo Verde +cyp=libra chipriota +czk=corona checa +dem=marco alem\u00e1n +djf=franco de Yibuti +dkk=corona danesa +dop=peso dominicano +dzd=dinar argelino +eek=corona estonia +egp=libra egipcia +ern=nakfa eritreo +esp=peseta espa\u00f1ola +etb=birr et\u00edope +eur=euro +fim=marco finland\u00e9s +fjd=d\u00f3lar de las Islas Fiyi +fkp=libra de las Islas Malvinas +frf=franco franc\u00e9s +gbp=libra esterlina brit\u00e1nica +gel=lari georgiano +ghc=cedi ghan\u00e9s +gip=libra de Gibraltar +gmd=dalasi gambiano +gnf=franco guineano +grd=dracma griego +gtq=quetzal guatemalteco +gwp=peso de Guinea-Biss\u00e1u +gyd=d\u00f3lar guyan\u00e9s +hkd=d\u00f3lar de Hong Kong +hnl=lempira hondure\u00f1o +hrk=kuna croata +htg=gourde haitiano +huf=flor\u00edn h\u00fangaro +idr=rupia indonesia +iep=libra irlandesa +ils=nuevo sheqel israel\u00ed +inr=rupia india +iqd=dinar iraqu\u00ed +irr=rial iran\u00ed +isk=corona islandesa +itl=lira italiana +jmd=d\u00f3lar de Jamaica +jod=dinar jordano +jpy=yen japon\u00e9s +kes=chel\u00edn keniata +kgs=som kirgu\u00eds +khr=riel camboyano +kmf=franco comorense +kpw=won norcoreano +krw=won surcoreano +kwd=dinar kuwait\u00ed +kyd=d\u00f3lar de las Islas Caim\u00e1n +kzt=tenge kazako +lak=kip laosiano +lbp=libra libanesa +lkr=rupia de Sri Lanka +lrd=d\u00f3lar liberiano +lsl=loti lesothense +ltl=litas lituano +luf=franco luxemburgu\u00e9s +lvl=lats let\u00f3n +lyd=dinar libio +mad=dirham marroqu\u00ed +mdl=leu moldavo +mga=ariary malgache +mgf=franco malgache +mkd=dinar macedonio +mmk=kyat de Myanmar +mnt=tugrik mongol +mop=pataca de Macao +mro=ouguiya mauritano +mtl=lira maltesa +mur=rupia mauriciana +mvr=rufiyaa de Maldivas +mwk=kwacha de Malawi +mxn=peso mexicano +mxv=unidad de inversi\u00f3n (UDI) mexicana +myr=ringgit malasio +mzm=metical mozambique\u00f1o +nad=d\u00f3lar de Namibia +ngn=naira nigeriano +nio=c\u00f3rdoba oro nicarag\u00fcense +nlg=flor\u00edn neerland\u00e9s +nok=corona noruega +npr=rupia nepalesa +nzd=d\u00f3lar neozeland\u00e9s +omr=rial oman\u00ed +pab=balboa paname\u00f1o +pen=nuevo sol peruano +pgk=kina de Pap\u00faa Nueva Guinea +php=peso filipino +pkr=rupia pakistan\u00ed +pln=zloty polaco +pte=escudo portugu\u00e9s +pyg=guaran\u00ed paraguayo +qar=riyal de Qatar +rol=antiguo leu rumano +ron=leu rumano +rub=rublo ruso +rur=rublo ruso (1991-1998) +rwf=franco ruand\u00e9s +sar=riyal saud\u00ed +sbd=d\u00f3lar de las Islas Salom\u00f3n +scr=rupia de Seychelles +sdd=dinar sudan\u00e9s +sek=corona sueca +sgd=d\u00f3lar singapurense +shp=libra de Santa Elena +sit=t\u00f3lar esloveno +skk=corona eslovaca +sll=leone de Sierra Leona +sos=chel\u00edn somal\u00ed +srd=d\u00f3lar surinam\u00e9s +srg=flor\u00edn surinam\u00e9s +std=dobra de Santo Tom\u00e9 y Pr\u00edncipe +svc=col\u00f3n salvadore\u00f1o +syp=libra siria +szl=lilangeni suazi +thb=baht tailand\u00e9s +tjs=somoni tayiko +tmm=manat turcomano +tnd=dinar tunecino +top=pa\u02bbanga tongano +tpe=escudo timorense +trl=lira turca +try=nueva lira turca +ttd=d\u00f3lar de Trinidad y Tobago +twd=nuevo d\u00f3lar taiwan\u00e9s +tzs=chel\u00edn tanzano +uah=grivna ucraniana +ugx=chel\u00edn ugand\u00e9s +usd=d\u00f3lar estadounidense +usn=d\u00f3lar estadounidense (d\u00eda siguiente) +uss=d\u00f3lar estadounidense (mismo d\u00eda) +uyu=peso uruguayo +uzs=sum uzbeko +veb=bol\u00edvar venezolano +vnd=dong vietnamita +vuv=vatu vanuatuense +wst=tala samoano +xaf=franco CFA BEAC +xag=plata +xau=oro +xba=unidad compuesta europea +xbb=unidad monetaria europea +xbc=unidad de cuenta europea (XBC) +xbd=unidad de cuenta europea (XBD) +xcd=d\u00f3lar del Caribe Oriental +xdr=derechos especiales de giro +xfo=franco oro franc\u00e9s +xfu=franco UIC franc\u00e9s +xof=franco CFA BCEAO +xpd=paladio +xpf=franco CFP +xpt=platino +xts=c\u00f3digo reservado para pruebas +xxx=Sin divisa +yer=rial yemen\u00ed +yum=super dinar yugoslavo +zar=rand sudafricano +zmk=kwacha zambiano +zwd=d\u00f3lar de Zimbabue diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_fr.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_fr.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,241 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=peseta andorrane +aed=dirham des \u00c9mirats arabes unis +afa=afghani [AFA] +afn=afghani +all=lek +amd=dram arm\u00e9nien +ang=florin des Antilles +aoa=kwanza angolais +ars=peso argentin +ats=schilling autrichien +aud=dollar australien +awg=florin d\u2019Aruba +azm=manat az\u00e9ri +bam=mark bosniaque convertible +bbd=dollar de Barbade +bdt=taka +bef=franc belge +bgl=lev +bgn=nouveau lev +bhd=dinar de Bahre\u00efn +bif=franc du Burundi +bmd=dollar des Bermudes +bnd=dollar de Brunei +bob=boliviano +bov=mvdol +brl=r\u00e9al +bsd=dollar des Bahamas +btn=ngultrum +bwp=pula +byb=nouveau rouble bi\u00e9lorusse (1994-1999) +byr=rouble bi\u00e9lorusse +bzd=dollar de Belize +cad=dollar canadien +cdf=franc congolais +chf=franc suisse +clf=unit\u00e9 d\u2019investissement chilienne +clp=peso chilien +cny=Yuan Ren-min-bi +cop=peso colombien +crc=colon de Costa Rica +csd=dinar serbe +cup=peso cubain +cve=escudo du Cap-Vert +cyp=livre cypriote +czk=couronne tch\u00e8que +dem=deutsche mark +djf=franc de Djibouti +dkk=couronne danoise +dop=peso dominicain +dzd=dinar alg\u00e9rien +eek=couronne estonienne +egp=livre \u00e9gyptienne +ern=Eritrean Nakfa +esp=peseta espagnole +etb=birr +eur=euro +fim=mark finlandais +fjd=dollar de Fidji +fkp=livre des Falkland (Malvinas) +frf=franc fran\u00e7ais +gbp=livre sterling +gel=lari +ghc=c\u00e9di +gip=livre de Gibraltar +gmd=dalasie +gnf=franc guin\u00e9en +grd=drachme +gtq=quetzal +gwp=peso de Guin\u00e9e-Bissau +gyd=dollar du Guyana +hkd=dollar de Hong Kong +hnl=lempira +hrk=kuna +htg=gourde +huf=forint +idr=rupiah +iep=livre irlandaise +inr=roupie indienne +irr=rial iranien +isk=couronne islandaise +itl=lire italienne +jmd=dollar jama\u00efcain +jod=dinar jordanien +jpy=yen +kes=shilling du Kenya +kgs=som +khr=riel +kmf=franc des Comores +kpw=won nord-cor\u00e9en +krw=won sud-cor\u00e9en +kyd=dollar des \u00eeles Ca\u00efmanes +kzt=tenge du Kazakhstan +lak=kip +lbp=livre libanaise +lkr=roupie de Sri Lanka +lrd=dollar lib\u00e9rien +lsl=loti +ltl=litas lituanien +luf=franc luxembourgeois +lvl=lats letton +lyd=dinar lybien +mad=dirham marocain +mdl=leu moldave +mga=ariary +mgf=franc malgache +mkd=denar +mmk=Myanmar Kyat +mnt=tugrik +mop=pataca +mro=ouguija +mtl=lire maltaise +mur=roupie mauricienne +mvr=roupie des Maldives +mwk=kwacha [MWK] +mxn=peso mexicain +mxv=unit\u00e9 de conversion mexicaine (UDI) +myr=ringgit +mzm=m\u00e9tical +nad=dollar namibien +ngn=naira +nio=cordoba d\u2019or +nlg=florin n\u00e9erlandais +nok=couronne norv\u00e9gienne +npr=roupie du N\u00e9pal +nzd=dollar n\u00e9o-z\u00e9landais +omr=rial omani +pab=balboa +pen=nouveau sol p\u00e9ruvien +pgk=kina +php=peso philippin +pkr=roupie du Pakistan +pln=zloty +pte=escudo portugais +pyg=guarani +qar=rial du Qatar +rol=ancien leu roumain +ron=nouveau leu roumain +rub=rouble +rur=rouble de Russie (1991-1998) +rwf=franc rwandais +sar=rial saoudien +sbd=dollar des \u00celes Salomon +scr=roupie des Seychelles +sdd=dinar soudanais +sek=couronne su\u00e9doise +sgd=dollar de Singapour +shp=livre de Sainte-H\u00e9l\u00e8ne +sit=tolar +skk=couronne slovaque +sll=l\u00e9one +sos=shilling de Somalie +srd=dollar surinamais +srg=florin du Surinam +std=dobra +svc=colon salvadorien +syp=livre syrienne +szl=lilangeni +thb=baht +tjs=somoni du Tadjikistan +tmm=Turkmenistan Manat +tnd=dinar tunisien +top=pa\u02bbanga +tpe=escudo de Timor +trl=livre turque +try=nouvelle livre turque +ttd=dollar de la Trinit\u00e9 +twd=dollar ta\u00efwanais +tzs=shilling de Tanzanie +uah=hryvnia +ugx=shilling ougandais +usd=dollar des \u00c9tats-Unis +usn=dollar des Etats-Unis (jour suivant) +uss=dollar des Etats-Unis (jour m\u00eame) +uyu=peso uruguayen +uzs=sum +veb=bolivar +vnd=dong +vuv=vatu +wst=tala +xaf=franc CFA (BEAC) +xag=argent +xau=or +xba=unit\u00e9 europ\u00e9enne compos\u00e9e +xbb=unit\u00e9 mon\u00e9taire europ\u00e9enne +xbc=unit\u00e9 de compte europ\u00e9enne (XBC) +xbd=unit\u00e9 de compte europ\u00e9enne (XBD) +xcd=dollar des Cara\u00efbes orientales +xdr=droit de tirage sp\u00e9cial +xfo=franc or +xfu=franc UIC +xof=franc CFA (BCEAO) +xpd=palladium +xpf=franc CFP +xpt=platine +yer=riyal du Y\u00e9men +yum=dinar yougoslave Noviy +zar=rand +zmk=kwacha +zwd=dollar du Zimbabwe diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_it.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_it.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,239 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=Peseta Andorrana +aed=Dirham degli Emirati Arabi Uniti +afa=Afgani (1927-2002) +afn=Afgani +all=Lek Albanese +amd=Dram Armeno +ang=Fiorino delle Antille Olandesi +aoa=Kwanza Angolano +ars=Peso Argentino +ats=Scellino Austriaco +aud=Dollaro Australiano +awg=Fiorino di Aruba +azm=Manat Azero +bam=Marco Conv. Bosnia-Erzegovina +bbd=Dollaro di Barbados +bdt=Taka Bangladese +bef=Franco Belga +bgl=Lev Bulgaro +bgn=Nuovo Lev Bulgaro +bhd=Dinaro del Bahraini +bif=Franco del Burundi +bmd=Dollaro delle Bermuda +bnd=Dollaro del Brunei +bob=Boliviano +bov=Mvdol Boliviano +brl=Real Brasiliano +bsd=Dollaro delle Bahamas +btn=Ngultrum Butanese +bwp=Pula del Botswana +byb=Nuovo Rublo Bielorussia (1994-1999) +byr=Rublo Bielorussia +bzd=Dollaro Belize +cad=Dollaro Canadese +cdf=Franco Congolese +chf=Franco Svizzero +clf=Unidades de Fomento Chilene +clp=Peso Cileno +cny=Renmimbi Cinese +cop=Peso Colombiano +crc=Col\u00f3n Costaricano +csd=Dinaro serbo +cup=Peso Cubano +cve=Escudo del Capo Verde +cyp=Sterlina Cipriota +czk=Corona Ceca +dem=Marco Tedesco +djf=Franco Gibutiano +dkk=Corona Danese +dop=Peso Dominicano +dzd=Dinaro Algerino +eek=Corona dell\u2019Estonia +egp=Sterlina Egiziana +ern=Nakfa Eritreo +esp=Peseta Spagnola +etb=Birr Etiopico +eur=Euro +fim=Markka Finlandese +fjd=Dollaro delle Figi +fkp=Sterlina delle Falkland +frf=Franco Francese +gbp=Sterlina Inglese +gel=Lari Georgiano +ghc=Cedi del Ghana +gip=Sterlina di Gibilterra +gmd=Dalasi del Gambia +gnf=Franco della Guinea +grd=Dracma Greca +gtq=Quetzal Guatemalteco +gwp=Peso della Guinea-Bissau +gyd=Dollaro della Guyana +hkd=Dollaro di Hong Kong +hnl=Lempira Hoduregno +hrk=Kuna Croata +htg=Gourde Haitiano +huf=Fiorino Ungherese +idr=Rupia Indonesiana +iep=Lira Irlandese +ils=Nuovo sheqel israeliano +inr=Rupia Indiana +iqd=Dinaro Iracheno +irr=Rial Iraniano +isk=Corona Islandese +itl=Lira Italiana +jmd=Dollaro Giamaicano +jod=Dinaro Giordano +jpy=Yen Giapponese +kes=Scellino Keniota +kgs=Som Kirghiso +khr=Riel Cambogiano +kmf=Franco Comoriano +kpw=Won Nordcoreano +krw=Won Sudcoreano +kwd=Dinaro Kuwaitiano +kyd=Dollaro delle Isole Cayman +kzt=Tenge Kazaco +lak=Kip Laotiano +lbp=Sterlina Libanese +lkr=Rupia di Sri Lanka +lrd=Dollaro Liberiano +lsl=Loti del Lesotho +ltl=Lita Lituana +luf=Franco del Lussemburgo +lvl=Lat Lettone +lyd=Dinaro Libico +mad=Dirham Marocchino +mdl=Leu Moldavo +mga=Ariary Malgascio +mgf=Franco Malgascio +mkd=Dinaro Macedone +mmk=Kyat di Myanmar +mnt=Tugrik Mongolo +mop=Pataca di Macao +mro=Ouguiya della Mauritania +mtl=Lira Maltese +mur=Rupia Mauriziana +mvr=Rufiyaa delle Maldive +mwk=Kwacha Malawiano +mxn=Peso Messicano +mxv=Unidad de Inversion (UDI) Messicana +myr=Ringgit della Malesia +mzm=Metical del Mozambico +nad=Dollaro Namibiano +ngn=Naira Nigeriana +nio=C\u00f3rdoba oro nicaraguense +nlg=Fiorino Olandese +nok=Corona Norvegese +npr=Rupia Nepalese +nzd=Dollaro Neozelandese +omr=Rial Omanita +pab=Balboa di Panama +pen=Sol Nuevo Peruviano +pgk=Kina della Papua Nuova Guinea +php=Peso delle Filippine +pkr=Rupia del Pakistan +pln=Zloty Polacco +pte=Escudo Portoghese +pyg=Guarani del Paraguay +qar=Rial del Qatar +rol=Leu della Romania +rub=Rublo Russo +rur=Rublo della CSI +rwf=Franco Ruandese +sar=Ryal Saudita +sbd=Dollaro delle Isole Solomon +scr=Rupia delle Seychelles +sdd=Dinaro Sudanese +sek=Corona Svedese +sgd=Dollaro di Singapore +shp=Sterlina di Sant\u2019Elena +sit=Tallero Sloveno +skk=Corona Slovacca +sll=Leone della Sierra Leone +sos=Scellino Somalo +srg=Fiorino del Suriname +std=Dobra di Sao Tom\u00e9 e Principe +svc=Col\u00f3n Salvadoregno +syp=Sterlina Siriana +szl=Lilangeni dello Swaziland +thb=Baht Tailandese +tjs=Somoni del Tajikistan +tmm=Manat Turkmeno +tnd=Dinaro Tunisino +top=Pa\u02bbanga di Tonga +tpe=Escudo di Timor +trl=Lira Turca +ttd=Dollaro di Trinidad e Tobago +twd=Nuovo dollaro taiwanese +tzs=Scellino della Tanzania +uah=Hrivna Ucraina +ugx=Scellino Ugandese +usd=Dollaro Statunitense +usn=Dollaro Statunitense (Next day) +uss=Dollaro Statunitense (Same day) +uyu=Peso Uruguayo uruguaiano +uzs=Sum dell\u2019Uzbekistan +veb=Bolivar Venezuelano +vnd=Dong Vietnamita +vuv=Vatu di Vanuatu +wst=Tala della Samoa Occidentale +xaf=Franco CFA BEAC +xau=Oro +xba=Unit\u00e0 composita europea +xbb=Unit\u00e0 monetaria europea +xbc=Unit\u00e0 di acconto europea (XBC) +xbd=Unit\u00e0 di acconto europea (XBD) +xcd=Dollaro dei Caraibi Orientali +xdr=Diritti Speciali di Incasso +xfo=Franco Oro Francese +xfu=Franco UIC Francese +xof=Franco CFA BCEAO +xpf=Franco CFP +xxx=Nessuna valuta +yer=Rial dello Yemen +yum=Dinaro Noviy Yugoslavo +zar=Rand Sudafricano +zmk=Kwacha dello Zambia +zwd=Dollaro dello Zimbabwe diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_ja.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_ja.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,238 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=\u30a2\u30f3\u30c9\u30e9 \u30da\u30bb\u30bf +aed=UAE \u30c7\u30a3\u30eb\u30cf\u30e0 +afa=\u30a2\u30d5\u30ac\u30cb\u30fc (1927-2002) +afn=\u30a2\u30d5\u30ac\u30cb\u30fc +all=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af +amd=\u30a2\u30eb\u30e1\u30cb\u30a2 \u30c9\u30e9\u30e0 +ang=\u30aa\u30e9\u30f3\u30c0\u9818\u30a2\u30f3\u30c6\u30a3\u30eb \u30ae\u30eb\u30c0\u30fc +aoa=\u30af\u30ef\u30f3\u30b6 +ars=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3 \u30da\u30bd +ats=\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0 +aud=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30c9\u30eb +awg=\u30a2\u30eb\u30d0 \u30ae\u30eb\u30c0\u30fc +azm=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 +bam=\u30dc\u30b9\u30cb\u30a2 \u30de\u30eb\u30af (BAM) +bbd=\u30d0\u30eb\u30d0\u30c9\u30b9 \u30c9\u30eb +bdt=\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5 \u30bf\u30ab +bef=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3 +bgl=\u30d6\u30eb\u30ac\u30ea\u30a2 \u30ec\u30d5 +bgn=\u30d6\u30eb\u30ac\u30ea\u30a2 \u65b0\u30ec\u30d5 +bhd=\u30d0\u30fc\u30ec\u30fc\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +bif=\u30d6\u30eb\u30f3\u30b8 \u30d5\u30e9\u30f3 +bmd=\u30d0\u30df\u30e5\u30fc\u30c0 \u30c9\u30eb +bnd=\u30d6\u30eb\u30cd\u30a4 \u30c9\u30eb +bob=\u30dc\u30ea\u30d3\u30a2\u30fc\u30ce +bov=\u30dc\u30ea\u30d3\u30a2 Mvdol +brl=\u30d6\u30e9\u30b8\u30eb \u30ec\u30a2\u30eb +bsd=\u30d0\u30cf\u30de \u30c9\u30eb +btn=\u30d6\u30fc\u30bf\u30f3 \u30cb\u30e5\u30eb\u30bf\u30e0 +bwp=\u30dc\u30c4\u30ef\u30ca \u30d7\u30e9 +byb=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb (1994-1999) +byr=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb +bzd=\u30d9\u30ea\u30fc\u30ba \u30c9\u30eb +cad=\u30ab\u30ca\u30c0 \u30c9\u30eb +cdf=\u30b3\u30f3\u30b4 \u30d5\u30e9\u30f3 +chf=\u30b9\u30a4\u30b9 \u30d5\u30e9\u30f3 +clf=\u30c1\u30ea \u30a6\u30cb\u30c0 \u30c7 \u30d5\u30a9\u30e1\u30f3\u30c8 +clp=\u30c1\u30ea \u30da\u30bd +cny=\u4e2d\u56fd\u4eba\u6c11\u5143 +cop=\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd +crc=\u30b3\u30b9\u30bf\u30ea\u30ab \u30b3\u30ed\u30f3 +csd=\u30bb\u30eb\u30d3\u30a2\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +cup=\u30ad\u30e5\u30fc\u30d0 \u30da\u30bd +cve=\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7 \u30a8\u30b9\u30af\u30fc\u30c9 +cyp=\u30ad\u30d7\u30ed\u30b9 \u30dd\u30f3\u30c9 +czk=\u30c1\u30a7\u30b3 \u30b3\u30eb\u30ca +dem=\u30c9\u30a4\u30c4 \u30de\u30eb\u30af +djf=\u30b8\u30d6\u30c1 \u30d5\u30e9\u30f3 +dkk=\u30c7\u30f3\u30de\u30fc\u30af \u30af\u30ed\u30fc\u30cd +dop=\u30c9\u30df\u30cb\u30ab \u30da\u30bd +dzd=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb +eek=\u30a8\u30b9\u30c8\u30cb\u30a2 \u30af\u30eb\u30fc\u30f3 +egp=\u30a8\u30b8\u30d7\u30c8 \u30dd\u30f3\u30c9 +ern=\u30a8\u30ea\u30c8\u30ea\u30a2 \u30ca\u30af\u30d5\u30a1 +esp=\u30b9\u30da\u30a4\u30f3 \u30da\u30bb\u30bf +etb=\u30a8\u30c1\u30aa\u30d4\u30a2 \u30d6\u30eb +eur=\u30e6\u30fc\u30ed +fim=\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9 \u30de\u30eb\u30ab +fjd=\u30d5\u30a3\u30b8\u30fc\u8af8\u5cf6 \u30c9\u30eb +fkp=\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\uff08\u30de\u30eb\u30d3\u30ca\u30b9\uff09\u8af8\u5cf6 \u30dd\u30f3\u30c9 +frf=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3 +gbp=\u82f1\u56fd\u30dd\u30f3\u30c9 +gel=\u30b0\u30eb\u30b8\u30a2 \u30e9\u30ea +ghc=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 +gip=\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb \u30dd\u30f3\u30c9 +gmd=\u30ac\u30f3\u30d3\u30a2 \u30c0\u30e9\u30b7 +gnf=\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3 +grd=\u30ae\u30ea\u30b7\u30e3 \u30c9\u30e9\u30af\u30de +gtq=\u30b0\u30a2\u30c6\u30de\u30e9 \u30b1\u30c4\u30a1\u30eb +gwp=\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6 \u30da\u30bd +gyd=\u30ac\u30a4\u30a2\u30ca \u30c9\u30eb +hkd=\u9999\u6e2f\u30c9\u30eb +hnl=\u30db\u30f3\u30b8\u30e5\u30e9\u30b9 \u30ec\u30f3\u30d4\u30e9 +hrk=\u30af\u30ed\u30a2\u30c1\u30a2 \u30af\u30fc\u30ca +htg=\u30cf\u30a4\u30c1 \u30b0\u30fc\u30eb\u30c9 +huf=\u30cf\u30f3\u30ac\u30ea\u30fc \u30d5\u30a9\u30ea\u30f3\u30c8 +idr=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30eb\u30d4\u30a2 +iep=\u30a2\u30a4\u30ea\u30c3\u30b7\u30e5 \u30dd\u30f3\u30c9 +ils=\u30a4\u30b9\u30e9\u30a8\u30eb\u65b0\u30b7\u30a7\u30b1\u30eb +inr=\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc +iqd=\u30a4\u30e9\u30af \u30c7\u30a3\u30ca\u30fc\u30eb +irr=\u30a4\u30e9\u30f3 \u30ea\u30a2\u30eb +isk=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9 \u30af\u30ed\u30fc\u30ca +itl=\u30a4\u30bf\u30ea\u30a2 \u30ea\u30e9 +jmd=\u30b8\u30e3\u30de\u30a4\u30ab \u30c9\u30eb +jod=\u30e8\u30eb\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +jpy=\u65e5\u672c\u5186 +kes=\u30b1\u30cb\u30a2 \u30b7\u30ea\u30f3\u30b0 +kgs=\u30ad\u30eb\u30ae\u30b9\u30bf\u30f3 \u30bd\u30e0 +khr=\u30ab\u30f3\u30dc\u30b8\u30a2 \u30ea\u30a8\u30eb +kmf=\u30b3\u30e2\u30ed \u30d5\u30e9\u30f3 +kpw=\u5317\u671d\u9bae \u30a6\u30a9\u30f3 +krw=\u97d3\u56fd \u30a6\u30a9\u30f3 +kwd=\u30af\u30a6\u30a7\u30fc\u30c8 \u30c7\u30a3\u30ca\u30fc\u30eb +kyd=\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6 \u30c9\u30eb +kzt=\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3 \u30c6\u30f3\u30b2 +lak=\u30e9\u30aa\u30b9 \u30ad\u30fc\u30d7 +lbp=\u30ec\u30d0\u30ce\u30f3 \u30dd\u30f3\u30c9 +lkr=\u30b9\u30ea\u30e9\u30f3\u30ab \u30eb\u30d4\u30fc +lrd=\u30ea\u30d9\u30ea\u30a2 \u30c9\u30eb +lsl=\u30ec\u30bd\u30c8 \u30ed\u30c6\u30a3 +ltl=\u30ea\u30c8\u30a2\u30cb\u30a2 \u30ea\u30bf\u30b9 +luf=\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30b0 \u30d5\u30e9\u30f3 +lvl=\u30e9\u30c8\u30d3\u30a2 \u30e9\u30c3\u30c4 +lyd=\u30ea\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb +mad=\u30e2\u30ed\u30c3\u30b3 \u30c7\u30a3\u30eb\u30cf\u30e0 +mdl=\u30e2\u30eb\u30c9\u30d0 \u30ec\u30a4 +mga=\u30de\u30c0\u30ac\u30b9\u30ab\u30eb \u30a2\u30ea\u30a2\u30ea +mgf=\u30de\u30c0\u30ac\u30b9\u30ab\u30eb \u30d5\u30e9\u30f3 +mkd=\u30de\u30b1\u30c9\u30cb\u30a2 \u30c7\u30ca\u30eb +mmk=\u30df\u30e3\u30f3\u30de\u30fc \u30c1\u30e3\u30c3\u30c8 +mnt=\u30e2\u30f3\u30b4\u30eb \u30c8\u30b0\u30ed\u30b0 +mop=\u30de\u30ab\u30aa \u30d1\u30bf\u30ab +mro=\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2 \u30a6\u30ae\u30a2 +mtl=\u30de\u30eb\u30bf \u30ea\u30e9 +mur=\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9 \u30eb\u30d4\u30fc +mvr=\u30e2\u30eb\u30c7\u30a3\u30d6\u8af8\u5cf6 \u30eb\u30d5\u30a3\u30a2 +mwk=\u30de\u30e9\u30a6\u30a3 \u30af\u30ef\u30c1\u30e3 +mxn=\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd +mxv=\u30e1\u30ad\u30b7\u30b3 UDI +myr=\u30de\u30ec\u30fc\u30b7\u30a2 \u30ea\u30f3\u30ae\u30c3\u30c8 +mzm=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb +nad=\u30ca\u30df\u30d3\u30a2 \u30c9\u30eb +ngn=\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2 \u30ca\u30a4\u30e9 +nio=\u30cb\u30ab\u30e9\u30b0\u30a2 \u30b3\u30eb\u30c9\u30d0 \u30aa\u30ed +nlg=\u30aa\u30e9\u30f3\u30c0 \u30ae\u30eb\u30c0\u30fc +nok=\u30ce\u30eb\u30a6\u30a7\u30fc \u30af\u30ed\u30fc\u30cd +npr=\u30cd\u30d1\u30fc\u30eb \u30eb\u30d4\u30fc +nzd=\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9 \u30c9\u30eb +omr=\u30aa\u30de\u30fc\u30f3 \u30ea\u30a2\u30eb +pab=\u30d1\u30ca\u30de \u30d0\u30eb\u30dc\u30a2 +pen=\u30da\u30eb\u30fc \u65b0\u30bd\u30eb +pgk=\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2 \u30ad\u30ca +php=\u30d5\u30a3\u30ea\u30d4\u30f3 \u30da\u30bd +pkr=\u30d1\u30ad\u30b9\u30bf\u30f3 \u30eb\u30d4\u30fc +pln=\u30dd\u30fc\u30e9\u30f3\u30c9 \u30ba\u30a6\u30a9\u30c6\u30a3 +pte=\u30dd\u30eb\u30c8\u30ac\u30eb \u30a8\u30b9\u30af\u30fc\u30c9 +pyg=\u30d1\u30e9\u30b0\u30a2\u30a4 \u30b0\u30a2\u30e9\u30cb +qar=\u30ab\u30bf\u30fc\u30eb \u30ea\u30a2\u30eb +rol=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4 +rub=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb +rur=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb (1991-1998) +rwf=\u30eb\u30ef\u30f3\u30c0 \u30d5\u30e9\u30f3 +sar=\u30b5\u30a6\u30b8 \u30ea\u30e4\u30eb +sbd=\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6 \u30c9\u30eb +scr=\u30bb\u30a4\u30b7\u30a7\u30eb \u30eb\u30d4\u30fc +sdd=\u30b9\u30fc\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +sek=\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3 \u30af\u30ed\u30fc\u30ca +sgd=\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb \u30c9\u30eb +shp=\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca\u5cf6 \u30dd\u30f3\u30c9 +sit=\u30b9\u30ed\u30d9\u30cb\u30a2 \u30c8\u30e9\u30fc\u30eb +skk=\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca +sll=\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd \u30ec\u30aa\u30f3 +sos=\u30bd\u30de\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0 +srg=\u30b9\u30ea\u30ca\u30e0 \u30ae\u30eb\u30c0\u30fc +std=\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da \u30c9\u30d6\u30e9 +svc=\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb \u30b3\u30ed\u30f3 +syp=\u30b7\u30ea\u30a2 \u30dd\u30f3\u30c9 +szl=\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9 \u30ea\u30e9\u30f3\u30b2\u30cb +thb=\u30bf\u30a4 \u30d0\u30fc\u30c4 +tjs=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30bd\u30e2\u30cb +tmm=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3 \u30de\u30ca\u30c8 +tnd=\u30c1\u30e5\u30cb\u30b8\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb +top=\u30c8\u30f3\u30ac \u30d1\u30fb\u30a2\u30f3\u30ac +tpe=\u30c6\u30a3\u30e2\u30fc\u30eb \u30a8\u30b9\u30af\u30fc\u30c9 +trl=\u30c8\u30eb\u30b3 \u30ea\u30e9 +try=\u65b0\u30c8\u30eb\u30b3\u30ea\u30e9 +ttd=\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30c8\u30d0\u30b4 \u30c9\u30eb +twd=\u65b0\u53f0\u6e7e\u30c9\u30eb +tzs=\u30bf\u30f3\u30b6\u30cb\u30a2 \u30b7\u30ea\u30f3\u30b0 +uah=\u30a6\u30af\u30e9\u30a4\u30ca \u30b0\u30ea\u30d6\u30ca +ugx=\u30a6\u30ac\u30f3\u30c0 \u30b7\u30ea\u30f3\u30b0 +usd=\u7c73\u30c9\u30eb +usn=\u7c73\u30c9\u30eb (\u7fcc\u65e5) +uss=\u7c73\u30c9\u30eb (\u5f53\u65e5) +uyu=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd +uzs=\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3 \u30b9\u30e0 +veb=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb +vnd=\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3 +vuv=\u30d0\u30cc\u30a2\u30c4 \u30d0\u30c4 +wst=\u897f\u30b5\u30e2\u30a2 \u30bf\u30e9 +xaf=CFA \u30d5\u30e9\u30f3 BEAC +xau=\u91d1 +xba=\u30e8\u30fc\u30ed\u30c3\u30d1\u6df7\u5408\u5358\u4f4d (EURCO) +xbb=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d (EMU-6) +xbc=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-9) +xbd=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-17) +xcd=\u6771\u30ab\u30ea\u30d6 \u30c9\u30eb +xdr=\u7279\u5225\u5f15\u304d\u51fa\u3057\u6a29 +xfo=\u30d5\u30e9\u30f3\u30b9\u91d1\u30d5\u30e9\u30f3 +xfu=\u30d5\u30e9\u30f3\u30b9 UIC \u30d5\u30e9\u30f3 +xof=CFA \u30d5\u30e9\u30f3 BCEAO +xpf=CFP \u30d5\u30e9\u30f3 +yer=\u30a4\u30a8\u30e1\u30f3 \u30ea\u30a2\u30eb +yum=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30b9\u30fc\u30d1\u30fc \u30c7\u30a3\u30ca\u30fc\u30eb +zar=\u5357\u30a2\u30d5\u30ea\u30ab \u30e9\u30f3\u30c9 +zwd=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_ko.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_ko.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,225 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=\uc548\ub3c4\ub77c \ud398\uc138\ud0c0 +aed=\uc544\ub78d\uc5d0\ubbf8\ub808\uc774\ud2b8 \ub514\ub098\ub974 +afa=\uc544\ud504\uac00\ub2c8 (1927-2002) +afn=\uc544\ud504\uac00\ub2c8 +all=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c +amd=\uc544\ub974\uba54\ub2c8\uc544 \ub4dc\ub78c +ang=\ub124\ub378\ub780\ub4dc \uc548\ud2f8\ub808\uc2a4 \uad74\ub374 +aoa=\uc559\uace8\ub77c \ucf74\uc790 +ars=\uc544\ub974\ud5e8\ud2f0\ub098 \ud398\uc18c +ats=\ud638\uc8fc \uc2e4\ub9c1 +aud=\ud638\uc8fc \ub2ec\ub7ec +awg=\uc544\ub8e8\ubc14 \uae38\ub354 +azm=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8 +bam=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ud0dc\ud658 \ub9c8\ub974\ud06c +bbd=\ubc14\ubca0\uc774\ub3c4\uc2a4 \ub2ec\ub7ec +bdt=\ubc29\uae00\ub77c\ub370\uc2dc \ud0c0\uce74 +bef=\ubca8\uae30\uc5d0 \ud504\ub791 +bgl=\ubd88\uac00\ub9ac\uc544 \ub3d9\uc804 \ub81b +bgn=\ubd88\uac00\ub9ac\uc544 \uc2e0\uad8c \ub81b +bhd=\ubc14\ub808\uc778 \ub514\ub098\ub974 +bif=\ubd80\ub8ec\ub514 \ud504\ub791 +bmd=\ubc84\ubba4\ub2e4 \ub2ec\ub7ec +bnd=\ubd80\ub8e8\ub098\uc774 \ub2ec\ub7ec +bob=\ubcfc\ub9ac\ube44\uc544\ub178 +brl=\ube0c\ub77c\uc9c8 \ub808\uc54c +bsd=\ubc14\ud558\ub9c8 \ub2ec\ub7ec +btn=\ubd80\ud0c4 \ub20c\ud22c\ub214 +bwp=\ubcf4\uce20\uc640\ub098 \ud3f4\ub77c +byb=\ubca8\ub77c\ub8e8\uc2a4 \uc2e0\uad8c \ub8e8\ube14 (1994-1999) +byr=\ubca8\ub77c\ub8e8\uc2a4 \ub8e8\ube14 +bzd=\ubca8\ub9ac\uc988 \ub2ec\ub7ec +cad=\uce90\ub098\ub2e4 \ub2ec\ub7ec +cdf=\ucf69\uace0 \ud504\ub791 \ucf69\uace8\ub77c\uc2a4 +chf=\uc2a4\uc704\uc2a4 \ud504\ub791\ub2ec\ub7ec +clp=\uce60\ub808 \ud398\uc18c +cny=\uc911\uad6d \uc704\uc548 \uc778\ubbfc\ud3d0 +cop=\ucf5c\ub86c\ube44\uc544 \ud398\uc18c +crc=\ucf54\uc2a4\ud0c0\ub9ac\uce74 \ucf5c\ub860 +cup=\ucfe0\ubc14 \ud398\uc18c +cve=\uce74\ubcf4\ubca0\ub974\ub370 \uc5d0\uc2a4\ucfe0\ub3c4 +cyp=\uc2f8\uc774\ud504\ub7ec\uc2a4 \ud30c\uc6b4\ub4dc +czk=\uccb4\ucf54 \uacf5\ud654\uad6d \ucf54\ub8e8\ub098 +dem=\ub3c5\uc77c \ub9c8\ub974\ud06c +djf=\uc9c0\ubd80\ud2f0 \ud504\ub791 +dkk=\ub374\ub9c8\ud06c \ud06c\ub85c\ub124 +dop=\ub3c4\ubbf8\ub2c8\uce74 \ud398\uc18c +dzd=\uc54c\uc81c\ub9ac \ub514\ub098\ub974 +eek=\uc5d0\uc2a4\ud1a0\ub2c8\uc544 \ud06c\ub8ec +egp=\uc774\uc9d1\ud2b8 \ud30c\uc6b4\ub4dc +ern=\uc5d0\ub9ac\ud2b8\ub9ac\uc544 \ub098\ud06c\ud30c +esp=\uc2a4\ud398\uc778 \ud398\uc138\ud0c0 +etb=\uc774\ub514\uc624\ud53c\uc544 \ube44\ub974 +eur=\uc720\ub85c\ud654 +fim=\ud540\ub780\ub4dc \ub9c8\ub974\uce74 +fjd=\ud53c\uc9c0 \ub2ec\ub7ec +fkp=\ud3ec\ud074\ub79c\ub4dc\uc81c\ub3c4 \ud30c\uc6b4\ub4dc +frf=\ud504\ub791\uc2a4 \ud504\ub791 +gbp=\uc601\uad6d\ub839 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1 +gel=\uadf8\ub8e8\uc9c0\uc57c \ub77c\ub9ac +ghc=\uac00\ub098 \uc2dc\ub514 +gip=\uc9c0\ube0c\ub864\ud130 \ud30c\uc6b4\ub4dc +gmd=\uac10\ube44\uc544 \ub2ec\ub77c\uc2dc +gnf=\uae30\ub2c8 \ud504\ub791 +grd=\uadf8\ub9ac\uc2a4 \ub4dc\ub77c\ud06c\ub9c8 +gtq=\uacfc\ud14c\ub9d0\ub77c \ucf00\ud2b8\uc0b4 +gwp=\uae30\ub124\ube44\uc3d8 \ud398\uc18c +gyd=\uac00\uc774\uc544\ub098 \ub2ec\ub7ec +hkd=\ud64d\ucf69 \ub2ec\ub7ec +hnl=\uc628\ub450\ub77c\uc2a4 \ub818\ud53c\ub77c +hrk=\ud06c\ub85c\uc544\ud2f0\uc544 \ucfe0\ub098 +htg=\ud558\uc774\ud2f0 \uad6c\ub974\ub4dc +huf=\ud5dd\uac00\ub9ac \ud3ec\ub9b0\ud2b8 +idr=\uc778\ub3c4\ub124\uc2dc\uc544 \ub8e8\ud53c\uc544 +iep=\uc544\uc77c\ub79c\ub4dc \ud30c\uc6b4\ub4dc +ils=\uc774\uc2a4\ub77c\uc5d8 \uc2e0\uad8c \uc138\ucf08 +inr=\uc778\ub3c4 \ub8e8\ud53c +iqd=\uc774\ub77c\ud06c \ub514\ub098\ub974 +irr=\uc774\ub780 \ub9ac\uc584 +isk=\uc544\uc774\uc2ac\ub780\ub4dc \ud06c\ub85c\ub098 +itl=\uc774\ud0c8\ub9ac\uc544 \ub9ac\ub77c +jmd=\uc790\uba54\uc774\uce74 \ub2ec\ub7ec +jod=\uc694\ub974\ub2e8 \ub514\ub098\ub974 +jpy=\uc77c\ubcf8 \uc5d4\ud654 +kes=\ucf00\ub0d0 \uc2e4\ub9c1 +kgs=\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4 \uc19c +khr=\uce84\ubcf4\ub514\uc544 \ub9ac\uc584 +kmf=\ucf54\ubaa8\ub974 \ud504\ub791 +kpw=\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d \uc6d0 +krw=\ub300\ud55c\ubbfc\uad6d \uc6d0 +kwd=\ucfe0\uc6e8\uc774\ud2b8 \ub514\ub098\ub974 +kyd=\ucf00\uc774\ub9e8 \uc81c\ub3c4 \ub2ec\ub7ec +kzt=\uce74\uc790\ud750\uc2a4\ud0c4 \ud150\uac8c +lak=\ub77c\uc624\uc2a4 \ud0a4\ud504 +lbp=\ub808\ubc14\ub17c \ud30c\uc6b4\ub4dc +lkr=\uc2a4\ub9ac\ub791\uce74 \ub8e8\ud53c +lrd=\ub77c\uc774\ubca0\ub9ac\uc544 \ub2ec\ub7ec +lsl=\ub808\uc18c\ud1a0 \ub85c\ud2f0 +ltl=\ub9ac\ud22c\uc544\ub2c8\uc544 \ub9ac\ud0c0 +luf=\ub8e9\uc148\ubd80\ub974\ud06c \ud504\ub791 +lvl=\ub77c\ud2b8\ube44\uc544 \ub77c\ud2b8 +lyd=\ub9ac\ube44\uc544 \ub514\ub098\ub974 +mad=\ubaa8\ub85c\ucf54 \ub514\ub818 +mdl=\ubab0\ub3c4\ubc14 \ub808\uc774 +mga=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974 \uc544\ub9ac\uc544\ub9ac +mgf=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974 \ud504\ub791 +mkd=\ub9c8\ucf00\ub3c4\ub2c8\uc544 \ub514\ub098\ub974 +mmk=\ubbf8\uc580\ub9c8 \ud0a4\uc58f +mnt=\ubabd\uace8 \ud22c\uadf8\ub9ad +mop=\ub9c8\uce74\uc624 \ud30c\ud0c0\uce74 +mro=\ubaa8\ub9ac\ud0c0\ub2c8 \uc6b0\uae30\uc57c +mtl=\ubab0\ud0c0 \ub9ac\ub77c +mur=\ubaa8\ub9ac\uc154\uc2a4 \ub8e8\ud53c +mvr=\ubab0\ub514\ube0c \uc81c\ub3c4 \ub8e8\ud53c\uc544 +mwk=\ub9d0\ub77c\uc704 \ucf70\uccd0 +mxn=\uba55\uc2dc\ucf54 \ud398\uc18c +myr=\ub9d0\ub808\uc774\uc9c0\uc544 \ub9c1\uae30\ud2b8 +mzm=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c +nad=\ub098\ubbf8\ube44\uc544 \ub2ec\ub7ec +ngn=\ub2c8\uc81c\ub974 \ub098\uc774\ub77c +nio=\ub2c8\uce74\ub77c\uacfc \ucf54\ub974\ub3c4\ubc14 \uc624\ub85c +nlg=\ub124\ub378\ub780\ub4dc \uae38\ub354 +nok=\ub178\ub974\uc6e8\uc774 \ud06c\ub85c\ub124 +npr=\ub124\ud314 \ub8e8\ud53c +nzd=\ub274\uc9c8\ub79c\ub4dc \ub2ec\ub7ec +omr=\uc624\ub9cc \ub9ac\uc584 +pab=\ud30c\ub098\ub9c8 \ubc1c\ubcf4\uc544 +pen=\ud398\ub8e8 \uc194 \ub204\uc5d0\ubcf4 +pgk=\ud30c\ud478\uc544\ub274\uae30\ub2c8 \ud0a4\ub098 +php=\ud544\ub9ac\ud540 \ud398\uc18c +pkr=\ud30c\ud0a4\uc2a4\ud0c4 \ub8e8\ud53c +pln=\ud3f4\ub780\ub4dc \uc990\ub85c\ud2f0 +pte=\ud3ec\ub974\ud22c\uac08 \uc5d0\uc2a4\ucfe0\ub3c4 +pyg=\ud30c\ub77c\uacfc\uc774 \uacfc\ub77c\ub2c8 +qar=\uce74\ud0c0\ub974 \ub9ac\uc584 +rol=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc774 +rub=\ub7ec\uc2dc\uc544 \ub8e8\ube14 +rur=\ub7ec\uc2dc\uc544 \ub8e8\ube14 (1991-1998) +rwf=\ub974\uc644\ub2e4 \ud504\ub791 +sar=\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544 \ub9ac\uc584 +sbd=\uc194\ub85c\ubaac \uc81c\ub3c4 \ub2ec\ub7ec +scr=\uc138\uc774\uc274 \ub8e8\ud53c +sdd=\uc218\ub2e8 \ub514\ub098\ub974 +sek=\uc2a4\uc6e8\ub374 \ud06c\ub85c\ub098 +sgd=\uc2f1\uac00\ud3f4 \ub2ec\ub7ec +shp=\uc138\uc778\ud2b8\ud5ec\ub808\ub098 \ud30c\uc6b4\ub4dc +sit=\uc2ac\ub85c\ubca0\ub2c8\uc544 \ud1a8\ub77c\ub974 +skk=\uc2ac\ub85c\ubc14\ud0a4\uc544 \ucf54\ub8e8\ub098 +sll=\uc2dc\uc5d0\ub77c\ub9ac\uc628 \ub9ac\uc628 +sos=\uc18c\ub9d0\ub9ac\uc544 \uc2e4\ub9c1 +srg=\uc218\ub9ac\ub0a8 \uae38\ub354 +std=\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398 \ub3c4\ube0c\ub77c +svc=\uc5d8\uc0b4\ubc14\ub3c4\ub974 \ucf5c\ub860 +syp=\uc2dc\ub9ac\uc544 \ud30c\uc6b4\ub4dc +szl=\uc2a4\uc640\uc9c8\ub780\ub4dc \ub9b4\ub791\uac8c\ub2c8 +thb=\ud0dc\uad6d \ubc14\ud2b8 +tjs=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc18c\ubaa8\ub2c8 +tmm=\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \ub9c8\ub098\ud2b8 +tnd=\ud280\ub2c8\uc9c0 \ub514\ub098\ub974 +tpe=\ud2f0\ubaa8\ub974 \uc5d0\uc2a4\ucfe0\ub3c4 +trl=\ud130\uae30 \ub9ac\ub77c +try=\uc0c8\ub85c\uc6b4 \ud130\ud0a4 \ub9ac\ub77c +ttd=\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0 \ub2ec\ub7ec +twd=\ub300\ub9cc \uc2e0\uad8c \ub2ec\ub7ec +tzs=\ud0c4\uc790\ub2c8\uc544 \uc2e4\ub9c1 +uah=\uc6b0\ud06c\ub77c\uc774\ub098 \uadf8\ub9ac\ube0c\ub098 +ugx=\uc6b0\uac04\ub2e4 \uc2e4\ub9c1 +usd=\ubbf8\uad6d \ub2ec\ub7ec +uyu=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c \uc6b0\ub8e8\uacfc\uc694 +uzs=\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc228 +veb=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974 +vnd=\ubca0\ud2b8\ub0a8 \ub3d9 +vuv=\ubc14\ub204\uc544\ud22c \ubc14\ud22c +wst=\uc11c \uc0ac\ubaa8\uc544 \ud0c8\ub77c +xau=\uae08 +xcd=\ub3d9\uce74\ub9ac\ube0c \ub2ec\ub7ec +xdr=\ud2b9\ubcc4\uc778\ucd9c\uad8c +xfo=\ud504\ub791\uc2a4 Gold \ud504\ub791 +xfu=\ud504\ub791\uc2a4 UIC-\ud504\ub791 +yer=\uc608\uba58 \ub9ac\uc54c +yum=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub178\ube44 \ub514\ub098\ub974 +zar=\ub0a8\uc544\ud504\ub9ac\uce74 \ub79c\ub4dc +zmk=\uc7d8\ube44\uc544 \ucf70\uccd0 +zwd=\uc9d0\ube44\ube0c\uc6e8 \ub2ec\ub7ec diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_sv.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_sv.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,230 @@ +# +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! + +adp=Andorransk peseta +aed=F\u00f6renade arabemiratens dirham +afa=afro-asiatiskt spr\u00e5k (annat) +all=Albansk lek +amd=Armenisk dram +ang=Nederl\u00e4ndsk antillisk gulden +aoa=Angolansk kwanza +ars=Argentinsk peso +ats=\u00d6sterrikisk schilling +aud=Australisk dollar +awg=Aruba-florin +azm=Azerbajdzjansk manat +bam=Konvertibel bosnisk-hercegovinsk mark +bbd=Barbadisk dollar +bdt=Bangladeshisk taka +bef=Belgisk franc +bgl=Bulgarisk h\u00e5rd lev +bgn=Bulgarisk ny lev +bhd=Bahrainsk dinar +bif=Burundisk franc +bmd=Bermuda-dollar +bnd=Bruneisk dollar +bov=Boliviansk mvdol +brl=Brasiliansk real +bsd=Bahamansk dollar +btn=Bhutanesisk ngultrum +bwp=Botswansk pula +byb=Vitrysk ny rubel (1994-1999) +byr=Vitrysk rubel +bzd=Belizisk dollar +cad=Kanadensisk dollar +cdf=Kongolesisk franc congolais +chf=Schweizisk franc +clf=Chilensk unidad de fomento +clp=Chilensk peso +cny=Kinesisk yuan renminbi +cop=Colombiansk peso +crc=Costarikansk col\u00f3n +cup=Kubansk peso +cve=Kapverdisk escudo +cyp=Cypriotiskt pund +czk=Tjeckisk koruna +dem=Tysk mark +djf=Djiboutisk franc +dkk=Dansk krona +dop=Dominikansk peso +dzd=Algerisk dinar +eek=Estnisk krona +egp=Egyptiskt pund +ern=Eritreansk nakfa +esp=Spansk peseta +etb=Etiopisk birr +eur=Euro +fim=Finsk mark +fjd=Fijiansk dollar +fkp=Falklands\u00f6arnas pund +frf=Fransk franc +gbp=Brittiskt pund sterling +gel=Georgisk lari +ghc=Ghanansk cedi +gip=Gibraltiskt pund +gmd=Gambisk dalasi +gnf=Guineansk franc +grd=Grekisk drachma +gtq=Guatemalansk quetzal +gwp=Guinea-Bissau-peso +gyd=Guyanansk dollar +hkd=Hongkong-dollar +hnl=Hoduransk lempira +hrk=Kroatisk kuna +htg=Haitisk gourde +huf=Ungersk forint +idr=Indonesisk rupiah +iep=Irl\u00e4ndskt pund +ils=Israelisk ny shekel +inr=Indisk rupie +iqd=Irakisk dinar +irr=Iransk rial +isk=Isl\u00e4ndsk krona +itl=Italiensk lira +jmd=Jamaicansk dollar +jod=Jordansk dinar +jpy=Japansk yen +kes=Kenyansk shilling +kgs=Kirgizistansk som +khr=Kambodjansk riel +kmf=Komorisk franc +kpw=Nordkoreansk won +krw=Sydkoreansk won +kwd=Kuwaitisk dinar +kyd=Cayman-dollar +kzt=Kazakisk tenge +lak=Laotisk kip +lbp=Libanesiskt pund +lkr=Srilankesisk rupie +lrd=Liberisk dollar +lsl=Lesothisk loti +ltl=Lettisk lita +luf=Luxemburgsk franc +lvl=Lettisk lats +lyd=Libysk dinar +mad=Marockansk dirham +mdl=Moldavisk leu +mga=Madagaskisk ariary +mgf=Madagaskisk franc +mkd=Makedonisk denar +mmk=Myanmarisk kyat +mnt=Mongolisk tugrik +mop=Macaoisk pataca +mro=Mauretansk ouguiya +mtl=Maltesisk lira +mur=Mauritisk rupie +mvr=Maldivisk rufiyaa +mwk=Malawisk kwacha +mxn=Mexikansk peso +mxv=Mexikansk Unidad de Inversion (UDI) +myr=Malaysisk ringgit +mzm=Mo\u00e7ambikisk metical +nad=Namibisk dollar +ngn=Nigeriansk naira +nio=Nicaraguansk c\u00f3rdoba oro +nlg=Nederl\u00e4ndsk gulden +nok=Norsk krona +npr=Nepalesisk rupie +nzd=Nyzeel\u00e4ndsk dollar +omr=Omansk rial +pab=Panamansk balboa +pen=Peruansk sol nuevo +pgk=Papuansk kina +php=Filippinsk peso +pkr=Pakistansk rupie +pln=Polsk zloty +pte=Portugisisk escudo +pyg=Paraguaysk guarani +qar=Qatarisk rial +rol=Rum\u00e4nsk leu +rub=Rysk rubel +rur=Rysk rubel (1991-1998) +rwf=Rwandisk franc +sar=Saudisk riyal +sbd=Salomon-dollar +scr=Seychellisk rupie +sdd=Sudanesisk dinar +sek=Svensk krona +sgd=Singaporiansk dollar +shp=S\:t Helena-pund +sit=Slovensk tolar +skk=Slovakisk koruna +sll=Sierraleonsk leone +sos=Somalisk shilling +srg=Surinamesisk gulden +std=S\u00e3o Tom\u00e9 och Pr\u00edncipe-dobra +svc=Salvadoransk col\u00f3n +syp=Syriskt pund +szl=Swazil\u00e4ndsk lilangeni +thb=Thail\u00e4ndsk baht +tjs=Tadzjikisk somoni +tmm=Turkmensk manat +tnd=Tunisisk dinar +top=Tongansk pa\u02bbanga +tpe=Timoriansk escudo +trl=Turkisk lira +try=Ny turkisk lira +ttd=Trinidadisk dollar +twd=Taiwanesisk ny dollar +tzs=Tanzanisk shilling +uah=Ukrainsk hryvnia +ugx=Ugandisk shilling +usd=US-dollar +usn=US-dollar (n\u00e4sta dag) +uss=US-dollar (samma dag) +uyu=Uruguayansk peso uruguayo +uzs=Uzbekisk sum +veb=Venezuelansk bolivar +vnd=Vietnamesisk dong +vuv=Vanuatisk vatu +wst=V\u00e4stsamoansk tala +xaf=CFA Franc BEAC +xcd=\u00d6stkaribisk dollar +xfo=Fransk guldfranc +xfu=French UIC-Franc +xof=CFA Franc BCEAO +xpf=CFP-franc +yer=Jemenitisk rial +yum=Dinar (Serbien och Montenegro) +zar=Sydafrikansk rand +zmk=Zambisk kwacha +zwd=Zimbabwisk dollar diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties --- a/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties Fri Jul 20 21:22:05 2007 +0000 @@ -1,37 +1,246 @@ -# Portions Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Sun designates this -# particular file as subject to the "Classpath" exception as provided -# by Sun in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. # -# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# The original version of this source code and documentation -# is copyrighted and owned by Taligent, Inc., a wholly-owned -# subsidiary of IBM. These materials are provided under terms -# of a License Agreement between Taligent and Sun. This technology -# is protected by multiple US and International patents. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. # -# This notice and attribution to Taligent may not be removed. -# Taligent is a registered trademark of Taligent, Inc. +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! CNY=\uffe5 +cny=\u4eba\u6c11\u5e01 +adp=\u5b89\u9053\u5c14\u6bd4\u585e\u5854 +aed=\u963f\u8054\u914b\u8fea\u62c9\u59c6 +afa=\u963f\u5bcc\u6c57\u5c3c (1927-2002) +afn=\u963f\u5bcc\u6c57\u5c3c +all=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b +amd=\u4e9a\u7f8e\u5c3c\u4e9a\u5fb7\u62c9\u59c6 +ang=\u53e4\u82f1\u6587 +aoa=\u5b89\u54e5\u62c9\u5bbd\u624e +ars=\u963f\u6839\u5ef7\u6bd4\u7d22 +ats=\u5965\u5730\u5229\u5148\u4ee4 +aud=\u6fb3\u5927\u5229\u4e9a\u5143 +awg=\u963f\u9c81\u5df4\u57fa\u5c14\u5fb7\u5143 +azm=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 +bam=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u5151\u6362\u5238 +bbd=\u5df4\u5df4\u591a\u65af\u5143 +bdt=\u5b5f\u52a0\u62c9\u5854\u5361 +bef=\u6bd4\u5229\u65f6\u6cd5\u90ce +bgl=\u4fdd\u52a0\u5229\u4e9a\u786c\u5217\u5f17 +bgn=\u4fdd\u52a0\u5229\u4e9a\u65b0\u5217\u5f17 +bhd=\u5df4\u6797\u7b2c\u7eb3\u5c14 +bif=\u5e03\u9686\u8fea\u6cd5\u90ce +bmd=\u767e\u6155\u5927\u5143 +bnd=\u6587\u83b1\u5143 +bob=\u73bb\u5229\u7ef4\u4e9a\u8bfa +bov=\u73bb\u5229\u7ef4\u4e9a Mvdol\uff08\u8d44\u91d1\uff09 +brl=\u5df4\u897f\u96f7\u4e9a\u5c14 +bsd=\u5df4\u54c8\u9a6c\u5143 +btn=\u4e0d\u4e39\u52aa\u624e\u59c6 +bwp=\u535a\u8328\u74e6\u7eb3\u666e\u62c9 +byb=\u767d\u4fc4\u7f57\u65af\u65b0\u5362\u5e03 (1994-1999) +byr=\u767d\u4fc4\u7f57\u65af\u5362\u5e03 +bzd=\u4f2f\u5229\u5179\u5143 +cad=\u52a0\u62ff\u5927\u5143 +cdf=\u521a\u679c\u6cd5\u90ce +chf=\u745e\u58eb\u6cd5\u90ce +clf=\u667a\u5229 Unidades de Fomento\uff08\u8d44\u91d1\uff09 +clp=\u667a\u5229\u6bd4\u7d22 +cop=\u54e5\u4f26\u6bd4\u4e9a\u6bd4\u7d22 +crc=\u54e5\u65af\u8fbe\u9ece\u52a0\u79d1\u6717 +csd=\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +cup=\u53e4\u5df4\u6bd4\u7d22 +cve=\u4f5b\u5f97\u89d2\u57c3\u65af\u5e93\u591a +cyp=\u585e\u6d66\u8def\u65af\u9551 +czk=\u6377\u514b\u514b\u90ce +dem=\u5fb7\u56fd\u9a6c\u514b +djf=\u5409\u5e03\u63d0\u6cd5\u90ce +dkk=\u4e39\u9ea6\u514b\u6717 +dop=\u591a\u7c73\u5c3c\u52a0\u6bd4\u7d22 +dzd=\u963f\u5c14\u53ca\u5229\u4e9a\u7b2c\u7eb3\u5c14 +eek=\u7231\u6c99\u5c3c\u4e9a\u514b\u6717 +egp=\u57c3\u53ca\u9551 +ern=\u5384\u7acb\u7279\u91cc\u4e9a\u7eb3\u514b\u6cd5 +esp=\u897f\u73ed\u7259\u6bd4\u585e\u5854 +etb=\u57c3\u585e\u4fc4\u6bd4\u4e9a\u6bd4\u5c14 +eur=\u6b27\u5143 +fim=\u82ac\u5170\u9a6c\u514b +fjd=\u6590\u6d4e\u5143 +fkp=\u798f\u514b\u5170\u9551 +frf=\u6cd5\u56fd\u6cd5\u90ce +gbp=\u82f1\u9551 +gel=\u4e54\u6cbb\u4e9a\u62c9\u745e +ghc=\u52a0\u7eb3\u585e\u7b2c +gip=\u76f4\u5e03\u7f57\u9640\u9551 +gmd=\u5188\u6bd4\u4e9a\u8fbe\u62c9\u897f +gnf=\u51e0\u5185\u4e9a\u6cd5\u90ce +grd=\u5e0c\u814a\u5fb7\u62c9\u514b\u9a6c +gtq=\u5371\u5730\u9a6c\u62c9\u683c\u67e5\u5c14 +gwp=\u51e0\u5185\u4e9a\u6bd4\u7ecd\u6bd4\u7d22 +gyd=\u572d\u4e9a\u90a3\u5143 +hkd=\u6e2f\u5143 +hnl=\u6d2a\u90fd\u62c9\u65af\u62c9\u4f26\u76ae\u62c9 +hrk=\u514b\u7f57\u5730\u4e9a\u5e93\u7eb3 +htg=\u6d77\u5730\u53e4\u5fb7 +huf=\u5308\u7259\u5229\u798f\u6797 +idr=\u5370\u5ea6\u5c3c\u897f\u4e9a\u76fe +iep=\u7231\u5c14\u5170\u9551 +ils=\u4ee5\u8272\u5217\u65b0\u8c22\u514b\u5c14 +inr=\u5370\u5ea6\u5362\u6bd4 +iqd=\u4f0a\u62c9\u514b\u7b2c\u7eb3\u5c14 +irr=\u4f0a\u6717\u91cc\u4e9a\u5c14 +isk=\u51b0\u5c9b\u514b\u6717 +itl=\u610f\u5927\u5229\u91cc\u62c9 +jmd=\u7259\u4e70\u52a0\u5143 +jod=\u7ea6\u65e6\u7b2c\u7eb3\u5c14 +jpy=\u65e5\u5143 +kes=\u80af\u5c3c\u4e9a\u5148\u4ee4 +kgs=\u5409\u5c14\u5409\u65af\u65af\u5766\u7d22\u59c6 +khr=\u67ec\u57d4\u5be8\u745e\u5c14 +kmf=\u79d1\u6469\u7f57\u6cd5\u90ce +kpw=\u671d\u9c9c\u5706 +krw=\u97e9\u5706 +kwd=\u79d1\u5a01\u7279\u7b2c\u7eb3\u5c14 +kyd=\u5f00\u66fc\u5143 +kzt=\u54c8\u8428\u514b\u65af\u5766\u575a\u6208 +lak=\u8001\u631d\u57fa\u666e +lbp=\u9ece\u5df4\u5ae9\u9551 +lkr=\u65af\u91cc\u5170\u5361\u5362\u6bd4 +lrd=\u5229\u6bd4\u4e9a\u5143 +lsl=\u83b1\u7d22\u6258\u6d1b\u8482 +ltl=\u7acb\u9676\u5b9b\u7acb\u7279 +luf=\u5362\u68ee\u5821\u6cd5\u90ce +lvl=\u62c9\u8131\u7ef4\u4e9a\u62c9\u7279 +lyd=\u5229\u6bd4\u4e9a\u7b2c\u7eb3\u5c14 +mad=\u6469\u6d1b\u54e5\u8fea\u62c9\u59c6 +mdl=\u6469\u5c14\u591a\u74e6\u5217\u4f0a +mga=\u9a6c\u8fbe\u52a0\u65af\u52a0\u963f\u91cc\u4e9a\u91cc +mgf=\u9a6c\u8fbe\u52a0\u65af\u52a0\u6cd5\u90ce +mkd=\u9a6c\u5176\u987f\u6234\u4ee3\u7eb3\u5c14 +mmk=\u7f05\u7538\u5f00\u4e9a\u7279 +mnt=\u8499\u53e4\u56fe\u683c\u91cc\u514b +mop=\u6fb3\u95e8\u5143 +mro=\u6bdb\u91cc\u5854\u5c3c\u4e9a\u4e4c\u5409\u4e9a +mtl=\u9a6c\u8033\u4ed6\u91cc\u62c9 +mur=\u6bdb\u91cc\u6c42\u65af\u5362\u6bd4 +mvr=\u9a6c\u5c14\u4ee3\u592b\u62c9\u83f2\u4e9a +mwk=\u9a6c\u62c9\u7ef4\u514b\u74e6\u67e5 +mxn=\u58a8\u897f\u54e5\u6bd4\u7d22 +mxv=\u58a8\u897f\u54e5 Unidad de Inversion (UDI)\uff08\u8d44\u91d1\uff09 +myr=\u9a6c\u6765\u897f\u4e9a\u6797\u5409\u7279 +mzm=\u83ab\u6851\u6bd4\u514b\u6885\u8482\u5361\u5c14 +nad=\u7eb3\u7c73\u6bd4\u4e9a\u5143 +ngn=\u5c3c\u65e5\u5229\u4e9a\u5948\u62c9 +nio=\u5c3c\u52a0\u62c9\u74dc\u91d1\u79d1\u591a\u5df4 +nlg=\u8377\u5170\u76fe +nok=\u632a\u5a01\u514b\u6717 +npr=\u5c3c\u6cca\u5c14\u5362\u6bd4 +nzd=\u65b0\u897f\u5170\u5143 +omr=\u963f\u66fc\u91cc\u4e9a\u5c14 +pab=\u5df4\u62ff\u9a6c\u5df4\u6ce2\u4e9a +pen=\u79d8\u9c81\u65b0\u7d22\u5c14 +pgk=\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u57fa\u90a3 +php=\u83f2\u5f8b\u5bbe\u6bd4\u7d22 +pkr=\u5df4\u57fa\u65af\u5766\u5362\u6bd4 +pln=\u6ce2\u5170\u5179\u7f57\u63d0 +pte=\u8461\u8404\u7259\u57c3\u65af\u5e93\u591a +pyg=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c +qar=\u5361\u5854\u5c14\u91cc\u4e9a\u5c14 +rol=\u65e7\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +rub=\u4fc4\u56fd\u5362\u5e03 +rur=\u4fc4\u56fd\u5362\u5e03 (1991-1998) +rwf=\u5362\u65fa\u8fbe\u6cd5\u90ce +sar=\u6c99\u7279\u91cc\u4e9a\u5c14 +sbd=\u6240\u7f57\u95e8\u7fa4\u5c9b\u5143 +scr=\u585e\u820c\u5c14\u5362\u6bd4 +sdd=\u82cf\u4e39\u7b2c\u7eb3\u5c14 +sek=\u745e\u5178\u514b\u6717 +sgd=\u65b0\u52a0\u5761\u5143 +shp=\u5723\u8d6b\u52d2\u62ff\u9551 +sit=\u65af\u6d1b\u6587\u5c3c\u4e9a\u6258\u62c9\u5c14 +skk=\u65af\u6d1b\u4f10\u514b\u514b\u6717 +sll=\u585e\u62c9\u5229\u6602\u5229\u6602 +sos=\u7d22\u9a6c\u91cc\u5148\u4ee4 +srd=\u82cf\u91cc\u5357\u5143 +srg=\u82cf\u91cc\u5357\u76fe +std=\u5723\u591a\u7f8e\u548c\u666e\u6797\u897f\u6bd4\u591a\u5e03\u62c9 +svc=\u8428\u5c14\u74e6\u591a\u79d1\u6717 +syp=\u53d9\u5229\u4e9a\u9551 +szl=\u65af\u5a01\u58eb\u5170\u91cc\u5170\u5409\u5c3c +thb=\u6cf0\u94e2 +tjs=\u5854\u5409\u514b\u65af\u5766\u7d22\u83ab\u5c3c +tmm=\u571f\u5e93\u66fc\u65af\u5766\u9a6c\u7eb3\u7279 +tnd=\u7a81\u5c3c\u65af\u7b2c\u7eb3\u5c14 +top=\u6c64\u52a0\u6f58\u52a0 +tpe=\u5e1d\u6c76\u57c3\u65af\u5e93\u591a +trl=\u571f\u8033\u5176\u91cc\u62c9 +try=\u65b0\u571f\u8033\u5176\u91cc\u62c9 +ttd=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u5143 +twd=\u65b0\u53f0\u5e01\u5143 +tzs=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4 +uah=\u4e4c\u514b\u5170\u683c\u91cc\u592b\u5c3c\u4e9a +ugx=\u4e4c\u5e72\u8fbe\u5148\u4ee4 +usd=\u7f8e\u5143 +usn=\u7f8e\u5143\uff08\u6b21\u65e5\uff09 +uss=\u7f8e\u5143\uff08\u5f53\u65e5\uff09 +uyu=\u4e4c\u62c9\u572d\u6bd4\u7d22 +uzs=\u4e4c\u5179\u522b\u514b\u65af\u82cf\u59c6 +veb=\u59d4\u5185\u745e\u62c9\u535a\u5229\u74e6 +vnd=\u8d8a\u5357\u76fe +vuv=\u74e6\u52aa\u963f\u56fe\u74e6\u56fe +wst=\u897f\u8428\u6469\u4e9a\u5854\u62c9 +xaf=\u4e2d\u975e\u91d1\u878d\u5408\u4f5c\u6cd5\u90ce +xag=\u94f6 +xau=\u9ec4\u91d1 +xba=\u6b27\u6d32\u590d\u5408\u5355\u4f4d +xbb=\u6b27\u6d32\u8d27\u5e01\u8054\u76df +xbc=\u6b27\u6d32\u8ba1\u7b97\u5355\u4f4d (XBC) +xbd=\u6b27\u6d32\u8ba1\u7b97\u5355\u4f4d (XBD) +xcd=\u4e1c\u52a0\u52d2\u6bd4\u5143 +xdr=\u7279\u522b\u63d0\u6b3e\u6743 +xfo=\u6cd5\u56fd\u91d1\u6cd5\u90ce +xfu=\u6cd5\u56fd UIC \u6cd5\u90ce +xof=\u975e\u6d32\u91d1\u878d\u5171\u540c\u4f53\u6cd5\u90ce +xpd=\u94af +xpf=\u592a\u5e73\u6d0b\u6cd5\u90ce +xpt=\u94c2 +xts=\u4e3a\u6d4b\u8bd5\u4fdd\u7559\u7684\u4ee3\u7801 +xxx=\u6ca1\u6709\u8d27\u5e01\u7684\u4ea4\u6613 +yer=\u4e5f\u95e8\u91cc\u4e9a\u5c14 +yum=\u5357\u65af\u62c9\u592b\u504c\u5a01\u7b2c\u7eb3\u5c14 +zar=\u5357\u975e\u5170\u7279 +zmk=\u8d5e\u6bd4\u4e9a\u514b\u74e6\u67e5 +zwd=\u6d25\u5df4\u5e03\u97e6\u5143 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_HK.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_HK.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,97 @@ +/* + * Portions copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * Derived from Common Locale Data Repository data. + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2005 Unicode, Inc. All rights reserved. + * Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of the Unicode data files and any associated documentation (the "Data + * Files") or Unicode software and any associated documentation (the + * "Software") to deal in the Data Files or Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Data Files or Software, and + * to permit persons to whom the Data Files or Software are furnished to do + * so, provided that (a) the above copyright notice(s) and this permission + * notice appear with all copies of the Data Files or Software, (b) both the + * above copyright notice(s) and this permission notice appear in associated + * documentation, and (c) there is clear notice in each modified Data File or + * in the Software as well as in the documentation associated with the Data + * File(s) or Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR + * CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall not + * be used in advertising or otherwise to promote the sale, use or other + * dealings in these Data Files or Software without prior written + * authorization of the copyright holder. + */ + +/* + * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved + * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved + * + * The original version of this source code and documentation + * is copyrighted and owned by Taligent, Inc., a wholly-owned + * subsidiary of IBM. These materials are provided under terms + * of a License Agreement between Taligent and Sun. This technology + * is protected by multiple US and International patents. + * + * This notice and attribution to Taligent may not be removed. + * Taligent is a registered trademark of Taligent, Inc. + * + */ + +package sun.util.resources; + +import java.util.Locale; +import java.util.ResourceBundle; + +public final class CurrencyNames_zh_HK extends OpenListResourceBundle { + + // reparent to zh_TW for traditional Chinese names + public CurrencyNames_zh_HK() { + ResourceBundle bundle = LocaleData.getCurrencyNames(Locale.TAIWAN); + setParent(bundle); + } + + protected final Object[][] getContents() { + return new Object[][] { + {"HKD", "HK$"}, + {"TWD", "TWD"}, + }; + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_HK.properties --- a/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_HK.properties Thu Jul 05 23:47:33 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -# Portions Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Sun designates this -# particular file as subject to the "Classpath" exception as provided -# by Sun in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. -# - -# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved -# -# The original version of this source code and documentation -# is copyrighted and owned by Taligent, Inc., a wholly-owned -# subsidiary of IBM. These materials are provided under terms -# of a License Agreement between Taligent and Sun. This technology -# is protected by multiple US and International patents. -# -# This notice and attribution to Taligent may not be removed. -# Taligent is a registered trademark of Taligent, Inc. - -HKD=HK$ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_SG.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_SG.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,45 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.util.resources; + +import java.util.Locale; +import java.util.ResourceBundle; + +public final class CurrencyNames_zh_SG extends OpenListResourceBundle { + + // reparent to zh_CN for simplified Chinese names + public CurrencyNames_zh_SG() { + ResourceBundle bundle = LocaleData.getCurrencyNames(Locale.CHINA); + setParent(bundle); + } + + protected final Object[][] getContents() { + return new Object[][] { + {"CNY", "CNY"}, + {"SGD", "S$"}, + }; + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_SG.properties --- a/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_SG.properties Thu Jul 05 23:47:33 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -# -# Portions Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. -# - -# -# COPYRIGHT AND PERMISSION NOTICE -# -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. -# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. -# - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! - -SGD=S$ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties --- a/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties Fri Jul 20 21:22:05 2007 +0000 @@ -1,37 +1,239 @@ -# Portions Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Sun designates this -# particular file as subject to the "Classpath" exception as provided -# by Sun in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. +# Portions Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. # -# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# The original version of this source code and documentation -# is copyrighted and owned by Taligent, Inc., a wholly-owned -# subsidiary of IBM. These materials are provided under terms -# of a License Agreement between Taligent and Sun. This technology -# is protected by multiple US and International patents. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of the Unicode data files and any associated documentation (the "Data +# Files") or Unicode software and any associated documentation (the +# "Software") to deal in the Data Files or Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, and/or sell copies of the Data Files or Software, and +# to permit persons to whom the Data Files or Software are furnished to do +# so, provided that (a) the above copyright notice(s) and this permission +# notice appear with all copies of the Data Files or Software, (b) both the +# above copyright notice(s) and this permission notice appear in associated +# documentation, and (c) there is clear notice in each modified Data File or +# in the Software as well as in the documentation associated with the Data +# File(s) or Software that the data or software has been modified. # -# This notice and attribution to Taligent may not be removed. -# Taligent is a registered trademark of Taligent, Inc. +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR +# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THE DATA FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not +# be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +# + +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! TWD=NT$ +twd=\u65b0\u81fa\u5e63 +adp=\u5b89\u9053\u723e\u966a\u58eb\u7279 +aed=\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b\u8fea\u723e\u6c57 +afa=\u975e\u9583\u65cf\u53ca\u975e\u4e9e\u8a9e\u8a00 +afn=\u963f\u5bcc\u6c57\u5c3c +all=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b +amd=\u4e9e\u7f8e\u5c3c\u4e9e\u5fb7\u62c9\u59c6 +ang=\u8377\u862d \u5b89\u68af\u862d \u76fe +aoa=\u5b89\u54e5\u62c9\u5bec\u624e +ars=\u963f\u6839\u5ef7\u62ab\u7d22 +ats=\u5967\u5730\u5229\u5148\u4ee4 +aud=\u6fb3\u5e63 +awg=\u963f\u9b6f\u5df4\u76fe +azm=\u963f\u585e\u62dc\u5f4a\u99ac\u7279\u7d0d +bam=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u53ef\u8f49\u63db\u99ac\u514b +bbd=\u5df4\u8c9d\u591a\u5143 +bdt=\u5b5f\u52a0\u62c9\u5854\u5361 +bef=\u6bd4\u5229\u6642\u6cd5\u90ce +bgl=\u4fdd\u52a0\u5229\u4e9e\u786c\u5217\u5f17 +bgn=\u4fdd\u52a0\u5229\u4e9e\u65b0\u5217\u5f17 +bhd=\u5df4\u6797\u7b2c\u7d0d\u723e +bif=\u84b2\u9686\u5730\u6cd5\u90ce +bmd=\u767e\u6155\u9054\u5e63 +bnd=\u6c76\u840a\u5143 +bob=\u73bb\u5229\u7dad\u4e9e\u8ca8\u5e63\u55ae\u4f4d +bov=\u73bb\u5229\u7dad\u4e9e \u5e55\u591a +brl=\u5df4\u897f\u91cc\u62c9 +bsd=\u5df4\u54c8\u99ac\u5143 +btn=\u4e0d\u4e39\u52aa\u624e\u59c6 +bwp=\u6ce2\u672d\u90a3 - \u666e\u62c9 +byb=\u767d\u4fc4\u7f85\u65af\u65b0\u76e7\u5e03 (1994-1999) +byr=\u767d\u4fc4\u7f85\u65af\u76e7\u5e03 +bzd=\u4f2f\u5229\u8332\u5143 +cad=\u52a0\u5e63 +cdf=\u525b\u679c\u6cd5\u90ce +chf=\u745e\u58eb\u6cd5\u90ce +clf=\u5361\u6797\u6cb9\u9054\u4f5b\u66fc\u8dce +clp=\u667a\u5229\u62ab\u7d22 +cny=\u4eba\u6c11\u5e63 +cop=\u54e5\u502b\u6bd4\u4e9e\u62ab\u7d22 +crc=\u54e5\u65af\u5927\u9ece\u52a0\u79d1\u90ce +cup=\u53e4\u5df4\u62ab\u7d22 +cve=\u7dad\u5fb7\u89d2\u57c3\u65af\u5eab\u591a +cyp=\u8cfd\u6d66\u8def\u65af\u938a +czk=\u6377\u514b\u514b\u6717 +dem=\u5fb7\u570b\u99ac\u514b +djf=\u5409\u5e03\u5730\u6cd5\u90ce +dkk=\u4e39\u9ea5\u514b\u7f85\u7d0d +dop=\u591a\u660e\u5c3c\u52a0\u62ab\u7d22 +dzd=\u963f\u723e\u53ca\u5229\u4e9e\u7b2c\u7d0d\u723e +eek=\u611b\u6c99\u5c3c\u4e9e\u514b\u6717 +egp=\u57c3\u53ca\u938a +ern=\u5384\u7acb\u7279\u91cc\u4e9e\u7d0d\u514b\u6cd5 +esp=\u897f\u73ed\u7259\u966a\u58eb\u7279 +etb=\u8863\u7d22\u6bd4\u4e9e\u6bd4\u723e +eur=\u6b50\u5143 +fim=\u82ac\u862d\u99ac\u514b +fjd=\u6590\u6fdf\u5143 +fkp=\u798f\u514b\u862d\u7fa4\u5cf6\u938a +frf=\u6cd5\u570b\u6cd5\u90ce +gbp=\u82f1\u938a +gel=\u55ac\u6cbb\u62c9\u91cc +ghc=\u8fe6\u7d0d\u4ed9\u8515 +gip=\u76f4\u5e03\u7f85\u9640\u938a +gmd=\u7518\u6bd4\u4e9e\u9054\u62c9\u897f +gnf=\u5e7e\u5167\u4e9e\u6cd5\u90ce +grd=\u5e0c\u81d8\u5fb7\u62c9\u514b\u99ac +gtq=\u74dc\u5730\u99ac\u62c9\u683c\u67e5\u723e +gwp=\u5e7e\u5167\u4e9e\u62ab\u7d22\u62ab\u7d22 +gyd=\u572d\u4e9e\u90a3\u5143 +hkd=\u6e2f\u5143 +hnl=\u6d2a\u90fd\u62c9\u65af\u502b\u76ae\u62c9 +hrk=\u514b\u7f85\u5730\u4e9e\u5eab\u7d0d +htg=\u6d77\u5730\u53e4\u5fb7 +huf=\u5308\u7259\u5229 - \u798f\u6797 +idr=\u5370\u5c3c - \u76e7\u5e03 +iep=\u611b\u723e\u862d\u938a +ils=\u4ee5\u8272\u5217\u65b0\u8b1d\u514b\u723e +inr=\u5370\u5ea6\u76e7\u5e03 +iqd=\u4f0a\u62c9\u514b\u7b2c\u7d0d\u723e +irr=\u4f0a\u6717\u91cc\u4e9e\u723e +isk=\u51b0\u5cf6\u514b\u6717 +itl=\u7fa9\u5927\u5229\u91cc\u62c9 +jmd=\u7259\u8cb7\u52a0\u5143 +jod=\u7d04\u65e6\u7b2c\u7d0d\u723e +jpy=\u65e5\u5713 +kes=\u80af\u5c3c\u4e9e\u5148\u4ee4 +kgs=\u5409\u723e\u5409\u65af\u7d22\u99ac +khr=\u67ec\u57d4\u5be8\u745e\u723e +kmf=\u79d1\u6469\u7f85\u6cd5\u90ce +kpw=\u5317\u671d\u9bae\u5e63 +krw=\u97d3\u570b\u571c +kwd=\u79d1\u5a01\u7279\u7b2c\u7d0d\u723e +kyd=\u958b\u66fc\u7fa4\u5cf6\u7f8e\u5143 +kzt=\u5361\u624e\u514b\u65af\u5766\u5766\u5409 +lak=\u8001\u64be \u958b\u666e +lbp=\u9ece\u5df4\u5ae9\u938a +lkr=\u65af\u91cc\u862d\u5361\u76e7\u5e03 +lrd=\u8cf4\u6bd4\u745e\u4e9e\u5143 +lsl=\u8cf4\u7d22\u6258\u7f85\u8482 +ltl=\u7acb\u9676\u5b9b\u91cc\u5854 +luf=\u76e7\u68ee\u5821\u6cd5\u90ce +lvl=\u62c9\u812b\u7dad\u4e9e\u62c9\u7279\u9280\u5e63 +lyd=\u5229\u6bd4\u4e9e\u7b2c\u7d0d\u723e +mad=\u99ac\u90fd\u62c9\u6587 +mdl=\u6469\u675c\u96f2\u5217\u4f0a +mga=\u99ac\u9054\u52a0\u65af\u52a0\u827e\u745e\u723e +mgf=\u99ac\u9054\u52a0\u65af\u52a0\u6cd5\u90ce +mkd=\u99ac\u5176\u9813\u7b2c\u7d0d\u723e +mmk=\u7dec\u7538\u5143 +mnt=\u8499\u53e4\u5716\u683c\u91cc\u514b +mop=\u6fb3\u9580\u5143 +mro=\u8305\u5229\u5854\u5c3c\u4e9e\u70cf\u5409\u4e9e +mtl=\u99ac\u723e\u4ed6\u91cc\u62c9 +mur=\u6a21\u91cc\u897f\u65af\u76e7\u5e03 +mvr=\u99ac\u723e\u5730\u592b\u6d77\u5cf6\u76e7\u975e\u4e9e +mwk=\u99ac\u62c9\u7dad\u514b\u74e6\u67e5 +mxn=\u58a8\u897f\u54e5 - \u62ab\u7d22 +mxv=\u58a8\u897f\u54e5\u6cd5\u5f8b\u53cd\u8f49(UDI) +myr=\u99ac\u4f86\u897f\u4e9e - \u6797\u5409\u7279 +mzm=\u83ab\u4e09\u6bd4\u514b\u6885\u8482\u5361\u723e +nad=\u7d0d\u7c73\u6bd4\u4e9e\u5143 +ngn=\u5948\u53ca\u5229\u4e9e\u5948\u62c9 +nio=\u5c3c\u52a0\u62c9\u74dc \u91d1\u54e5\u591a\u83ef +nlg=\u8377\u862d\u76fe +nok=\u632a\u5a01\u514b\u7f85\u7d0d +npr=\u5c3c\u6cca\u723e\u76e7\u5e03 +nzd=\u7d10\u897f\u862d\u5e63 +omr=\u963f\u66fc\u91cc\u5967 +pab=\u5df4\u62ff\u99ac\u5df4\u6ce2\u4e9e +pen=\u79d8\u9b6f\u65b0\u592a\u967d\u5e63 +pgk=\u5df4\u5e03\u4e9e\u7d10\u5e7e\u5167\u4e9e\u57fa\u90a3 +php=\u83f2\u5f8b\u8cd3\u62ab\u7d22 +pkr=\u5df4\u57fa\u65af\u5766\u76e7\u5e03 +pln=\u6ce2\u862d\u8332\u7f85\u63d0 +pte=\u8461\u8404\u7259\u57c3\u65af\u5eab\u591a +pyg=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c +qar=\u5361\u9054\u723e\u91cc\u4e9e\u723e +rol=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a +rub=\u4fc4\u7f85\u65af\u76e7\u5e03 +rur=\u4fc4\u7f85\u65af\u76e7\u5e03 (1991-1998) +rwf=\u76e7\u5b89\u9054\u6cd5\u90ce +sar=\u6c99\u70cf\u5730\u91cc\u96c5 +sbd=\u7d22\u7f85\u9580\u7fa4\u5cf6\u5143 +scr=\u585e\u820c\u723e\u7fa4\u5cf6\u76e7\u5e03 +sdd=\u8607\u4e39\u7b2c\u7d0d\u723e +sek=\u745e\u5178\u514b\u7f85\u7d0d +sgd=\u65b0\u52a0\u5761\u5e63 +shp=\u8056\u8d6b\u52d2\u62ff \u938a +sit=\u65af\u6d1b\u7dad\u5c3c\u4e9e\u6258\u52d2 +skk=\u65af\u6d1b\u4f10\u514b\u514b\u6717 +sll=\u7345\u5b50\u5c71\u5229\u6602 +sos=\u7d22\u99ac\u5229\u4e9e\u5148\u4ee4 +srg=\u8607\u91cc\u5357\u76fe +std=\u8056\u591a\u7f8e\u5cf6\u548c\u666e\u6797\u897f\u6bd4\u5cf6\u591a\u5e03\u62c9 +svc=\u611b\u723e \u85a9\u723e\u74e6\u591a\u79d1\u90ce +syp=\u6558\u5229\u4e9e\u938a +szl=\u65af\u5a01\u58eb\u862d \u91cc\u90ce +thb=\u6cf0\u9296 +tjs=\u5854\u5409\u514b\u65af\u5766 \u7d22\u83ab\u5c3c +tmm=\u571f\u5eab\u66fc\u99ac\u7d0d\u7279 +tnd=\u7a81\u5c3c\u897f\u4e9e\u7b2c\u7d0d\u723e +top=\u6771\u52a0\u6f58\u52a0 +tpe=\u5e1d\u6c76 \u57c3\u65af\u5eab\u591a +trl=\u571f\u8033\u5176\u91cc\u62c9 +try=\u65b0\u571f\u8033\u5176\u91cc\u62c9 +ttd=\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5r +tzs=\u5766\u6851\u5c3c\u4e9e \u5148\u4ee4 +uah=\u70cf\u514b\u862d\u683c\u91cc\u592b\u90a3 +ugx=\u70cf\u5e72\u9054\u5148\u4ee4 +usd=\u7f8e\u5143 +usn=\u7f8e\u5143 (\u7b2c\u4e8c\u5929) +uss=\u7f8e\u5143 (\u540c\u4e00\u5929) +uyu=\u70cf\u62c9\u572d\u62ab\u7d22 +uzs=\u70cf\u8332\u5225\u514b\u65af\u5766 \u85a9\u6728 +veb=\u59d4\u5167\u745e\u62c9\u535a\u5229\u74e6 +vnd=\u8d8a\u5357\u76fe +vuv=\u842c\u90a3\u675c\u842c\u675c +wst=\u897f\u85a9\u6469\u4e9e\u5854\u62c9 +xaf=\u897f\u975e \u6cd5\u90ce BEAC +xau=\u9ec3\u91d1 +xba=\u6b50\u6d32\u7d9c\u5408\u55ae\u4f4d +xbb=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d XBB +xbc=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBC) +xbd=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBD) +xcd=\u683c\u745e\u90a3\u9054\u5143 +xdr=\u7279\u6b8a\u63d0\u6b3e\u6b0a +xfo=\u6cd5\u570b\u91d1\u6cd5\u90ce +xfu=\u6cd5\u570b UIC \u6cd5\u90ce +xof=\u897f\u975e \u6cd5\u90ce BCEAO +xpf=CFP \u6cd5\u90ce +yer=\u4e5f\u9580\u91cc\u4e9e\u723e +yum=\u5357\u65af\u62c9\u592b\u632a\u5a01\u4e9e\u7b2c\u7d0d\u723e +zar=\u5357\u975e\u862d\u7279 +zmk=\u5c1a\u6bd4\u4e9e\u514b\u74e6\u67e5 +zwd=\u8f9b\u5df4\u5a01\u5143 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/share/classes/sun/util/resources/LocaleData.java --- a/j2se/src/share/classes/sun/util/resources/LocaleData.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/share/classes/sun/util/resources/LocaleData.java Fri Jul 20 21:22:05 2007 +0000 @@ -57,7 +57,7 @@ * * @author Asmus Freytag * @author Mark Davis - * @version 1.48 05/05/07 + * @version 1.49 05/31/07 */ public class LocaleData { @@ -93,8 +93,8 @@ * Gets a currency names resource bundle, using privileges * to allow accessing a sun.* package. */ - public static ResourceBundle getCurrencyNames(Locale locale) { - return getBundle("sun.util.resources.CurrencyNames", locale); + public static OpenListResourceBundle getCurrencyNames(Locale locale) { + return (OpenListResourceBundle)getBundle("sun.util.resources.CurrencyNames", locale); } /** diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/hpi/src/system_md.c --- a/j2se/src/solaris/hpi/src/system_md.c Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/hpi/src/system_md.c Fri Jul 20 21:22:05 2007 +0000 @@ -121,7 +121,7 @@ */ /* - * Open a file. Unlink the file immediately after open returns + * Open a file. Unlink the file immediately after open returns * if the specified oflag has the O_DELETE flag set. */ int sysOpen(const char *path, int oflag, int mode) @@ -174,43 +174,127 @@ return ret; } -/* +/* * Wrapper functions for low-level I/O routines - use the 64 bit * version if available, else revert to the 32 bit versions. */ -off64_t +off64_t lseek64_w(int fd, off64_t offset, int whence) { return lseek64(fd, offset, whence); } -int -ftruncate64_w(int fd, off64_t length) +int +ftruncate64_w(int fd, off64_t length) { return ftruncate64(fd, length); } -int +int open64_w(const char *path, int oflag, int mode) { - int result = open64(path, oflag, mode); - if (result != -1) { - /* If the open succeeded, the file might still be a directory */ + int fd = open64(path, oflag, mode); + if (fd == -1) return -1; + + /* If the open succeeded, the file might still be a directory */ + { int st_mode; - if (sysFfileMode(result, &st_mode) != -1) { + if (sysFfileMode(fd, &st_mode) != -1) { if ((st_mode & S_IFMT) == S_IFDIR) { errno = EISDIR; - close(result); + close(fd); return -1; } } else { - close(result); + close(fd); return -1; } - } - return result; -} + } + + /* + * 32-bit Solaris systems suffer from: + * + * - an historical default soft limit of 256 per-process file + * descriptors that is too low for many Java programs. + * + * - a design flaw where file descriptors created using stdio + * fopen must be less than 256, _even_ when the first limit above + * has been raised. This can cause calls to fopen (but not calls to + * open, for example) to fail mysteriously, perhaps in 3rd party + * native code (although the JDK itself uses fopen). One can hardly + * criticize them for using this most standard of all functions. + * + * We attempt to make everything work anyways by: + * + * - raising the soft limit on per-process file descriptors beyond + * 256 (done by hotspot) + * + * - As of Solaris 10u4, we can request that Solaris raise the 256 + * stdio fopen limit by calling function enable_extended_FILE_stdio, + * (also done by hotspot). We check for its availability. + * + * - If we are stuck on an old (pre 10u4) Solaris system, we can + * workaround the bug by remapping non-stdio file descriptors below + * 256 to ones beyond 256, which is done below. + * + * See: + * 1085341: 32-bit stdio routines should support file descriptors >255 + * 6533291: Work around 32-bit Solaris stdio limit of 256 open files + * 6431278: Netbeans crash on 32 bit Solaris: need to call + * enable_extended_FILE_stdio() in VM initialisation + * Giri Mandalika's blog + * http://technopark02.blogspot.com/2005_05_01_archive.html + */ +#if defined(__solaris__) && defined(_ILP32) + { + static int needToWorkAroundBug1085341 = -1; + if (needToWorkAroundBug1085341) { + if (needToWorkAroundBug1085341 == -1) + needToWorkAroundBug1085341 = + (dlsym(RTLD_DEFAULT, "enable_extended_FILE_stdio") == NULL); + if (needToWorkAroundBug1085341 && fd < 256) { + int newfd = fcntl(fd, F_DUPFD, 256); + if (newfd != -1) { + close(fd); + fd = newfd; + } + } + } + } +#endif /* 32-bit Solaris */ + + /* + * All file descriptors that are opened in the JVM and not + * specifically destined for a subprocess should have the + * close-on-exec flag set. If we don't set it, then careless 3rd + * party native code might fork and exec without closing all + * appropriate file descriptors (e.g. as we do in closeDescriptors in + * UNIXProcess.c), and this in turn might: + * + * - cause end-of-file to fail to be detected on some file + * descriptors, resulting in mysterious hangs, or + * + * - might cause an fopen in the subprocess to fail on a system + * suffering from bug 1085341. + * + * (Yes, the default setting of the close-on-exec flag is a Unix + * design flaw) + * + * See: + * 1085341: 32-bit stdio routines should support file descriptors >255 + * 4843136: (process) pipe file descriptor from Runtime.exec not being closed + * 6339493: (process) Runtime.exec does not close all file descriptors on Solaris 9 + */ +#ifdef FD_CLOEXEC + { + int flags = fcntl(fd, F_GETFD); + if (flags != -1) + fcntl(fd, F_SETFD, flags | FD_CLOEXEC); + } +#endif + return fd; +} void setFPMode(void) { diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/native/java/net/Inet6AddressImpl.c --- a/j2se/src/solaris/native/java/net/Inet6AddressImpl.c Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/native/java/net/Inet6AddressImpl.c Fri Jul 20 21:22:05 2007 +0000 @@ -343,7 +343,7 @@ (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr)); #ifdef __linux__ if (!kernelIsV22()) { - scope = ((struct sockaddr_in6_ext*)iterator->ai_addr)->sin6_scope_id; + scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id; } #else scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id; @@ -558,10 +558,6 @@ struct sockaddr_in6 him6; struct sockaddr_in6 inf6; struct sockaddr_in6* netif = NULL; -#ifdef __linux__ - struct sockaddr_in6_ext *him6_ext = (struct sockaddr_in6_ext *)&him6; - struct sockaddr_in6_ext *if6_ext = NULL; -#endif int len = 0; int connect_rv = -1; @@ -590,10 +586,10 @@ him6.sin6_family = AF_INET6; #ifdef __linux__ if (scope > 0) - him6_ext->sin6_scope_id = scope; + him6.sin6_scope_id = scope; else - him6_ext->sin6_scope_id = getDefaultIPv6Interface( &(him6.sin6_addr)); - len = sizeof(struct sockaddr_in6_ext); + him6.sin6_scope_id = getDefaultIPv6Interface( &(him6.sin6_addr)); + len = sizeof(struct sockaddr_in6); #else if (scope > 0) him6.sin6_scope_id = scope; @@ -609,12 +605,7 @@ (*env)->GetByteArrayRegion(env, ifArray, 0, 16, caddr); memcpy((void *)&(inf6.sin6_addr), caddr, sizeof(struct in6_addr) ); inf6.sin6_family = AF_INET6; -#ifdef __linux__ - if6_ext = (struct sockaddr_in6_ext *)&inf6; - if6_ext->sin6_scope_id = if_scope; -#else inf6.sin6_scope_id = if_scope; -#endif netif = &inf6; } /* diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/native/java/net/NetworkInterface.c --- a/j2se/src/solaris/native/java/net/NetworkInterface.c Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/native/java/net/NetworkInterface.c Fri Jul 20 21:22:05 2007 +0000 @@ -483,7 +483,7 @@ (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr)); #ifdef __linux__ if (!kernelIsV22()) { - scope = ((struct sockaddr_in6_ext*)addrP->addr)->sin6_scope_id; + scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id; } #else scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id; @@ -817,7 +817,7 @@ &if_idx, &plen, &scope, &dad_status, devname) != EOF) { struct netif *ifs_ptr = NULL; struct netif *last_ptr = NULL; - struct sockaddr_in6_ext addr; + struct sockaddr_in6 addr; sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", addr6p[0], addr6p[1], addr6p[2], addr6p[3], @@ -830,7 +830,7 @@ ifs = addif(env, ifs, devname, if_idx, AF_INET6, (struct sockaddr *)&addr, - sizeof(struct sockaddr_in6_ext), plen); + sizeof(struct sockaddr_in6), plen); /* * If an exception occurred then return the list as is. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/native/java/net/PlainDatagramSocketImpl.c --- a/j2se/src/solaris/native/java/net/PlainDatagramSocketImpl.c Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/native/java/net/PlainDatagramSocketImpl.c Fri Jul 20 21:22:05 2007 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -454,7 +454,7 @@ rmtaddrP = 0; } else { packetPort = (*env)->GetIntField(env, packet, dp_portID); - if (NET_InetAddressToSockaddr(env, packetAddress, packetPort, (struct sockaddr *)&rmtaddr, &len, JNI_TRUE) != 0) { + if (NET_InetAddressToSockaddr(env, packetAddress, packetPort, (struct sockaddr *)&rmtaddr, &len, JNI_TRUE) != 0) { return; } } @@ -1137,6 +1137,153 @@ /* + * Set outgoing multicast interface designated by a NetworkInterface. + * Throw exception if failed. + */ +static void mcast_set_if_by_if_v4(JNIEnv *env, jobject this, int fd, jobject value) { + static jfieldID ni_addrsID; + static jfieldID ia_addressID; + struct in_addr in; + jobjectArray addrArray; + jsize len; + jobject addr; + int i; + + if (ni_addrsID == NULL) { + jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); + CHECK_NULL(c); + ni_addrsID = (*env)->GetFieldID(env, c, "addrs", + "[Ljava/net/InetAddress;"); + CHECK_NULL(ni_addrsID); + c = (*env)->FindClass(env,"java/net/InetAddress"); + CHECK_NULL(c); + ia_addressID = (*env)->GetFieldID(env, c, "address", "I"); + CHECK_NULL(ia_addressID); + } + + addrArray = (*env)->GetObjectField(env, value, ni_addrsID); + len = (*env)->GetArrayLength(env, addrArray); + + /* + * Check that there is at least one address bound to this + * interface. + */ + if (len < 1) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", + "bad argument for IP_MULTICAST_IF2: No IP addresses bound to interface"); + return; + } + + /* + * We need an ipv4 address here + */ + for (i = 0; i < len; i++) { + addr = (*env)->GetObjectArrayElement(env, addrArray, i); + if ((*env)->GetIntField(env, addr, ia_familyID) == IPv4) { + in.s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID)); + break; + } + } + + if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, + (const char*)&in, sizeof(in)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error setting socket option"); + } +} + +/* + * Set outgoing multicast interface designated by a NetworkInterface. + * Throw exception if failed. + */ +static void mcast_set_if_by_if_v6(JNIEnv *env, jobject this, int fd, jobject value) { + static jfieldID ni_indexID; + int index; + + if (ni_indexID == NULL) { + jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); + CHECK_NULL(c); + ni_indexID = (*env)->GetFieldID(env, c, "index", "I"); + CHECK_NULL(ni_indexID); + } + index = (*env)->GetIntField(env, value, ni_indexID); + + if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, + (const char*)&index, sizeof(index)) < 0) { + if (errno == EINVAL && index > 0) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", + "IPV6_MULTICAST_IF failed (interface has IPv4 " + "address only?)"); + } else { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error setting socket option"); + } + return; + } + +#ifdef __linux__ + /* + * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socket + * option so record index for later retrival. + */ + if (isOldKernel) { + (*env)->SetIntField(env, this, pdsi_multicastInterfaceID, + (jint)index); + } +#endif +} + +/* + * Set outgoing multicast interface designated by an InetAddress. + * Throw exception if failed. + */ +static void mcast_set_if_by_addr_v4(JNIEnv *env, jobject this, int fd, jobject value) { + static jfieldID ia_addressID; + struct in_addr in; + + if (ia_addressID == NULL) { + jclass c = (*env)->FindClass(env,"java/net/InetAddress"); + CHECK_NULL(c); + ia_addressID = (*env)->GetFieldID(env, c, "address", "I"); + CHECK_NULL(ia_addressID); + } + + in.s_addr = htonl( (*env)->GetIntField(env, value, ia_addressID) ); + + if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, + (const char*)&in, sizeof(in)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error setting socket option"); + } +} + +/* + * Set outgoing multicast interface designated by an InetAddress. + * Throw exception if failed. + */ +static void mcast_set_if_by_addr_v6(JNIEnv *env, jobject this, int fd, jobject value) { + static jclass ni_class; + if (ni_class == NULL) { + jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); + CHECK_NULL(c); + ni_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ni_class); + } + + value = Java_java_net_NetworkInterface_getByInetAddress0(env, ni_class, value); + if (value == NULL) { + if (!(*env)->ExceptionOccurred(env)) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", + "bad argument for IP_MULTICAST_IF" + ": address not bound to any interface"); + } + return; + } + + mcast_set_if_by_if_v6(env, this, fd, value); +} + +/* * Sets the multicast interface. * * SocketOptions.IP_MULTICAST_IF :- @@ -1169,147 +1316,117 @@ if (opt == java_net_SocketOptions_IP_MULTICAST_IF) { /* * value is an InetAddress. - * On IPv4 system use IP_MULTICAST_IF socket option - * On IPv6 system get the NetworkInterface that this IP - * address is bound too and use the IPV6_MULTICAST_IF - * option instead of IP_MULTICAST_IF */ -#ifdef AF_INET6 - if (ipv6_available()) { - static jclass ni_class; - if (ni_class == NULL) { - jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); - CHECK_NULL(c); - ni_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ni_class); - } - - value = Java_java_net_NetworkInterface_getByInetAddress0(env, ni_class, value); - if (value == NULL) { - if (!(*env)->ExceptionOccurred(env)) { - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", - "bad argument for IP_MULTICAST_IF" - ": address not bound to any interface"); - } - return; - } - opt = java_net_SocketOptions_IP_MULTICAST_IF2; - } else -#endif /* AF_INET6 */ - { - static jfieldID ia_addressID; - struct in_addr in; - - if (ia_addressID == NULL) { - jclass c = (*env)->FindClass(env,"java/net/InetAddress"); - CHECK_NULL(c); - ia_addressID = (*env)->GetFieldID(env, c, "address", "I"); - CHECK_NULL(ia_addressID); - } - - in.s_addr = htonl( (*env)->GetIntField(env, value, ia_addressID) ); - - if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, - (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); - } - return; - } +#ifdef __solaris__ + if (ipv6_available()) { + mcast_set_if_by_addr_v6(env, this, fd, value); + } else { + mcast_set_if_by_addr_v4(env, this, fd, value); + } +#endif +#ifdef __linux__ + mcast_set_if_by_addr_v4(env, this, fd, value); + if (ipv6_available()) { + mcast_set_if_by_addr_v6(env, this, fd, value); + } +#endif } if (opt == java_net_SocketOptions_IP_MULTICAST_IF2) { /* * value is a NetworkInterface. - * On IPv6 system get the index of the interface and use the - * IPV6_MULTICAST_IF socket option - * On IPv4 system extract addr[0] and use the IP_MULTICAST_IF - * option. */ -#ifdef AF_INET6 +#ifdef __solaris__ if (ipv6_available()) { - static jfieldID ni_indexID; - int index; - - if (ni_indexID == NULL) { - jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); - CHECK_NULL(c); - ni_indexID = (*env)->GetFieldID(env, c, "index", "I"); - CHECK_NULL(ni_indexID); - } - index = (*env)->GetIntField(env, value, ni_indexID); - - if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, - (const char*)&index, sizeof(index)) < 0) { - if (errno == EINVAL && index > 0) { - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", - "IPV6_MULTICAST_IF failed (interface has IPv4 " - "address only?)"); - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); - } - return; - } + mcast_set_if_by_if_v6(env, this, fd, value); + } else { + mcast_set_if_by_if_v4(env, this, fd, value); + } +#endif #ifdef __linux__ - /* - * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socket - * option so record index for later retrival. - */ - if (isOldKernel) { - (*env)->SetIntField(env, this, pdsi_multicastInterfaceID, - (jint)index); - } + mcast_set_if_by_if_v4(env, this, fd, value); + if (ipv6_available()) { + mcast_set_if_by_if_v6(env, this, fd, value); + } #endif - return; - } else -#endif /* AF_INET6 */ - { - static jfieldID ni_addrsID; - static jfieldID ia_addressID; - struct in_addr in; - jobjectArray addrArray; - jsize len; - jobject addr; + } +} - if (ni_addrsID == NULL) { - jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); - CHECK_NULL(c); - ni_addrsID = (*env)->GetFieldID(env, c, "addrs", - "[Ljava/net/InetAddress;"); - CHECK_NULL(ni_addrsID); - c = (*env)->FindClass(env,"java/net/InetAddress"); - CHECK_NULL(c); - ia_addressID = (*env)->GetFieldID(env, c, "address", "I"); - CHECK_NULL(ia_addressID); - } +/* + * Enable/disable local loopback of multicast datagrams. + */ +static void mcast_set_loop_v4(JNIEnv *env, jobject this, int fd, jobject value) { + jclass cls; + jfieldID fid; + jboolean on; + char loopback; - addrArray = (*env)->GetObjectField(env, value, ni_addrsID); - len = (*env)->GetArrayLength(env, addrArray); + cls = (*env)->FindClass(env, "java/lang/Boolean"); + CHECK_NULL(cls); + fid = (*env)->GetFieldID(env, cls, "value", "Z"); + CHECK_NULL(fid); - /* - * Check that there is at least one address bound to this - * interface. - */ - if (len < 1) { - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", - "bad argument for IP_MULTICAST_IF2: No IP addresses bound to interface"); - return; - } - - addr = (*env)->GetObjectArrayElement(env, addrArray, 0); - in.s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID)); + on = (*env)->GetBooleanField(env, value, fid); + loopback = (!on ? 1 : 0); - if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, - (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); - } - return; - } + if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, (const void *)&loopback, sizeof(char)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + return; } } +/* + * Enable/disable local loopback of multicast datagrams. + */ +static void mcast_set_loop_v6(JNIEnv *env, jobject this, int fd, jobject value) { + jclass cls; + jfieldID fid; + jboolean on; + int loopback; + + cls = (*env)->FindClass(env, "java/lang/Boolean"); + CHECK_NULL(cls); + fid = (*env)->GetFieldID(env, cls, "value", "Z"); + CHECK_NULL(fid); + + on = (*env)->GetBooleanField(env, value, fid); + loopback = (!on ? 1 : 0); + + if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (const void *)&loopback, sizeof(int)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + return; + } + +#ifdef __linux__ + /* + * Can't query IPV6_MULTICAST_LOOP on Linux 2.2 kernel so + * store it in impl so that we can simulate getsockopt. + */ + if (isOldKernel) { + (*env)->SetBooleanField(env, this, pdsi_loopbackID, on); + } +#endif +} + +/* + * Sets the multicast loopback mode. + */ +static void setMulticastLoopbackMode(JNIEnv *env, jobject this, int fd, + jint opt, jobject value) { +#ifdef __solaris__ + if (ipv6_available()) { + mcast_set_loop_v6(env, this, fd, value); + } else { + mcast_set_loop_v4(env, this, fd, value); + } +#endif +#ifdef __linux__ + mcast_set_loop_v4(env, this, fd, value); + if (ipv6_available()) { + mcast_set_loop_v6(env, this, fd, value); + } +#endif +} /* * Class: java_net_PlainDatagramSocketImpl @@ -1355,6 +1472,14 @@ setMulticastInterface(env, this, fd, opt, value); return; } + + /* + * Setting the multicast loopback mode handled separately + */ + if (opt == java_net_SocketOptions_IP_MULTICAST_LOOP) { + setMulticastLoopbackMode(env, this, fd, opt, value); + return; + } /* * Map the Java level socket option to the platform specific @@ -1385,7 +1510,6 @@ case java_net_SocketOptions_SO_REUSEADDR: case java_net_SocketOptions_SO_BROADCAST: - case java_net_SocketOptions_IP_MULTICAST_LOOP: { jclass cls; jfieldID fid; @@ -1397,30 +1521,12 @@ CHECK_NULL(fid); on = (*env)->GetBooleanField(env, value, fid); - if (opt == java_net_SocketOptions_IP_MULTICAST_LOOP) { - /* - * IP_MULTICAST_LOOP may be mapped to IPPROTO (arg - * type 'char') or IPPROTO_V6 (arg type 'int'). - * - * In addition setLoopbackMode(true) disables - * IP_MULTICAST_LOOP - doesn't enable it. - */ - if (level == IPPROTO_IP) { - optval.c = (!on ? 1 : 0); - optlen = sizeof(optval.c); - } else { - optval.i = (!on ? 1 : 0); - optlen = sizeof(optval.i); - } - - } else { - /* SO_REUSEADDR or SO_BROADCAST */ - optval.i = (on ? 1 : 0); - optlen = sizeof(optval.i); - } - - break; + /* SO_REUSEADDR or SO_BROADCAST */ + optval.i = (on ? 1 : 0); + optlen = sizeof(optval.i); + + break; } default : @@ -1434,19 +1540,6 @@ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } - - /* - * Can't query IPV6_MULTICAST_LOOP on Linux 2.2 kernel so - * store it in impl so that we can simulate getsockopt. - */ -#if defined(__linux__) && defined(AF_INET6) - if (isOldKernel && - level == IPPROTO_IPV6 && optname == IPV6_MULTICAST_LOOP) { - - (*env)->SetBooleanField(env, this, pdsi_loopbackID, - (optval.c ? JNI_FALSE :JNI_TRUE)); - } -#endif } @@ -1844,6 +1937,30 @@ } /* + * Set TTL for a socket. Throw exception if failed. + */ +static void setTTL(JNIEnv *env, int fd, jint ttl) { + char ittl = (char)ttl; + if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, + sizeof(ittl)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error setting socket option"); + } +} + +/* + * Set hops limit for a socket. Throw exception if failed. + */ +static void setHopLimit(JNIEnv *env, int fd, jint ttl) { + int ittl = (int)ttl; + if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, + (char*)&ittl, sizeof(ittl)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error setting socket option"); + } +} + +/* * Class: java_net_PlainDatagramSocketImpl * Method: setTTL * Signature: (B)V @@ -1864,31 +1981,22 @@ fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); } /* setsockopt to be correct ttl */ -#ifdef AF_INET6 +#ifdef __solaris__ if (ipv6_available()) { - int ittl = (int)ttl; - if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, - (char*)&ittl, sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); - return; - } + setHopLimit(env, fd, ttl); + } else { + setTTL(env, fd, ttl); + } +#endif #ifdef __linux__ - if (isOldKernel) { - (*env)->SetIntField(env, this, pdsi_ttlID, ttl); - } + setTTL(env, fd, ttl); + if (ipv6_available()) { + setHopLimit(env, fd, ttl); + if (isOldKernel) { + (*env)->SetIntField(env, this, pdsi_ttlID, ttl); + } + } #endif - - } else -#endif /* AF_INET6 */ - { - char ittl = (char)ttl; - if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, - sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); - } - } } /* diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/native/java/net/net_util_md.c --- a/j2se/src/solaris/native/java/net/net_util_md.c Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/native/java/net/net_util_md.c Fri Jul 20 21:22:05 2007 +0000 @@ -146,7 +146,7 @@ } int getScopeID (struct sockaddr *him) { - struct sockaddr_in6_ext *hext = (struct sockaddr_in6_ext *)him; + struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him; if (kernelIsV22()) { return 0; } @@ -154,7 +154,7 @@ } int cmpScopeID (unsigned int scope, struct sockaddr *him) { - struct sockaddr_in6_ext *hext = (struct sockaddr_in6_ext *)him; + struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him; if (kernelIsV22()) { return 1; /* scope is ignored for comparison in 2.2 kernel */ } @@ -747,11 +747,11 @@ */ if (!old_kernel) { - struct sockaddr_in6_ext *him6_ext = - (struct sockaddr_in6_ext *)him; - him6_ext->sin6_scope_id = cached_scope_id != 0 ? + struct sockaddr_in6 *him6 = + (struct sockaddr_in6 *)him; + him6->sin6_scope_id = cached_scope_id != 0 ? cached_scope_id : scope_id; - *len = sizeof(struct sockaddr_in6_ext); + *len = sizeof(struct sockaddr_in6); } } #else diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/solaris/native/java/net/net_util_md.h --- a/j2se/src/solaris/native/java/net/net_util_md.h Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/solaris/native/java/net/net_util_md.h Fri Jul 20 21:22:05 2007 +0000 @@ -36,20 +36,6 @@ #include #endif -/* - * Linux header files define sockaddr_in6 incorrectly (missing the - * sin6_scope_id field) so we use our own definition. - */ -#ifdef __linux__ -struct sockaddr_in6_ext { - unsigned short int sin6_family; - unsigned short int sin6_port; - unsigned int sin6_flowinfo; - struct in6_addr sin6_addr; - unsigned int sin6_scope_id; -}; -#endif - #ifdef __linux__ extern int NET_Timeout(int s, long timeout); @@ -133,18 +119,10 @@ #ifdef AF_INET6 -#ifdef __linux__ -#define SOCKADDR union { \ - struct sockaddr_in him4; \ - struct sockaddr_in6 him6; \ - struct sockaddr_in6_ext him6_ext; \ - } -#else #define SOCKADDR union { \ struct sockaddr_in him4; \ struct sockaddr_in6 him6; \ } -#endif #define SOCKADDR_LEN (ipv6_available() ? sizeof(SOCKADDR) : \ sizeof(struct sockaddr_in)) diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/src/windows/classes/sun/awt/windows/WEmbeddedFrame.java --- a/j2se/src/windows/classes/sun/awt/windows/WEmbeddedFrame.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/src/windows/classes/sun/awt/windows/WEmbeddedFrame.java Fri Jul 20 21:22:05 2007 +0000 @@ -79,6 +79,13 @@ } /* + * Get the native handle + */ + public long getEmbedderHandle() { + return handle; + } + + /* * Print the embedded frame and its children using the specified HDC. */ diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/com/sun/jdi/InvokeHangTest.java --- a/j2se/test/com/sun/jdi/InvokeHangTest.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/com/sun/jdi/InvokeHangTest.java Fri Jul 20 21:22:05 2007 +0000 @@ -22,15 +22,15 @@ */ /** - * @test @(#)InvokeHangTest.java 1.6 07/05/05 + * @test @(#)InvokeHangTest.java 1.7 07/06/26 * @bug 6293795 * @summary Backend hangs when invokeMethod is called from a JDI eventHandler * * @author jjh * * @run build TestScaffold VMConnection TargetListener TargetAdapter - * @run compile -g TwoThreadsTest.java - * @run main TwoThreadsTest + * @run compile -g InvokeHangTest.java + * @run main InvokeHangTest */ import com.sun.jdi.*; import com.sun.jdi.event.*; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/com/sun/jdi/ShellScaffold.sh --- a/j2se/test/com/sun/jdi/ShellScaffold.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/com/sun/jdi/ShellScaffold.sh Fri Jul 20 21:22:05 2007 +0000 @@ -23,7 +23,7 @@ # have any questions. # -# @(#)ShellScaffold.sh 1.26 07/06/22 +# @(#)ShellScaffold.sh 1.28 07/06/25 # # jtreg runs this in a scratch dir. # It (and runregress -no) sets these env vars: @@ -132,7 +132,7 @@ # This can be increased if timing seems to be an issue. sleep_seconds=1 -echo "ShellScaffold.sh: Version 07/06/22" >& 2 +echo "ShellScaffold.sh: Version 07/06/25" >& 2 topPid=$$ # Be careful to echo to >& in these general functions. @@ -646,21 +646,29 @@ } +# $1 is the string to print. If $2 exists, +# it is the name of a file to print, ie, the name +# of the file that contains the $1 string. dofail() { if [ ! -z "$jdbpid" ] ; then # we are in the main process instead of the jdb process echo " " >> $failFile echo "--Fail: main: $*" >> $failFile - exit 1 + else + # Kill the debuggee ; it could be hung so + # we want to get rid of it as soon as possible. + killOrphans "killing debuggee" $debuggeeKeyword + + echo " " >>$failFile + echo "--Fail: $*" >> $failFile + echo quit fi - # Kill the debuggee ; it could be hung so - # we want to get rid of it as soon as possible. - killOrphans "killing debuggee" $debuggeeKeyword - - echo " " >>$failFile - echo "--Fail: $*" >> $failFile - echo quit + if [ ! -z "$2" ] ; then + echo "---- contents of $2 follows -------" >> $failFile + cat "$2" >> $failFile + echo "---------------" >>$failFile + fi exit 1 } @@ -835,21 +843,52 @@ # $1 is the filename, $2 is the string to look for, # $3 is the number of lines to search (from the end) +grepForString() +{ + # See bug 6220903. Sometimes the jdb '> ' prompt chars + # get inserted into the string we are searching for + # so ignore those chars. + if [ -z "$3" ] ; then + case "$2" in + *\>*) + # Target string contains a > so we better + # not ignore it + $grep -s "$2" $1 > $devnull 2>&1 + stat=$? + ;; + *) + # Target string does not contain a >. + # Ignore > and '> ' in the file. + cat $1 | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1 + stat=$? + esac + else + case "$2" in + *\>*) + # Target string contains a > so we better + # not ignore it + tail -$3 $1 | $grep -s "$2" > $devnull 2>&1 + stat=$? + ;; + *) + # Target string does not contain a >. + # Ignore > and '> ' in the file. + tail -$3 $1 | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1 + stat=$? + ;; + esac + fi + return $stat +} + +# $1 is the filename, $2 is the string to look for, +# $3 is the number of lines to search (from the end) failIfPresent() { if [ -r "$1" ] ; then - if [ -z "$3" ] ;then - $grep -s "$2" $1 > $devnull 2>&1 - stat=$? - else - tail -$3 $1 | $grep -s "$2" > $devnull 2>&1 - stat=$? - fi - if [ $stat = 0 ] ; then - dofail "Error output found: \"$2\" in $1" - echo "---- contents of $1 follows -------" >> $failFile - cat "$1" >> $failFile - echo "---------------" + grepForString "$1" "$2" "$3" + if [ $? = 0 ] ; then + dofail "Error output found: \"$2\" in $1" $1 fi fi } @@ -859,21 +898,11 @@ failIfNotPresent() { if [ ! -r "$1" ] ; then - dofail "Required output \"$2\" not found in $1" >& 2 - echo "---- contents of $1 follows -------" >> $failFile - cat "$1" >> $failFile - echo "---------------" + dofail "Required output \"$2\" not found in $1" fi - if [ -z "$3" ] ;then - $grep -s "$2" $1 > $devnull 2>&1 - else - tail -$3 $1 | $grep -s "$2" > $devnull 2>&1 - fi + grepForString "$1" "$2" "$3" if [ $? != 0 ] ; then - dofail "Required output \"$2\" not found in $1" >& 2 - echo "---- contents of $1 follows -------" >> $failFile - cat "$1" >> $failFile - echo "---------------" + dofail "Required output \"$2\" not found in $1" $1 fi } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh --- a/j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh Fri Jul 20 21:22:05 2007 +0000 @@ -22,7 +22,7 @@ # # -# @test @(#)GetMaxFileDescriptorCount.sh 1.6 01:20:23 +# @test @(#)GetMaxFileDescriptorCount.sh 1.6 00:42:32 # @bug 4858522 # @summary # @author Steve Bohne diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh --- a/j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh Fri Jul 20 21:22:05 2007 +0000 @@ -22,7 +22,7 @@ # # -# @test @(#)GetOpenFileDescriptorCount.sh 1.6 01:20:23 +# @test @(#)GetOpenFileDescriptorCount.sh 1.6 00:42:32 # @bug 4858522 # @summary # @author Steve Bohne diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/lang/Thread/NullStackTrace.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/lang/Thread/NullStackTrace.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6571589 + * @summary java.lang.Thread#getStackTrace() returns null. + */ + +public class NullStackTrace +{ + static final int TIMES = 1000; + + public static void main(String[] args) + { + for (int i=0; i nics = Collections.list( + NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface nic : nics) { + if (!nic.isLoopback()) { + List addrs = Collections.list(nic.getInetAddresses()); + for (InetAddress addr : addrs) { + if (addr instanceof Inet6Address) { + return true; + } + } + } + } + + return false; + } + + public static void main(String[] args) throws Exception { + if (isWindows()) { + System.out.println("The test only run on non-Windows OS. Bye."); + return; + } + + if (!hasIPv6()) { + System.out.println("No IPv6 available. Bye."); + return; + } + + // we will send packets to three multicast groups :- + // 224.1.1.1, ::ffff:224.1.1.2, and ff02::1:1 + // + List groups = new ArrayList(); + groups.add(new InetSocketAddress(InetAddress.getByName("224.1.1.1"), PORT)); + groups.add(new InetSocketAddress(InetAddress.getByName("::ffff:224.1.1.2"), PORT)); + groups.add(new InetSocketAddress(InetAddress.getByName("ff02::1:1"), PORT)); + + Thread sender = new Thread(new Sender(groups)); + sender.setDaemon(true); // we want sender to stop when main thread exits + sender.start(); + + // Now try to receive multicast packets. we should not see any of them + // since we disable loopback mode. + // + MulticastSocket msock = new MulticastSocket(PORT); + msock.setSoTimeout(5000); // 5 seconds + + byte[] buf = new byte[1024]; + DatagramPacket packet = new DatagramPacket(buf, 0, buf.length); + List failedGroups = new ArrayList(); + for (SocketAddress group : groups) { + msock.joinGroup(group, null); + + try { + msock.receive(packet); + + // it is an error if we receive something + failedGroups.add(group); + } catch (SocketTimeoutException e) { + // we expect this + } + + msock.leaveGroup(group, null); + } + + if (failedGroups.size() > 0) { + System.out.println("We should not receive anything from following groups, but we did:"); + for (SocketAddress group : failedGroups) + System.out.println(group); + throw new RuntimeException("test failed."); + } + } +} + +class Sender implements Runnable { + private List sendToGroups; + + public Sender(List groups) { + sendToGroups = groups; + } + + public void run() { + byte[] buf = "hello world".getBytes(); + List packets = new ArrayList(); + + try { + for (SocketAddress group : sendToGroups) { + DatagramPacket packet = new DatagramPacket(buf, buf.length, group); + packets.add(packet); + } + + MulticastSocket msock = new MulticastSocket(); + msock.setLoopbackMode(true); // disable loopback mode + for (;;) { + for (DatagramPacket packet : packets) { + msock.send(packet); + } + + Thread.currentThread().sleep(1000); // 1 second + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/net/MulticastSocket/SetOutgoingIf.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/net/MulticastSocket/SetOutgoingIf.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,181 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 07/06/12 + * @bug 4742177 + * @summary Re-test IPv6 (and specifically MulticastSocket) with latest Linux & USAGI code + */ +import java.net.*; +import java.util.concurrent.*; +import java.util.*; + + +public class SetOutgoingIf { + private static int PORT = 9001; + private static String osname; + + static boolean isWindows() { + if (osname == null) + osname = System.getProperty("os.name"); + return osname.contains("Windows"); + } + + private static boolean hasIPv6() throws Exception { + List nics = Collections.list( + NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface nic : nics) { + List addrs = Collections.list(nic.getInetAddresses()); + for (InetAddress addr : addrs) { + if (addr instanceof Inet6Address) + return true; + } + } + + return false; + } + + public static void main(String[] args) throws Exception { + if (isWindows()) { + System.out.println("The test only run on non-Windows OS. Bye."); + return; + } + + if (!hasIPv6()) { + System.out.println("No IPv6 available. Bye."); + return; + } + + // We need 2 or more network interfaces to run the test + // + List nics = new ArrayList(); + for (NetworkInterface nic : Collections.list(NetworkInterface.getNetworkInterfaces())) { + if (!nic.isLoopback()) + nics.add(nic); + } + if (nics.size() <= 1) { + System.out.println("Need 2 or more network interfaces to run. Bye."); + return; + } + + // We will send packets to one ipv4, one ipv4-mapped, and one ipv6 + // multicast group using each network interface :- + // 224.1.1.1 --| + // ::ffff:224.1.1.2 -----> using network interface #1 + // ff02::1:1 --| + // 224.1.2.1 --| + // ::ffff:224.1.2.2 -----> using network interface #2 + // ff02::1:2 --| + // and so on. + // + List groups = new ArrayList(); + for (int i = 0; i < nics.size(); i++) { + InetAddress groupv4 = InetAddress.getByName("224.1." + (i+1) + ".1"); + InetAddress groupv4mapped = InetAddress.getByName("::ffff:224.1." + (i+1) + ".2"); + InetAddress groupv6 = InetAddress.getByName("ff02::1:" + (i+1)); + groups.add(groupv4); + groups.add(groupv4mapped); + groups.add(groupv6); + + // use a separated thread to send to those 3 groups + Thread sender = new Thread(new Sender(nics.get(i), groupv4, groupv4mapped, groupv6, PORT)); + sender.setDaemon(true); // we want sender to stop when main thread exits + sender.start(); + } + + // try to receive on each group, then check if the packet comes + // from the expected network interface + // + byte[] buf = new byte[1024]; + for (InetAddress group : groups) { + MulticastSocket mcastsock = new MulticastSocket(PORT); + mcastsock.setSoTimeout(5000); // 5 second + DatagramPacket packet = new DatagramPacket(buf, 0, buf.length); + + mcastsock.joinGroup(new InetSocketAddress(group, PORT), nics.get(groups.indexOf(group) / 3)); + + try { + mcastsock.receive(packet); + } catch (Exception e) { + // test failed if any exception + throw new RuntimeException(e); + } + + // now check which network interface this packet comes from + NetworkInterface from = NetworkInterface.getByInetAddress(packet.getAddress()); + NetworkInterface shouldbe = nics.get(groups.indexOf(group) / 3); + if (!from.equals(shouldbe)) { + System.out.println("Packets on group " + + group + " should come from " + + shouldbe.getName() + ", but came from " + + from.getName()); + //throw new RuntimeException("Test failed."); + } + + mcastsock.leaveGroup(new InetSocketAddress(group, PORT), nics.get(groups.indexOf(group) / 3)); + } + } +} + +class Sender implements Runnable { + private NetworkInterface nic; + private InetAddress group1; + private InetAddress group2; + private InetAddress group3; + private int port; + + public Sender(NetworkInterface nic, + InetAddress groupv4, InetAddress groupv4mapped, InetAddress groupv6, + int port) { + this.nic = nic; + group1 = groupv4; + group2 = groupv4mapped; + group3 = groupv6; + this.port = port; + } + + public void run() { + try { + MulticastSocket mcastsock = new MulticastSocket(); + mcastsock.setNetworkInterface(nic); + + byte[] buf = "hello world".getBytes(); + DatagramPacket packet1 = new DatagramPacket(buf, buf.length, + new InetSocketAddress(group1, port)); + DatagramPacket packet2 = new DatagramPacket(buf, buf.length, + new InetSocketAddress(group2, port)); + DatagramPacket packet3 = new DatagramPacket(buf, buf.length, + new InetSocketAddress(group3, port)); + + for (;;) { + mcastsock.send(packet1); + mcastsock.send(packet2); + mcastsock.send(packet3); + + Thread.currentThread().sleep(1000); // sleep 1 second + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/net/ipv6tests/BadIPv6Addresses.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/net/ipv6tests/BadIPv6Addresses.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 07/06/12 + * @bug 4742177 + * @summary Re-test IPv6 (and specifically MulticastSocket) with latest Linux & USAGI code + */ +import java.net.*; +import java.util.*; + + +public class BadIPv6Addresses { + public static void main(String[] args) throws Exception { + String[] badAddresses = new String[] { + "0:1:2:3:4:5:6:7:8", // too many : + "0:1:2:3:4:5:6", // not enough : + "0:1:2:3:4:5:6:x", // bad digits + "0:1:2:3:4:5:6::7", // adjacent : + "0:1:2:3:4:5:6:789abcdef", // too many digits + "0:1:2:3::x", // compressed, bad digits + "0:1:2:::3", // compressed, too many adjacent : + "0:1:2:3::abcde", // compressed, too many digits + "0:1", // compressed, not enough : + "0:0:0:0:0:x:10.0.0.1", // with embeded ipv4, bad ipv6 digits + "0:0:0:0:0:0:10.0.0.x", // with embeded ipv4, bad ipv4 digits + "0:0:0:0:0::0:10.0.0.1", // with embeded ipv4, adjacent : + "0:0:0:0:0:fffff:10.0.0.1", // with embeded ipv4, too many ipv6 digits + "0:0:0:0:0:0:0:10.0.0.1", // with embeded ipv4, too many : + "0:0:0:0:0:10.0.0.1", // with embeded ipv4, not enough : + "0:0:0:0:0:0:10.0.0.0.1", // with embeded ipv4, too many . + "0:0:0:0:0:0:10.0.1", // with embeded ipv4, not enough . + "0:0:0:0:0:0:10..0.0.1", // with embeded ipv4, adjacent . + "::fffx:192.168.0.1", // with compressed ipv4, bad ipv6 digits + "::ffff:192.168.0.x", // with compressed ipv4, bad ipv4 digits + ":::ffff:192.168.0.1", // with compressed ipv4, too many adjacent : + "::fffff:192.168.0.1", // with compressed ipv4, too many ipv6 digits + "::ffff:1923.168.0.1", // with compressed ipv4, too many ipv4 digits + ":ffff:192.168.0.1", // with compressed ipv4, not enough : + "::ffff:192.168.0.1.2", // with compressed ipv4, too many . + "::ffff:192.168.0", // with compressed ipv4, not enough . + "::ffff:192.168..0.1" // with compressed ipv4, adjacent . + }; + + List failedAddrs = new ArrayList(); + for (String addrStr : badAddresses) { + try { + InetAddress addr = InetAddress.getByName(addrStr); + + // it is an error if no exception + failedAddrs.add(addrStr); + } catch (UnknownHostException e) { + // expected + } + } + + if (failedAddrs.size() > 0) { + System.out.println("We should reject following ipv6 addresses, but we didn't:"); + for (String addr : failedAddrs) { + System.out.println("\t" + addr); + } + throw new RuntimeException("Test failed."); + } + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/security/BasicPermission/ExitVMEquals.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/security/BasicPermission/ExitVMEquals.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,79 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 1.1 07/06/29 + * @bug 6569218 + * @summary Specification of some BasicPermission method does not fit with implementation + */ + +import java.security.BasicPermission; + +public class ExitVMEquals { + public static void main(String[] args) throws Exception { + BasicPermission bp1 = new BP("exitVM"); + BasicPermission bp2 = new BP("exitVM.*"); + + StringBuffer sb = new StringBuffer(); + + // First, make sure the old restrictions on exitVM and exitVM.* still hold. + if (!bp1.implies(bp2)) sb.append("bp1 does not implies bp2\n"); + if (!bp2.implies(bp1)) sb.append("bp2 does not implies bp1\n"); + + // Test against hashCode spec + if (bp1.hashCode() != bp1.getName().hashCode()) + sb.append("bp1 hashCode not spec consistent\n"); + if (bp2.hashCode() != bp2.getName().hashCode()) + sb.append("bp2 hashCode not spec consistent\n"); + + // Test against equals spec + if (bp1.getName().equals(bp2.getName())) { + if (!bp1.equals(bp2)) { + sb.append("BP breaks equals spec\n"); + } + } + if (!bp1.getName().equals(bp2.getName())) { + if (bp1.equals(bp2)) { + sb.append("BP breaks equals spec in another way\n"); + } + } + + // Tests against common knowledge: If equals, then hashCode should be same + if (bp1.equals(bp2)) { + if (bp1.hashCode() != bp2.hashCode()) { + sb.append("Equal objects have unequal hashCode?\n"); + } + } + + if (sb.length() > 0) { + throw new Exception(sb.toString()); + } + } +} + +class BP extends BasicPermission { + BP(String name) { + super(name); + } +} + diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/security/BasicPermission/MixedBasicPermissions.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/security/BasicPermission/MixedBasicPermissions.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 1.1 07/06/29 + * @bug 6568872 + * @summary BasicPermission.newPermissionCollection() violates general contract specified in Permission class + */ +public class MixedBasicPermissions { + public static void main(String[] args) { + try { + new java.net.NetPermission("1.1.1.1", "connect").newPermissionCollection().add(new java.util.PropertyPermission("j", "read")); + } catch (Exception e) { + return; + // Correct place + } + throw new RuntimeException("Should not be here"); + } +} + diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/security/Security/signedfirst/Dyn.sh --- a/j2se/test/java/security/Security/signedfirst/Dyn.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/security/Security/signedfirst/Dyn.sh Fri Jul 20 21:22:05 2007 +0000 @@ -21,7 +21,7 @@ # have any questions. # -# @test 1.7 07/07/05 +# @test 1.7 07/07/20 # @bug 4504355 # @summary problems if signed crypto provider is the most preferred provider # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/security/Security/signedfirst/Static.sh --- a/j2se/test/java/security/Security/signedfirst/Static.sh Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/security/Security/signedfirst/Static.sh Fri Jul 20 21:22:05 2007 +0000 @@ -21,7 +21,7 @@ # have any questions. # -# @test 1.8 07/07/05 +# @test 1.8 07/07/20 # @bug 4504355 4744260 # @summary problems if signed crypto provider is the most preferred provider # diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/CheckDataVersion.java --- a/j2se/test/java/util/Currency/CheckDataVersion.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/Currency/CheckDataVersion.java Fri Jul 20 21:22:05 2007 +0000 @@ -21,7 +21,7 @@ * have any questions. */ /** - * @(#)CheckDataVersion.java 1.2 07/04/06 + * @(#)CheckDataVersion.java 1.3 07/05/31 * * Check the consistency between the regression tests and the currency data in the JRE */ @@ -32,8 +32,10 @@ class CheckDataVersion { static final String datafile = "tablea1.txt"; - static final String VERSIONKEY = "VERSION="; - static String version; + static final String FILEVERSIONKEY = "FILEVERSION="; + static final String DATAVERSIONKEY = "DATAVERSION="; + static String fileVersion; + static String dataVersion; static boolean checked = false; static void check() { @@ -44,8 +46,13 @@ String line; while ((line = in.readLine()) != null) { - if (line.startsWith(VERSIONKEY)) { - version = line.substring(VERSIONKEY.length()); + if (line.startsWith(FILEVERSIONKEY)) { + fileVersion = line.substring(FILEVERSIONKEY.length()); + } + if (line.startsWith(DATAVERSIONKEY)) { + dataVersion = line.substring(DATAVERSIONKEY.length()); + } + if (fileVersion != null && dataVersion != null) { break; } } @@ -56,19 +63,21 @@ AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try { - Class curdata = Class.forName("java.util.CurrencyData"); - Field f = curdata.getDeclaredField("version"); - f.setAccessible(true); - String jreVersion = (String)f.get(null); - if (!version.equals(jreVersion)) { - throw new RuntimeException("Test data and JRE's currency data are inconsistent. test: "+version+" JRE: "+jreVersion); + String sep = File.separator; + DataInputStream dis = new DataInputStream(new FileInputStream(System.getProperty("java.home")+sep+"lib"+sep+"currency.data")); + int magic = dis.readInt(); + if (magic != 0x43757244) { + throw new RuntimeException("The magic number in the JRE's currency data is incorrect. Expected: 0x43757244, Got: 0x"+magic); } - } catch (ClassNotFoundException cnfe) { - throw new RuntimeException(cnfe); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); + int fileVerNumber = dis.readInt(); + int dataVerNumber = dis.readInt(); + if (Integer.parseInt(fileVersion) != fileVerNumber || + Integer.parseInt(dataVersion) != dataVerNumber) { + throw new RuntimeException("Test data and JRE's currency data are inconsistent. test: (file: "+fileVersion+" data: "+dataVersion+"), JRE: (file: "+fileVerNumber+" data: "+dataVerNumber+")"); + } +System.out.println("test: (file: "+fileVersion+" data: "+dataVersion+"), JRE: (file: "+fileVerNumber+" data: "+dataVerNumber+")"); + } catch (IOException ioe) { + throw new RuntimeException(ioe); } return null; } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/CurrencyTest.java --- a/j2se/test/java/util/Currency/CurrencyTest.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/Currency/CurrencyTest.java Fri Jul 20 21:22:05 2007 +0000 @@ -21,8 +21,8 @@ * have any questions. */ /* - * @test @(#)CurrencyTest.java 1.12 07/04/06 - * @bug 4290801 4693631 5101540 5104960 6296410 6336600 6371531 6466763 + * @test @(#)CurrencyTest.java 1.13 07/05/31 + * @bug 4290801 4692419 4693631 5101540 5104960 6296410 6336600 6371531 * 6488442 * @summary Basic tests for Currency class. */ @@ -48,6 +48,7 @@ testSymbols(); testFractionDigits(); testSerialization(); + testDisplayNames(); } static void testCurrencyCodeValidation() { @@ -233,4 +234,33 @@ throw new RuntimeException("serialization breaks class invariant"); } } + + static void testDisplayNames() { + // null argument test + try { + testDisplayName("USD", null, ""); + throw new RuntimeException("getDisplayName(NULL) did not throw an NPE."); + } catch (NullPointerException npe) {} + + testDisplayName("USD", Locale.ENGLISH, "US Dollar"); + testDisplayName("FRF", Locale.FRENCH, "franc fran\u00e7ais"); + testDisplayName("DEM", Locale.GERMAN, "Deutsche Mark"); + testDisplayName("ESP", new Locale("es"), "peseta espa\u00f1ola"); + testDisplayName("ITL", new Locale("it"), "Lira Italiana"); + testDisplayName("JPY", Locale.JAPANESE, "\u65e5\u672c\u5186"); + testDisplayName("KRW", Locale.KOREAN, "\ub300\ud55c\ubbfc\uad6d \uc6d0"); + testDisplayName("SEK", new Locale("sv"), "Svensk krona"); + testDisplayName("CNY", Locale.SIMPLIFIED_CHINESE, "\u4eba\u6c11\u5e01"); + testDisplayName("TWD", Locale.TRADITIONAL_CHINESE, "\u65b0\u81fa\u5e63"); + } + + static void testDisplayName(String currencyCode, Locale locale, String expectedName) { + String name = Currency.getInstance(currencyCode).getDisplayName(locale); + if (!name.equals(expectedName)) { + throw new RuntimeException("Wrong display name for currency " + + currencyCode +": expected '" + expectedName + + "', got '" + name + "'"); + } + } + } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/PropertiesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/Currency/PropertiesTest.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,167 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.io.*; +import java.util.*; +import java.util.regex.*; + +public class PropertiesTest { + public static void main(String[] s) { + for (int i = 0; i < s.length; i ++) { + if ("-d".equals(s[i])) { + i++; + if (i == s.length) { + throw new RuntimeException("-d needs output file name"); + } else { + dump(s[i]); + } + } else if ("-c".equals(s[i])) { + if (i+2 == s.length) { + throw new RuntimeException("-d needs two file name arguments, before and after respectively"); + } else { + compare(s[++i], s[++i]); + } + } + } + } + + private static void dump(String outfile) { + File f = new File(outfile); + PrintWriter pw; + try { + f.createNewFile(); + pw = new PrintWriter(f); + } catch (Exception fnfe) { + throw new RuntimeException(fnfe); + } + for (char c1 = 'A'; c1 <= 'Z'; c1++) { + for (char c2 = 'A'; c2 <= 'Z'; c2++) { + String ctry = new StringBuilder().append(c1).append(c2).toString(); + try { + Currency c = Currency.getInstance(new Locale("", ctry)); + if (c != null) { + pw.printf(Locale.ROOT, "%s=%s,%03d,%1d\n", + ctry, + c.getCurrencyCode(), + c.getNumericCode(), + c.getDefaultFractionDigits()); + } + } catch (IllegalArgumentException iae) { + // invalid country code + continue; + } + } + } + pw.flush(); + pw.close(); + } + + private static void compare(String beforeFile, String afterFile) { + // load file contents + Properties before = new Properties(); + Properties after = new Properties(); + try { + before.load(new FileReader(beforeFile)); + after.load(new FileReader(afterFile)); + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + + // remove the same contents from the 'after' properties + Set keys = before.stringPropertyNames(); + for (String key: keys) { + String beforeVal = before.getProperty(key); + String afterVal = after.getProperty(key); + System.out.printf("Removing country: %s. before: %s, after: %s", key, beforeVal, afterVal); + if (beforeVal.equals(afterVal)) { + after.remove(key); + System.out.printf(" --- removed\n"); + } else { + System.out.printf(" --- NOT removed\n"); + } + } + + // now look at the currency.properties + String propFileName = System.getProperty("java.home") + File.separator + + "lib" + File.separator + "currency.properties"; + Properties p = new Properties(); + try { + p.load(new FileReader(propFileName)); + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + + // test each replacements + keys = p.stringPropertyNames(); + Pattern propertiesPattern = + Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])"); + for (String key: keys) { + String val = p.getProperty(key); + String afterVal = after.getProperty(key); + System.out.printf("Testing key: %s, val: %s... ", key, val); + + Matcher m = propertiesPattern.matcher(val.toUpperCase(Locale.ROOT)); + if (!m.find()) { + // format is not recognized. + System.out.printf("Format is not recognized.\n"); + if (afterVal != null) { + throw new RuntimeException("Currency data replacement for "+key+" failed: It was incorrectly altered to "+afterVal); + } + + // ignore this + continue; + } + + Matcher mAfter = propertiesPattern.matcher(afterVal); + mAfter.find(); + + String code = m.group(1); + String codeAfter = mAfter.group(1); + int numeric = Integer.parseInt(m.group(2)); + int numericAfter = Integer.parseInt(mAfter.group(2)); + int fraction = Integer.parseInt(m.group(3)); + int fractionAfter = Integer.parseInt(mAfter.group(3)); + if (code.equals(codeAfter) && + (numeric == numericAfter)&& + (fraction == fractionAfter)) { + after.remove(key); + } else { + throw new RuntimeException("Currency data replacement for "+key+" failed: actual: (alphacode: "+codeAfter+", numcode: "+numericAfter+", fraction: "+fractionAfter+"), expected: (alphacode: "+code+", numcode: "+numeric+", fraction: "+fraction+")"); + } + System.out.printf("Success!\n"); + } + if (!after.isEmpty()) { + StringBuilder sb = new StringBuilder() + .append("Currency data replacement failed. Unnecessary modification was(were) made for the following currencies:\n"); + keys = after.stringPropertyNames(); + for (String key : keys) { + sb.append(" country: ") + .append(key) + .append(" currency: ") + .append(after.getProperty(key)) + .append("\n"); + } + throw new RuntimeException(sb.toString()); + } + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/PropertiesTest.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/Currency/PropertiesTest.sh Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,122 @@ +#!/bin/sh +# +# @test +# @bug 6332666 +# @summary tests the capability of replacing the currency data with user +# specified currency properties file +# @build PropertiesTest +# @run shell/timeout=600 PropertiesTest.sh + +if [ "${TESTSRC}" = "" ] +then + echo "TESTSRC not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTSRC=${TESTSRC}" +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTJAVA=${TESTJAVA}" +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTCLASSES=${TESTCLASSES}" +echo "CLASSPATH=${CLASSPATH}" + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS | Linux ) + PS=":" + FS="/" + ;; + Windows* ) + PS=";" + FS="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +# Currency dump path #1. Just dump currencies with the bare JRE + +# run +RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} PropertiesTest -d dump1" + +echo ${RUNCMD} +${RUNCMD} +result=$? + +if [ $result -eq 0 ] +then + echo "Execution successful" +else + echo "Execution of the test case failed." +fi + +# Currency dump path #2. Dump currencies using the JRE with replacement currencies + +# copy the test properties file +COPIED=0 +if [ -w $TESTJAVA ] +then + WRITABLEJDK=$TESTJAVA +else + WRITABLEJDK=.${FS}testjava + cp -r $TESTJAVA $WRITABLEJDK + COPIED=1 +fi + +if [ -d ${WRITABLEJDK}${FS}jre ] +then + PROPLOCATION=${WRITABLEJDK}${FS}jre${FS}lib +else + PROPLOCATION=${WRITABLEJDK}${FS}lib +fi +cp ${TESTSRC}${FS}currency.properties $PROPLOCATION + +# run +RUNCMD="${WRITABLEJDK}${FS}bin${FS}java -classpath ${TESTCLASSES} PropertiesTest -d dump2" + +echo ${RUNCMD} +${RUNCMD} +result=$? + +if [ $result -eq 0 ] +then + echo "Execution successful" +else + echo "Execution of the test case failed." +fi + +# Now compare the two dump files + +RUNCMD="${WRITABLEJDK}${FS}bin${FS}java -classpath ${TESTCLASSES} PropertiesTest -c dump1 dump2" + +echo ${RUNCMD} +${RUNCMD} +result=$? + +if [ $result -eq 0 ] +then + echo "Execution successful" +else + echo "Execution of the test case failed." +fi + +# Cleanup +rm -f dump1 +rm -f dump2 +rm -f ${PROPLOCATION}${FS}currency.properties +if [ $COPIED -eq 1 ] +then + rm -rf $WRITABLEJDK +fi + +exit $result diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/ValidateISO4217.java --- a/j2se/test/java/util/Currency/ValidateISO4217.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/Currency/ValidateISO4217.java Fri Jul 20 21:22:05 2007 +0000 @@ -21,8 +21,8 @@ * have any questions. */ /* - * @test 1.7 07/04/12 - * @bug 4819436 4942982 5104960 6544471 + * @test 1.8 07/05/31 + * @bug 4691089 4819436 4942982 5104960 6544471 * @summary Validate ISO 4217 data for Currency class. */ @@ -38,9 +38,9 @@ * ############################################################################ * * 1) Make a golden-data file. - * From BSi's ISO4217 data (TABLE A1.doc), extract three (or five, if currency is changing) + * From BSi's ISO4217 data (TABLE A1.doc), extract four (or eight, if currency is changing) * fields and save as ./tablea1.txt. - * \t\t[\t\t\t] + * \t\t\t[\t\t\t\t] * The Cutover Date is given in SimpleDateFormat's 'yyyy-MM-dd-HH-mm-ss' format in the GMT time zone. * * 2) Compile ValidateISO4217.java @@ -69,30 +69,38 @@ static final String[][] additionalCodes = { /* Defined in ISO 4217 list, but don't have code and minor unit info. */ - {"AQ", "", "0"}, // Antarctica + {"AQ", "", "", "0"}, // Antarctica /* * Defined in ISO 4217 list, but don't have code and minor unit info in * it. On the othe hand, both code and minor unit are defined in * .properties file. I don't know why, though. */ - {"GS", "GBP", "2"}, // South Georgia And The South Sandwich Islands + {"GS", "GBP", "826", "2"}, // South Georgia And The South Sandwich Islands /* Not defined in ISO 4217 list, but defined in .properties file. */ - {"PS", "ILS", "2"}, // Palestinian Territory, Occupied + {"AX", "EUR", "978", "2"}, // \u00c5LAND ISLANDS + {"PS", "ILS", "376", "2"}, // Palestinian Territory, Occupied /* Not defined in ISO 4217 list, but added in ISO 3166 country code list */ - {"JE", "GBP", "2"}, // Jersey - {"GG", "GBP", "2"}, // Guernsey - {"IM", "GBP", "2"}, // Isle of Man + {"JE", "GBP", "826", "2"}, // Jersey + {"GG", "GBP", "826", "2"}, // Guernsey + {"IM", "GBP", "826", "2"}, // Isle of Man }; + /* Codes that are obsolete, do not have related country */ + static final String otherCodes = + "ADP-AFA-ATS-AYM-BEF-BGL-BOV-BYB-CLF-DEM-ESP-FIM-FRF-GRD-GWP-IEP-ITL-LUF-MGF-MXV-NLG-PTE-RUR-SIT-SRG-TPE-TRL-USN-USS-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XTS-XXX-YUM-ZWN"; + static boolean err = false; + static Set testCurrencies = new HashSet(); + public static void main(String[] args) throws Exception { CheckDataVersion.check(); test1(); test2(); + getAvailableCurrenciesTest(); if (err) { throw new RuntimeException("Failed: Validation ISO 4217 data"); @@ -118,17 +126,21 @@ } String currency; + String numeric; String minorUnit; int tokensCount = tokens.countTokens(); - if (tokensCount < 2) { + if (tokensCount < 3) { currency = ""; + numeric = "0"; minorUnit = "0"; } else { currency = tokens.nextToken(); + numeric = tokens.nextToken(); minorUnit = tokens.nextToken(); + testCurrencies.add(Currency.getInstance(currency)); // check for the cutover - if (tokensCount > 2) { + if (tokensCount > 3) { if (format == null) { format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US); format.setTimeZone(TimeZone.getTimeZone("GMT")); @@ -137,13 +149,15 @@ if (format.parse(tokens.nextToken()).getTime() < System.currentTimeMillis()) { currency = tokens.nextToken(); + numeric = tokens.nextToken(); minorUnit = tokens.nextToken(); + testCurrencies.add(Currency.getInstance(currency)); } } } int index = toIndex(country); - testCountryCurrency(country, currency, Integer.parseInt(minorUnit), - index); + testCountryCurrency(country, currency, Integer.parseInt(numeric), + Integer.parseInt(minorUnit), index); } in.close(); @@ -151,7 +165,9 @@ int index = toIndex(additionalCodes[i][0]); if (additionalCodes[i][1].length() != 0) { testCountryCurrency(additionalCodes[i][0], additionalCodes[i][1], - Integer.parseInt(additionalCodes[i][2]), index); + Integer.parseInt(additionalCodes[i][2]), + Integer.parseInt(additionalCodes[i][3]), index); + testCurrencies.add(Currency.getInstance(additionalCodes[i][1])); } else { codes[index] = SKIPPED; } @@ -162,11 +178,12 @@ return ((s.charAt(0) - 'A') * ALPHA_NUM + s.charAt(1) - 'A'); } - static void testCountryCurrency(String country, String currencyCode, int digits, int index) { + static void testCountryCurrency(String country, String currencyCode, + int numericCode, int digits, int index) { if (currencyCode.length() == 0) { return; } - testCurrencyDefined(currencyCode, digits); + testCurrencyDefined(currencyCode, numericCode, digits); Locale loc = new Locale("", country); try { @@ -191,10 +208,16 @@ } } - static void testCurrencyDefined(String currencyCode, int digits) { + static void testCurrencyDefined(String currencyCode, int numericCode, int digits) { try { Currency currency = currency = Currency.getInstance(currencyCode); + if (currency.getNumericCode() != numericCode) { + System.err.println("Error: [" + currencyCode + "] expected: " + + numericCode + "; got: " + currency.getNumericCode()); + err = true; + } + if (currency.getDefaultFractionDigits() != digits) { System.err.println("Error: [" + currencyCode + "] expected: " + digits + "; got: " + currency.getDefaultFractionDigits()); @@ -249,4 +272,27 @@ } } } + + /** + * This test depends on test1(), where 'testCurrencies' set is constructed + */ + static void getAvailableCurrenciesTest() { + Set jreCurrencies = Currency.getAvailableCurrencies(); + + // add otherCodes + StringTokenizer st = new StringTokenizer(otherCodes, "-"); + while (st.hasMoreTokens()) { + testCurrencies.add(Currency.getInstance(st.nextToken())); + } + + if (!testCurrencies.containsAll(jreCurrencies)) { + System.err.print("Error: getAvailableCurrencies() returned extra currencies than expected: "); + jreCurrencies.removeAll(testCurrencies); + for (Currency c : jreCurrencies) { + System.err.print(" "+c); + } + System.err.println(); + err = true; + } + } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/currency.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/Currency/currency.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,10 @@ +# +# Test data for replacing the currency data +# +JP=JPZ,123,2 +US=euR,978,2 +ZZ = ZZZ , 999 , 3 + +# invalid entries +GB=123 +FR=zzzzz.123 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/Currency/tablea1.txt --- a/j2se/test/java/util/Currency/tablea1.txt Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/Currency/tablea1.txt Fri Jul 20 21:22:05 2007 +0000 @@ -1,266 +1,279 @@ # +# @(#)tablea1.txt 1.16 07/05/31 # Based on BSi's ISO4217 data - "TABLE A1.doc" + amendments up until MA134.doc # (As of 25 October 2006) # # Version -VERSION=134 +FILEVERSION=1 +DATAVERSION=134 # ISO 4217 currency data -AF AFN 2 -AL ALL 2 -DZ DZD 2 -AS USD 2 -AD EUR 2 -AO AOA 2 -AI XCD 2 -AQ -AG XCD 2 -AR ARS 2 -AM AMD 2 -AW AWG 2 -AU AUD 2 -AT EUR 2 -AZ AZM 2 2005-12-31-20-00-00 AZN 2 -AX EUR 2 -BS BSD 2 -BH BHD 3 -BD BDT 2 -BB BBD 2 -BY BYR 0 -BE EUR 2 -BZ BZD 2 -BJ XOF 0 -BM BMD 2 -#BT INR 2 -BT BTN 2 -BO BOB 2 -#BO BOV 2 -BA BAM 2 -BW BWP 2 -BV NOK 2 -BR BRL 2 -IO USD 2 -BN BND 2 -BG BGN 2 -BF XOF 0 -BI BIF 0 -KH KHR 2 -CM XAF 0 -CA CAD 2 -CV CVE 2 -KY KYD 2 -CF XAF 0 -TD XAF 0 -CL CLP 0 -#CL CLF 0 -CN CNY 2 -CX AUD 2 -CC AUD 2 -CO COP 2 -#CO COU 2 -KM KMF 0 -CG XAF 0 -CD CDF 2 -CK NZD 2 -CR CRC 2 -CI XOF 0 -HR HRK 2 -CU CUP 2 -CY CYP 2 -CZ CZK 2 -DK DKK 2 -DJ DJF 0 -DM XCD 2 -DO DOP 2 -EC USD 2 -EG EGP 2 -SV SVC 2 -#SV USD 2 -GQ XAF 0 -ER ERN 2 -EE EEK 2 -ET ETB 2 -FK FKP 2 -FO DKK 2 -FJ FJD 2 -FI EUR 2 -FR EUR 2 -GF EUR 2 -PF XPF 0 -TF EUR 2 -GA XAF 0 -GM GMD 2 -GE GEL 2 -DE EUR 2 -GH GHC 2 -GI GIP 2 -GR EUR 2 -GL DKK 2 -GD XCD 2 -GP EUR 2 -GU USD 2 -GT GTQ 2 -GN GNF 0 -#GW GWP 2 -GW XOF 0 -GY GYD 2 -HT HTG 2 -#HT USD 2 -HM AUD 2 -VA EUR 2 -HN HNL 2 -HK HKD 2 -HU HUF 2 -IS ISK 2 -IN INR 2 -ID IDR 2 -IR IRR 2 -IQ IQD 3 -IE EUR 2 -IL ILS 2 -IT EUR 2 -JM JMD 2 -JP JPY 0 -JO JOD 3 -KZ KZT 2 -KE KES 2 -KI AUD 2 -KP KPW 2 -KR KRW 0 -KW KWD 3 -KG KGS 2 -LA LAK 2 -LV LVL 2 -LB LBP 2 -#LS ZAR 2 -LS LSL 2 -LR LRD 2 -LY LYD 3 -LI CHF 2 -LT LTL 2 -LU EUR 2 -MO MOP 2 -MK MKD 2 -MG MGA 2 -MW MWK 2 -MY MYR 2 -MV MVR 2 -ML XOF 0 -MT MTL 2 -MH USD 2 -MQ EUR 2 -MR MRO 2 -MU MUR 2 -YT EUR 2 -MX MXN 2 -#MX MXV 2 -FM USD 2 -MD MDL 2 -MC EUR 2 -MN MNT 2 -MS XCD 2 -MA MAD 2 -MZ MZM 2 2006-06-30-22-00-00 MZN 2 -MM MMK 2 -ME EUR 2 -#NA ZAR 2 -NA NAD 2 -NR AUD 2 -NP NPR 2 -NL EUR 2 -AN ANG 2 -NC XPF 0 -NZ NZD 2 -NI NIO 2 -NE XOF 0 -NG NGN 2 -NU NZD 2 -NF AUD 2 -MP USD 2 -NO NOK 2 -OM OMR 3 -PK PKR 2 -PW USD 2 -PS -PA PAB 2 -#PA USD 2 -PG PGK 2 -PY PYG 0 -PE PEN 2 -PH PHP 2 -PN NZD 2 -PL PLN 2 -PT EUR 2 -PR USD 2 -QA QAR 2 -RE EUR 2 -RO ROL 2 2005-06-30-21-00-00 RON 2 -#RU RUR 2 -RU RUB 2 -RW RWF 0 -SH SHP 2 -KN XCD 2 -LC XCD 2 -PM EUR 2 -VC XCD 2 -WS WST 2 -SM EUR 2 -ST STD 2 -SA SAR 2 -SN XOF 0 -RS RSD 2 -#CS EUR 2 -CS CSD 2 -SC SCR 2 -SL SLL 2 -SG SGD 2 -SK SKK 2 -SI EUR 2 -SB SBD 2 -SO SOS 2 -ZA ZAR 2 -GS -ES EUR 2 -LK LKR 2 -SD SDD 2 -SR SRD 2 -SJ NOK 2 -SZ SZL 2 -SE SEK 2 -CH CHF 2 -SY SYP 2 -TW TWD 2 -TJ TJS 2 -TZ TZS 2 -TH THB 2 -TL USD 2 -TG XOF 0 -TK NZD 2 -TO TOP 2 -TT TTD 2 -TN TND 3 -TR TRY 2 -TM TMM 2 -TC USD 2 -TV AUD 2 -UG UGX 2 -UA UAH 2 -AE AED 2 -GB GBP 2 -US USD 2 -#US USS 2 -#US USN 2 -UM USD 2 -UY UYU 2 -UZ UZS 2 -VU VUV 0 -VE VEB 2 -VN VND 2 -VG USD 2 -VI USD 2 -WF XPF 0 -EH MAD 2 -YE YER 2 -ZM ZMK 2 -ZW ZWD 2 +AF AFN 971 2 +AL ALL 8 2 +DZ DZD 12 2 +AS USD 840 2 +AD EUR 978 2 +AO AOA 973 2 +AI XCD 951 2 +AG XCD 951 2 +AR ARS 32 2 +AM AMD 51 2 +AW AWG 533 2 +AU AUD 36 2 +AT EUR 978 2 +# MA 129 +AZ AZM 31 2 2005-12-31-20-00-00 AZN 944 2 +BS BSD 44 2 +BH BHD 48 3 +BD BDT 50 2 +BB BBD 52 2 +BY BYR 974 0 +BE EUR 978 2 +BZ BZD 84 2 +BJ XOF 952 0 +BM BMD 60 2 +#BT INR 356 2 +BT BTN 64 2 +BO BOB 68 2 +#BO BOV 984 2 +BA BAM 977 2 +BW BWP 72 2 +BV NOK 578 2 +BR BRL 986 2 +IO USD 840 2 +BN BND 96 2 +BG BGN 975 2 +BF XOF 952 0 +BI BIF 108 0 +KH KHR 116 2 +CM XAF 950 0 +CA CAD 124 2 +CV CVE 132 2 +KY KYD 136 2 +CF XAF 950 0 +TD XAF 950 0 +CL CLP 152 0 +#CL CLF 990 0 +CN CNY 156 2 +CX AUD 36 2 +CC AUD 36 2 +CO COP 170 2 +#CO COU 970 2 +KM KMF 174 0 +CG XAF 950 0 +CD CDF 976 2 +CK NZD 554 2 +CR CRC 188 2 +CI XOF 952 0 +HR HRK 191 2 +CU CUP 192 2 +CY CYP 196 2 +CZ CZK 203 2 +DK DKK 208 2 +DJ DJF 262 0 +DM XCD 951 2 +DO DOP 214 2 +EC USD 840 2 +EG EGP 818 2 +SV SVC 222 2 +#SV USD 840 2 +GQ XAF 950 0 +ER ERN 232 2 +EE EEK 233 2 +ET ETB 230 2 +FK FKP 238 2 +FO DKK 208 2 +FJ FJD 242 2 +FI EUR 978 2 +FR EUR 978 2 +GF EUR 978 2 +PF XPF 953 0 +TF EUR 978 2 +GA XAF 950 0 +GM GMD 270 2 +GE GEL 981 2 +DE EUR 978 2 +GH GHC 288 2 +GI GIP 292 2 +GR EUR 978 2 +GL DKK 208 2 +GD XCD 951 2 +GP EUR 978 2 +GU USD 840 2 +GT GTQ 320 2 +GN GNF 324 0 +#GW GWP 624 2 +GW XOF 952 0 +GY GYD 328 2 +HT HTG 332 2 +#HT USD 840 2 +HM AUD 36 2 +VA EUR 978 2 +HN HNL 340 2 +HK HKD 344 2 +HU HUF 348 2 +IS ISK 352 2 +IN INR 356 2 +ID IDR 360 2 +#INTERNATIONAL MONETARY FUND (I.M.F) ** XDR 960 +IR IRR 364 2 +IQ IQD 368 3 +IE EUR 978 2 +IL ILS 376 2 +IT EUR 978 2 +JM JMD 388 2 +JP JPY 392 0 +JO JOD 400 3 +KZ KZT 398 2 +KE KES 404 2 +KI AUD 36 2 +KP KPW 408 2 +KR KRW 410 0 +KW KWD 414 3 +KG KGS 417 2 +LA LAK 418 2 +LV LVL 428 2 +LB LBP 422 2 +#LS ZAR 710 2 +LS LSL 426 2 +LR LRD 430 2 +LY LYD 434 3 +LI CHF 756 2 +LT LTL 440 2 +LU EUR 978 2 +MO MOP 446 2 +MK MKD 807 2 +MG MGA 969 2 +MW MWK 454 2 +MY MYR 458 2 +MV MVR 462 2 +ML XOF 952 0 +MT MTL 470 2 +MH USD 840 2 +MQ EUR 978 2 +MR MRO 478 2 +MU MUR 480 2 +YT EUR 978 2 +MX MXN 484 2 +#MX MXV 979 2 +FM USD 840 2 +MD MDL 498 2 +MC EUR 978 2 +MN MNT 496 2 +MS XCD 951 2 +MA MAD 504 2 +# MA 130 +MZ MZM 508 2 2006-06-30-22-00-00 MZN 943 2 +MM MMK 104 2 +# MA 134 +ME EUR 978 2 +#NA ZAR 710 2 +NA NAD 516 2 +NR AUD 36 2 +NP NPR 524 2 +NL EUR 978 2 +AN ANG 532 2 +NC XPF 953 0 +NZ NZD 554 2 +NI NIO 558 2 +NE XOF 952 0 +NG NGN 566 2 +NU NZD 554 2 +NF AUD 36 2 +MP USD 840 2 +NO NOK 578 2 +OM OMR 512 3 +PK PKR 586 2 +PW USD 840 2 +PA PAB 590 2 +#PA USD 840 2 +PG PGK 598 2 +PY PYG 600 0 +PE PEN 604 2 +PH PHP 608 2 +PN NZD 554 2 +PL PLN 985 2 +PT EUR 978 2 +PR USD 840 2 +QA QAR 634 2 +RE EUR 978 2 +RO ROL 946 2 2005-06-30-21-00-00 RON 946 2 +RU RUB 643 2 +RW RWF 646 0 +SH SHP 654 2 +KN XCD 951 2 +LC XCD 951 2 +PM EUR 978 2 +VC XCD 951 2 +WS WST 882 2 +SM EUR 978 2 +ST STD 678 2 +SA SAR 682 2 +SN XOF 952 0 +# MA 134 +RS RSD 941 2 +CS CSD 891 2 +#CS EUR 978 2 +SC SCR 690 2 +SL SLL 694 2 +SG SGD 702 2 +SK SKK 703 2 +# MA 131 +#SI SIT 705 2 +SI EUR 978 2 +SB SBD 90 2 +SO SOS 706 2 +ZA ZAR 710 2 +ES EUR 978 2 +LK LKR 144 2 +SD SDD 736 2 +SR SRD 968 2 +SJ NOK 578 2 +SZ SZL 748 2 +SE SEK 752 2 +CH CHF 756 2 +#CH CHW 948 2 +#CH CHE 947 2 +SY SYP 760 2 +TW TWD 901 2 +TJ TJS 972 2 +TZ TZS 834 2 +TH THB 764 2 +TL USD 840 2 +TG XOF 952 0 +TK NZD 554 2 +TO TOP 776 2 +TT TTD 780 2 +TN TND 788 3 +# MA 128 +#TR TRL 792 0 +TR TRY 949 2 +TM TMM 795 2 +TC USD 840 2 +TV AUD 36 2 +UG UGX 800 2 +UA UAH 980 2 +AE AED 784 2 +GB GBP 826 2 +US USD 840 2 +#US USS 998 2 +#US USN 997 2 +UM USD 840 2 +UY UYU 858 2 +UZ UZS 860 2 +VU VUV 548 0 +VE VEB 862 2 +VN VND 704 2 +VG USD 840 2 +VI USD 840 2 +WF XPF 953 0 +EH MAD 504 2 +YE YER 886 2 +ZM ZMK 894 2 +ZW ZWD 716 2 +#XAU XAU 959 +#XBA XBA 955 +#XBB XBB 956 +#XBC XBC 957 +#XBD XBD 958 diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/PluggableLocale/CurrencyNameProviderTest.java --- a/j2se/test/java/util/PluggableLocale/CurrencyNameProviderTest.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/PluggableLocale/CurrencyNameProviderTest.java Fri Jul 20 21:22:05 2007 +0000 @@ -21,7 +21,7 @@ * have any questions. */ /* - * @(#)CurrencyNameProviderTest.java 1.3 07/04/06 + * @(#)CurrencyNameProviderTest.java 1.4 07/05/31 */ import java.text.*; @@ -48,7 +48,7 @@ for (Locale target: availloc) { // pure JRE implementation - ResourceBundle rb = LocaleData.getCurrencyNames(target); + OpenListResourceBundle rb = (OpenListResourceBundle)LocaleData.getCurrencyNames(target); boolean jreHasBundle = rb.getLocale().equals(target); for (Locale test: testloc) { @@ -65,23 +65,38 @@ // the localized symbol for the target locale String currencyresult = c.getSymbol(target); + // the localized name for the target locale + String nameresult = c.getDisplayName(target); + // provider's name (if any) String providerscurrency = null; + String providersname = null; if (providerloc.contains(target)) { providerscurrency = cnp.getSymbol(c.getCurrencyCode(), target); + providersname = cnp.getDisplayName(c.getCurrencyCode(), target); } // JRE's name (if any) String jrescurrency = null; + String jresname = null; + String key = c.getCurrencyCode(); + String nameKey = key.toLowerCase(Locale.ROOT); if (jreHasBundle) { try { - jrescurrency = rb.getString(c.getCurrencyCode()); + jrescurrency = rb.getString(key); } catch (MissingResourceException mre) { // JRE does not have any resource, "jrescurrency" should remain null } + try { + jresname = rb.getString(nameKey); + } catch (MissingResourceException mre) { + // JRE does not have any resource, "jresname" should remain null + } } checkValidity(target, jrescurrency, providerscurrency, currencyresult, jrescurrency!=null); + checkValidity(target, jresname, providersname, nameresult, + jreHasBundle && rb.handleGetKeys().contains(nameKey)); } } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/PluggableLocale/barprovider.jar Binary file j2se/test/java/util/PluggableLocale/barprovider.jar has changed diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/PluggableLocale/fooprovider.jar Binary file j2se/test/java/util/PluggableLocale/fooprovider.jar has changed diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl.java --- a/j2se/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -21,7 +21,7 @@ * have any questions. */ /* - * @(#)CurrencyNameProviderImpl.java 1.3 07/04/06 + * @(#)CurrencyNameProviderImpl.java 1.4 07/05/31 */ package com.bar; @@ -59,4 +59,24 @@ } return null; } + + @Override + public String getDisplayName(String c, Locale locale) { + if (!Utils.supportsLocale(Arrays.asList(avail), locale)) { + throw new IllegalArgumentException("locale is not supported: "+locale); + } + + if (c.equals("JPY")) { + if (Utils.supportsLocale(avail[0], locale)) { + return "\u65e5\u672c\u5186\u3084\u3002"; + } else if (Utils.supportsLocale(avail[1], locale)) { + return "\u65e5\u672c\u5186\u3069\u3059\u3002"; + } else if (Utils.supportsLocale(avail[2], locale)) { + return "\u65e5\u672c\u5186\u3067\u3059\u3002"; + } else if (Utils.supportsLocale(avail[3], locale)) { + return "\u65e5\u672c\u5186\u3070\u3064\u3070\u3064\u3002"; + } + } + return null; + } } diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/ResourceBundle/Bug6572242.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/ResourceBundle/Bug6572242.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 1.1 07/06/21 + * @summary Make sure that ResourceBundle.getBundle ignores LinkageError for compatibility. + * @bug 6572242 + */ + +import java.util.ResourceBundle; + +public class Bug6572242 { + public static void main(String[] args) { + ResourceBundle rb = ResourceBundle.getBundle("bug6572242"); + String data = rb.getString("data"); + if (!data.equals("type")) { + throw new RuntimeException("got \"" + data + "\", expected \"type\""); + } + } +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/ResourceBundle/bug6572242.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/ResourceBundle/bug6572242.properties Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,23 @@ +# +# Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# +data=type diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/java/util/concurrent/locks/ReentrantReadWriteLock/Bug6571733.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/j2se/test/java/util/concurrent/locks/ReentrantReadWriteLock/Bug6571733.java Fri Jul 20 21:22:05 2007 +0000 @@ -0,0 +1,71 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test 1.1 07/06/21 + * @bug 6571733 6460501 + * @summary Check that regaining a read lock succeeds after a write + * lock attempt times out + */ +import java.util.concurrent.locks.*; +import java.util.concurrent.*; + +public class Bug6571733 { + + void test(String[] args) throws Throwable { + test(true); + test(false); + } + + void test(boolean fairness) throws Throwable { + final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fairness); + + // obtain read lock + lock.readLock().lock(); + + Thread thread = new Thread() { public void run() { + try { + check (! lock.writeLock().tryLock(0, TimeUnit.DAYS)); + + lock.readLock().lock(); + lock.readLock().unlock(); + } catch (Throwable t) { unexpected(t); }}}; + + thread.start(); + thread.join(); + } + + //--------------------- Infrastructure --------------------------- + volatile int passed = 0, failed = 0; + void pass() {passed++;} + void fail() {failed++; Thread.dumpStack();} + void fail(String msg) {System.err.println(msg); fail();} + void unexpected(Throwable t) {failed++; t.printStackTrace();} + void check(boolean cond) {if (cond) pass(); else fail();} + public static void main(String[] args) throws Throwable { + new Bug6571733().instanceMain(args);} + void instanceMain(String[] args) throws Throwable { + try {test(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +} diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/ImplementationVersion/ImplVersionCommand.java --- a/j2se/test/javax/management/ImplementationVersion/ImplVersionCommand.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/ImplementationVersion/ImplVersionCommand.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file ImplVersionCommand.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.6 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import javax.management.MBeanServer; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/ImplementationVersion/ImplVersionReader.java --- a/j2se/test/javax/management/ImplementationVersion/ImplVersionReader.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/ImplementationVersion/ImplVersionReader.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file ImplVersionReader.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.4 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import java.io.BufferedReader; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/monitor/MBeanServerBuilderImpl.java --- a/j2se/test/javax/management/monitor/MBeanServerBuilderImpl.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/monitor/MBeanServerBuilderImpl.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file MBeanServerBuilderImpl.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.4 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import javax.management.MBeanServer; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/monitor/MBeanServerForwarderInvocationHandler.java --- a/j2se/test/javax/management/monitor/MBeanServerForwarderInvocationHandler.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/monitor/MBeanServerForwarderInvocationHandler.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file MBeanServerForwarderInvocationHandler.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.4 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import java.lang.reflect.InvocationHandler; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/remote/mandatory/version/ImplVersionCommand.java --- a/j2se/test/javax/management/remote/mandatory/version/ImplVersionCommand.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/remote/mandatory/version/ImplVersionCommand.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file ImplVersionCommand.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.4 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import javax.management.remote.rmi.RMIJRMPServerImpl; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/javax/management/remote/mandatory/version/ImplVersionReader.java --- a/j2se/test/javax/management/remote/mandatory/version/ImplVersionReader.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/javax/management/remote/mandatory/version/ImplVersionReader.java Fri Jul 20 21:22:05 2007 +0000 @@ -25,7 +25,7 @@ * @(#)file ImplVersionReader.java * @(#)author Sun Microsystems, Inc. * @(#)version 1.4 - * @(#)date 07/07/05 + * @(#)date 07/07/20 */ import java.io.BufferedReader; diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/sun/management/jmxremote/bootstrap/Utils.java --- a/j2se/test/sun/management/jmxremote/bootstrap/Utils.java Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/sun/management/jmxremote/bootstrap/Utils.java Fri Jul 20 21:22:05 2007 +0000 @@ -1,25 +1,25 @@ -# -# Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. -# +/* + * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ /** * Utility class. diff -r 64ed597c0ad3 -r bf1d8af0651f j2se/test/sun/net/www/http/ChunkedInputStream/test.txt --- a/j2se/test/sun/net/www/http/ChunkedInputStream/test.txt Thu Jul 05 23:47:33 2007 +0000 +++ b/j2se/test/sun/net/www/http/ChunkedInputStream/test.txt Fri Jul 20 21:22:05 2007 +0000 @@ -1,2 +1,2 @@ -Fo`kMsMr*sth,dr2oD]eg<N\U4KGXn2VQ,&'!;AW&I["@nZQJWPG$PpAl;1AZ@R:DZ4;<,C-&1H7ZAjAq7LN`NV[,YDa^JKW_!oW6>=tA9q;%*^5$1[C24!O=7p0LB8c6EQ:bpii++fSJsNl3$mN#K[2eL#%d>c<39pV55VfO? t5a5 >+g-X9Yc=es5sI-ts)A9R5TqE?/<M.C8Zl ^n"s`BDQp*W@oVW;]I'.h/b1:4!=.W%/01LcYF7=Um1(.GNWiH:Kp?Ch12Bg[5M`,TTE5TN\pba^I;oM2Z*KqR@#RqN\;Cb99`H0d5^K*=fJ<]%Sd>i1hpA>313bbb#MCtA</sM^aXko^.Z7+VJ+(EYJgJ;j*\%5@13(Wd^;PcjC44A  I$8,VM>Eg2T*ancMc.8]W(7%'g.#VpQC!2AZ(0oW12mIhnJ-G]D;Q6OF(eon*,UL_H'UE 4Y? 1?_,2ia$K^X?R hhS3!R5BC,T>@#rs1 gF*lPf8,*cCi:nAaE%*,qP_ofK]hZ@>cQ?A;,EH7fU]GR2p25#UA$.oE5/ETshg=9Vk_;RC#<^nK?)PKL(YCWdtBChB*T>[%;/@Rq[Alea)>Ib^QrKHG2KcbE0mD&/'eS*tX&\8+U,Q#Zm_`8?%In$FLme]D% ()6TEs4q.E.\S$= 7iO_5W?K\UA2:WSgk?-p@=SQU#E/1!4.@--8IW]kLr"j;$TCUr,R,s7OlD-(o#dlEef9VK?'53Xq]/3-s!3B?ZOk&d'a*X1TRs$(?O`DTmX3mPX,>=,![AO/gEO^,W^00>Aq\)M=a3:U`AVleR6-Y[4qdj1Nl,gEDi']t&><6n0#)'Z0Ci.pZY$d1A4E?FrX9Blka%LHWMd ilA@#'i'db3# ]+Mf4VRQn6'nXg#E)I(8<5I&(lT5Y$1s.5[0tYd]IbLkgGlt%?^MHq!k!h'FP18>%"oqn+V?WXAK,6JP\KYb5jIJZAG 7F"0a'"A"g<61lB:'^;idCr*82Z>MEOCeHqH^Se6;OgKSWR]"Kji7'1:VI)AC"nA7mhWM*okf"4,G7hm:c6B&$3CM.8fIbb[kPX',j^&K6"IoHXPQgY>@E=HE0-$10tpQ mXol_g,-rmo11C4F3b8t;@JINZ.t#TT7eG.+CjQ&NN)IqI3hE6EF'h)!f6spqV,fm4`Hirb'7+pr8Y,NqR^eF_23mt@C3@MGAHm0d;3rY&+tsK(BK30:V]"gTpI=$ms8j*+qddro#A(Y64/i!F2PA3<9/WQX?l6QV^V&)m!C]F$@ 468?JD8p``2c.;]3mkp)Bl'X2PpYSi+[t<UF\X)=EGfr K?A/;Dgq)qD4.4c)7Y&PKg>Es^%2h ,)YbjfMA5:dYE'1)rb]]/j1?:Iq37N8f.>+UQ "f5qFFYloKPQ`I#0ZFLrgQ1WQ\:)L-6\$Q1UDgI!d,_#),YE90K^EY0*0saQnl48<1`(@3L%LshoA?:5Gd0,6/b0!pIibT2UW9c()EH0.+>aoE%`]e[:.A!9^rMan?\peDIlNkjaJiX-=gYcFoXXbTYD8+Sp8US^t0cBf3@I?<7&f 2%n9!]t9rF_flN_U)74!ghb.I!'D4n5dim##5j:?GPH_3Q;gB$j'qNk[H,%n6dc0aBl&>PN-X3J.[pNK 2S'oEm_dsA1&+b`$3h32%m)"QNiJIWX9%*49_)I&ARkIm:gM(Vh!$bI1iSC/;/efNr_`sWbT'>T;fNIJ<%NW0%A)]npAdI>\KaA[.G-8An8&VN6)A$o4,@31\];&k4*=*?pasKksN1=1l-ISJEY/_`=U]j[Td-9;(OFh(IHp70H!2kN/9to//b/_ar&/Xe9CmaqX:`X,S\^A+AQes./s'F:2ZMY :m H+3XS)l35Y]AicKV"G?4XERT;gD?+)S.0?,8X=414C$hD`@?3"Sc/s>A[bFPR^]CnN8ml`[pD$q%M,aSCC$b$#D!JN=;^9VLl>P$8s).J7tC!^LQ,c4dPAoU,M7NmQk=90>$=:&_J;s?Y$/#I^h_`%2K$[^S[7f=Oa21sm+aM=G89g8RD:KQ)pRKLf'/>$ciA'Lr7+X'%1D+6hDh@8G#+B:/_"EaEc)VPU$kLC32rR-?HCm_QlA2Qlf[@n^K'OC7CDEFI]`;C5.EQ$V0,V.<E#;<.J8PiYa`M$FYCP[8$3Dif8K'RSc@r@MF XRPUqE?nmRhVE4D<^[%5D(^.>V.t4OQ_mqq37`53H)8rAGPldR>'1DEec?"2IGY,ane;V7C:K/__[:&<dboAG@@WqJZ:3<^.ffSXTgT(X./0T_"B06!]fejtX+?"dGC#nSP\JUSFU'mS22bI#WAp\83A2T(Mah,S`@56_B\r2.1Q9=f(-6K6YZ#Gf\;o,  7.cIAMP_(5X2O("&7fr`;lO2!5=W,8`9`s/6N!+6+A!PJfWK\A< XSr6gdpo=eE!e1jqMR"ptea0A+i[Qf<Y ,)YtQ4qA7e+#E6pcFs\c^_-Q(Y3DN39tKGiOML4ZJ/]jY*6K("f?j]d5Q`"(!a6^EnhMXs-4(YR2'J@A!hV_VYI.'P,/ct:aiY%I5X*@<Xt!%`[GkeOtZa[( XBpK2#?$1UiL2i!?t8SDQ]UBEW@5SN:$qlSg'CJ>p4G44h[U)U*4s.C'ieWRf:.VF]R(Q.iRPRAi0HUFmR8GAtnR1D&03T):Hpn+RlJa>:[U<*83'R8Fr%W$]?l)KANM[Ttj gKAfib:.oo,D?jMTW<3DIFMR\io*NBBA$.9'8A6g#(FsamZsV[>Ml`Y&<W"Tq)i8'ROHA9<4@#a56nIM,ME'>LJ18>52+]9pLqoAIWG##HMS2`^SX$'N0dP/)7*DVh;<llE__mo^GAHFXh+,nhg[,\S`oWd!dH+iUA)Cg@qlT jQ?8()W2`0RA9_i Y;!EBdA$_[IX'ERYmL[MkeMnHN0 R"8Nhn7>%)Hh\ e7F@VP61nAQm%^$@;fs\@mrNC5=Or32)c[O6G3#OrFN>k;m0oPe/]0!.i=5Qp+Is@bJ<-cLh_.Ia91f6M+7l;+\mH7V$Ai"4mAp-#Y(jDKCL:4Vr!h#k8R"*n88`WB?N)/o9KG\8A]PmSnj,=q=h!%(X+*%Z_/ApSK0`.L;*%@G22NlmG='pP%,JBl$WZ:AS)rlaK/^(J+B^6fW*E C37[ae^A]L@g$;/Ho)o)1:W6q>GbC42!!oDY5#cMQmK3-<)(m#=s%&K37[:CU-hm->V"/AM\ 2BfkNtlILl`fPWRG^+d_9rcNQFckrMM.!3jP2V<b(:QZiAo6XdK KD5-f95M&=Y$'1hV=]F?b6E"^W.I2<7kgnUQlj;YQ'W8NFe?Pc%[Z^BEnel*gUJ:gp`7lGRfg5_YboSY$].O r)#c8_"RFR#WEt(dQCYF8h;ngfPe^Ero9^bWGha"p"J]+f.<>A`G s^Xs9s%I&aF3k(BC@WZ"J9-425-K3884cC_#0Z2 >%o&UIrn.]!F8I#*Th=17cHo>^;_8dB:>NMm'XX<sZM8$3UsY(sJ-An`L0_.!/GhED.&$37=>@beT#@YdX3DFir7"Q'tVgC2$3="Ke9<0Z/i"]":tD-/nfkbdT_X/f)ka]=.l!c?IXTW,9!34IK/'*,/.8OA`8aoXCBI)SGDZdi3b?a`%bI;nNAAfg5KXSC8NdCa(!E:T*fIo2V)8Q;j q<42ACAa.4[Y@<OX&G&JJ[bW[3;Akj&&e!.;;=)abrA2*`5TQlbpi!?P,f_eV#Tt G!rd bi-Rf'-p%U@V7Q\/I?J+mR0m/p6VW4g26;7BUGfQscTe-Af]R9Z!B&f@3T2^G+NfGDgHPP!J,Qi5oCC\$B@I3Eg/6D3&MOfs$K9V),ESse*!h_BL_h-mA_19@P&s3i_0iHT+8#"? A)te`srfDN:Qjr =9Q5@m&S8U*eG`k+UC@Op]SVZp7bRqca5TaQ@_g,K"O>Mk8Tkh6K%[TeG=k1P'^k4`43Kp'N+A3+'>e M>-a!M@QEPf>BY.M^D#@!8RAn&" lZp*=gJD#>l.44)c8kJ0EjKn@q4]@Y"mKH\t@=Q!ISeN@[A=q`kl;K32M1r$LV+mb_ni\;IE,6>d$t)B ABH]7&-OK7"('Usf4U>;ZrgSANg+q7P8tFk0)r%3<-aN*%`ZUL-142$\*VD79cs,gWm0n+DS7bcA,c14[CZQn]kb/-$nM,K;F";E%4X[R#GGdpX"!h`j=A9_%pt4mZ]LJoOMh#$*nX57JktJ5HI?#ne/qIMd:?F9:q*_UG%ILCdH>fQ\f#>Y7OP(+"C'HD9a&F`'6ir+QkiB`,/EAT'IaBH$'gIAGL>;RtSL"1gO>XeX.L 1SZ+A]31S4W9T>4EJSpPk<4#("#CaOV>>iGftc7?5[?(T^qc:kl2I'#.t^6,`H4W!DfMI9oGt$p0>5f.Z>JO`^Be%q=/\eg]7MaOY:2_,]-,b!A;;_OR A5P.n%Z7YLIe^)1_$N$?&>oA6$59qS8"@VbD8bV:ON"!]`jC@4n:6eDT)3E=(orMJr+U/U-E%h*J> ]QinJS"Z`-9QP2rBF?g#8m PlBDJg^)p'Y4bRk OZ\`0<"p0#`FqLDRa_Md",AR>_7tqgAI6q>F\ rUP2h6P5Lf!WmaGeslT$$:km:"^b98>B@[58%Vk8o[4,3`i-j`:lG Jp3Z@RD+o"K;Oo`cgPBOm:XS[SO/hl\%V"K%rXTaOdA?!`KL0[jil< IE9'PaXf@/tA#eT'SBZ]es'ljk^/f?i^b`k`CeqsgEah1N^_qKFOQ:V,nH;?rWTWAh8@J)AJ-fdM.Ub'>9`Ht>[4A\. HEF2YA9)_X3L^H[B`)dO UYDPi]b&C`-AD`ettad@A#nG>L4c\Wcp"a%d1Bt4"atAn_#%3>VCJq$l$>O^!?$WB17E,NMQI9hqOM,Kl#0QC)5_M%B2E"K7Dt9XK[s@_HW( Xp8-1+,k\hs [i?3?4XCQ9R@I1c,D4?]8FU17BbSEg^J]H'(3&Hist50)n$_k1ZX=$.[:O6R_rL`V#&"GPi(Zk4\Tk?UAZ@,gt)S#c&n/KSYnFGZjs^cACm;+eP6F^)MAGhoqV4`@1%UMmfNba+"& 0sY!5$N>XYCnoO9^FI6'Y >U,i^S$3>sW3#itq3RnU@rgE1^8\UTrjTcUHbl$CFC%)UY[P:8'M'a6^1O4Y!kgi@n8:%j^P-cslBH*r,-Q"Psn4bKbHHAUVLl%F_fB\P<sD$^O&VU,5Xf';b#cibEC64s c(Wl+T+UE&N,[r6Z`Nk>h*jme`BI1EhITO9_gA%]A"i<37)\jY=sD8sYN^9XFA/Ml<+seGea<.6D^$UC[=X-4`tk@fIXG]%M_h:kVC\&C#1j,`E;2[CP_;_,SHb+MHJ][=@?Z\J[!ciZMSC=8T_P^+7+4 #0aMJB#M7+J9Y(TrprMRVhqp%6n6ph[#A1N=8i>Md4<b+GoT'>mPMB$b#AdB5bdamqKn6.so 1O2dscP,`V1#sAjYn-$).Ao3moshGH`Y^-a>1T?/^VeV aR(MfbU*_)lDiE%8OlO?pr$ZfBJj5#^-GX'h(lCVdm<9)q".PI$+*5j!p_'3#>\Il_VpFG6Zjia`Dtp+IWhr@EH#]l0o\`js?_);^=90%PE(m]hA-Vm/r)\W9ENd*Edn+NM,G^,U/n;tA^+RQIGfiB9s5o6`RjM[ALmTXqNm@Z:O<6NTbU`)NOr.a:gm^b_XYn-Va0`;P? RCFlYsq/5Pr%$G?r^AZAE&/d*X7AYM\AC,Mes7G -Hb0B\BfX6kcUaJ_5[W1+lp6<;T$WU=C&\hg6A^NeR%bIWE6ZjlN\:k&Kb+<V9boOA3We'Pp+PkF'h5^NrL(PC&SIg%Y$%fDpJA1Ol[+q!_>B7A6N4>?q&C-pLlqE@c)j/Ml\i'J'\/N4((UnMeLVG-?rc?_4]>TAn6!eU_:tUA?OYrAJ[:n>nrn>tOl]L,L3tb%q1"TKD_Ggo :+r<+/L<-QrHM<=)i1La%Yj*#]#`akcXI$cXUbL:=!nNd4$]flE;,Y4(i51saE!5.n97EkgA`IQUb$1s_<[*SpA1j/,IYK=$^.'*J;^U1Aa:r\*[5'BfPm5i\R:Y5N7XT*fJ;m"f<-*_ ePoqPlR7d4nX0[ZP'7CSd8!faj)#/6e[R+!^]L[R:N:TNV!(Kr]OV]a`% 'I-L hGX.orUtGE^39%Nio,O9MZ;+bHD?BJDBPVAk'SV%5rFKf"?[RX`W\t+Dp$)0NZ_IgY*9I"+GSj3NL[k%HI-fm9A]*9\;\>CTdiC02j0G04t_2C)XN&a6!NCi&_[W*E+K*."oe6R:Oj2/4rU6PtGm9X]s>ho)^1<44a0AT%ELqE/-UKgS#AB$kVBmie4$1Y`0JHGlRa#Xc:]60EN9KE:of(H;ElD[-b]C6hOqKdd#&8/Ct2<^WG->k1N._J]6)TUC2mWRXrPD"Y8'_,rqThCrN+A_oEMMkM5-rY2:3Xl1 @J)D=WVEo)paNT7\MYaD^:\WF6(/m:-oEQ98:]mn#U2rTqm7W07fcC6V&pFWgZ!A^-Ri>AAY?!!sY[:h8OB'o6t?3_]rM4^IfRmA$'mPB<X2,@j62V_BkPrr/6H*4NiF23S%(,EO!Q %$RLjP5X& dHpAUB h>9RjB34sA:CJ(R;lN6,kj1<ao`E3p[LNKFk4a!+V_Rh;;O>&;)P/*^g?AAiJ`@*k?1A%p<4%9L2R:C!fReCA[f#T1C6sYjI_D/H`IV@*N6LX'`m>\qeb %'3.)%;s#s!6/B#8dd`5di,iDPHo7MQ$AV=J+V0:(\<8fZa%E@Z7)"ZlWG4;b.0*S,<"K9#CihF83rBU(&mA&5EDV,'WJ=3NXeAW3@.j2/:!+an"I%3q(9(kqZgY9h]q,VK&![P9;J=D07JI_\6+/:21[RBq#4%?Fci'2V,<%6krSb@]jEo:YMGB7P87$W;76_U"nHlgO2 o>'[KdHeIl+n@'5[+Bd.^:\Jt&\Ap\RO2Fn5C&`omaZk:sGJj&_SIO0P-Cd;G3#j(I.Z=NCqc 2%(:[0hN1FV89i'a+ed49r,f\kNa@_KE*@ZZP\GFNRNQ;"+ghd]$LgM%3U05!U-$#I2.6 GM.Cq7P&WDYj$qd`V_755b9$K7,9(Sf=6>@J9pbr+RAf>A74AV_E>Fg]^+-0UtQi_m3+rkfFFEr'<%iHE/4B7N'sRWoRIc*U_qfZ(pFqp,^'0-ja;tcTHL5:+gJPb_qrZl.X(/0TeXTVZ"4AR/'lPAsqA<$@Ej%/0XV$:][.2mhWZ]lgQ?eD8q:t>_himc#`.>6[$mMSG)7CZBZ\e!QI7U=HDoP,3)B5C7Ulm`8l&?97]9bV$) c*11'-:+% f_[-8hncgs>Na[J (jUgspZ80?Ia_'AV;n/VQ0I`\QC$>`:PG6t >1!Z%s\a(FNgB;;HbsFWlOV93M8[Ut%f/AT2]4a@fo=&HiQ$Kkle-FYl a@C8F)*S;lU"VkdR9\LfU/TT!@.L'+ZhI,!?G3A!#@-h)^!B?)c>:O8cA4gUgeE#kH'\>E:`Rn#i!@2,*)H+HVeRB,cATD8U;RsNOXr*M;O+NTMJGe6$J,BI9'cg'=ei>U`gN41oN#SSV`o[8aOLPjsb0pL^G#MnmAgsb=(`-0T)4mP2A43]F!Uh\hA*V6 9#@Za_'IE2Ai;qk$JQY5>o;L)\]:h7Z)^G7#b'r-KqtTi'dWAC^g,"^i)abIli*HV@7rW#;[H.^HAVDU0)J:8sn2XK+LR._$[Vr,4Eb/7LT^MBL3gcWI7E?sZRn0YPA.\N%UqZT"H:5"Ha +4&mLinhZ%SHpLCjG@EpaTt]I+&VgLL6s%+epH56Rq<iMh6LE_Js\!*V6EAJ4"tQerAf'c/]icOeFc]>qJahlBP61.6Zn1e:I5 r78,#,F /3<;SFor=OJLpMlGrc$]/91SAq6(c[(Fle]DE#!/r\CdaCl)$0R$4B-4bm4dX ]0#T,5#9#(`J,Aj?&_%EcpA7_aQJCpFA*F[0r;.q*f0>3$$!_'tRVnR?Q$Q"0XT9?Tq+c_9!_^8eph%AR25K>)6T%F01e/>&b2f]l+nAgmQg8kHb psX3`)5MpE1O.Q!"DT'`;7A-tWqW@P20f$$T/a>PebHtn1!qZT'&JHqr[&'* =52"&7dpe?g.$o%-kKF7q,O0.i?lc698?&86,"NdI3_=M]nkAfAt(7"*tEfQ=-K#II_0q:N.0:K]80%4=JdT[F0n":o%VE& 7;;]E)'rAS_Nc-$P\NppVegCjTY>\lcF!%a:rq;9ndd'A:RY&IhG`p5>>Hj^/Wpn)7-f6$8A)=>0+* 7$4o63)&!i-YA,0;t\MkD(AgZah_<[k0o"0]af<(rDd%XfeBU#W/^QS!LTO[PV+8,jY_N*bApB[$!`-QWWA#H->hAJRlr$UQN(hAmmN\m!Y3R?nY'"`Rr4e))Ys@rQ6(FW9+m(8<6%1roR(^ERjQ>Aoab3a1MR=_]O/h4Irsl=W5+T3ZFSn`X0+r#O*iHD?bGj?I7m8IpjrFoa5J\97IJE66Ob[-4N_o,d-KP#PmqB;G=fXB8#]1AL7.HQoXm-[$A\\CQb)f*TfEH1Q()dJ?f&qZlmRo;a%-LnqtW3e&5PgT5d;Has=F2_VI@'FrHm,WN?2 *"=U `K'P$PchrWcdt L92Kj4;kTH=#?H"cf<@iiXjA_QN^rj4qLV";XPD9j:bV01]`34N1\%DX/Ff@#XBI/Lo#c QCoJ\IZ$g(1KG2#(:XDi8A.P"d,A_68DjmdT!hT<G[=Z0H@%j]'jQbkp"q)+)g_:[AYDW,K'LPY:rM4t>.V&m?$9OAM3$5kn+,%0o>W\pIXT`^5!6<K>k%@p]Ybdg-7nI"A9V]]2SWb!JA!k)D#W8R2B'ALHClX$++inHhl,8AXH!U j.7%W"Z6tNSf7STULk#,b=c2Y`\M8=j>!LA\i$qn8!`$El*4qXlSbfb3!aDY?2R%[1R5Ah"'$$j?8pp1qtA'Jl$%CW/KX#QcL%9a)['lmKB/(.BG]:TpH6$]M$P3\E,H=El.).V_g'G(SKG/>Z +7Sg  PKXjE]t+.WS^o8?G+9(9o@9@1c?LgS<$&?)tbb^'g(er+C2@fq_->mnAkE5cCn*<>AI/KAoGo>9TcH+h`Wd? FbbjTld6Hm+oYiT&XBq+Tb/Yf9BTIB^Ch`AZldmX'?0WT. @VSl&XcW:#(FW^.IAG(a&UF98DfaUc5>!o9$?$41o7OMdQN 'CCF=3n9,H-GV1:C2fre*/DfeAAgS<E.bQ^&4b7:#ChiO0/(Hq\S%DaH#T+7lYsIUS\"[Q60MRkTZpC29Uam&%?)2LniR"^$@&4Hta5=hQXj*M_EC.4DGJ0,V:>Cp#^OM0Us`WMg\KO4)#5VeCjJY-3Nn8Z+dM8HLr;&bU#`l<.J:+WdI9TALi7"Z.An&t-&SVX`XOY)D:7Cd+Ddfr!Y-0&jr9ie)OCg-)sqid!Q,>ghj*.<4]]ft=rY!g>i%M`] kX-bg;:*`c :*FpCB="6Cp?Ksn1E-$6*nP"]JM1==QSeI5@A"1AJ/Z_F%\AC')E3ZqSM3L2.IfClYbSGOb?aeeqJU!UH_2PI2IVoJ6q7pYVa71dJ%G/foptEZbhC#'i^4tPXI0= KDT Y-TRaHabpCCf="Bi`+t-V#dP>j"+FJN/KL',;Gpj3Q5Vfn6i?8El?H4p'?A"h)A'K%Sm^r%a7-\YgE9pLcSV!=?p%(7TIdC,UJ?]b+L0LJ3PEHeXZTr].8CR?b;,t4!C'>Z&UEGNT$PlIQW6DSsF;WeM2&o=mUA>cAhf-i$qW*KB I)9.1Ae%^ICbAe2h7.Z]$UQ!@G,pCLD1J>:A#U>hg/fathk5@GnFm"/:HW)V\+\*c)m2Jk8DoKPOBc7]fSih46G/\rq0&rm#,G3J;E-*rDh sS= *C%f.NATZooQ.modqS#(%dHm;?a4d&b!XWgOmKTf"q9I -2%%q,8R4,J#$5gBfZTYMm,tq2SA+ifSo/r[#P]T^7eX0(.?F6`%@`NXKL=PX\?XR7=GQRsCYK 0Q\S/ZOS`W`[9W)X7V_(iTHfR:`>AF:g>b LA3A@>8dj3,0ned.C9%JHBg&lDPd9#)n\@9&p)jY]=s!9 :qp)mJ3#7,;-Nm`e9lY@:m]"The#>be)i8Ahq]g 7#C_o&cdPH13j;Sp$)0sqL`Z.WA8[L%sSPF@E-(\S\9Y(fRCOm4p#A+/.-O(a11A$tQm_(R)NjCW(2f_' ofHL0$??.r'tB.`X]ZTY-740RoY&iN5STW5I Y>I!rPHtYX"Y/ ]m]QInX!&K`NQRU)A>OG5&En."WC4<;4;\=BB.gia@?>Y0'ASF+mY*2#Lb[9B#JZ%RhJ<>fc!Ae*daYAO6gYGjGl-!/h69M)#jlf86;rhHb)i)DV\@*_9T:__^KQ^l @<85s9 M6]?eA!#Cps.,Y$ e-f$32>G2bhqZA!B1LIA6@arX(5L&:e!eg0X=_bWcP-%",09!bEk^C&Y!irAW36XKqV6/MbI)Ak![%,TPZ/AKX0]*\WPq";OP*pa)Ki!,)$\1N-X$@M$b!8<;O`$8OZh_`N0mh_cs1/7&k3=["]tI-OGV.oYk Y2+.riBdRQ7k\d8GFpG/PVm.]tlq>RU!J_h'fVdeSAbW[^.iXN!f#;cO[m]U9NstB?Y`+Ab(IDE;'P.!Z\N@8!HZ>d>(@m"p(lS4/XIEKNZ5h:\YL>SWGK#]2OP.q;][.s$84/9FJeN')"(&q42g3SKpVUbifkn,mpIT- @XaW8j?_3AJT:Voh==X>+ ?1)iFM(aWV4]1_hI,\Slc#pWkThsicBRV[AhADB9KKPUJ`KL$eSSPC/['K8(hb?AE3^sJ7;;oEH6A8j$#1`AQXq]ps9,Ap08AYc/MO]IfN[.]7tD;U%6lh8;XH`s+'p4diRJ%oF_4b)cOH8 /J=sS"0kOl)4^H.]mP3:cCoJ8V1hl+)+2d7W Dt$0'FNfB&5PlW9$M]DJE_D:(;N(?$o&d,qGsnX ;1dOdm0c.Rl^Ct/GiDTs&^SYV.PW$"J@8 b,>I-<Gm&@`:[p6h-V:)e7A-96;h8:[364n4pA5C8I3WTj%5k)'[,&4>:#.aEXL8niGh;KrT F$=M/DjA'3s5/9@r1hqn@+HYf""RWe9Afnlh*\tg\T$X6dE9C#q[\0\:dFf4!-]NS4`VIJhs6-=6e2lT5cCT"24i5G$]2n^Bb$3$,R6:ZKjn@n.A;.MEscbH4 DdA?j8O`!mM#7p (Mb(4\qBrt!VG>>(BIRK#@Z:0AcaHk=6AL-/"R+&S!c-BagoA8,om0\!GWbeO<.R":,J>2aU0%PFdYd004$69J5;\tLU!5Ym$k)$!cm%OR%btd4g`bla;Q&(f`X3:4DeNTAmo=m*:p1]Al3O5H8,'4G6c-h3;7n>Fq/)Q'@lk!K[k0:eKGq8'^Hbjj*^%?XnWb)/soo."AmJq]dI[KZDV&75oA*F:"*VWY1d`DAUtYXFESlLQ:A9c_qNT^NYs.-:rZkgJ".PD:)-#CMDPjY3^/mi\s+r67s[c@V=;W6e*^PJO9`@2fPXRojZ9Z%1+:OLf?fGi)YF]!H %Bcbh!X*+F!)/)#Eg+Z;c*f^&2;tm2;slJSP2a+& \W;9)_LH`"+S$tAU MQ+dCr^ $1(AY!.b-2ce%n.dInA;#Vipko"dmU?'\qoV[ngS)K[\IhNC`)f:On)g3&qdb!?cQ&r,.UoSd%9KA8O!L([*H.!:j;cE7V65ae>>K)=('.65D3G;+]qYa4Nd;5l+PW ACE1@pAZ!9fj`ksP&cNdARrG dHjaQ5oVOYpEt>,V3SV /T)`t (A(e3UG*B:$*U%1qF'.Y&@4m;$i R!&GXLANqSP^N1$/D5SG9AP@nCAr=gHZ8G\FWrDbm\'IM:n4b!oXSa#UmqGQ(=UD*99GH#2FAcmitH0)]lAfKB;T<fbN'_q=TPt.AbP]s=6gRTsAZ#aJ&+`[3'.,nkmM(M)>S5Q$tR],lh]mC$AP;D@ULc0jXAAT>pBH_EDkoO7H2_oUJ!P@01V94VqMXTS"fUAS.Vq8W7*8jMn9>mJBQE0?C@1KW>E7_AGr\BQ+q/kpCe2B@)'1.3pE0P9NbKC$`5X^'*+[69n.gQDdk!6N`c(r5CV8O[#$Yh Ur$&Z?,6iif)l0lTtGi%Iq;+L3_U>Y#*78dKr,BH6An2gR5bcap^l)Y3!c&>n<VT:7o<)r>.ee4 aE5AcSdA>MPOSQK\#=r&1"0_S^@0*e--@bKC&1Nc"P;&2Z:GGifAL6]:t%t"Y$9O#GW]?-?>OCNKs A@-ekH0m`@*!+J>,/WJ9]kt5tQC6j+V'VG<.77h*g&)+G9nKA#5TAW\ti)&M3$k/7W?A%\=P*&&L]kY&rKk!kjTUl,N6R7-cPUHak5odkeHZH9A3V/]e/;fYF-<pP^Vka]?L%Wt!> 'JSsn/16VA/c,(-q T)"`=2JkBj^:aT8sTp_+2o%N:b%QTZ\gnq"t4D_1B<2AXOUM;O4*Ak@I\ENSP'eanE/Y^fL4TOAcV4an>(*-1fPMHG=)$j4j8tKb`59DFSA+QR?.;n<(j:3sr33Q-o]b5;j^l<-Ua&+5%1?7smY;jbUM/7"Zf70BdK@GnRNi%\2A+%S1J/`?(NH8JFjLeJ Z9$Mq986!Pn6H8E=Eg=k)e]>^Ad=?#rpK+J^5QQsb)oT1ch=rtJrj.c+XK;Mk_e_dc ^YG[aWPCZd!n,D+1F=_O\K:LU3"G'rFViOQO`B+PP`%XRnoQg9V:YCrJjl'rh5"HeFCLg:B.Ic7r:&F($UKC>8#C"lGT*p!A\3'_A*'.InVC1n8Z@F<O&B45YQ%bA*n<&r7.WlfF@>O;Iq7_7tWk:q")I#=4mK(56h45X,q,9s.lG#mPRAAfs2l/8MBX_na39RX1B$7LKc'&?bV/'g' k_D5I67WP!W/a'l%;ZWeAH"f7AQ;OA"^*oPXQ%;8;iU46BOD>lJO;8k,[Z1W`N'Bk^0Q_7P<#K%b*cpHlEFaJMNaHL>>J(p@9OVAOb8]Djdf+69iccX jG1Q9kqd*.,"lmC3"mYNY35[,2A=oIg#`S8OJ#be %49a81hN,bj1J-ZB9MYg,p*,1gKDe=>lr'+(fb:U#_eKBV(:H8\eY-Zs4bW5CLo:PZ]&V ]tV5`';2A@r:h;k(62p]F.ga5.r%EH)=f=AlBO-d;9*;n-=Ztn1@/-,7Nm%3t"^-?+sTCNYq)pZ[R#%BRe&5EM98USIRnH]R,Ij[aJ5#GcDL1P2'U%1U4B-0pLMZ:],^f*a)tYI6->6F]]rp*Fi! h2_=EaBn5D)(F?1amaLA4)UZ)\;;4B8F8PAa#XA\=$>RK>aPcH's.cHKk9o9Yc*7CO;(m<DreX]hQ>1f5^ZpkRf`5#?(],]V@j"JEi_U&+ec^F9L+o6S`$P;g':4%8ZIGG_$22bNQ589\KG%;CdqrRWd"f"GcNj&-$QNs2'2=j6AojYZakT>_KbC4HIT4.^o=ES8*5JZ1<(!\Fs8!r;!:!@U[/oA*I:AeFUE.UE$^[dbN6./B(o+&Khj";/-h7U]"6pb4W:3Gd^'+82&iV6L$oar/'MR?Wo,W"@YY&)#&_<%eETG(I??e'7cRH$>%H&b/BCF"pt+97)2YnSV3Mc#`m#smn^Y9jpKoO=e9j+fnJ+/V]Fq?:kpU(tq8hX\Zl2#ppK'X.Xa2UdC95c)8D?q!AQmHL.qh+?a.PN;ZHUmo&jm]dEnA] fin@9St "5i+L-4s,$sW Kt^;[K.q2QQO`?!m\?:*]-j;5\Te*TYd[R*#XE?R%JJRX*gELE/ZOMoP'"i-U[8We5H5qOj30C-lI1\#MAo36hPt.caONtgNM,:8aFnFomY<fHcg[Hl8P AV!IbYROa,4^dDX__$F5)S)b2e+73K [4#q_+mrX?'YC]N2RB0U(S&QQ hOgA,AZ0`qb3V'n35LNK?FZT]%o7_G4B)+dH!WFj;?`(OA0p<tr_D)-h+-XQ:Q9,UH[4R3M Xc7#T:Fe&#h<:H23V*WWo046t0IM*G9$@%ALWR2C?ADqS3e>4(g]IO/H0$Sc3nH@nd0n)lG;+$%`nilmb*S[gZE0_`Rm/T>RR%">8C$4 be`Y$@Bj$^Sdf4OY_N+C;K8]fi!4g3cF<58F-dat-XT:DkVSopo4.^ZhsjV/eX7AEPS2FVgB$'&Xh=VSM$Ik07PPW6ZO':)3Uf7)dOK8jh_f3?H(Jr=J.LgWnT1_eA=M1e,6f!4%<&&A2&DON;?=N_kWlt\Kag$9 26W#;7 crF(` K+M`V"PfX,K%Ul_d@0i!KWfX*OGp4i=EUbSAqBrLALs%[A.^,l0Al?QEaj(amk)]FBXCiYK--?0U(pfC?q!+_=@mSLkXrK'J*gge)^B-a6n'9Hs)75QM5+cQ_[B^[je,\&h0,L2:n3+V:eA6RKlQnAh^: #7oU(C74=K*?8a@iMN 6)?Y2imWkj)jL3t=2lo%-A%Gmm6AGXq_4!Ebb6`hLDF-N:dPU-j=o@5]'ibipCDlZg8,*CGk`A71c00>eW@`lpcN++U?e,n3\;Y#a($_>;^HrjD$XkV&[F,SB1n7gSqmnJZ[Id1g^sl*\E]lIB^ROG<^fcY4L[M^]n*O[R3GnNg9P/XAAM=16F,A^VM3/HLLO3#gZ!31(_R8kt:X2EhY\#6)+[`Q$B#C"A7-qpb/JiZ$eMFkn^MD ,TL4B?tXT&-c,/po271,` L:QjqT/q!K'EqA 6n#[#UY9n`TOWqC)=[A!8`QY#;#:fLP\"n+9hd&@S8&98>gA1=@,sIE$B1.F\m[c2-092XJD<`_R109#40(RH4j$j'(^%l%LaG[tiNdNZd*L1\p&tAXEZ$g?Z02SLek*3eor_IN&2ML+)kQAg3r8Y'\^UIW-h=C1`3]Rm:6]k..&0H*fa8l.nU@9a"kZS0BW6]KU9Y(_gF#p kT*6NY\(LoI+>=7e":1nOl4V"$!IZZY,B8hj6fhZ7>HA^rt'%q(_IeAAN#$#"8MFmA2qMckc cP)2Nn9;YF3LqeBr;(\kgkAfI0eR*@.h`&A+`ESKeNB"7q;S,6E/B'U'\'1FYW[5,sBM+KgV1A\l(q.oU7(!F0!T:g&.X(<$bD-DS]3Cr[2U?^/0_g%5=6=#cQt:]hj1O7-*[drWco:"b>R!sa"'8k_dU;QMV?:lSAcFDAaK\bO':MoAp_lAh`-" EqBL/@I)1Q -:'/=tR0A#;9N?(II?^7"Wr8-.@_*/KdAbk=Kb?6/5k /l5J:::)1cNJBbV/bC%Gf<"1r>kprV$Fat17n#07s,X$5"q5'M'%q%f6Y%r'\tr>+\UpOrS;&:N*0&?rVlQp*q:9LhNVteW"%&_0nP]CVWeWYb[mIOkkDfKdF9END]C>(/EUcC3'KtX3)- l^9"AmN>%a7htW0sKW>ko+-1p0A2NPU8ZpPV[sI'QOYe4+[F%aIY!jA `E?h[:=BrTgJ4p^1d7sAitnEHsfm)?\MJ1WA/Zim*4V-B3o'kMrct@h.>*OB-/7YG=)EW.tj!CpSYMa>CdEqFI@`1G#apQ/J4LV_VFO/PS]ZRV;s84(hSM.n8(`6LX.,jiGkF5,*UkI$H> /@ArY_7EOm)/2;6=EjTI&*#\e'#*2*>k.3T'0C*o0^#OHh[&"W6Eo2A]5GB6S,?"m$ER:Pi?aY4pH?Z; A,m!K+sF/-oB >-Xh?WQ'TI)L'mBJWWF>%mY!F&X8ZZ0)q2UfsSqZ[X:d0[4EWb!S7I(,FN3F)LdFX^3:`EhCO=U9>5.6\R;PF;)`^3M4EI/A b]Re\,*TD!C[T"iYIj^+l.tUG<0&ID.JdLFEF,lrZogh-JT-;a?2`HS7"eQ+Ng&icHUr[3kn'?nNUVD /b@7[cRe(U6BA?jmq>ToSn @6G03!ngRd&*ZKo'Ue,Ll)_2'- h1 98UTlo@LX@i7hgRUb\trHlfc\epd$Dd'=6=tm#:U]S;d(`ABONL L6q,6lVID;;TVbZb3oT?#!cjhA#S9'J =Iie<3KV%eXg9ST cf%hT!aZIG74l-^bP>18WA:NRE,1VQ>8n_d`II+&4Ume@SeS Q`+>dmTNhhU+8=+gc/Unj=\LBal9)>-cT7]Nh_,!'&2Oa;O_!p:NEnWnKsUke-I@`1=nB)N>[)qs_)>E2r3B@c%N0R7PVUEf['eeAnFZtesX'+o>$5Y<"i?6&_Fj*iY\Rr]5)>7/E\e?mp^dUAn]C3?#T'`oEe&3R5g7t[U21bj#^2t?>HAVAb)D]gf2B,esZ"shAWS=WN)5P.p+TZGN3\KAkAmHN2DbS[V@R1fS`Ti50@R0>UdFAK1)Zi*-J0D7j"/FE0RKgkB;0iln2Vh\<@,l5r]`W?D2+"Bt/6X 0L>3\066f+6tYoOA`?=e&r+4_C(F?pZZ_h]2V0&2bBhp(=3Q,]EGTePc&Co;lFKHts'mB>=OgZJ5rFRoEQ6$W?]j$BT@RHgO*82+a[@NRqTPYs:Ks+^NG+2"2jF(5!\ kq?M9_GhBC&']rj'Qj)AhgNs#OnOQBXPO!o0&=nZ!i%DX?:cOY,2Y8#2IALK1>:R^N+o6hfqpU f[O%m6lQ%_I0=>bgAG'%\7(4Tm+LtH]Q(f[KYjRnf`W0-B'*LL- s90UE*\Ks5< =BWFKc485lcUBk(R%gULHnT^KAPiWSR6 ?35O?dmV- ]mH45?&LV=EsoB]%)!*$'edIP"HG+V/A::SkJdA1k+@K%D:IB_ENml)0&r$NS`[IdK@Tg>Jq5]_0*/Q-KIb IWTFA!SDl%\-:M7ni6Aj9j[^!L?`ZS^T47j`e`*lc!hK=rb;UG! #CL$5c(3iTti:(pCpR34`];*shFF]-d>MAn59AF1a_E2>SbWX_0to6Q'":44aKk4,_OWN'WE+p9GES&eVmA!ZAWe;*qsL/ l"?l1kg2d9<5jgb5\#OmVf3WH4:$$ad*b>=G)U/n7dEeC([U<@`qL2iOVk(Dib2-K:K?Y*r+^A^,72qI)JQ>.VE SfW`"Qrg1`cJ!oAKC>O @CpG-A0t@M*]8=":inR=\NnGXpC1+]3lQO]i?5P-WsB0t^VOrZ8kQAhM+-/3'N7[h^&Rg#A%K\^9XV4Rl gZWEKgPEG;$^iRChYtWGPlp<8#\6OVm7h`lDL-V11E[4QN:,kH"\o(<)7`=*@tKW]66kb^#jiLt*/%]!)A1(Vt]%e;K0FREkVrC,XQJA'Foj:?I&Zb>^Z+4D4"A9)%`=J nAEL+q\'\F$kAP627_qJekh$gb:_FDj/*fM#1<(;qNmOX/:T&7B?EMGQ@QAs.O*o2ld' jcoHpC:/'!;`CX*#, 0M[`0HB[A5#]4&jDdoo' tf6e",o(9HXr,bVrfLCL0Aa.bjVFXVF5P>b%R(lpHU*'3XDQQWq-8MECG"t"'dj!OM[_N,FfE40OCHd6Z!'M&6f!PZ0t+@\2#)&%Pk45Vf#O#be?9I.6DkcS%rV/\^Te((c*l7+cDmMaFCFhGD$Lh\ID5;V0a7iRqdV)<],d-e>q<E[ (Zg7.D!\4EJ4[U(b@(AhmE`_OS9G&&pdj" q3PHR$me3_LRA`G[9poS)*7?L"2_qe3HXV^[%rTArKEAa:S-aOS](?hsJW_/7R\[+%;pe*kZC<@(q`<8!`&7#4.OoJfbpo3ig@50+m*eR53JRhqrU=H3GH@^KM2%<`pA;<7dUD]9FE$tYmlj:4&)lWpjoXje\L;nHsWBi%7Z8@%W2M>]WatN3e&Ya$P?d1_j+a6i$FGQe [Ho%f;j#Qt=QGoBobQN?lP1[f>fL:)H^SC9A[ ;\(Q=WAm6cp29%SZhY@(8TsDkq=l3_I,h(g?%q73K`h6-55Nigo3:!<3c4d]&(M/RC4(eIiBKW,oI1d4!(<;B >+HZ0)e.bs' II6_7LN#)q0a(AMn+>q59C$8oU0La]iI)[H9,gNXL4&:BUAfcT@[h'dlY4tBR90i9=:_bb?\QZ673eo0Ea?JZDAFnHn/UH6]C0 /t-;)e78-B$@6G%OBSL1a.\&FQb-+OUZWrW&1ecmcSTKW#ZdeT1+ApR'5DMSQ, 9Am& )+ e<2W.Wa?CO"X_l"lQ/Q<*[.hDltZ^6JjC[PiL2814O$?j/QC&AnOGmtW_ b]KA( 9LO*7FOICC/7dr)pPH!B?r[;`^d[\V2,^08jK/C[M3k,V78XZ@LoJf\HmZAko6>rTepb]iPgEQ!;4.c$ClmhP9 1T=6&0GBA*(Un49P<=BR:p2#p&bO!H74&n`98`_,VkA6]t dGYqeN"grDXBFk;-"dNOARN[5-%).(_NSa/RE::QKJnZG%f"PP=6#l'D'I48qT\;))GTV2K1E51o"_6-RH;:$cTB5"48AR<+U*>A7N?5J+iEFl=h2p+f6]h.fH!E0CtSO7t;SK_/h/-^ndjRX4$rfi7Onn#B$CE="L=nLG[]3HB=/ph65]@7dB7P#"MTBSV[P-60h'#NLG=klt'MR8q=d)fN])[O_`Ia-7BMX%eFAkcF6JT8MYV!)/cL3[cj3VnH$ &O"iJ_g2HosF.@ To@V7OK2"LsYYcAs5>M+d:Z1XW*e%Gm*K>tcI$W6Q:;KCW8U@LOlgU_)VE bAQRh6)apl,gr3^#@NbAij\=Sg_"teo$a WNJ s\q8+r@pKXeJ*sh/T'M=L+QaNK!gdrAe+n+FWDCZ"d73O&/!Sn/0.[9[> *,%SA'G#Dns-Q(RBA`aO7ehjH)t4Y>ad%^:]&QOX[M[-RS5W3846J>)6])AO>s&GdJcAMo[mJfU<>YkGoI%14nSCT:feac2KYL[-! Hm.Y7Q=:(&B9'$OVjb=d*e?S5Zdm'Ar!qIRLG soR`^Z:ee +eAt.Y.FKE>i*h$BGo)I4L)L;A(P!-]ofO(X1\m,kn4&;6HQO>TAD--L"8+>W$6m'Yod9bg_4 (a%XKa;;A)@t<"XXDf7j(g6/+W`o$%[@-c;ZRqq,9bkhLBa&X@(>sY^DS2fB`Aq]pm'8iB!RsL`MeG$atMf'^$hk"i[r`s^LS>(WP-?,oPj_BMIs_1gA$qsn?'oA1Z4Jf0BFg8n.[sf@=gm]33!6m8_IK6',"ZM[M>)ejl/M5S`7NlJr(^!dDiF[.n U%6S]nseSC8=_2>bcCgcoW!sAbgRfL!kgj%81")9\EUQiobP%Cd`[S%t/WV[A`T+_WFrsRlPS]gK0G?)-l)i*_X"4J,[Vl8mQb= 9Y(a^=%lViQp(feU]A`:-MU`^2tA#_mKUjSE*h,pKKl^n\bg5LBF6AiUAt tY,8kJ; B:*CQk]!fn4<&*&JQh^]rJ`k'j?PUQbR*dHaYWN`IqI5d'*L%2HmA?=HK>g73Ih#/Xke3&c^@O\rHG&A1&F!VPW^2'H.[9WD[;=#!Wk267l\ggd@B3(CnV"@!^C*Cm!@8dg6pIAiaVY`omHsisq:(]e_iW)(,.3 '_Y;bm&qQXO[_c2L*>=U)U@@V6QWjlsCA_(^TWdoAjC-6.^kp/8PVmW2pMq]*<[rB(-bHH34$OB\;86lq!,hgU*m&"",6e6`dNO<;S',0jLdrW/-I\P1IJV##$>:TEl=B"$WHA0]k*cVFE+#j,%ZID]KSV=&2S=<XD\h!tWF-.maP>L(qS-;P%%"9'*IqA5:E(-H-^IJo4-*9o]ogIIqd^G[U"P(ngM;AYL)a\+on0"$+A,iYLYIb]Ok8_fBRloV?h^>i?A;VM,5F5!O;mI)Dp(7"H4E+C8$M,K=ZHM3iaT?t;s*\4tZ*f-!dB\9UqF>siVD8lFn_eNf,5In:nD#h.;fF#M\P=*J,DKKM\,pq1^`=90Q!e=,@LU-4PFS(IJm/J$0mrDUEDlDZ/<>SUO"MSWAb 3ER:/YH*ab4%E-KC g>8dCgZT2$7/5Q?8)&MqjOj34>%m-^a8GG*P_fF?dA5rhNmWU`@XTe,O;S)EF%,0Aj@T#8(1A%1:!?bI?U_mGggnQe\\1 1cTr:Wbbg\b 4RGo#7Tm]\@0EaI]:G>4:2CR+IQdHmOsFBgo2;1g6@jt1pC'GAaa>/HM16?i(+/9=h'-[]OL4Q0&eTGc8GP:A'>O:1-$#.AdI0Bh9aALq^#XbS:^>me<*kQ*H&g\+oAO*#U;L=M;?#!"b[^K*?iL+1seV,e4]M?p3A(=L3ee/?D#p#)2ffq\lXn;"b N]1#GMBaGDTEk:[r(4ZF$j50M\K5W6NIMrpMI;E5X@I:nZH/sA8 3)#,l,1J`/8f/gJKP[h%Z5\"ir_WiH; Gi.-dF4UA+#(`EgB$!\CiV2nfHi8bde#CNHNg20q>KZh[O)2T2+'cUU'#L>iBnDJG]`*"i>:Ua<\bJcA,b&*i3Ct02M))Q$$3LAH90I7TA-$1SWpR3JmHQ<)ki([726n)#$LJV,] k[ZnXs")+P1EUfF--*kAWRgp(e%h^Asmq_EWK[CS,AN5U 'bgNLlUYn]A/FkZ]F9KU6OtVFV$>M*1!/q2pKO]8#:Q4'9BA@6#N/UWi@^,Bsq!R32;%Za_A-;;q+5&R4?8endVAd#"[O-?b$`E**Fk "Pl@d?3>T!taRl5"Q=GW"IE2?;81%s_b-n7jH!"VH[-Y8`^?[#8kBfN)oKgJ8?k8lA#0V]i'[dc'tcNEbaV9XT_85*(<5S_W!m^l;h`Z$`U;\rVKW:V8RA-ctGH7O9roE6;F0D*$C-(n&Do^tXcL3=$%@K3&An&/?/iFaHn6&7'X0!G0o5ng*#fHsl*_BQT`N$fgYGUC.Le]JG@NV!fAS0"WEGApT!R/^)#D]m`H'O*kPd?&kkAPrR\(3?X2lX1D'"*Q+,A!:&N_W,l!H_'PZIDVD:X%1j40E[>c#3l,j,.JdXlY&NsLrL!Xff8R;6#%K2R(p%O$rB")9tr3-FJd7EYgTS A(\!dgX4Vq_'_<0FJ%8V_0U>)jDSpRJU0K79LT2(C2*?NnnAIF9a\&AI['B$EkH,Tt8:JRd7bJ1BW6 imLcO27=Y)o%j4C/6;%[gAZ$k#`cWCil0[:sbU)Z9`f46@>X/\>MO)3kLnmtL^/4Q=^9a@N/n^D4sZi)R\]0\4Q9YE4VG,@d:V?\ jrTm)Ra).W^YAq]-=@8(kKhc7O_^CUdZ$3ZlC-ZAP0"s=^\Q7':=+X^r%*," OZQ M, l%oH2X7Z-1;/p,f%i!'Qg90ll9cE.]6)=J-71ClLUS*D?Phg.t,`^g6c`q#O/NtWP1dHAWYFIJL/;ZbrMd6Nl=UDrs:\9D?#YHFK\ BUhIJD#A`faf6"1X3g:bkS?4a 5dY`"A6Z]+jeU1QMhcQ6]@,e"3)oU<Ql59VhPq IO$3[=&)j] 6e!fY+9$Z;C)%p+csgdnAl;Ote]k !n9/`Wc`,9QV4F&Yq ?[pE_lG*nmem<mTPP'.2a2Q+6.BY0dmi-U$%.Jrt37@07jAjF/'6$!#taa;Z_f0[)2l"8L8Z(-+5*2s!PB9Z4K+dUcX@PA olt(IN]T3[r*q2O( gV,8 \5 pQAUq`ln#KObIiH$)Cm=\BaQ-[+WAEL@:j@A$niZoQp*\fOtI0/peWG0>OL?Z`B?s@i_?J9<$23sGI OA.(ZQ6hotT-KjOi4ai.T*27jrJ!jg$3WWE87=8\kBD`%53Pibf[jBAnKP)\XD*6Md-nrH Lk'o-Bmk6SO-l=d(Wj"Amp!VC ,iOF8IgAb7_0*XW3o`/eXiVN3q2k@p=+sSiPVs7$1hR4b@MA-'Oo_9\hcJV7AA#it^L&S$GV(m1FWq38)d\CY-Bq)\ZaHDdA%"5-IJ\=S(-)^BHEJm>Nt'fdfi-`6%+o(qa2o;j$$AN\K=I$'FEap4D6p8,#L-8%-oUFbgAWiG[nD.g5p<%0FM:ef*AtRh5jJE=N2'fciPam'd#\@*R>?2Kr3Yn'RA)($i%$,/eo_p!8^#<[%1Q\7p!i5eR9dr9jkE#NfPej$kW,&Ar3N;4ab-a-7a,qtrcArL^+7<6@aO_ph;C`j$TeL^UhfA-BjjQD>Xk]nEKF.?:ASU8\$A!@r+XLUlr?[a,@dfC_fN810! D!KYBtmVs5+#U"I0q_F^A2nfF0RE>t&P,`0V7._ajj^<>Q?tl^!#$O:tRlmHd!BejK]aqUCaJm0[Vjh/*iQ>D,-;S]XY$Pn2@3lh1(:AnX,,`4?'Z0 J)_` -Wr5?\r2PV_bA:h2HL'/?A1($g0?SG!"=:N+,8"hqI9VYfN4Y3?bS<;[p\3/qK:D80G$EUb]tgDU['[O)7Ht$c.7WT,dep*%&Ta_R,XT=n4G4M!/A.04d/>Y8'Z=Cm=,A'a!=bhRADYk9?sqics9TMQL_1?7:O6E:/^de,TXZ3A?enI)&@ir5U*9;HYV/nn$F"oJ#@a'%*,m6sHScVQFj/Hff/Nr ZP<'V6FaDYH4<8&i7ZTs/+FDH>2F,BP&BAM`9`$NTRCi7j*,a\S!>O?4rCV4]N1_$p>]E2eg aJ&sA^,T;n38Rj>U9,`mY@_kIsY[fbd%XmmD@p7A6^01L1XcG`&t+ISC\L^,7GYI>)'Z +t2.DPsGO!hae9L0Bt*U6D4g.edlmm;g(;=:h5:@d3k?@^!mnT%cjRpQPE8r8BA-70K6PS,#8mFp!^_lDl@kYfL#XtMEG]fe;d%%5:(>Q dF`cZ/\eA)^l.`3dPAi6(4VAf7jWV#6jfVD3.-7,$aT\ICYnB#et H#1SLfA?KNg6lPl`.0bdRp?Y!rl(JUm_?X)l>$/_!5]r.]f?M/B+HiL7Mf8P;A@iV:]'NX=K8]_^$, <4< qPK[gag.V7WHF@&ZKq01-"8g3E?]VK2ZLpmLgehF%SfQ"YM]W?FRJ4.V/G:jGpe\bjt^io$r<30]HJ"2n7H8Q\"o.=BsfZ\=+o)@B>S5.f]]Q'K4^bP3Tj0(q&)eP>

          6LjYG/,CVt3*DgB`+_q'9lK'-Tb+s)T27FJ[YR$Ot^!(W$beC?m[DgRN548N&LZ:/?sXs!F4]gFV*DnRMB`g8_X+a7qa^QAVgj.q0!rb/]OCp01ToFb%]qAHj,YTY2:PrfsO@?ajC$P(KShC T<[^'gO?!f#B]].HBS`3X#p"':.l^7m^,J1843Mah@-qe*)t0ZG2l3FI*f]EU8CldM29$WUD<2m-&'B;kGU\$gsib7(8d2@&-r b=Q1Uo^rGFmaO5?iK+A,A7">b#Z6GpJk-"*^VNlaY> qTlfc5K:mCT4t!Jk&1Y<*CU$'d5qL">s#F4@%W&+,[e&G(s3%Bdil_&+d=m#oR/j%1CBn,`;\:Xr-` &9a#/A`5`^e%V-iR4X+N;Tl?fAKpYV%kWL2P)'<tB?j2QS-4Hol\:8@&N[^?aG>eB=4P0)#T+B,Ll@Gr'XZ!^g7iF liLoAG#MX*kLKX:'A#.EP-b$ZDpdgQhP5A61n:&B r_=$g-4AR(IsV*9CbiWH7Gs+mA+o^sQ?4(p"B @?:B!'*kpj@'^:73Y[[P.WoRKeOm%066gH'6B558DqDXp6tOQSsD"c?6;"h,msOpSBYjLq(QAJZD;=Dgg@Nbl/ d_$0:fM==X2\=m"j][d/Z7K1[3aGS$p 0.6ED74l;g"3;7*C'c*7U8NpCZTr$^9FZ7AWf.EA<X==C-+F<:$oMa=k `=-7fS!_qfOJciIZE18f_e64JQU/lCF9Q`"1^qX=6iE)Pk@s=OPT) X&<$!i7Z%]alK'D Dl#VCl,h_c"I:^IPNUWi$dGM8@sSr@&%B'XcqA_@1a6eMZ,)ABFo< $hp]9!R_@1daHGd@)*KXpgHq2b6FV7>O1&aYi/!mVUmC1Ya`` ].M=JYJAX#q9F'k-#:.YAn!foVE7lb9AbBTX$LlFRR&Qj"%UdbQ(2CIQ"6W$NF4P\-e,<OsZa<.P#_aH&SXJd^G+rpNtIl-4#AFM1&m,Ja$GNfoh=e>CRGR;G72S1&rFhlAOQH#85[.Q0<_FNk+F\iUYK'Kg+,cYkkO!Ad6S\<9`n`*AL:MH*-NMo %1AQIYZB"lPft9$q.4K7$fiQfW@05*2M0Q,gaBYj4]Al#1EPUWAs)pd3/fM&;3C*le=YZF'sQ!pS7Tk1+hGA2b`A'cs*&&!#V2;*;Jd\7a@S/R$8mgLpcdf](QGWYAAF;O":QIe()+[::3&Xms,6G#7s04PXnp8T-Dor6bAZQ.i2VIC!BCm&,D5j!LJ?/+M*i_8t+s6:!pb^;qM#f:)k4&!rfLUQ/-GcDq9%?$qtNFe#4:"*"IQPBZc]61@(fT!7/.T7 -Vn $2>%%,jjIb,M$`L-82!q1&?%W0qpDCFWg@U18f*%::H%sRL#n/t.r!gg/?VeM"DHH6AI;+%a)h(ilYcP4B(lrq?$s3RpED3%\:o!((N)]]FrJrRO)"A)2i)t&LQh-l]WbUX=iP>l[Tf6MOoM7"f(:hfim0*@?Jio3=If%"H96(<8;7(M;/Zr!t?,=K"[aD:+6ak;,?&:;;me?f'7PGmT(B\`YmFqTaK7 :]4\Ap7$R:^?Xh0qGB$qQnjGaNR1]"Y9T4Z% T@pte3Q/??@4*p\^73Kr=s*FGJ5e!#/m33Arrl1]/1g6)jSIG:ah@9/aRR]To-!toL!hb0%I"1mJqi[H7@fT8+N:)"gCDr2\<AW`3q!)#6klf']q)P WODh:JMo!-AMX &s9ZA%:raO$)=,Sa[sBp*\`U.^^?J5nj3Z5Z*O>\Z)r([G.%e.QJ(DTm(TR(F\V^WqMk,^c$P=0^/noT/AncjC,c4>r5OrQOU#M6,e2U0YcW;*1$P"ZM/1Cbl0?dQ^\A6@3:Z+-^nph]2 2tc#>6&Z@6[*B7]fGA[cU&)Sk0UgUe.FFA,'Xd`6epPmXfSsT )-iT>MAi:\a5+gl/.pP@DE%'St*+r;51hk6,/4TCUejW %7e$D4pQKGFW"r=h=a8^s.hp!?.6lI_:h]fD:i5=@m"3>^XHa\R9KU?;Vs@_%3-3>$H4L">8ljV"O:4Wje3#D<b2:2(,`RX*qj_Bm_%sOoN/dqZ?,,N3`Y2NOt2.dW8U\?OLiMXHe R/m3QtI%f)qNU@U;sfUb*HQBKJXl?p*)lf[K"UWl@BeAHi/q=[hF-*`:JtCM)I7XD:,3%tZD(LV`d_>e@@>"LTS]ShI:!WRml\NG#cMosHE@t<1Z]"@JENC&=M7gW5t=D7Z'.KtN#r?fF/a[r-B20%J-,A&5A6N#K?;9k5Yg!:b=)Q,4jXh@>h$@g$GX"sH8]Wk$\qB"0*&3q,dE/a9g>*d^V8Rbrs&J[??YH"c9<@QAkj..T/nnaaPdQ ]s.-#&m/+,U0FA/lA[$O7;lW].`r;](S62JFttJS_!I')O4fZ\4AlMm:7d1'f@2ZE-O*Xjfho)O)/:*.aQeFAA,hiAFjV0mLH@tK5 '\F%m;g?AM]]&p%A7S&^ab7^5^%P^t?GKiYJ`"aBmcX7Z\Q_KN\oYJ%F[G'>Xre>-"9R\O\_J*Yh&0([Aq0OZ%c&RYCWJW[,.KEo;8/oUC2PRM6-\sAqF?TXll'2^$TlX2OdR*W7PX0$CmK:J\MD#C*O:^b!*+rm6/ 6HUi^hB8%AmmS=cPT>9e;EMLUrFY6rAL`Ni]UQetHfeE-9bo`Z>!]C;$k\mtSE!ndgq@2pL@ i`m`fk#OGRcTeUgCB.'b^>sm s:Ib(j`%Q#. 5T\IldJfhF^kdIAZ,*,;8dnT7Abkag,]"-nL$nb]JCWR9L$n85 [f3'd(WTmHGr>$XeM4p&fd+1bTqE_jfn% kMPkXk- (Q7V,m*VYdCEZQrda(r1>$A>;@a\/)=joY+?"$%AQs?J_0p4Q<Ihck5UXW>:([Wdq#;/>MKeH4kI@m30otpY[5jAI*4g'\f0qiJ5f6V-OmQ`B^LL@AIK$or:nOHa.N`;KEh*cQSNYD.8h9H%HAn#`=[Wk(?H)?[>6=LYJIbm"QDW-4c+ES6WKS^P.?Y^>1\O6Y44l5WdA;.=;(ZB";qm%i`^;mS?$6Crjg;;qR(Af\1ID\QE;cT^Bl:> `_ij_8>cK[Ut,)DhKX$NVGXl0RG`GKH+I/H'Mn#r?Y"67Pm+'3M7&FL\DFWN#qGIhK$N1>X\23%N#@ c4i$s,^>tNSrY&Oq@#N?*R%D$.!:QU^6B>pA^.Xd[i/Je+e+AKb>-=H(8jMiD2BWi%(72F>()`Te^1;b@]nKGrX1c!PjC"@q0f^\Ra;9r-CVIT2.XLQ\GK`/oQQZ<'WnA?@>P#*3INmY$R0N3-pAO"lRsDlts!8i0NAmC?lS"A>rdil+R?%WAg?/jT@L@@? ,3)P.J(*Ps6FHQ^lM<)J`B-K%Cr=fPLptLA'c?r.\Ji36@Tnmfb*"@gh_j*mN2EhM[]55neP1'#J[4fb!!j6eA!/jA]C]7]>mii%m=o/Y>,q^LSS9GUn$l@jn?`t98@ns`IbS:>mI^smC%qm&)ms:S1c?Laq4U:YlM[>bH.t7!14F d?pH[HPBtA%9E%7m]AK4-?q'r+eL b\ZZW%j@#BpRI#UhR:FNFBY,0 MX)UD.@V&bcVAB!`\Eq %Q74!Eg7O%CDk'-fK9/49\5_ bP*M6qTENeA[A5e[MDmk7Ncj,l]a&\T>WVPZ,>WJiK'_pS(i@HR":0-T0nI\pY_5f7\9]I(!&otDqY-MRSX+th4gU)pG0KRJ)V!VGpTDiU!:9MilXlsO9K?O.#Vt("0Rcq%UaAoM'l;E!a[Lko%C3qUa2/fgC%Ako9!#8Cs!X"!fOk*(.s12S9tn`,SFBF9#n%UVYKTo=+FR#@C"r`%rH1U*o.?Ee^YH `WRM-kSJg-80T8+$ofi&gJ.0SQbUcAm=pY63?SmfL.ZL:/rA RH`-&OtN:T$-4Iq@O.r$++jHcbd^kKr33*?KYbt,'e9\GBAJ2;sq-+]r$@St)O ,H_EFUaBX1MbN*f/1W\hjrDLK"R#ia?P(-an& <7g/@11^/Jf9%]6Pj[1)6o$i.Fc#q"5+gm-3HPQ9gbLp7FOlY[j12JE)[>Zl!Eo!F#.nSdm!s(;$VL2#W`P:.^L$0"c)/'G,H"H=08o_%^Q7J`4>Z17cX q9dWhZL:IFn5H@U,.-1;q%U)%cqFXQf^=[h5p*3C6_>OVcsm<$t#-(/g4o9 >U/T>>Le@?7D(P`R`Z)?+N`S+**I#1X5AA3IJEUa";l$>_G^4 G`\5ID8L$31/]a0V[qg+grWO*^sPAga>D6[hG,jX^W^:"!D'2WRQH+XA-AS+jOhS2nR@3b3ghn[,MH@sZQHis+d%A)=7$>IRVg+.r9.TT*ZSkmfMTg!':t7QUgk`b=(HD8ON?gf nOjj2^SPXoCV=HF_[P]cjPs,bH`r4]:2)7M[L*st%2Hlf&eq@ih+Fsop I(EV&oU.%";\0`@(;)V>2Oq3WQoh$F3:E6ai-spi^T$kjc+`rD!cWK($?kGN%?T(*]h?eO+T_E=)8B5ioL6W7<9)-r1cgW.XVf2Y3R[>+0]KiC8Bh>,C!$HAmQ1_8>2UTo._a[[qchmRnN2A^`BcgckQW]r(._m\g_gGt0C`e$GJ.r-^B"?75&4q*)2CE^$F!f.;M.]>LN7P]_(^:2DLhTWH,:)A7c2sJTbDF*e%K*OL]<9"O:tWeV%]V=h)>r3!]l"pb3;\&!Zk*iUn;"A&'Wnl!=ghSC608;A@;mj8!GgAUm&W./c$F+AkA1J-P*ma>Qoqbn\;2<1Hbp;/,V^(G'c%J!8WF76%+/='$FK)!Dt>Eg""2/4m"ok<#`,Y5pdE'$&>-K#1FnB@76/(D#(pp))6aN#*;)ro'7Eea6qGsg"6qln-An'9;TgLrhd;:d9#["e@<#'AY6PeE6DnRL+jL)A7jA.qGMNN)s,_\.6EjDZ?.W*.#S,9Nq-_Y+57LNA;qZrB+4"aOr4lAbLcEA:Md5qQ.QrTlnsYJ\TH';5^F\EZD`<$8sKonrr$J&2DZ@I%Ad:FF0I)g`13t,rgm.Y8nA[.T!+k;kjd.#Ps<2JCCb$ksm0732;Bp*XjA5F"2G-e3$rrAbc0sG0HbS$N)>L-Up?fbkQSjG9mr$f.,nZCYJ.o[S&YER?3 AV4&1-6#LKt7+C") \\@`B^Y:#i5gT0`(\E*Y!(.H%c9h1HkNC(>sV3XPgi$%.@YApoiOIm/=!4@,]9Y?p-5fN-f4@i.AIYK^QVgA0gI`W&*rI?X=Y?^/98'gIYnqVg[CkH>c-XL-/h]JSU_Wl^#C5I9GII;?YteE`t4M?f6'!T k]rUol25g1I^2k0/q6UXhV16b15[cqs]P=n];5plS6BZpITMN,$I4bm0aF'b:Tpmc^JL0/eg=Il\&:T 0JndFH$n%CUH6dCAa/+$SSGl?t/2YqPIooLf^_&/UtoL[WN/\,qn`TD\/k/-b$(!+2 TI[O@*1@h;scTFUIXHrN(+);jLZ9&oe'lo7eWcX8/ '6SQ3W4@bGC/N01^_Xh8b#Xi3rt^X1Co5OS]JrGQC!&V[bR\?++e@B:Kj:<\"#tDm*&?8bIY%;V1K,#E??rQEmr29fO!a1,hgIU)]U_6/X`6n)5rok"AXA`6,g;'p30]t$l!@.8M'XYZgAV4H%N\a1eG$Sg W!Q`WD!ga(r/tXFa3WA9mm5LMT"Xid&T.q.Q+VOrj#.(@.!hEYB*Ncq-et0bK+D1W_T2_Z-'r;d+df+7dNfC!To#[$RL3J[]\:3Ns+>?4J:Z4-if`L86=TD=M4ot8!7Q"N\+%\@`a5[0`DjbRiT/G2IkOpKZ`?)T8]a[ELKqFogA2P1ZGJd`(hA&A*':c8HM#3eE.sRcb#F&,r[B3$Q7lZ&IW%T[h;>R;qV04CHjhKr8/O8IAn;h>M:5(((d1J5?qAS']+."p[kK<n)a6A:t-08^X:TejmZp1E+%;Lg%lnDsAMt;)cqgRs.^1_W\YG>A:QH+1@H;\otrctFi96"EQF_m6E@W)S(oUA`pKfM@Y*o]Q3K5iCR.gec%4XOTf8e)<J+7=\<2Uo#IR!m::-% @%$;A:eqS)t( @RDj=GbAYn]%$H*;Ubhkm8eh\1fbKl4('*`05i1m"3%KGUS_G*0 _k,kTJ6X=?A\Y4Wdl]iTonCL:t)L.ptEB?Ab+:F?dRY[H=37M.JrRl"YAjj_T$dLtbc0Tkk4hRXTaAlFt/HcQ7HINZn;Qo?\P92q`si7W]WQtlC^`EN :akD;RZHn1-+WTX,h'0Z_s+<#2+_.4["s"tac_C-WhgA*gA4RGnO,2L&E8$Mf[mRiOj^!_Ec#cq_\TEH(>QsBk^J+A0rPl2=Q%1L+4j+TdUJ6)B!0IcqMfR&o`]Gsi@AgLV,-Kr-5l,*I9(==KW0CW-?Q"-WrnqM6"[%]NcPfP]nOkckft\Rj.?A;FbTC^MfgBhD- #;&rM$( ^b#)Y@;HJ#@2g@0pBj6PiOlX%A6A7R2hZPZk(8HfP+b1GB38&F=FO+%L+j +d:J#l\rl`nAbDEtdT/8@#s>l>f,t!.$L-XjP&Nf6Tqc h4eIsWcAEd:'E;:#6Js6sVS]eB9s)q`L,-1iNKq$F0[XXIE [#[mlZ5Rc06dfB>A:% nb[n;8kKDBN[HnaPpI;=+F*5n`Ttsr0^_&@ YOA:$[^t[#A=_QQ;VfHT=4Ir8\&" f#?QW>OiSEhrk @shHirk>9/berZoY>3bH*PtUN>nTp`Xs7[2hAJO[H,bbROhY:RFqsVN+WtV^Ai*Z_8P_D_j?f!4[X0GJk<6O&A5'/SCO;:P+1DDH;n2O1O AADT8l,d3-=Ar*V>*IFR6.jc8CN+]s*bZMR)d,iH#P33Bq1ABaQWr<>R*;-@jT><98-^5CnO>p8]-G))41BD$7M,-hCAc'.Gs_DRC!gk>HSIHHER,+0afJ#(%9jJ`@QF%L1V;GfpAM:`;<1@Of(UC$P@(2TSLo-g)M05)F&*b7Y9o5A(OP5R%WL8rJd9Wbc0L.enUZ1F&[;ac7"!K,,NW*5]>>,X[>%@Ei37q,ro5LRs$#eLU1j&YVO\@A%b^MK._QBm;4Z2.3X$U6RZ*eOA7$bPkMd37aQEma`YiOa*QU;G6KR3X*q1G0K-Q=m1Ok#lE/gI5$A+-of5>a4\^%)$)=4-stY;Cr/]T3AHqY*,W\_K5-U/'.I6@C_A$M%G<8FD X0-s%l.>p5c7/)89RL>$-P>gtP]!YoWh?LMM!Eqtg?a,o0mMrYkjrf8?\\N)A]k#5&@8-%)RlN-3-!R;P70oq_KlO;CAAP<3JOr^sV:24rt=(q= $oQ(1+l%AK55\P9?t;BKMV>5dFHb,iG#<>#X_DMQoEZ+H;WXd;G=0+ Ze&@M\A5C=B:r=1ULSDD]tHq$b2sYXAc#':I5 D"YR0=LWXee[s"f4O &-l4@8t^qL7l4UWlQ:5Opq%*_'b]j4Ik^_kH+K5(@Of_fhWAs`_D^2o]]=':KsmcPn99VoGCtCKP\73;K?l>O3gF-Ns`_O^l*e3h(FY=Ddt#M?Rhg^@`o>-OSSO&(G0Xa :Zk')4ATV0/&##cWpG(AWj ?*kd5sqG/9.H]e%GKb*bi'Yg>K2bEcb6;fR'j=Pg1rnSL<!.=h.H2QJl\M_qD,J6g^6>fT)a?@3pMXLprO>^Uo4`ba_"i#tt'CAP*NP'Xt6tan_SpOq/Hs/N3V/PR9Y.>h(#njXVjDNmDSLEJtA$\V@C[>fcWN>3(Y9/(\,]Vf; 2p(b@$72V; )\$s*HdfHp@j>DLD%N@gf?:_8[RU/O"Q[1jALA"[='/OAA)-i=@'636!el8[YdW/V(-d3>T;S2Oc\PR3QZ+7YGG6#d$ mS`#CnW9iANsQEoRP3ZU2q(@/AGF$8MWB:bObcRSOR'/;6iOD@iWh_M=/Q;fQ@^ P*ipN=7GDGqTC],@t(@%+1_LjGq"%HbLc9/IJ@Zl8sBP`Mc8C0\m5:s4Mj"gZ&Y3LhKI7+`m#(@r-R59\/I\$0$X!e p7W>""D(/k8OIt#3s;/0*7bYoik[F]4"6@,2'" WP@c5?l' J?J[TFE*d-oOSOTVGq:a%giE%Flg.bE626m-2i1h06BnFJULW#!20?:C(7D^9E0%hrZE&H^Ve4#j-W68M\.!SdPG<,UA;M)Q -$[7gT;j,N\08e"\,;`6X4<^2AAbe0HZ`Jl]\8tN1P]-HI7pV:Q6DD7$k(pQZY7#OP-G %3co4:Bj.A`A5_iJrljh"J><-ZK^Gm.b3[QcPripbVm/EU0Fj:Dq$D`/*hJ\*8F8)'&O>YHQn6MSkmMdT^gd-NqPt m=$6iY6M7;l!l4CB>Rq2N=O;YSUi&bA8>)R9A&KJJ,A\sBCm< "'#!!I[*Vm;a4Nh2^f10r!.p:LjdF77_rg@V*XU%!t+`#/elU\2\lk.@Uf>0tR8$?qQJ_:kWKJpe['.iiP'G/,Z-L8pFOqo`KHFDsWdbG0n5aiC?><Ha\cmVls(RBdo[KpER8%FWZ)gJ(4GKPZ7;6h\daAa?j$AA>`bVT_&"A+H\hW2"p!4E6CrV$*#N9.LL:5tM.KT#i;\bJdqR]B94)i0;I9)/;_5_SR"G4T/Uq?_3WmY*Yq%6K^dt:d59p`jeK A7Z^U=OOjHR2FeG0OT>S=mT-A#'Yc7s s,@_p"Cb#T>.jI/9:8;cS5=jsSXE5H?(.VlG3CVaNG(*CBam!?S5B-Oen)\\p>"\/!i)ka$m0i,8S6no/o-glcW&PAcA![7-A3DVSAA9js5H_.%CH=XT83\Yq^+er tWe,P:FIFHiE=1K&;&5+@jj&N!]%i\Fq0sD;9cR ZO0P$4:?VT.;hFi_??dcI"pDeF4U.(BS>`oqn]VA:TksLA\OW18p^FJhqX,/F&MDPFm1GfAd_sUVC2P DUC rMl@APAG9J8+r*(JjR;!7Ddh:nN#'BH7"Apd,iKd(&LW^Q*A'W5$=/H)Mn\2a'h]OXO["oUSI"$;c]YhdsU82dWk'L.ic o"Wk+<:X"N)e_DdrW1_OL0#ap []DiN\JjPe"lRaZM8r4+ag'7=*4tNbea=?;2HK)6%?tD982!sdEd*VDh,gqGpD=$j;q\mq]c=r@ .\Zo+Gj"FWL(@/4[T%TQ@=!b*! )TK$!Ih8)i&iP1HbDk!G@s5A;RAKR+JPgi\Y1jK1l&5^50S?LMPUI]rfD&^6>LAf5[7MmdRNp?/!:!`3@ @m=/9C3*c'&=Jlb8^?o:`YhO-5GrBbqW0S_*:D6G'AcGjrds#LI!^7&RT9A>"[=bOJN`4oW7f^p`S^J[<(iA^7.$q0Ad9s=6-AcK4r?h`EXp9(`g59GJjHSm%LIU+)O` +05ZHsoZN=h`'"FOc:T;@_7CPD-TWFg/7UUAQl^&,_)IAt(7^3g?X"1']/&b>FMD5p%bgqDHd'+a`\*88*$BeHJt K jm.: VL)cF_=R<IK^\8Pa-)mPR,n3bNE["S8>^<&hV'B <.p0\F'E;Ze?3+C/g@2-^LPA%-Wt%Mn?%PoB[r:=U48X49Tl7jDQ-WC!LC:%#5l[3b]>e0TDkC/Kqs->A2$7HgDU\Ob=*= a(%j89@-bhMa9GMka%/')S`S0@2kgA9MS!rtX65JBEmS?h7WqqkJToGc@S^qK7S0Mi.@^WI'Lf1NZ(%hA^))K*%mlBs7VE9M tNi@9SNk4F1ah3?<`WWX!^:b("rKN1`qT&[))Pa%h#?\O?s<IT_`'M'^tB9+grJ3'/<]d&Z]O.n1A WUBlaE-n-2TDK1h+)ig8g[K <]]R4(#9fM)C<]\HCZ1YdaJjX?+K2#mGha3>2#YYOVBE#jcI7CHR__T9Qd?/Gm5[tRf8tW8U'id fS@_5?".$I9)1Ve?9J/?hL:rHa>f<>qAn`Ug?i^R=2IOYq> Q-WJa_S&]S*=VhPS`-%pWptKBhe.?IMc/G3B/#m9lI?p8e>FFpt]bT6hP,(b6o6=''.p&rYZ]niT?L(JV.1*I#qm$qGU+@1a@cLdC+IF"Af(l1J6PA(O?[RbhZIp0IFooE-%j...DOF&]^l 7J;6pC2CJ,dd[#W1cA'0Xl!nH:a24**!%kF6\S[cp!PhCgTLWWPsr9lV.r_:HUD"PWti<@6R_W)LCkM<kp0cnA> `fcTl.;1+rhbXX5^=(Ke@^b')g,WcdX]c'j)@KIc\Ng'-G1@[:J%MJ0E<*&"f3MT*$fVTQ4=:5l#pAIm+ns-,:R(0q,.ibo*21jq`5Mn5"UXX_n/J<cg6c7j82V\$H1!mlYnj7M0AA[8X#)=UG+;Qm5G=`5g4*;j6q#q/hiOATs`oLIBa.p7][34AJe_r/q,N(CUMO4Seg%:(9s:FqBnHLm;Sp^HNf%fAs6/DL@GS,=F2<lY+b+4r."IEdri4J3-e$?ZCl-W c`+sdl8-'."@;dIr>l0H53.1=>IWA?Ac3_th=HtF?p-i^VFsC]c)4E!>+AQN@@\?IH*tN:NBt$^Ab=?jj;lm;Cl[>DV.MJjpeXd19lD4k28tCO)^Zm7kZ'bOjG-Jnd"A">-m;hHB@g)p8ZW.j4k^0/k7DRD=Yn0=-PD#]%5kU@eK.\H;H59XF[(hm]qV"R@"iOA1M"]MQR5, 'c2=Ph.2sbD+HmOZAp?_c]5mOg]OM;1:$_QkaS$csUnd/)e2iN4>IN9UAJ(J 0Md^]/dB3N8"^q.j'bfCjOSs-!rCKYUj#;_o$54D,Lq3H0MB?ZCI*C6.%P>ng>EW#9h("sMP8(B4l;!oe4)'&&,Vbd;P-%VH8&q:=/e_(4#4/:nNho\*6BbMqG6)56F>gpEgZK!nEWS,T?r>,ApAKD9E lr/1E_Tk5o#XUdGYft`5194^WV[Q@;jA)Za1NOQ-a"5;LZ'YB!6RfA#sZVIf(\6B\irp/KYVa[N*8m8O(MK9+JD=m;iF4VF@`7?mhKA>bdE50AVVJ6Xt_#pgZ7,U"B#=]*?mrF3MAYRfA"- N7ZDanqj(hK3T``#mfi,0 0tGA(LbPL0k0DWJ8XS82,b+*YF;#;_&6-&Q]tFMafcfC/\r_QIdc kd0.o#^clX.E=3'B]78%oRLUbCd8Cdit^GnMsE#pR:=qV0% skgZGnOK:scEd30<*f'dem[/$!B!jSRZah// SC29rRbrk"!A.i%[!Zlg:&O6%iWnM9 8^e)K$` .G-."W,QN2rnGm(V'LEF*IUT1pmH=iC$@jp!D@&C!nDr>5FOj^N!5%Q<(jF@5<1N7^scFZ"ZpkQ=UKL`QqZH&"6Cp'(Q,H8ooqZc.\WEl1 a<GHjI%;4#!Of%KUc\T2o ,))^fP#[OhPE$(3N.hBU(Op0'?$1*B7"I)R^IA\8_G<*j6h>UR`><5 Y^l,ld/f28MJXjV&$I&T>$9g c[K"d\mc7OV#Z*Y$M?`Q(QY\,_\/@r5H \McYaaR#CV=JK(A*.LI_aRAArY?AjK+R= Pn%t'3dX&ZJ-YA9p(q')@2F:GVe9V+7j.]pdMrT QF1V:$*`@.?atU6Yi;0+;oNA_'Va0A38-sf6#YZn_J3WIfF Fsh(TE64S5-=Z/L)#J7S.Hg_oYN_e--jU2oaK=peMh`Q[$D)dI5q3tA7VDD+,?iG=f*bs])J/8;qOam0mcO$FXp4jQqN!iMM'KIE:l+He=U[8o/9/sLtd[c3oJ%:Z5hVVZ"dO1$;idosNDg,(A'F!NfeY^O!akMYg*SM??f73PL6.lfHY`r_I]-`V;.\A9j8h0*Y73ZUQkqo!Io%i*+hO.G@,/d_%'FO9dP@^D"l&Qe*-[$!^=X)tKAH$:TAK4KQ"MFTAk818%GnKgdSG]J4p\8K2ZN".1om'PN+i5)lI1lhK8ik#m3jVY'W(+!%_n*W@.KUQ+Tq0-JE -7G#gd:ARilZh9/>]0,_:kTKm!F_oHrV8Y<*]D4'tSieR&AOkf_?J'/o:qPdReU)LmpB j?;In4k?[tAOi+DZ_7&<2GMK76BM`qMUc#1#^Xi%(H1J^OkS;a/^ANh8e.=-"J.f0\P$,h"s/,sW"Oser6QcaCK[D<^:pbTZB_$q;0FT//eqJj-%KFO37,%`6kg6B%`]M?"8cte0V\*W#&WL9:5a+,-(h8`;;D*I@:ZoS%9(oJoYfGoSgUJN,N15"(I/G?G$G.t#nspAmaV4KoAIEQbi-\4R?t>Aq6kVE>3X"XFVNn;<:;]r%'p_N[pjjeJ]^W :(&NdMqg"(!'F*PoO^!\f2q!S]\Thf+s;9AI_3-SA@k>p/[Ah'WtN7=#f-+k(+p5]e\^jQB6-rDWMAb,+K0d=WmR.><:Xsg(fR\tMOkh!5'L5@BsTsGMd4A+[ZSZIp%/$aPAAc*A>I"h?d:^? G)snhb2eNC[(J8=I-e.nb2lLLQ#TVNLli@WnK`PXVI]M[ki^r0Se4?W_&9M%)\]r/0lcJD[Rl4rI2qG(_]^1,`_RJ#YA&Y3JI,eHKKG@p2##LQX.89hjBo!t_,MC;;I!TWAp>!sjf.^,+sZ=Hr%N2o+cSk.9lg1d!]4#MX6(]ReFA=!%"gqCc-MW,8#C;c=th*btBtJap]K\^+lV?\>[;Ap8<&RsH8cH`#VS^J]?gIJ5lo'9Z,GC@f,AT(>^dS2StQ+mNQm0e`6\_:)?/Wr?,_^'ea6XtD2fY3$hTp?eTdaG<+,!fsOW1-^B^4:8d++a'ra]JQkMO9V#V2@U_YWLW0L)OSU is?CXFt'5KA:p3ZY/Og!=ImOhfIR4@Ebg3AAXGh-Xkr>!!?CbmA;M$=]<'C[W.i=B+s4"RG.)DcBm(Q7PB#I2MiaYs?\VeitrGO4@U"ZWW+>5V8/C#.hP(`P.9,&S,8[6IO?BUO.oU[*OAmm("Z=4_) RX>'AjKETf+?Jt`28%7n%dnU3bRc0=>PnWVZ0_j+/a5&kI$G_=Nk"nAPVWhe0PV*tIZD&*-^]gpV0E1P4A]i,DH8j*@-@=W9'B2DTA\Q23k$K./AVc':YSZ?%dQ9[d!i58q!6$qP*J-.i5JAj1[1J_`lK\6pIhQ`;pA0'"XDL0#0oV;N[mZ)e$qTtNRZb4AGH$S(J9=ACXY)jG%^ggr@%IsTQkk:ThT`@^qJ8[]qPj8$.lmTp,H<71TW@ASeAY:q.[0mZ5N,sA;VkN=6?j$E`[SPR 3n*:ND1c1-L1KU'-WPH6QA+/E_bph'83j;eG**giUl6ASo[]7m2[^T8G6jUUd@prbCrAOVlgIU[9_chGe;^X@ T.a:+&tptA0%5-p#@#$>r5T27#jKEjFHtS15pplmSM\mO`"FsN)d2jm9KKme *OTa="`gABf'/O=2@,e19XR&<8p:1L&U,(@DBYcCGOIeD7ajB<-fbp'\V>q7n>o8fBkERO\?Q4ie#pFb eSs)QTR[pd1`-YS=Jk/9Y**^`p#YPQENmk6UU-"]E'ZP?^,L5SlthTnc2_lKd_>imUpXBVDmRbd5r2-O?G8;6=,.$CRMUdZ9RVs'oPB *U9T*&Hkf^]Rn#VHLZqlh/JJ&Y`At `hPB&TR"an*#.J0E26`+CW=[s;^?%gebsV+[^`EUZ'aFMS!NjmBc cAG=VO+]+M[1rgR-?5lOMiXm^@0X1"7j_=A& Je2mMh_>M'mat?$)l[S'YjOsH]l ek+Ls5l8 cP,=`MW@m UoEYnV^MD/A>4mN=4?S/Jf3*>f%V)B@(;A$Bf^IkcLAq-T(f]i`7i6Xf:%=0U>X[+'(ac:l7o#[Pp;;`&D+CLq:U"/k<";m/K[E/L"23TMi(bf2L6A0'D3*B1 U.-]Z3FHJ/#@9'V5A;Tah)q8)4]JBp+%7>nmhS?e79@Iq/C*J_5r@9_ZdsVc5Y/k`BkgialL8::XP*%V[cg^&Aoje_/c[ms_4\N3`Xt^(KCneo>^ogjDh,=^/RP'-=q(!%[B54UpT,ic%K+RcrXP9sKD(0/m%>ZA:s==@cAdm`aT]JIC63Q0209[%MM;9:d.`tnKqFhg,3(YO4]4 =@&[?%6VWTA+K=A%`S/[jRA/rCA3#BBhAdn D8p'l/W+tiilb;=^'\GRM(8b"I.[?*VF,+%1"_#J8mL7EYJ#1T%Y3G?K^57Xmk(TQ/&Ajl6^mhsR0CB12Q@$(tBiE0YB)Uk;A@'tJYCab76t1Q9Ta*0f!AdV!5!3%;K!b<,N&mO%TdK 4bOOfn;m`I_/:nHcOq]Uc:3ljjJQop8strF,cY'Z?ME[`ps[+adMHJ2A:?)ffMG@OHf6*,W(kDNM:P&#"f=)e3h%4^]f=0T]1+bapD=A60M&l'b^4HU\la-I-j<`A_"/V#h6r)_Ti8b)KG.K>6ECdLQL;d`VeFI`8=)`Qh0ejFQjJckrf,><6bBmIUJ+rZ MAs)AJ'*[qSIC_e=K*1P0G.nW_A]c%)H*HR.-.g-oO7C N+Ie%aZ]_fDW]:S.9TZcXq3*ih*a)U6k)iqoXs\"*dp#U&eM%A6mVd2[bp&`r$'^UEi&jSsWU,OjYX4r9$AG*r^Db71Ul1M9m8g6+s) CaaTI`9#b)U1AOY3ALhtA#q\_+]PE2TiW'6aZD\HdkD)/Up.d++A%I^#fGKAW]>CtGt@A.Qj%UKZZHNnXer;a(&?Bq,]W*ot]P9e%iZ@]lXcdPU(h#TA7HGT.E8R(h;EB9JT15I]q)XtH'h[0IjLYE=/RFFlcVS)&GK"[Ag`+GcdI?tTD,_XG..XfWAl)gT)7dOFFs3jC#ctjk"2lpNM!Ui0$5H@ja;XZXDT\FMh-m ^D%AIc;N5A.j%o%"a>#'h:kjq-Al`V\]Ih H>:F1hd,tSoPac]sc\'j:4\Zfo<-%foa.F%XN@]ZYm+SIFi3f2)prdB/c$U1)["WitMkFS5N?=b.\XXf4D@[A\\jpg8iNkRCch?pB@R3$:G!X'O%-B!HRanglMWA#5eaF2;a 2TCs_>cEXqFAo7-<l$ ?4krlJ/q]K\Y)j_$AdU"3'P`AblRql9t06f8(bRC&*:[#E5c6cnNWAQgS7aSnn1X7rNM<c-tV+Hpd`MN$R!AL": =LdPZ[D5mg=%sD"TdL)m;AaQ7P_-9A2s[.'TnY'6"C6aFL!a"G][8>&Z0U1iOHNSG BShrT+_I.=P0:S]oA[]6&,W.`4_+#j5G7Qk+67og`SA8X5RB1)K9WG\go0C_ao<m$^:m[JAA4RiVWn_V`c/am _]F#-;K^ HV\QBI4UD()0+e>N-2sI8bQ*>P_NM#%ie,fA31lW[sYn)Z-r#>4lA[C@Spt9bG0YQt_;1$V%O\-Srhr6H?jM\GX"KX!CpVK,)Z)Sa/YB6&^i4TpU\FNZUgPQ#`l5jnK]-.A*l<](I1T)M mQ[TM\;AdEF-n'*f[o&=$SD`oD#*7Kg#R?0'N=FomX:N"m$rM H*_2X1o,RRolm1@Pe05A)X[3Asq<ig!'gbhLPd`1t_,eA^O9R] jl+a=jlE$g+k<"$lm]FUTi`RPZ?3BUU8A.F0lelo#drgnH2oJ -dd6*>n$r0RHNDAfC`JoA!e*.E]NQWh.O8CAM_Yk%s0aaP22;=30;9p`,liM"tl\@(q9K\<%V!ifKFoh0>QWs)RDAA=Ra\o]GE"3"T[2iC$PL_ M, TFR<0G%iR[j=4EJLZ:iHnSsAGCQF;-gd"'f^PI3s!WP[gbp\p2Kg],fl(NBF,k;l[bE'27W%cKWL(J,8RH^PLqi5d[&W%Y5iU.IH5\6PfP"-2htG-L#W8b^"J%'XB6nV:Yk7'bE`sp[^i"l@kZ@\*T0jnA4(]_pf=R^SYRG+EFQe[V&iW3OMp!VRghd)Je+^<VM5=f^)qNs3.KDRBCM#6gJL?:(e1@M\U.&R2AJtbdNO&9 [\-T"p$+PLQ$Bco QOiA;o;N'HA`eAV+654S[o4[>]AjcN/g'VJHS9Ltn7b7*kF5\\`rkP@ChHLh"]W8!;V8C)&^%qLE?Mq88IHbJ-eA$;+qOaB@4kCGY;O=d8\.oRU%s[]O?\D\0JO98 L`imB\!#rHo0]i+02k9"4#)5:% A&9Q:,;sDZk0[o(GVlI*T-W[-G#J+-@r!,AF3NG6OhUcK-hXd(##J85GUGZp0Zi"9_Pj4^e])>UC3I8T+Hol=BE ([Y24p[<]CUcnR-,G=hO3WH`WDo]5;`=EGi3^d7aj#G.r2kEP6S];>ab[<d%03jh2X1\'!2D'sl/*+oZ8;&\"VXrI);dL\(c?1; Qp]/?g?:.b8%J!N`31"B>Or&U"dHHk-+.`=27f%IT+#r:$0SfoeZ%p7[4RG!3GTUmO/JVKYm=5aC$WQ!X^@"9li>0s2qj)2G,AZ6%F&N#lHlaA (B5r5U5*TX\LJGd1!hOV`]YpD)_>[i*T,(*_oi*"b6a-am,)Y"nK:-T#Eq"-l>R9TSU310G8h?gm$[7DgXt4B2i7fB+IEWi`Hi<^lRseL7U>f@*+N_hAsH)J>f?[B$(-,E*58/44`l%/9]6c,Kj)TfCDaNAROGXnlUaN=WIt_!Y9b5@@?@57K-68'\0[`cnBG.YRD@coGCTG*&ChORm*2%a"<'0s7TKC!hp_`.A2Vi,d*)Zd Iq6QK^KSO9[n`[soc&tHMWD`s=K]1h ?BbJ?pH.n>A%CIWKNsboRXU"/p%Ma"iVi`mA V'R)b^e^Ge!iqH`dqTs@a6\7EA(lWKVHW^,,2o5@moD^Q4\GN9YPjq7K4e`AadDQL-R]3/b89]MJ9jf7*2#m>=*RW&Dg1`A)dAjA`^&]^,OV.iYWHliSEStGtBgt71qQY86*KcG453U//XH5:'^R0<[=9h(IsMdA)$%L(R'mAW5BRHkMP\5dm.:"J?0]+b+=Eta#\XFb9VpAZU6;?1S^VLWq$\!V=./:2\+lnHEC=.oMSj/E72a7[kE1ZM$ h;m1=lfT#32?VZoCDnK?EAA*MJ%MGB_l\<&/P:3%Me(rQ3N&'@,b@>KGk`4D^h)Fl$DmI>L:J>^1"MYHK.o^!_]!qj(Z[=!'3S._MeE1GdPrI#i^#jGq4"h\DZ,?i?jdXMcI\MtsT1:(PG8#?DM?Zse)Gi1OC1W:d`69"akP7!>:PcQc64aGhpcnC/A+d/nn@fQsG3D@9+i"GP?G9[f.3W!RACAqVrdn!k/VWJSfoh;f5C!H:a,M@n\7_]oT *>nDGh*r@N?2;9"6cV0-.e4](:FDEas<%>X fle&l=!C,q;6dNIU`;?C#[p9*d+'LN_aX;a.e2PGRkcVPFIk3X*q qM`"jRY?>#E]"-`YLK[C:QTa/,8p=1J7_rZl7XX-\rlM0;$HGfZSt;_Pd/DPlGJ+E*aaO!X['htANedI)<'j+s!KKh@q #VO!HT3m\SF$Bt36o@0tc-ZYFs?VnN2)D,?Nf^['h4m#0;OLSfOA/dcHiX#L8b4dnDs-nV_btDU6gJ+[C%Q!&9kL^.Xh?JrO7jiCTc^3d@;\$,t,+JQOjjf^FUj+*m+*A4]??RgFBWlA]bs/CcX49ejPb08lN]h)>=g_C9`9sY'g+e3;A7At.1j@>4gM^Tk0S]E=;r1Q*p)8ira/O:I+9/_QiRc.\R<,PDD_lGKK4ff**n2A@HK=&?4IUAk2-S-[E E`JepsjP*B-$@`KaMlrHo]6i-PBP]%i]$/FKR=$>-Nj9,m.RmT8H&h.Y5o,Y4)8.MPWLmnRC$A.D0pd>3C_sB(-p%7orENVmP6Q2kd*SPg?M+GB-RBH0'JU%NVt-qg%>-A-Xk'!V2sEXF*"<2[:htt#e L*[AMYK3B$ .lH-Pk85-mqpcW.2o$jlf9>%UCd%E2(O6)#kR1,1K6OPDV1[2$&)bJeFc/R@(2Vr5Ko==WmK80+s(4>Il.0SE XX= )-[W"=@BNT//C4EGCWVSGo5/iZKJ@$A2:5Z:02L1eR-1Fdh[ljahX"+-XaD&c2`=eod1g"_l_mIK,kVP!.1^7J3\YR%G0Qjr9N/]hgAdC3@bE$hb`$[A:f+Bp1rYU6TH0!KcnRN4( r9 ][nqNnS[brTD(`CEkeoLoKAZ-Bn227d-k/%$i?aU2kD`I!Cjg& 'H-/o"E'7bdaY1gL6bpAefnAqJabJZfnQ"^G@%SV)S.4 t>>rrdNp7f5?Rb@EmA6_q@(%OCd^_]SDsbgf+C488AFd%Kn@dmQ9D\8P9dW\^/+g-;_?fDr) qb#AY+T"R^]JkF-n8IP7o:;Q7W=4s&A8?IKrn0U9URPPf0Mj7^q'AL^<(D0:UsbP>HO>&N6@J1`s,&^j/Gi@^#i+YjnEf>G&!)dohal(\&Y^d\Z0_+LC$c6OFV>iPn9WCd`?eM:-Ahk[#"daffELAi^sAqbgKAf9q-+=^V#4:WJa#fI5rFrU'BM:a?b-&_-j&[T;,0KH,!:poUkAORn6L-U9VsCX9r<25r9g\hltAV79W%b'k2WC"'E6H*:EA A!V1`PnSba\kVrr'AVShRN[''U60+%2)kll<+f8+MefEDtmsXgB^;_O5A6cG5j8GpWVs#bGp(;;[oNB9tD,/D3[pcJ.@+@=n\F*l!CHa%KW@(&@0>=(W%mOj+"?og>4b;3Yl]ocT0Nr'C_o< P':8(\3.Lcs9NB8*WPk,3.[_29,Wpt `+h%:0\]?>$5s56aeiS;7;tHIgZ`5j_WONE,e`gJPR^88K+b VMQ jWI%]mc)3]1tOt5\/?;TM`=$D# d"#pfLjUn"Ns=:RX?gObQa2a[i2g&<^(jG.ZQ]>rJcqWpPjlA#EYif^<&.pAl\3=H05lr.=K'@dWb@AWZD .""MQ7dsXcE^g0t9(:TYUlHjY>DB6DgGP>'9[$](VBh&a 0t&@Uf1B9Bq4ef$]sPI'S'"=ef&b\/j'HAM"s1tPkh-^'GV4j"f5sAl%WCp[Y)9HJWC]@VNTf:o+'5_L5 =R[Y50##nJhCEX 4(!G#<9A?oi$pq`Pl&`lPWVAMrBDYaVam"L70VbSbACEAi-;]WP )>Rp4ep.3Ap&QF2Q[C!LI6WM4a*f)62!>29VZ6NG]7F)M'%H@Mjoq#H^+.XZtnV'Fp4H#Cp?055[?AK3LIt#_if_"9msn[+Z V##)Vq\/_>kM%I.,h=WA4[f+Ds:SVRAoHdn!o:CS;ejT"?@k-Qj*2!#eXpm>9RN&JS$Vn6kq%iOQ-g%Cof=`\A']IGVV%0O O7"qqeBtJ)Ula4Mm*86#QQ\TmkR/!J2G'?6e`)6RVq5%*ItWq)P:5pC#X!:K^# 3 E-"eF@s5X9=$AZgJ>>YfZ.iq_C1t^JgZ.4D0]^88G[gsRo+=^/8d3e/(lr ?n4_4EL&%VX Sr$$S]@@d3SfX:\!>FphR;%P$R;TX>\$q=%mafk\@Z(C]/UZnI9R"P%@0U^_pf`opkp8.>?ZE/c&FVqlGBdYsj*S!Dq^8!K1?%mR:g:PCNqagL8hS"T(l[ ^<\J&9ZN%Q!AtVKS;DDkbboAKT'nkBqa!Q90#LJR;..-te=aabVt@40KFBr8h/T`Zr"A-P\1`84Xq\fCl:USe'(eR>dblk.#l^YIH,*rbK4(Ws,:?Gp@d#W0_+.,2aiK5trRDn`KO(+4kemO.lJ?g^bOsWG%D^P5NP*$nf7kFG@%0W]MlP*3.$TO^l 9;i'p#OMAKdl/rKO+jU3F!JBFdg!qXAl,&sR<'o]*p7V[A\k[YNQDr@"oct>!h8eIH.QU5'6L]Vpe*-0XUhJ,5aAkK:6]UlBLMtm5--at 3PA/YT@^D9!E;%cUR(ec5*-SHVfBA]86_b$]gT@ FOG!kf!mUmpI5A\lH,^sN- \%?.W&ReT]TN*jJ;3!Z7GWRW'[\]=Sf%A\GK$6,s#'Hr_ME8DKc,HiE*H@0f*_TC(8^'qCZrbh#.`50hC]9A!oK-Ie?]f^gZD)'sC\JEmKPK]1&6U:A<A=HOlI)9?$ErSj8$\)6.14Xla@eN,lj5+Y;g@A,=V\l7$h&BI];RMK6(__^n\[Z6rLKo`oO\q-p/$q%AqSEB-X"A=:AlDR1lKCHVl.Cgn`4?5C2iS>&g)d"GQDg4PJ,1.ADoP36IMsso$*m!@4"Geh>QM@e]Xd-I"C)D=`:$5An$4sle" +\s/k".M#dG 3T/,,LipcSZYU%c_T&O_/HrO+U,IA.$a+=U GBt4BgpPB`!Fj6< &#:5M<??Qr .T[`"[Ag"O^2!9 DWIQp_/7B.t6+aA/W9DZ($JcYDAf+Ne@iLs\;P`/>C'e0o,0](Clf:Dfg@-F"`ig:*Fr%>HIQ#V/?,t5H4B<Qs^A[l%88+d<$'aMa5Cm.fD9:A=LAHbpA3^M%5=rcnMAA$pCANJ0qYil1jG,8IPA/4.,b/JX#nhUbM%Ynn6S1]*=`pO^q_dlCh7ledKj1HfCU8$"sA=<\K=qKAfEX5+*?liR$rUBh"W`p8m(**5--fCj?,18QS"?h5^iaMZZI'V_qC#JPCr.`&0Q=n8LmNemp1Z32eBO;EACRQWaIaj0(]8dalOb@!NV2!tkfsC?+)\'f783/-1Yn4lV7c*A2Al9*8:;(^JSd#W69%p$jqQKJs8L,fAaCLsOPT5=;+2Sq%VmEA<1h#6J-KpU$0A-aA: $a'NV]oQkk^(f?eAnQV&tVO&a9p)A2Vf.ata,FqU]$KsTf']49JId2t'R"j7jO^$A;?9:0HiEii(OrTP'Wc_G#2W[Z^L2AieEf%=k&&-a0f..E8?2gh7=S^-JY'KkHm;ABpb1&)@lZ!eQ*!QXs0.qnTHkkO/Vi?pGje3%^0`EVcan>G`Xi XZ>kheR`oFNGZ'#pRA4:^2)Y).tsO%g\YYK#n/sA2gO*?MZLNpFXVcY@R;S:X3;9hHgF"N_JDmYCE,=lPY+"&qkIgr@t!!d?I5bMd^Jg2 IVIA=FRRat.b16dEc7l-V\7^Om3 LQd0I,tsa@fG\sOMF%P-K56+\82XDJ445em!")a.*49s@>W6`j)>]E$[5h+b`-ji*Q! gCZ01k%VIBlCt']*a&1 MUSJ4H+AH(BYE&B$7JT/TLbqtY9%K,r)Bt>XRsk[l]^9G?4p&N2.5J)4#k''Mq(1/FnAeCZrKqWASh/Te^'+p>)O\4rL[hY)F-Y+X,,@"#J2m:a@\Wp-]VbfRRl^$tA\!)('E-KC*[K27;KbY#$*l")_lb'NtU:GX%n=[BX`.$6RN5[["/$pA^,H5/*/;WF/H.D'As+N+/6.YYhfjX-a1Cq&?6I48OVR*"tDZ=#p\&cDnbnP6Qe\tN6C_Wt2f@ATsR8]9[0#s*IUI>gA^be#nKI`4fl-]%0qXQ_VM1Q=bY1hn*,3UIBIMOF 3@QLV' )F>H>lfHZs[P[B#bRK_f&d-5_d)Lj\*Z\Q+aI#U)]D9TN'&!pG=<8KScpJ'WjU?^5&-EaU$aU5AK)E5eCIO[TKt[&WPomg8`m=S5j9lUKB$`i GK5+qcW/>$FKQ:_rTG6K,#%PWP qM4f'E^ r;<_\Ja4/2Bo%a:f>)Z`X?)]0.V-<-=fkPIe$tRoPdI1M;;d0&1W5T$^dWVn!CX&]b8@:_AbB1c_V+,_:NtkthMM6m#Lh/PR?VEqb&lrCXFC`O!6+`Ce^5Z$s83MeK2`Ho_.jo\25P7ghe3XQb.3bfF&+?#sGeBp,?"*KNh\1XUqdn>j?V*Jm87r%U+ZCAgeF>\(9SPU@GI<<,C_j$QjT>J3k +9`RcbX bL!&*U5Il$PjL&^W>:$=FcVZ'qg-8VGg17-o1"B:B@iI$$'h:F$5#We1rS,^onIE?S/@%_gc2oC_ AG-MnMZ b[i ,-#BG_Z/jh0;ebCkqCQef8UO"$M1cW O"Li;97/9?Z1bH8MaXEi;3aAC4-2dLtfU@_=>R:[Plg8NkJF<4,dXk\WOq)tSP=T^)b#G+18Emjt.eHFst,G`]Xa(GBJ=5;"/>;/=&* +'/3`Ag kI-[i*Z/T2#ZK'>7PaVO,kW[20(nU+(BqGB@AaZ<4:YdG6jUAXB0CVteK!7Tn0Ai&rq_J4>O>siC:?#FqO6n,NY\_;SElXKtLD7WQ+*/J_Q19*]D"H(nP4,IA)p(M\X`or6MdT?RU5d-Mg8ZU)FIn4Jn4A-AF[mQ`f.a`;j[AgZL>3$<:jcnWk/!+Jajgf<F!&Ap:Hl \PE$KX,Jd,bnNr<$>:;p3reF6!Y!$f`&68$COR <["a*O2dkf]hWRNjKkl2K/Ts+m=@TjE2%^/R8ST4?+*cSY`M-+`dNhd+Yn3d9GV_lTP/3#^LKM!h-j#0A-QJ98d8(DL]Zjm?',U=+O5e_$8E)ikIY\Fbc[PLVco8:NYq/dIE`bYm)0@7Y+[DtHrlTd[B?.TYG02neN7s=fF#HrcdSe#B'R\a(X%hKTUN>-Gl]VnX-i)cVVI4'TRSP-X3Y<7,K[KAqoOIWbhWD18$\*^h P]LL4s7*KdbJcX5HSOLjEJ:DY&SA,nZ]\\b&^r41nPIoQ(83k<:K^]oW940AVfHYIb`GW2,C.G9X*tPI;G+RrZ^c65Ar0lp3Ah8Pc2CAgZr=9DBe8X8JmT;7*%Hkb9tWg;Za)Lj(VUX.>9/XbC>GrRHqtJMLA,,Sc7X:<,SPAVF]iC?=7CX3(;Vq es8I8Yjb[(mkYc%"+j!hTkP_c+_K9"KLjHo_2)$^;:;G;B@`!$Q6(W0G Ajb%tsAI'YWIFM;gE2;05=$db5GT#s4i9)bp//Q*GT?EknHAdeND;ABONA]*fV&3'-.@ae oWH0dCS[?5DK!gqA-b)I7!6-&ND<'@i ``I/YqMqY-6d$QCGOR-IiDk93Mbrcrl4K9/mK*5MP>AQZ/m6_EEti,m"A3X [fY0f"(g'ZQgE+@-OBg]=U CN"=?1m5\=&h0C2G3t-a.Zs5i-PaF1;QnAAZHeio-9sq9\UJ6Gj =W^(rnNgok]mS>Fl3Nb##)6#&DVWKP=+U3CWfV ;?<?<+cZSpd-+3V6o"!j]p53_b3KQUP0G;72`'5_ipWF59>/k\S*EjnOe,Ep=WhR9ABBiWS-%?F.6NQq>n#6k<*H`8U^B88+:-<(^=T,5qAp.OW%i5ncXA'[#2@72_tArB3s?'6=^faQ[ak/XQ*bqmJQ`C6SLM'E8i^Cl`bp!c^f,_5=t)o;\G*0(U/"m:)1qC+JUdt02caN)oS(WtK$=pB/A%qC6:Y`Y4E[UK5KTG47mePiqFRacGX9,ps\M1sK%@r@S,9fV((ond[)ZL8@.PR_o+2U"J[IADF 3!5sF9>UJIpQn830RX2VfpQ@Nomt_h]R0#pa?lXDjhQ/ZqWjnC2T-5bNF 0E'L#-.t+bNE!:U_W/4Vr?Up<\Kj&/K.p@Zh%PAtdXJNA@F Yp4D55m\p]-[/G2PUo5>haQq/^^Yhl*Tn?Fad=jp,=Xrd_eN&0?8G`n%8X_Eq98n8O$hY=\M,[@n$b32JEBA(9=-AcX'H3BX3\Xs0U'9m\EVs[(4)&$9AkXc:(]HX.dL"Kq_mb^2O"nJ_A/EbFNXT9"pqsZ!FCDZ5sg%jm2fIf2A:_A23WTjS^?P5ei0iq)a/#:jV8C7-r;SP>M\c_coqI`W3ripm6No[M0W+jtcAZsPS+)BdFVh>#lZ7De 'ora7XVAS@cAC?CCs35JjCXb9'!AJ-D#2U;MO](q] ?jhTskl#V9O-gZL6!ad&b95Qs-UG5hNWd%a%C5B;Sq;;"A'P^0mJ]F`SfkP2aQ_-@BpC@TBV#DdfO7asSY'!De! ]IT$lSo-c;qS"Vle^I:k(Oc+Y4DD jQrFXATEUlm-3&3Za]Fg<05T&^!YLcL%<))1A&>1N.YT/D+):#!go-,+31P"MC;k0Y'p.<;CoJGo+a@4("!pX=?Y"$0E1Y"%UAZo2_]&KiNjH@*PKmTY@7I$_a)$1cP;OVU>I/$tG3RJ02Hq`X^c\_EMCX8Z4#q,'HF/B&KiY"IQ&p+$@:i )1)3/D"*m=2MHX\CX;mQ+]((C]`%$A*c.L+37:A!@A\66Fih9VRW5dQD?1'"t;fq3.lrYB@R>7Mc>mpp>g_DZ$Y P@VE)Kr.WAjScRpf:d+af_S39#79BfE00ct?DraP:=\l3hNQ9H9>3_Aq!lD^-ta3GZ\W;Aa7l&s`q1?"F\JOpAR&XW!QR\(AB[ X(t34Rf;1X6_%d4-20)=!4!TO8I.&#nl/#.P\CAYeHJr'c$b5EJio^a:e%m4tqZ$3H?%5r)E$$5q98rtU2-QbqXsLmFA`q7AjqOIK&X19N#beR,]q1>^?(Y*8rMhthFT1qsjsTCGFJ6BPpJCVZlWC>hpKt ljt#+1DDZGV@eci,19LnK]j1sA!g>f9G>&rDQVA7m#Y8a6;1q8f:3Gk(VAc8gKXh"f.YXb0(H4mc%#?sCOh#jX!/Qa^c]5@*NsC0.;WIMJ2l W/h2FWr'Vq),Jqd:Zi$:!eDaC'k;qG$1>?Fiq_hSJd."BEJFU!QIQ4TMd%A"5rD-*WAmR_BF;866s-s&Ns'D)fQKWrp%9Vq27(fZrjKA;3"NWDl_]WD+_Ji?lY"D%LRZD*7m+:(0UqS`3WA:;AG=rKUii]qJH[$+Cm2c;?te5#YeIjm@V@(E$U0XQ^-Tq/*V*@hniBiK$M&"3T1]hV3""q@-^7d+D! Ai5D;=k_t]Coa&&4UesRq(3!S5XQB"j`0B`VIhBt&O9q+YUUn1f'1GdoKk"H$&[A:bst\+V%FX1,,]m>k%b!ZY!]mk6Aq0aKQfmbA?`-"@&_si2ig^KnJA2i4)5RR.m[1C?IlAj6X cQl5)OGp`SE>4&=%)ofQ;O9.0r=.pcm)HY*AMC86%"g`2_Ac2n\?AbA^p]!,HKj>g5scI[8cL<f/$?!+5iQVL'_^D6WMXg6fE\ImXTjY2pN.aH-Q0A=/SNO'$F6%#B/;AgcWY%cP?14a`l=2BoFZk<`2R# 9snT;^9-*N3BG"rq q#R;K<`"eb+`<"ie:@sA:89MVQ8N4>2 9\UKt':KMRV7!>j*Hs++aWcJOOSg5'QcFV%E7"_I`k^G:Rj"rH.42PQ1fF00L`f#pJsroLXFr._M2]-J] ]gPaAi#BA7M8iB1e5P-FSl4j!GTk'*U3PnPZ)lQrQ\Z:EUS:9i3G87PB. GMM?=jr]=D4BWeWWtd.Zp$1AbeSIAr-+-GJDZr)g: k4EOKl8g?EMYqAmK0U&N7ogmHC!A,]kGG<>!qThP`+3n7Htdn9$#*WKPDe"Z@7?MH$6AiiS[RMsq+$2f-3:U7N"X"(1I?\="i]1(-JmY%Z/4%)^AMdk/n%=`%Nom@Nd13#(YD`(k0FJrFiI:a.F4#N]U2WcD@rkT!G:^k3t4DC'Rm8C]L`ND$q]WYe[5$m[4H(%CBe7.;,t+ArTW!=lTKmjn!i=_4#BdX(ds1#1Gok3GC;DcO5WF:7@BT7[Cqgo> B04p'1LQYEYR50PSsAE@1hi(*fjocJ@L),e>[3AC:_ )0G))l6p?05M\n178XlA#h^lpG)>\]DS^_D&mULnqgJJ:2^$AVa_lIFh^dkAPo[gt?C'B+H>,1`_gboi-M* 5 30GeG$5B*s:l:O(ZBeUt!.o#'^86\%Vjdb!0tQj5Y,IJ"(qUD(Apj-s3[2I]fM41Wj/#c@?HrT+J=/WlpU\>GUj]so=jIqEV5BA13AD"d#8hl[#^2siAb'[&!F_(fRH&%h@NAm3,>XE4&O4>f6IP\6%nTrb De@EYF,/Wbs3%@p@E$YHQE&Y`Y_D)g2@'/$4]p/Q#N)$XnatM:<:HrPg6&F7doN,Nen+bHtE4lJN&QT9fl^P>W3j&Y&Q!kra_M9[192YW>R`!U^!AS^62KE;=[AVrPK:i^_9] A)mU%SMngF]GZ D-Y+5S@HbHp'X^@*/V@QcU*>iA1dgK e<""`R^YY^):rZ!#9#=ApYQo.EkJ4.*EXcjqmS*:kQD6gYdi$.HBnsCni^5rq+SY\0hC=:t:UH,Ns9+V&k,Wt$DpSF!3HfAM^fI+-A*"9!=G^+hL9R@4XRG3S21VGfZ5a c!(:r+c7iel3(ZAIbQR>L1BsVnn3L :/Blg))[-&h`&IR6YGFCXBKV&G0)@AGTW7QY'$XC0/U<(W&*1R'&Ynk*A8Gnl]3j20ReM1';6T_BK*9h@bB k83;"nq%n]FqqBQp'?QD4>6oSb[4dm.:+@YRTFMABYW3eI.@<D@,'o##hVAP?B*kMl@cY+AshCHMM4UClWn#O4tpgtU1a*"5 cJ_Zt8E9640;C9AkBabe.0nZ%VYBYF8;kl`9^^`aF7Hg''q#]bcXKV#_@pj:)Pla@+ +!6A*no]^?$V8($RlJc]jXWj6]=9M61r*f;btbBT*(N5Fl<[ON+'4#X'hsGeGWpML5&6XAIGWjsRs]B]8'IU#-m$7i-RQ2HA)MqNU?/b_KnsYSD7=8>[d.)*SQs^K/"+n1Qe2B`R/+oK/3Yb@C.1O,>kG9d%=D8A2'aG6Ln-P7nrtoBE_;t$aA#OSj/#dJc=[X9D#^-#i1:\rjR3A*5aZC"2"bQ$otgkEkES\MoU%*H'/i;T:`f(n8:\;"NGRgBQA<.Z@,7a3R=;gZA9MAV6!KOH:=tKWJn)fdoSC=ttJ*N,B5E'_L1?Wdl-M]bGpf@J6'[gRU,Y#edf=T[($O:22\4Mo(Zn1E85:6lg4+"%K3`PtR9*R$tlCJ7FJ,bcbd^T_N/nA!7*QO\0t7JPSrlf:-Tn=q`S7WXG1;7d!N7a5<_6Ul`M_eTE0eZbfb0%E2])7@P3hIDkf\S>#i$Z*[p5>s@ZV9\q=n_O/Y)G;*^S>?/NXM"t$M@t'am*M92] \VEX]^G_XTfDKL4\tA\Ls)J;%:1E%A@8d>&[Am,:Ke\'8kZ$=(+K[s)R]rj2X'!ID"#VO.>Zh?L"0o-=pY^!=BRMA5g#ZK8-/:ab3:mo/F6tL-jb-N)At;%VA["R. _o/Wb#;5C_(NbF1F"G4N(oh`^$18bA8aL`8[>38W#c6t/dcEkQUoZ0+S;LS;G]a\>"QKCsKT4pG6dTVg@kPTZ6F$&*/p[c+n,XeFd6YiaE 'a'n;C@t".Bt*Z?Tb8A`2sErW0CXD:rQ&B?]Ys)+`St-2ikC#DD5$!LORR*jHj^^eWiQV9GF*EYnr.:RT<+^oe^,DR XQbpF\JalQlP2%"%Q9U(?XX&ER:`cSLl9-%78O7Ol3BJ")P![X?J?))$2T+395?;[A5/<4kqm<(tKhPGf*D.O2$-J4t2p%5OFiQ8Y^1#b,5gNYWsb"e/t[`JqnF(*D+5aD2!_"bGEcQe1V+>BARj*J:t*MR3.\WiSNg8BP53,knAVNm3:pD)pAh.JmTnC$A1pZ_$9VOs^[n26PgFb5g2 WWr1^#5TJ)F,2=R%KSp2J!)?Q_b$s9/?lNTAr4kb:/Zq'/%o%K>Kt1$=L5Nroj9_[3;.;+ld=j/a0kq.LE!Nfn?[EN!1@:GsOElhN0=qVR=ik0I<"r/m^ZVk]3.Ee_3;aACWCV<;0thiq]hCj\^3/eC*8Y^$RKh7^lBMQR40A/7P8Ap>4P).gUKPe2XD,f7pAV:aL^d,Un`am8iJ"+o;p7<(VIN"&q#g's^eQ1lj<G?q597IW]g4! F=<7I5A[,H@5GlLT"4dslHt[^Bl=0fT\3sY Bs",^K.Tdcj1H#Mfb\@cb33pkjI<'\dAk(se592g-ja-6Qj^(PgBUL"iSGhm/-rs1eaG2meF%8i7K0besQKi_?L@54>k&LhTHR!F<92ZQDZg0"GKS&9^eE]$7-fad7aLC=2]h.4IT'`XR(_s&#NEptr_h5^>5[2Ff@O[gNZ?\Pe5k/AO?MlfOmHL&jk`ei$r9hArAXg."tEV1+1F^e6WeTS`MjTM4;/SpUt,0&O+V'41Mr%%ZI^t#gk]<]Q[Epr$VD^00[rP5lA'OdjbU;R1FO&*#)e _"N/8KCEOi)QAWFl;47_k<[$PA0RR c)HAB52JL<.+TLp,!2sJ;,UGVk&L#ii!4V\mibWR3Kr6hp5;e0>]d.XHrKMg2*#IWT@6#f$JR>W6U#BnqeJC.iTePg9A?TE>cfs1Ip_N#L$s`X9aJN\Y^,2CTllW%8#r@MdsB^@7&MEfCMpFW0Ze#2!:S0Xm< +S]6lCPk9L%AFM$<.l:V5hF+eXAt]i>%)C8:VA&QY]q]Wg[;@G21#mO*5"3ACRjDO24Iq6pf8e,L_JWU )8_'+&O[Li'IJ#<&(IUnHnhP=7q)kf`2lX4m;fFq0!>)p9k+]a2 c*:'^,>BWlUD^W-63A_O&[X]Zkp\da)r !WRk#[j2H)N^4Ss>k3lVpgiLM&iSe\L4Tt"oO>s=Np)UqfAY/>LPQ[r0L=?5lMWFS03H,XM2J, VN,%O5&2@msR\m<(%sDJDPAT,`BL%sk@a9.sq7*]A;n5iHY^?&ail;J?0**s.^'C].*sAKEn4[D\Qg.gSg>jXFfX!%6AhFBt@mM<^8jOr#Ni6#U:icok"'d!r>k(=E*5sQkX?^<^-4R)X:!a%RCGU83k"P*:eNCCBfLjtA],k&+;oKc D+`slC\c.m8?LVsKJ*2Jc@%FC9Ql1*o%>!2hFqnKD0cUh/Ap(_4a!AYA(gf6?;L0"H0R#AM(Lr6%q@A#qfDo8CaZppKbk:H,UJepP'L" V2pLY@eNG`;m!OQIE!^?RABSLA_pb.FbkNoA%m_'F+;^&AfA@m]<*J?*!$NPKr-=Ze%kRU\gkn^gDsB0_?mk`QFsHcpJt3n;A`.0.5)5Y8NttXQ;]LW G7 b_3,XhdYA0Ak1Go[1j0K!-rC7X+1o;;U<UF+c]GFkWifp/XqsRTQI5PeL_1`b2]?(gs4b2PIBj8H$Yf?mq1fBcB3W8^#d90a2jCkkW&].9Dpt*)&3`=L_`i0UsGc8JEBe[HKqWJ?da9A)*hm%Mg!ajr[tm_V\/PK"A)4?>*9iOWE,C*tkLVZ^U-olaeOWM?hkQ2mFLlOfV5Zqt16o&,C;<p\4sI.a3-1n%"O%;]?@&&Kkb'do] r,Who/hQU<`Jt ^N0?d)pHl2h+,,m3o7\4k/3]4f78Y(=N"JRm0V1U``6Y&rBfgfp?'FG!bIFZ"_GefA#O.b>(LlZbfmbX N0q/c[@WlhTsEsWG&2CO=@@EFWdL0sAsk99o## L;[f4-*IE>7;%X+:A@F(=-U6o>nQ<#./LV7FPb1q!6aROsa[[\@I_F:/<2(7^TAL&8@Zo0ZcR.YO<+'cniABAE'>O:"iq<j/-P-VV8+7JALk;f>^=5NB-'3375YdeL hRCPe7UQXLT*bcA[13a"@.TWjViKS^rVT.L.`-o iS$!Mq?+K,Q1Y %%94)m#8g*i QMdVkn5X*1=`$&8jNs?/isc=b,*SAmYT/^MWA]"@SM(*Je7G;7QtkMfCo416#Pl:.*NkfSc]T5J;)!ff0m&q]`7,nC`bMbpUn\)o7=LTfP-c%mTPhm:?*![U*"5((V?8,FC"$3JL]7n`.>D$AjCl?Y/E%%C,+s7\Ee&Ch]^ m-tmoYADoQX6Vj>df&lXVCc?cSBbdCXEVaI-2;72PVG b$RB*iBT]\O!)tOH&fTbp&LMY bAB$3,m$SO;@Y>&>"SqE=%gLQKq@9A<%'_f6r-9V]`eC,9`!"6cEn:@e*W%tI Oh?Y[j9Hj#"t@.#K5tC<rGR=lk;8)rk]BpIS(8MCRU1c<=oq%&ra-'kPVc(PdFK5,ES"@(_I*)8\"M7q^EeWflUAVCDN\M'MJsTZi+kXPX)43T$.aW)-s<:#o8*Hq0MD1=8B23Sj:>J]qVVVN #A0/A#CMrgb2'slW>-"Wr4Dog[$-j]eo"P=Q-cEVCE.4_/'QR8rT+8=8T2h,A@'N/\NL8[.2K0T\;OS A?(AS&o2:S_TK+b`G:bm:e$N)[G=# ,@;\KF:R$&`D];41=E9aA)c b[Ks+K9l,3r>lZ%LBs`(AciUpF;A*$"^Nt-i,F6d22+Qmrk9@s 37'LPk3-dHad;Efkq$nJnleeLA$YIASX_A2)bq15M'1l@W@=7Y&`bqfWO,.6p/pj2^8/=C._bId'"Td*Slpmo9JY\@Fj7L"(YN!jAON2CAtF`:rDtL9b3JQ7\ZmWZ1LnD9bi,liT0(e HY);_0Re%r1=X(>fl\9`[Pb_.O)3TeSDF`+h@nQfA#3SZa@__C#65Gc]$6J2R(sBFAj)A+VL/"LGY5Par[F^bo!m=sbTY-&aa^;LeRCD=*JNrF0H[p0U1*U@TL=2]O.?iK6,$T<`@/;Gme^Wd$\nN_/b8Ra]pZFeq#g,t?D-V]M5$II3(^b.17rU:(%_I!:.j3M1oooLBP2SW#(V 3I$9CVNU4mdl1JpP&oq>,`mJJiIf5e@\H8i@IcP@8hk3]O,\;43*k4?'q=12)$A6>0DB:7B_el#XZ!U.5C ;/?r:qM]QbO3I&gA%#.RncpfG@UGTU#M) /SH+"r;Z(mJ+M?i]*CcU#dkn"J<4510Z.$YcW=Gs#0N:7"?0X9(C$7,ZITf$-1<(YV)i/8it@m;42Hs1b1JZnMC[t!4YHU] @*!q^3l;bhQ<F&4^(,TTgn]IP:Oo9.=?>sQGolboCh0L3oO\a%,eHENt Qc&R24M$j0Q;C?b^=I5=A.ZA>_j^GY]Ds/D"E(jRf@p%dkE13&O8AY;^Or,!?IYUH%F5k_oCpY#A"FUWrD*R9Gb8iJOi'HAKZ/2:RYhToX!qIIp+`N\Y2K@ e,_3i;9f.LMmEO.Pg\6b$tjF5[sQkd,3XHK&HqVJJZ'tUcnK\gikacet-hQlH&pPAD5TM[ehBh;)LL1[#-O.e@-*DWq?7aeI2;LG%UF;_QL*osn[`TKs^EqZ8oaE'#:p23P7h>HBHd`#R;9&tS(& qKeFHh<$4'tG!TdG[L*-';>+RKU J$aNR2O=E3I'B__9B_\BFolMh"6O\4rPq$f[mXa5'3Tj4I!5t!D1L4dF'rbiUdtFj!(*fhh`L27$# PA-YsF*:&o+7%AoK!"T^<,Jrp"WIr8BAB\mEBeg,&GUT"$k!0(Etj:T=J8W%G"1YGqYD9]P&nkg2-887t@d^XhEJGPa3RAeiAi9,Pqobp+Xi<0)h)BgrOI&YW=R(J^;;_HiX_f]aY_=8@ZQ4-&AKh*RjZB`rL"'rMnZf';Lr+M/E='=$VCmB)O@o6T/I\!Ut]RVCEM>o99`ZHXp]81FIsqa_9ab:+Z5-MK2ob:"c16C [p.IfG",\GPUBAA1JROjW.c,UpK,Dn`'@co6AQfr*G?TN6kgCX^dI]>Tb/H!IUWA`nU@Neb05D0$HQS_I`'Y4!dTl-&:p,+CX^MMj\W@1TC05 icp/=Ce*YVqS+ZHb)Xr*U[2(oN.=CVI[H"!;diAT_Fi!M)L&G1p_lR0NFYj.aB@@_X`sB YX*J9.9'r-`6C%ijb `F]Z6nAL1X/nUas1A%b<C]75JGGe,q",DDncIIX/AM2=,rC6YCZ>M@Ah3Bj]d@ ;"8DcC%orqsAT7)h9\QA=i4A+Ka)6sG,SY6X6qh)h$&*kLL^#&;ei!;()!dVO;>19A\iZajHd;Ihk)I?$orOYU:scq3Tr@<+&$E53g#k@;5WISMGOicsOOq_6n1D_Op4F:7l#&EhbpQO(r6r8aJlJL' d**Nrr/\bfhpI`Q_>q/-3M)!8b<seDU $<4 []6";L]3Og $D5SeY[d/Fam*c1e9g]qA:Yd<>+ZZSF[Y?: d6ri::(sr%,.L,8L;9O'A5cq`KI!$9b0O7A"\:Nc@3LYA"eK3UgBJ/$\j%OI_/D9<;2m.DUr`q4#eleY"&UL!AI:=8'g__)"r#:VN3D1#Y82mEA+Ubb-\g,AaIN&>?POXk#(94`fIfA%eQG!(A(;Z2`mFGs]c\qmY:nXY6#k5"<7bO]>5A?(m?^3PQ^C<>Yd;WUFRs8@D\C9l+ GS9RC/+R2VWe!Q3*X5=_sj!3PDC=A-?"SM_`CG#^.j-E'R:7:MVMW(TL>lO?l=M*4rgI>:052*0b%m[dOD"f AI.3n.MjLTn8K:aDTH@mTqP'qQ.HaB=?6L?b!ma5:"A=3tY5C)VRF'GIdIEa3JCfKWnQQB&^e7BUcZ>Q7?WIP.2dP)Q#T^gd0&AS-0L<&@4\LB6pcW "VsjB@0LPLMr 7qm]ga1--#P3;Wf4FVM;l]I)[Vk_^:IiW+KG>(,SZr8_%Apa0>SUBhAW>VY^3\JA\$$3;RfIph*9P\MbY9llP22N1%o^Y3oU2D#k)*W DCN&1$Y"@TSp+`4c7 ]t0mh(IG"/AXZ,D?i?_-%l.I#g(^#Z3%g'RmB4Us-T`G]:Xo'rE5ZDGl5@,]3crC8_:^HQF6h>'d&!%3['k9O&gFO)r7SEe=_]=6Oe;DaK:XZ%VNm$o%'>;M>q5qH8@DFFXFU^t@O8DQP-J*'"Fj+N4Ur5[?7h6).#+C[:J6I39>Di2CF+] Po"7*"Ih";gA/nhPJ>EP_9"?e*m3*UUAT##9i7eS%T[/m$%Ab, S^!^X+DI!tf?cN9@!t*L[2NWOZPRfc=Ao E$AH=\("8?oe15>dT!B]T<ro+:pAF1`'aH;XMr*$U;)p%9P 'Hkj?04I]Sl;j&$(,S3IC8,\($%XND-+i IPY]DU7s`@PBo?d-bfZ")mOi#$b2J.A3A]Pk<c;`eYeeN7\kR4>RtQRo Fb6G4YJcKB2-i^Nn^t7)dTOdC:/WlkR1IoW)GF^*:=YFA>tV94KRfkYnFApkbb^qLqkc`7 K5m4"$[\RIIYJ-Ys&Qd;P&RmL;fs#2=V1LQtJ[K10n+DYg&ig eYsEbt4EjPP@FsaUjs+^[<i4)Kh$2fe(`b%GqZr_+lgQ>idEMS+7'V)&=nn_m1%=G6ZLP8XTP'rNo>%[Qb4/4seF[&XSB\EVi%!S^SrtiD:ARnB?3As,%L@_OFhm"@:'/=N*A*OMESS2@M1VpaXTd_ISUSkUO@ERQE`SaJm%V0BX$#WAd9Q>_#-]SV'[:N_,_W4/BeP(<,PA+A#lQc+RF![]Xs#_A1Y3Dl_A3,kXp@OXT(i'M>m: +#b9+IMkJ?!94+p`q0Gbrae#sVoTXtlbmSFt(^3P,?jpp#&H/f#9T8m]UJKYT"N?,36RDGgl(5i#j]% # XE>6l$5^?0&kKs&9h#P-G?$q1NMUXc"Y[Re1,K%2RI3D q8?7J6lbG(>jT??)E/F8%MmcChF3Ie1M*d21#"p0Kn0:Hp?8/XRF! $T%-<0f8c&+DV[ZCV#+;a\c'<+^"e`A8+9!<03(F">XTr0,hl-+pZlKA(9a\pCQt:QtMjYYman]4nI]-kD@`kOVZX3o_`Jp#@\q+hJ58LT_8El&d8%.%=o(,!f&"Kca$Q),D<F>BJ)_FNob(/BD5Jp36H;.R-.(fE(^HXHeUbJkN>X(Rb-<o!=P5l,68d'GSP.OGs3O$VL5?a)]XS.5"j!CX'=A2*O.K(3Oe^AU3Q?9Ft0Llm1Q;%"4HM; i,@h':b0Xo/icY,ZV1"W B .c2gXih(2%D(Lapp>V!k1Lth&XdW-Afg$@0'@[bcA52+=at?gA;4W#354d(Un]l`=+^_'P+$pA/4&STiO&>t5#`HJs4V%DTF@j/.6Z&U>'*[da%>TkjrnN3\L.PS>_g#)Gk&fXrqGUJBo+7"oS?U5UeE<n6NGTUJJ3`1O:JKBdYL+oC _`^>'@A;Jo`;r9Tc#)Lep\scM8$--A2C(K?SZlXU0E1M00AJY+?XnhSE7WU?L l!S98_XBA3$ddc"!rtUcTDOe9i;hk1R+`k(?a@K1lmZk5:eSAo*Q&n>Xq`<`I/sg*Lg"=Q_VO0=pgqX1+C^rO-.V& :>rMD^#Mc@-!f--t:KR+ 3mC%[4&nS5!sC`E_W,]A?,5CDSA]i)k0pj`_ne@Fi9GJt6q-d]jJ-jh4PhR(KbmDgL9p:KakJZ8C"?iso4%Ar\5[!Um,i)lgXB6Xl-*U8V.Nm<%7Esb_`?*7tTMqhjqTGh0.3[%6+@dC8W+h(WlR2;27:a6_O$5k3gQ_o(bh*IE0H#E).4b>9bm<%NEI?N#&GDtP6&N>cV3.C"_:O.=!23?!?3LHd5m> NRA)lO3c/d+\1A[QB`C\2U+57OpQEqSc&]@0AX!d,\l: H sm<"j5'(d"[gHX0Y"O#`$hU0mOkh01NWt90&rAen9)NA.io5lq#do>peBfp<>A1BeiI])fe!\R)]1\"OC?0Fc0k 409tn!#qQe&N@*E[FLpPR3HoY,PS,%8A9_iD@Znc! Kp*gIhA*nI"`>;Tsr;g[R`1cmt6"Fj/Pd#gLr!=8XR\:Amg \")eFXG <]JL +Jg@`MOD7a9Xe)C0oZPBE4ikP.QT;AD=3#d^t3sn1il3qM)!2>\c$\12;!jkUftXecD"IYgtr#2tR*Apj$rRT:*-nUY5]T6o*fFNMq#I :.G\ah3sq#`7mT[;2tW;U(Ps(ohs8?SStj13fULZHM2&-[9#/q V\fifI8dq+Bj:NCjEpYa\g<1ef3>cBJ\%8aklFb4V<-A3CW/+L#C(9r+XoaMar ,C:t>6r[KYT3XC#5Sr1oVW=q'/@58a@qD!/X)AA_LrB?Z^V?j=WD)1%eD7=o9)Wti:`O3"]r+>KjIK/K+3+ki11&ciJ4+p>`lA#]p[int1`QTg1/K"d:CmhYG,h&@F3#>h2dZ$kYPIT#Bmq6m4f,seO5R)Xf1Fiq$Dk[kHP74lN>^mapAnWrCiSb4HsUYAYr++\**e-%UVjtfP1S7$K)Y6 0 &;OPXKY]L6Npc>SRHd`?n#A4O3[:tCR4*!;&DQ5c0`lL!])^HsDUJ #&ZO1bXbe1$:q;/Cf:bH57oUE]H%iJ6H8^em60DEeAX6WjXhV0_MiJ]tdAaH<oh,]j+P"R^e0]sJ$AWa?XnK]hGCsYgk,ht]_7])nX2*,+?3eSeA0L^.OUq6&F^[IdF%I#ofm;/J^W#N6N,7(>o-k8\6FSN(a K(6?T($;dRT0Po5\MJOXqg^pVOI[.W<8\3Nb(s9g_-P](("A_3$Ra;b_tSYLb W3RKP!_JV9],P.q!O9>?Z0d^53"Fi+J=bf/0RFnPa]'f"iY-g\QK+ir!K?H&MK6K'Tm:[>+j7P?/>mZ[s9(/$=sU,q787+2bY U#h8<,qnUc6tt3nJ[d372 (WA&*936B1%+9m_]j8m2-Z4OOHppbR-GXQq!s?HhI:JB/4,AO1+b+CtmAAS.In[)=AkLOMbmcD ZP%sqqHrj]F*BeAaso=.5F#BQm7[`h'3l\3Y6&!S2j+pX"]Ma8M; X``jhK(5<%Xm_(DbU^I@1m6qGk0`2hXH5T4Yaa/#m`+cI4UiGc#^Sdf .">A+&!A:gW_MVb-TC/S"c^r;9bbHc6TEtWemNqNn8bbDs9=pGi7A(SoT2d&=Fmo6W!o'haZL>GG`9+DebsocV9q_T_g03?Kl-&'WqE%>sn`4>cA?_@-`p64Z.rVFfH>t:)d#Pe7B>oK&Z1]D^A"A%2`kh#>_[&o/HXjhH2LOC$fW$I1(.?r@VIH2sgDa4o4XM(1VTm4^!Ra6`AD6T;U9d@$;tNR:]4k^ 5l359gf'b"AA&9)^.r!>hA?)]]bW5F>U&Si$ss'7_3,6[`]Acck9AC8Ca\OL3bb@fdQ=VS(G=ieci2BBb_jFq)9L8>o0J)DAL4<]VG'E\a!lI1aEaG-$(3`N 2VrDrQm+!>t_O-X`Ze2 $mI9WQ2T+U;\1P;aAgAHl^Jn.;-@TX2C.T2J\R9A*--2kjc_X&sk8r;^'$AoDON5=bbk6?1,0rpa#+R&?pGAl8f@_])G@lF#N=_ 7cLY[8JYO'k%d[XS$ LdF@lE4Sk%A_AZbP^7lZb62k3p0?XR$q74j`Pgc\Bkdt!3CODA5Et&8@!:A&Z7B4d3q2'ZH.EhAGt;rWYYo_e">WQ#417ATk%'Ro,pS5;`5'&E'\XK>2o&B??IHl,4Uf>95a)qR5F9;Z _AS e-cWA!;?Qc,UiT?iHdY)5rQgD*:"-:* /l./Q%&^b)_`h@37IGR*P)V0Wj0.RIS+t _UMJW)d^S[snLfAocTL(GIB6ts4tr3%Sr6^S&P8:npYaAlVC>n*D``6F)`7-pdG+L:e_e7MnrfSJntJ GQISBRm996%%X?c<l?G1T'A@'Ih!1hp9U*[Rm,Y<@l.:'.i#`S0,nW6hKGn'\):IB#Na@$,5JA,VP5DnErnN_\>tKSm0);?L&`D0E`[;\Rc-9c\ihT/;*9\j'(V"-T@#>lgS$0]^Aj04nKC$<9/D(2K\od'XbO(J5F9PR6=BGFp#3l[p"n30&NEQUe(OkEiJ8%)BAPiK]L"6eM7Q)VO)FE\bYk;*,R %,K$,^#O2eX7#dEKk>]5(Z_p\B_Al`f1HMokqnGU)L8&AWEbl"?495+.`>IO;o0$d32g=b%W=n[>9Bn$iaB=Lr[gP3ZU6;htm_J^EpNtWp;;9cXO56Rro-'13)&C?tq_CX[g'QtQ8fHeQiarjm3ha^q>L@Fd`A'Vc$i!FiSXKDh=*Z4(d6,`.+K>Kq`Np%`.4TZ*d-BAI#/q[Ns+(g(]0s:X,A08)o7ALtHHCOOL&@NqhmikX 8,>=;]!MCea7RC'0sHWnW'L,7E7'+o$A%t2Ff$$a(pZoc5_76#cs76&,b$n,XO;@M"5VRUld*"q7D+s6.kBY]VbTIQAB3PePkO9gIKTSVnZB&0m,AA^?_QRkk*\;:;UiS'6`N:;2.H85:h2ptSR`V24@ H g&F)&@T]A!Z3EdA\L$rnd &D9TN"hCrMls<r^MSD"7SKAN0D#NPe1n<<;e/%fhZHOrV"gLe$1j8Cckl=Ei0\#tpYJ?*pIXc7W,j7r-25<+K`7qh$,Q?DGdpNA7A+PhUiJ'Y9Lnad?8r^;^;t6Did,l4\5%jH[;fPN(0.ReEQfRcidVVY^lX]F:71LYqL;A`m$M*t5(]c5d'A8%"7%!r'mtFDUj.+g&S].*+?7^DXAL[s+/;f-'#&sk&Z*"b\pcchVBdi*7k-Xf\+"-#A-AlbL,NfbcUf6">]^*PmcEOGU4SKjp,1&(]?/.rqk%Jr:UQl3H!X iHpMOr4)0ZB"-0jMqA!>21F/h@%_X$&)Ze_R?_AE$YP6o`,\6&L@tnB#Ja$n,YOF1;e2AZ6;>r9+&IWK5N<3Y'5 GrJcp)ZK>r`TXr%8QWs_m80GnWE[L%geqW7P_6XIq!-'(imGMnKg,ZOUf='#d0[b#&LF%'kK@`;/edX)=pGqsjOnGG:467Vl&r4] SJ%sI%/VQX#K363QfJ,*YGK(1hHf@G4'lTTTL9>>[T%'I3>rAG-:r=GnFE41HgIo=&PT[^BWH]M-!;W=)Ad!.MUs@p#[:>lmd9&^8 ,T_iP9"Tj1ItmHC;-Ib'[r,l?RRV2$V-j[#;h:HK*P8?l+h,$#=t$D,%-Xo)t2#)RZr:>T[i(jlBc)E+>iPIP+6h<Xe\\5FDAX`8@]aGHjX[Uq2k`tb<DZQl3Za%Q39bpPI'RT?O[M(/UAdRsOEqF6A=6#&_G?aeNHYItHQ"Sat2R+jpA`,RB#H9'WVA(45m#,FAR9&*7TK-I$+UgGmA+R9 PC%^hcZpYmO4f%aQe^"a)DC 3@cb"p,>k74KWWML4*3Lq/#6[bn&_GsnLPMI-+cl>[mNdb"nl-$W']\'KaLPNA ml]t^WNOt\W3aS\7]"D5./8lS'5g+Q+hlZ&mm;OK;f"@%s]qkT1n$T6AHtX0FM^en7eIdsKZ<60;(:X88gEg1W@9f&[Y#j!;R_\7K">Y"35C0IXdi0O/$/jm(!l+nmON8=2T8fe&Tpf@YYJi;BrB9Oq&5gDl'j@9F4>/"5J0/Wg;ApWb::fBpp[B'MCUCsKnn#7Uhtp7BqAtS!9f(@Tc\>pYD& Cl&ZY*:5mWKZ3jDVXPZ2( U5KbP]\)#qAK-^NjVd.b#'qk>#F.Gt?ZK@rVt9FgG3mQ;iHIe&m57(h5G9i/8n`:G&HpfXLD:\g:RXg`P)X\k\V-`Bp8Q/[UP0OBCCMHY$i"X61b>q.Y^-7K8ENOXTF%A92nmd>72e FEo(JD?ZNYM80>_iD+1.R^H;pK=AAqLFXnDD>'@oV5,tZ6rpcpAh_F-$A(ljbg-bS>N#i5 j%dT6I_[?_$`a-*)tAjP Pf$e]ak1";1#G/\k)%+c[/3P7\[qQ:\cAE+4M>^;lACMfV$_d hcesHeX`,E7a$_?sIZho7V&49_)a<JT* s9EW8"P_\!"QD)_0\bjUYH!80P)l6:'isq!t4c(Fi6Q>>X9]mhD""gYjf[9K1caC:Va$SPl_KLHR1jo?Snk[R-l$`'aWrA@_Iio^_b!2ZsP^Vg_6Pr`8@>BdRtLp2_G\#iSoJiI^jAj3bm[=T"@Si FfG?o&r(?"gb>% =(jheYkR(BWC_H^Ki=1q-aZ=g*h:Ls! =EMTN[-n2 [MC9*d$s2tn'@0fr%KBG"6k784fZ Dg%OTX0PpR7Kb O5..q`kZ]CmirOg6$*Es#<5VXV,Sd1X*$*oo.&ak3N+g80Uje[H0$l+\1I]*lRi)6=h?T9FOHk+>)JT#a))fl Gd#/"!24O6G:6@PDQm/?4k_n7%[!Ei2Ap@VXmP_Agm9?=F:7WeW $NF\3C0%aI>G.ZNDQLQASrn(hjfH,.Z(kp@:&jI^.?T2rLol<;8o[P5tS#U9%6Z0UJ!dqs?(d7Lnm<'K%_)m6n^,IY;-j'OTCZS`A*j_^b-G'56kcZ'IGa^kNJF6#.=X4Y/VFIG[19(A`"`KjoTcQHfL9Q^0jkRNZK5I>'&YR#g"6.(A3nU?OIcnd+QL[&jN!<!g'`LOUoTWPO3/W^R^`#a]'En5)=N,?D;TmBitXdG0OG!JD=5;HkkOY>AVN];igf.:E*>tRBO:S[*mYjhPCJC)8Qg2$s+0AKeBd4(s1eZ3WD#_bVo'6m.)\&c-?V+f9=&A_j4L?9ZQ:-c'pW74U%r.m#DEH8f6F7H1BLDqa+eIq_cj&T]dr DLjep+oNt93$T10 GXAaL(Dsb(hT&(:FTX,OtVO\9I4#2%boc,0Gh5p(f]'bU$L1[0ZBkF#?ogBjUm2oQH]pTinSN":cD_FaEkA7_M3\*:Q)^WUREFZde1APMp`McO8pe^:-^Y&H9QR,#+n_JO&0Np+9re11>)YM]fYAIkCACaA\3-7fKIFfY7Xp[s\oM)f&*+p)pFXkpjGUalhQsV6iCn2iOBU"?19Ns7.m-_kh<-qI8OlU3m<\r;tM=]]b,/.]'%Lm*Qg1%jGlE4AfWh5TR,:nCU3ob!)XMF@^2%sJdi,@/Am2Pqgsa,nZm;*'%^XK3e9R!96eVbt'2GkO+s,%\F1Vcg^W"s`NR8eM$?&'MA?]^Kj<@nS75,jA-V,`;=V:=p*@L>_Th2>&7TI=,.m;XE3142Z#0$m$8&(!7EC%J<>+$t#-;-"1EVJAW,`AkjOtXb:;IaS#q)lDk6J_DZaJ-P-7?]MO1XrqU4ad)G.lD%aH4m[:`_Tg`5^=Dj_nNSfQ446ffRCc=9#Y.j%AtJ4l:+H2oK`*5;d9mAIl_J5LX$S99sY#TA-=nB*G^m3/#T^"sLOb4Lg6(nGa_'L '7$i;bdDq'j@j5ME_s1BPYWDn!j2Z+MtB8*Q_V#ofZ7Z$?K\)g2Nrm@-6S@C=^tSl)`T$bm2"p3jj8a^UlME$JD1#.XNRk/$,A^g-\nj5@>&!-mhJ*XYNKHps?' jG[*S"lgP$H"CGQT m"hkHk@U)N?"dVp!I(]]0$0;kc:)Fr2DsMXGZLWUFT.s&U@fk4$L5F*j':N&X(DQc.P]p*0ai)'5=^6r4,)%Wi]`O9,L`mPj,pJH)_S*IoN%X\[X'A+RoetZ*q4b<^;2I85HAbh%l5kgAJ8)+,bA1nL!H:8&F';1!V(6D'O;KDE&PhM8oRQViRNV4%Vb@Ab]qpP:Q^i6iqW%/'m&kBK:dd=j58ITNR+CRgI(g1.69cq'B+'+0Y[5[ti=]$0Pe9=7H>s$oZ,6,^iNoNJtg8,SkCjpYOPlSoZ3oP^KF-s1ME@)n?U*KtaWCpCSAFK?C*CGmr4;hCMd3]bLI2%]m*4'aPg%K5He #TLa@#%"_!KItS"4:;9lZEoTOSI6['*(_I^@qFf0+Kc=f3E.`(0hiK&C!jq/-@HQrk&8T*Y4\S!%q"-1H(_:-\nR?O=jKMFfFin0LqO9#prAm#%HHt[4jXK.XFEH?G;""Q0O\5>;jWL;5@c6E;`61Ne?G'T+Xp"-n7pF=#N=@@ri<G^jf oU\UK05 3*>kG,/Ze-3hB==Zs@:OY\AVX=_Y.UotK-X8H;Hk'\U3+dg?Y.W$_Cb=KUbm=j(AYc\CZ%82=JWY53$D2p_qITtj/.1M+:SGC/b'RJF67h7X=gEREg2[Z[9LRM$fRZ2RL4"r!`AYn+jVpPT kPZBHSJUq?AL!fBo`\ ToH1XVtBL0(r50hV['=UCt7Fr%@&e2K^5md;r30nn^'BL?Ra^ZWf&Bo#Xa@_FFUics@m[;tt)P!43p`hR\@O:eYqdAjmY-K7';gQ6Fqp/rKqYn]BsMO.-UaA$)#=-b:di#ZnVaSG:)*]AF]]q3L/0nGU"]2E]MLh-gp4s'QhQ0;oq3WOtNCi:ZQBf,_,"3Q;T&] XFgE'rg*;?MD3`*=N-7$#%nj9sUC%XN%,h#CA71ZAk>q%mKB0mO2n.I]h-1I#+!Y)n,R:rdpBbZ[BHlAV!q2cs+@PSb""Yskj.A81 A.rqFgiB6gJpSc.V3N\Nb&jJYI<(+%QZa7dATpLH'H:F^3FS;YdGY25_U PeoQbr<>J<+Sh(`$P=kcM"0nV\O#%lEcGnrN_=X<pG_^5Rfk@p2UPaY%&Q4>n?XBT13k=qq).!E4BsZ2"pqrGU\;l1r:re`W>b'.nrZL2I_&S3A4OnVW6V\E%14qSG]FQHi?&2);SqGFPZ)q%bn!Os(*`5C^(*>0`8f5.D*9CFf8,C3mMpmdn=5E!X+9Kp8'HHc [%Llr?t-,*RX59hS4_I7gl;;k;%qG4bKscD+RO#go605<^JCZM5pBcdA,oJd'75+Olr=aUe`l>[rL!36J" Boio2$`)Kl-=Mgge*+@Cssq1n:7KE(pZ,2$dY.AK[ D9qAKrjo; ZeU:Xd+q/-KAI&1WaUhsJA4i)R17&_1LViJ!EDpiILQn^sp*1"$s(^+^&]57\5A9G,rI_$&qFSKBff/)WBe!+6ka[k*YaKYG<0RLEA,t:_"g.Y5A5LdTWl"/_UisPLQ:O'Y8-_`.4&gHYIj!1#PfbL7M]g:=hT@M>6%1-t,!2*nXtltI8#X#<)T.L857G*F7JjXq3:n$5q(Ad(8>7J#H=4si+]U5\AAE2PP/h*!cEG?JM0:8_5aC1o1.cI,h'd8B%6BH:E<2"]rrfbOEZ+=q4t$@iU2hF1[AmRg@>t=r);Z 3+Hbd4PcHV*i@Nk_EMD3?Ct0P?d<#A:5W_!F+MG"&kK]4j]-Xd Q31oql;?O7Qa9t@bNSe6A%)hRO12E@VNcsSf407#@?#92KeEU2=b oes)XZnaDg[eh)3PG(*G>DB/:^GsR^-)WK<&BA1K*2i8gd6L"nn2 ,8Z4O5[B22Q0p"r=T .]Mr6AeC[qY?5W)d,72#0:\d]T4LM-2d1)>79[4qAVkE/Z^aSB%hq7@UL)iN!Q1=(-U+2WIBqO_RU\L$rBJ(q9oH53n9kBB5lr[D1*/fie8Q?LB\M^0dIih3Z*^J?)Z11k@,sa:p59]G""sB#2Q;LX@?Y%NBt?t8?p5FZWl_S(g[!U`oD,=A^_]3?8n'FeY(>,kqnsFAN)9nE>;YpIm+#\0lD/:mU0jDZ0+Q8BD+G'oAMtV%EC>FNl6Tn,714bS2_f`X!lJK0JikF#nqYP8DSi&d0+,%+CVq+V4pOd>Se5meYchh2-f4Uksj'3R[m43qh!'/.Z^3j]B$#CJZqjWb+XLUM&-a`^0)b>g2lFt3Ml%Z$g"D(i#H]4FbD E9G+BtjS?8[1ojO:";nU1s';M]F[8DTpiNP7iaPnr(/&1t,EW!f Ige-AD?U8EUET:3YB= &,E@JT;%7^rdl"-1A-@YLU%?sXNo?r8m,A[-H/2nS6#jEPYnV%?8s[ZEKI#;th?Gg`=[r!O=(PIh,TBX(g_14V[jS*oaF=I$]1sbg[.L^U^;gh(YWfco8K*Yo_1m:Y<9XcMf`cd>4B5_)2tP$jja#:\4!Q&4b7GY`NoO5)l:-NSdZ!odhsA<0YX:T`=U,f\%TD&t:"m`> M!V92(Df#!`WYAoBl/A#NLH"XGVXhdmrjc+[)dJ*dXK,\IGLEm)lgX-\MejV&!G=Y:j-ck52qU]f:?rkh:i7?2;1Q-l21cr[\o+JQb/1L2)t5^A(K(9BMK8ZALi4=<=tND"j]nXAgtA(i`T%!"+;A)nFJFVQU)$Mi`Z:1]_AA[aVB@XD>;h9_6WE(l2Gt>I:nBrLcj(nb@GM"7=g=S T\M 6Sqi_o/_)cOr]O:QDt@qk`:jA4tO^+:j#MPV<1kV^;k:)$;)_?,mGqe*AY8#Ago.k. #OY5g:>?g`$qSg+7\>3k:ak*qmj; gdGUiig&5U,BYiB?$QXWArV4Kj*DB,%W\1*9ES^lg^=HB>8qa4%Pol\nnS8*!r`%4Nsqr15g[*Sp[--kpIAq&^Nb91"\Tp_iT^&m='FeOUT&X*ni*rD\0P%LKUetBDK3A0^^EX08qjg+O2Wrc-@U"`M"3R291mG[$7G ;>pnbijT)6F(,$e?88$sX>=(P;!]7e(ht0^MgQ``%7KjDdCmVbV1SLTeWg7PE0g[:e0Q+,4VPfHg+k78Hm^0UO:Ea$>AV\hB0c\#Y3NZiA$i(hPh>PN@s_bKW!W_El%bNg^sA<)b*p66]'!R*Q9(K4'&YfSUHY>`J$0X.Q.m'j _%.LSMKF2 hcael/5(B=mNh&#@7pb'ZLR[41U60[S2L\Fn@eRM_2X+hGYM^-7[G-^h.^4m_d=(m]5DYm[g 9)kF0/=]Dog=hA`@.A!0&'kK'#l.2,T^qBde&[Wq2F.bl@[(-?d-,l>[][34(NmM8*/l,m/fjif[+b'7gn#A!8+H)tiOIfY-VqEbFZ_*d+(Gi3n^cWGP9"I$gpO)Tn\@m848(OA=mL'MLD+#aS^eo.mA0cDK@Ug5O`ig%s&b(t*&?T"O3RE;'g33#cEE.Q>B7Dl"&`\[DF;(RL8R9@%l'e4s$(;7Q3(Wo@Dg 1?GW>,B#9f(48d;E3nkY::p%B?E]4rUIIl/S>_Jm)dkbsPX]I1iedL@/lhDr+!)O_):A4=cK\S.U:*t%V?A3hk!"i-Cgl=KA6Xo:/DJ##(3"Nm(Dh+j>tg;ORJ.t'W;1=k.C5W1sm^T?g%slq,RG37+!"TtcTI$U3UA+B+=O8'F`?mh^5=beG\9,e^69I]@(&%moD-N!12*d]<.7Glqa!*ddYLqWLO5j#$QbW0oJP7XXJCRG,iXOM9&\=[HQ"L_I)^,EpN$[A@0&VdqbX`E[`UiCN%PZABVibPN)U&/l+h_E%h'%!t^k?NKmL9?1i^nB\OT?-_+,`*X4'OH8h%\#],cmg1Mr?M3elTGrA&po0n.XNh9Fk*>h$[(Ol cr-K S,)2mYCtm$HqMh,d(3$Q-Er+=6S\YWS'2tE(6">0]g3D.9*7t O!rO1C-g:JTq5Fa/>MoASLgTj9FA%b*%I\Cj1.jgkX?3n:,#WmA;@EUAEa&bJ$?=5(D.[*4F2ReSk8pq#oOWCW-k$1ks=hN q& (PUA[]iq(elgSlXbZS"I%$iOcin8,_h<*!@@N\raX+JL 0Ln1GTjgIj)d,8ZU#A\<84AiW'@s%#FZ">/ #JaU0hgBgGB0!Qc_RR&rQQh*7 UR3Z9@k-(lDP)XnsEoXt"An-;LA:*4KrF*13/-n;Q&[\U&X'&e97jkU',IY7AoppX5nKZ#s2JS_na@R6ZF2m6pE+%-"$6mt.t5\/:rcnO1B%KC@ r4sr`p0'RoCQ=lfNam6;^?dLp.'3SX;-pZJ?b,kdd;V 1#KB8WX4`Yd?ta$5CGBdo1" P+tR< ^oq-F=0-.J7Kj6)nmq9H>5(BWBc)jG%qIn*INl`TI/np<d'%:lf__o"[jOsqiWUa"1hK+"bA7`"/*+/6%?F$n,^rGfc?.&c\iFICkTtQeBgiR?_9g/G9:N$lKMdnpil^^p==U5)5?7BRiM0l?b78K"H]c%)GF^dR<4\tM"qfhWcKHcJHPH[i7a!>hUP<4<@19*b(^]?:KTZ+P?\/GE`[QMki%nfAV?A6l+(g(t$O`\-2pXCkcU 4p]AY;-+khk6PoZ>lUDbnGJm2``G<h@p$t+39jh;9h+?^4%B=VJ7^'I(_B0^ok/>K!iIe:rE"5UGl1c-;O@Z)ctM#Lft\65Yh<@c#js.!]J"c)jQn\GBaetQ[0WIGn$P(Y6;&:*QW38ffW4DA.Ah?;#-mJ)gi1YT@!fA?7`]Cq>[87HL)rgZ0hYj\<Nm$;h7A)M#PS?$Iq!oSjVCqpaS#WIi(J5=A^c*mX)/#S=%UI-LG!pl -(!pWW2#XiqffEASLdN,(Y*]FR36OZ[EIcY<q%S\?dC-]"I.,bf+rdB)RmB%9I7q8>/q+_t$%+.E7=XB`.PGg7hs7NiZm2`p)PM'D]*e"Y]@-a/7+)DAH[KJ%1?rGgE-G^B1EKj&'CE>-?`mdXs#"\b,P3LmFqOP^d7C:d,4OT2ZpAfBt*^]h"+Q/:8e.3AeW_9;4.fDW@]!!^!tIss`*le='i?_4.F=/L'N3(B[d$aQkA%4%+SF4Jr!AHRTWkLNlr+)_H',e:6sEWnF1YqAiDGt?(5Kgo?&aP/t"ZkJgf6CJ)&ER&^44_dnjZ"> @`1L<3f,*t5Us(Pb>bKLBA[*n:H5MA ;V='WQ@[iBiPFaWcj"C\=/RnlUoJ-HCTgEt>F,l.*f92ArUma2 3m5oT4%N^BS$=$_KW/pP;bL6E1lDUPM6$F8OOcI7I?.d>*E35",<tIg/JU%C/T!sWa4:;ohiZ0,mXUjpC9@b?TJpJO>9\>4R4>^8i=/H@%_*iXi!@Rf\akh(dl+#rsRJG]H)B5"+QEC[1ci,I8f`(QY+>Ws..DmH+/BDV@9PTTA5!?nKhVgAF?['JprQQEC4^@16rgRqELddHHoSl $:X3HCrr Sgi!AOG#TNg&*?r^o*Ms@< Ooi]j28T)^C=II-tdag0=:oQn&>)E-d;+mVrWM*mH1d%m@Jk<*'F$I@KJ>.:25Yh73gOQ!2?:O?2a=/(G#)\X#_rg35abm8rBj8K&OF7$QKH0YCp[D*ROI8F^$\"e[:rFN2J;W0a"-Zqa?;(Z1CU5;OdaHIULE$`^O^m=A5t &Q'\"0U#i\(EL,j)oGOKmU^b>\Td=.mn=9\EcLH`N9&jWAcsOE2!HEkag7:LefbK;MkAA_!h?iAWBN^Di_6R[>0n@[ FHg<_A_-&l:HNP!A_j $"]s`Q'*7dRl'd%F\B&P.%Q?L>q)\]B+ce )qT\KRgNNHQ#o!-e"X/S=(I2bDE3)FV&4:fKY:?&9;nS!RALA>q^\FBY'-4[>lQ,?]#3/8F3.8;J/FG>$0,mJ3dJ&hi$,n]iE5P?Il*"mr3FQ Po-=<)id_X)e/ZF!)qCA:#0Hlh9)R0L$P1O3s(O5XjCK +$QRLM&Lf#\D[tJhQ0g2%.Et.1EhW-I$@8PA7ElQFTX4 @Z+$[0ER'AX.T0A&m[J%F=lqa,sP]_2,KG6J;AN,EpcbjNpAM`HP,F2W%@,X(/9s7A1.haE4Z#FV(Ut ;DHrtNPr;p_V(@9<`YlTF2\`U9Q_82c#!(]T;r0&= kat71d";K$:+LnaWq))=ON$KV:rIda\(@Anf_Z/I:>&-k:i$jn-^O4!j#NfEsGh[#"Vq%5 qn3s3+)b(^.Xd07Qd$dL61bR(%V$D!sAcrh"JG'FK&r,d%[thtZ1Q&MgV 5Aa2n6jV+Mp"?& "i8h+dmKbo@<'k.trdH3P('@$-kJJrI7^.*$"Xl'Z/C#eQ_7@8dEmsQ\L<(8lqhf8OlRSni=T$@'FgGqBD=Xo"m^O8bJANBdn2$78Kd)Tmn.Gm.]f'S4-XCO >b i@K#>bL!a gme-G(e%-kbhB*SGXF(&bkF4M5[B 2ksLC[]j=BIm_C^n5oMk7>mXr><^?YRqJ-88)nH.lYeBA(TlT.Xsf%bM&i[iAqhD2nk#JkbTS.Bm tnE:?h, HONoE?+(+t'q29[5Gg7D*0"EgODHeaD'[O#SDbpNbO%h#Z6&7*0AW3*9%gZMk8C,_#4R*V5Z!5Aa``/PAcpnIc7)q3NakD44nF6.r\P(rB!`cQ#$>PE6rn,Q'jq2Z$.t@clQH/q)K@IjIV?Aa%+.qQ^o`6+`NT-Ac./4;LQ!"HJ&@)]4kS-dVEthjcMWCM[?Uj2l5`!(la4LYpAt120S[F,$+i]MY0q[j!bOcpABT<*A"Ge#%>>">l>J!E=#_#pd73b\J&81(+-=b0;ofqW#DAeENO26b=Bte<=Q:LbC/W4L'NOJi*]kC(<1A<.ne;_k2K'(KA!CN5IYW'_f>XmZ3J5E+YHf>66pe(+W%MeTFtGO2C^kjd;c[td7:f"JErc^WWW9P8X"EGNb`\P!3@kc`]ThN AYGM_6jlqXqj8RaH`BpnJFO2G;^ _A$Q0Ol#6 m4hSdOQJMfg_"j>o5Z$7gnSf%i:A=s5P`M/6*>oZ72@;0\\O\NI!bo0IG`/1l0FW/<@lnX6#\BVl'nb\s.l4/KP60orniFN!MnRO^2`l'KZHHne*0:lA(Ha<*Lq3,M'>&fo5';oqXZl.tbHU-`O(sJrsD\3KA^,LhM!:=YmKqDRCN^&^:L_#H2SUS+n0[(\SE?qGOYE\CV[7UEIkjR)bPsA=$%P:0jo%B67\S>F'D*Y(onLJi''3pJpDW^$Pd4\e='d[lCfj5m"ncOQ;FIGS+"*#kB#*.@ tW\Z&!rZ/116]lhp23o,2?=qpc"]3#8>$/QXtslaYR2e^A%NGOS6?^h"1-9AS%H[/tUH9NF)0cKjLAl?WT85G:_\%28?)cM#J)@i0ajWF8h#f!%9d68&O2;LHS`G5&8hUra(Edco^\Af_fNcgaoXaLH)b Y9DI[]_8B`=F*8"H&*)hD;]5O!DI?]VPR+`VE/.L[QFc._d!kJD;5.;pG^`7\?O(tsh$nn62%X>5h2j B1*\can[?.t5>:OElXG]o]BE2ni.m4GkL,#AM5(=5h'o5P9n sZJ))QU/]T!3ngkVGW2:Y\\=A2A]VQ'$-g]taXA8jY6@8c"He4j4ai [b*5G^>bRXBCo!^f!8c54&.I R!a`b C(<=.`Lhssq:nHF4m8`5BU>Wf(Fq/AnO:BgHbAXd4S@TKWFscj3@(8DA fCt3Ap7Af=]JYGcIC$k[#,%/jE+X8 f7<$!kZpZ'sT53W@@oTiKOi*9Rsr1Y-JI;>BOIqY]S34A:*s-hhkQaL3UCsK7eGVcodIqGB`P6\(M$9>q$OYtD-_`,lF84SFOAWdEcsW8p1fn6\UUoi(3iXNt[M-7'ZDh*ij_rhO3dr_V*E/3[iGGl:G%9 DdO%+[L):QVF%E9oo6_+j_o=@hg9c;nGt;7pWCA5OSEb)beNGrl7Go*:Ab9/La (Vc,CHTp -ed\QeI-L%^$'Vp]YT"Ce[HsM3"7?T#e,8Gj". e06qYPms`_'mp:AIgealhh1Z7$o5sD[o+^XjmC5-kaX]kGZC,0Lo3S!dg56eJ$*G#U+k=. <3Y149a=1@ _Q8R!DPMU^/Z-WKoDM0@!E5@Ja+&)`I]-H$3-@*_tMdI7;A!Do'78BOZ#9RXOGj0Hhq[#^m4&75kF tr&mo6OD,#G (Db4"\e0hJfAj!I#aecb4UEfl>.a9tA'T&O5X]j]I=ia3HB0158N'.%h"6j6Ip/g,nke$",.('-%UQYjCQ'etA(]lGP!Cr0aFO1GBX\F2;Yn?j ?DK"]kVYLb%\1XZab0n:7\mt1sHdf.pUOS_)#B+lat?3L:.T."\JbMJ,EPN^2 6d+31P,TJ:\TMRa6)*]lT6iG=B/W9l1)MmQP+oBH&&"Qcq4Ak+f$jphpbGUc\f[UZ@RXh7[G?O0eGJ AC=[ot6X5ls!ST!+^:`01dKna?8=_V0s#Lro4'bgM52UR1)!ACO4Vf>4'R:r=K-=6Y^j"RFjjL_R ij?@tpa(EQ%n5.B&bCY]];Qr4P;LHZSm2b)M?:0rb!f/C457tRmAq1Sg\=GtkG;saf9Ag[AS*qF:FYp7$rm;;ksPf3Re9egW>eLT_V4L(a<\LAGjmkD1(so:)mCI\4QYXoXN9d_8R>+@& tGbj*f,FC>+F`'\Ep`J1Wcj*3N8#nm;c1=qIi9*#HMbtdkJ!q4Q+k?VIQ(NW&nU]DEA&8pMTVq@6Orq;NQ[h6q=)?AEoHTEcQN?DYD%F8N=7F75UsA=^DL(* Y:odI+^'3"c`OK.;G`c[8;?c2[9bUmA37!/EEfNIQB*A"1#Y"3_._Y/'Ug&C_`&5V'')6[t.4n\<b+X-a[rH8Ci^:E5a3b XkAjD]&HWWVS-8/.pNM/n+-AMj6=1P>+>[qn #=A66c3'"a?_'R\QjPd\-f?c 1ga%M`^3;c+4RUe+8J]Qc^c,Ea6qR:1N_@#i+BgPD^QC4$@[7'<8Xi8^F\gEH7_,mHW?ef.$QcN6:C/?-W:]`RDCKN`d8GV@@R*k=Eh Pj1@94h%n4D#mA8Rt0O<(l7;R4(sg)EZH?!/(iS@WX`.fro5+$Bg07]NU^+S7&3Jik'IOK_ZfeGma;rK#$ZF-iPa5+d2LMWJR504_EW'/!&[&so,'GJ]NJLb2kEp'S87"_VCmXsKc8&pDg399c8Zcqo+(^9VV\-4QE'79ir/;2eI#HTb3i8nXX9po&?=i+75Cg$d8QYB"qAB0RUGUdZjq)EC)99>ednIT+rG2P5>/"l<$^#62@X.OP0<\l&tK2fqSko[-G5+WXG/4i,lt3m7j*gp-Fqg,2;DQAA17Qs\*:UZgH@MD$7.Yg+jAnA,_E$[ZrA(SbGGRn$P[ Pn[$Ak]Kf1tm&e"7\3ZgYWh+Dp4r<`'ha;]^34 ^PTd8$Fd[_r#L*tL2S(O/TG34Te\7Kh%WSk`CocYt@2tI&0YIVoa@#:@iq#5"gL79n$[Y7Esp?b-3Z+QjrVJ1iB&m5p[nZO&j\7BHo@k(,;`>b@A]b)Y:*C*%g/ab=IG/^&W`7eG?"X>\"D':(p2`D>QANkSke_V6MeJ3X4&gB,fes+mGORj3NApg34f0\+L:%JPm\PA=;Gbh^D\;[RM9rV/!pB$qNAA9sno2"bCM\QRA.MZc4&Q`?^OVQ 9'DLP-S,'U3la.pjBK1\g5Z)i>)S33M& T52iAlVo0`A76jFEimi&aafI7>pOU8]_SroKVeW. ,lM]!(:Zf1=V2%@/"ZPF:XF8TXDtAC'&rc%9T':;oLIa<&P(D$MF8KDsKMAGig]UmRaIbOnP?9.Yid]s6::3`e4[H*l0Eg)\At:J#o38<4!>Jb2/QQNE*^9An:I%-bm,)Ar'i?0,So/k-G)S_(M)sh>TqJH:_2T9n^P\A>g)[Q:`L 9X4[k.#X424]_oHPg.faGtb,"!s8\ PqGBae+V9R42d9qQ$#GC?>fTUd8KG!VIAiV$MWr$aMAf>,e<2jfgkB=i@\;CD$Oro^2B=FN M^o+ n8@07?E!`ebB^@BWN1?IR];O_f(sPdLnd]6n;5"7?n>2I[N2L?69OH.>.iZq6&`;^iTaCK !?Ai@S.1%n(A2\$;/fJ!6P0[YL8XT0@:Q:i]C*9E[-S,t=Jqchq:UW[AKFq%A6I1R(F0,'DT3UZe5PbG*?FHaRoBd[MNja0sN@4@X2_T_Sd.^> 8Z]A(dD>(5K54HM5@h"CK:`F/4='/0+bgQKc >Vq]Ff.HK*Xm`Lg+`L7mk%1"32so5Nq2j6W8d%.QnNZP`t5eV, U3Jln$]5^5]^O4lT8@SgbpS"F)7'p?SYAjBSR Q`opb$BV`:"3bt>WM%_CT'(Ap3P>i_ C$rbf47bdK760,a3\&EdC_]d?:\Na$)_5XF;B:_ENnF&Ltd"XEF[&0JfAsID)k!?*21!rI&:Cp?/tkUh>:&:C6KAFqCRQe3h;nNtD$kAqj>4kJ#s@L'YCp-mRRZ[R^p^Z,BUq=6=`9+!)&5AoJEg*rWK]nnb@)'"/S)CsYO-X@5?dq.MF[PWEU5pt5F[]W[M#rZ\Isa%#;KeQ=4t[r%K)mh6b1o04L]N8jlEB-*F8gn5o$TcJ>T#%;1Q',oiXOQIi0Z_lm,Dh]&0e6+I3Qeb9O[YEX)VB*K\_1_t'N;nNc*$I_7'0l-_if0pYIRimXPt?ZGZIs<\>Vl4t]F!X4E&(rEEV<I'1!+9: S$Mg:/*p^'SN,W4_'-mm+F9b[pEa$Di1&jU/,n&I:H`\6"=!Fit"f+W^Z%s:b3-2D5,]aeD5%[a.=F50nZb^Rn$>o6Wp[Ei^=+r*q)(lWCFrUk 40p(TP#ATs//KMZLGDmD3G9nF]A>_E+*bfHq<nB]hO$KUAYS6%B-I:_]CN1PPN );>A.A_-X')92nDI?cj^nTCXE+J]Jo\"$=Q`l-,.blk58Q3N<$X?RQdA5B6=B8pEDR6:KH,ppA=jJa+K@n6^bn$'$O/)Y>J?c$$I-d,#3j^]j80Wt41MWs\?WJE,;COD?4ms,oD.sIRQ9a\!i8t961pg^r4kF)6VXh%&Hl9b)q6K;`hc#H8^n2 )AkTmRhAMi3I"RWbVkaFcN=+%5FYH[*>XUn0/b8XsF!+f^5/0ZfClKWRFbo)M5tjDPecUD2m=''7eSmM/[mLm!r[f?JmZcrkg!Lh[1dUfN?dA@)F.J-9M)3$.Y20n8Zg`3!(UGd(MW(!#5ZTk2.M"2cSaNAOAUktY' nW2%P$'I>U\FeZ [N"$%gr1Uh=[6AGTHBICP3:\*l#_Y0k"Z+i)W#8i_:O a9$IBpl>:i(VYHQb=`r"6 _fW:gmJ[^6*`E921NAIAZO^#7'9Vb?oI&.\S7c%#^#opo9IXehk=\0$T0,G%e9#82k=g$S&G%6N#^S@rDA!+rrf1"bRe%AL (FOT^tDX"( `1?C:Ip4sIW(W%[>5Jh\UWaBn>X."Kn[=A.c7#a"C)<:kfN" 9JLLN_S@aRHtdj<[DVF"f*9?)do<>pD;1kP>]0Vi..`S`,5.>9fq^pL]A0`k3Vs6,]857=RYbq@!UHV7#9\,F6f[O8Rh5,X8b!*h[.&6o?BmZ#9/Z)=[Ff"EK@J`p.i7?7s%BA+n6$I\-VL0agqa7[42#t)+a`/-F(Rs,.6$+6As/EQAETU`7_`*NQJaYlW38t<[FGQ,\S2*q!7mZ]E3a2[gBgS.p=`(O20#3ZfCMTjW);J;1_>6$@ZdU &m[HUg>Q<tgQ_!)k_QE`[%.ZUB9]k>^^db"&rlbj?KDiifhg/ZZ_APqgXga](?jl%0\"OeGm?l*& ",ptA&]q;N[%KIrr&p_YC/BpJt>aANfsB" <=<80jfO3+pc`%iQ[G?YO6eP+]>d?nq"5,^/b+ZacXQa#(/!&"bCEbSqpD'3WPdblq$F-AJi5)2(B3>5`jF[9LDU@hh6=q_?L`R9H3&:TSj,hfhNA*J&%d2[eWol4`ZW^)Y0^!M8UM)Fcq<;610>oIQ6/7GKALd+o.:$:3kqk)Mot^Ne0654ciIqn%h+O@\$V9D+tt.B pB!1fVL;MUGE`s;(<\*ZK3'.?WPO;jH9K[/G&>P$8Z#-&E_i1Q(^(>e+;[-g0PD&.AIlFo?\RFs!T*Z?#W7aB/.+4oOgQd@].*bW:=T.qJ3\j#%5^!N^a `[!tV*dojYTeUId.kI>%?8Q&5Gp#IL'^Tsct/5E\imT>p*oJL KO#5Dr>1.1mRS2eKJ_rZ2_cS+c>rs;kE3a<[K3[T*-%R^`@*W1eL9&_&l#=3NW`+Y^]KVcg]ZqYG,l2Z,j.7,[02J^J]!oeoG-5:U23"5Od,da430\ZNXIHd.rJ*;jUt9d>(t*L^GPkX]ce Ya#NC7c#MGa)!7cN)j5LF%&X0?D@Jn%*/A"NAV$G#mI-+mj)#/^ecY`^!WKfRk[)Krjj1ARmUip]/P#qG4I9H!<]*fVBJ)k*dr3,gI*\'M_bb4C8`ip<-G_ngYq,YmqEj,$oYIi\#NF(>ZsEZ"JWrfdhTGDVP6tSH?`Z";]:gMo_QQYXA7I4Qg?Z#tE>?_t)*t](SE;r;J8cS3EP7.@3p'VJWPL,fHsD%eim[CThlG&SH>eTd-BUo]MC?D=gptat:;":Q(X;YG*5rU7ZHN&[9[!)eRGqnV#8A44nOnh(0Q#+G))c-nQl1Wm/]t4bfpO&A(p)H_8@!A_!rP+0#(8NNa\53QCFI!Irc\#NmmKX;AX:haa'Xl)haG'N+(A@hWfd'QR(Xql,mX!#OA.-?k&Zl)HK5Lmf6&Kp!!dS[fh:rabYhCSl#c#B'F4ZZ-UZ\$5XJDf_X74K]nr>T+"jem!+*`s[Pq'$C$oc'/r=h,'6!O*=3.1m3.SPF4D]jS(X0#&@ZCo)[GG_?`oddGD 7s/7[bL2 fN#KQ:7i:B5(2q$;s=n#^1"c$,5G^6$`V!H?!I%/M.t5n;;?%rph(p0YP/[heg5E,:o3toP@=.OPOPUSnd%RH=7k[O&Pl6c&kYdi^%Yj?"FEl-A>?0isP3KJ*=k$--I5Rr:EOJWo>1bA:n#($pV_7VoIs)GR2[p>C2C\p5A0X]o J?QjNBb$qIeSQL=@62^#QhfA*aYA%f'$XRl5l9gh_G,LRb7a7O1Zg_;r&A$tA\PK&B8sASCYObeOA=(FACKH3!`[DHfpf1\JQnEb_aOk@UbO%?'3-WfSV?b)DIcVD^I;eAU#9`ZH(rp!i.rf0tKF[aO9<,A8#or;^g50XfIG5;t:3<)i"gG9)7CQ5;7MLf>)nr9EY@kSD!Uis*c0/^Y[aIYBlKoX#sQTP4p2+]$ZA1;ZmF%b.aUTSi<"*+@A?G.\6d:EX2%=1PfD'oeF!UtZ^KJ"3JnSh]"s^8M4* ARL^S+oi.Z5-$j`6]%?H"gr;YNAr)-rNT!E6MgGkVN>8`9e#$ c#/`"FR02ME,e2)ber_C8^$#USH:EaV )pi;h=oT aW";R&&9B Q]P@K:!1(A&"G?]L4_c-j3lFVCCqRJo*<$3$!R56l<^*C;)1GBl.">LC2QnRi"AU.,%2o;E9>F.TW4rCOfo/.iH_\Fk'T9b3bR=T06("Y=C>A%7JNc(`.G":j!GCto[aZnDR2LTk1C/,A$%Qna7/lFEjJ-dHFf6c3`2OQkYBi"9m"YZf+,Y%.&o*;H<*=r0- UT^ gp^c8J,5cgsUKleXTH^l?kDPC1 =*l,qpe@n>0enhaI!4A?OR6jb.ja:/ qrO(T;_9iTMME!F/]rOD0`%V.]BpcQfk]Po:)0kN;)d%.W>GCY/gjb,#Ce7'mCOW2FKb3Ea4ZJei%:a@^T`p>D9Q(;I?U;F7(Q!eV.$(O>l_q#olXJ!=B3m_N;0QB4^pjrmRp-4.#=#)Xm382Yi&8jA[-a!(S2Mi6VZ+>Q lFe ^h6P)_N+0nsbb9Yk7R+FI(WZE8\nN-.eT;105'(^QCe_E$J4e\/8ThAI:CU`R'&>HPL/pt(n"Qd\A.5G3r_>th%lS_^sk6H].jfmTNpsJ=",8$"TStbUY#&8Gc-q,Xh4]h.p4YZZ@>hm8^_tZ[@AK_h$Xn>47//PMT@Y!EO=m49=?CO_;(2+nS`3AgXf&][c_"$N&BUpnj+SFhTQ1aCXsZt&WFpNl66A&2V-Qt(&&""=IfljF@"'&]Peg$ik5L%TKo)_^7m=H37bb2(pOX-APf_IlRmiAE#c8*Z4MI.bJ1:``C@pSH):W8CdoSE#mbo9G5c5"b!VC9IZ\6GqgGtAAlS#S#U6"kE@+$`P3YC$n>J52S5t5P\*Vt=Woj.->>WOg`d8:iidhR\F`Th[l?;m<,OAag'DY_DmXi-asq^VA6RW=lpHj*"3;J_dN:(AZ>CBgWC&2tqrf]/*jl%:Y&MtK@?>\Saf.>:cmp(-\n9K>#5DCA$!_+k4kJN'Th]3Qq!dU2Wd!=QlT&n@^eBd#$`/rgc1`IYFjP1KAh7!RG2-%I\t"ECc`n6t5`sCgjHk/rMA5])U\7hMGh<(UAc0RP1M*VaqH9A;2XY.s^s8-KeAH#ipk+5@U*DF4`#+h"*,>3`6[cWB?cGR-TehldI1#E^88TCKd\m7&IQ=?!Tb;DM_$RI/&8;Sc%m: V4o;3[48$>5d0R\Wem;+US0E)+`G<2=]Zb*L$`W0[^dN^N1jQAWEcA$)L1sM 4YIaGB>9,e+4m4C1_[g5[s-S_5#L2f-ZkCFE@J"l?s1(&*":A-X'Ki@B*Z?AFdY5jlk5OaT,I^aTQd^V]iH2P9GY":ph=P4oLi-)3P&[LS3"cA.85a Vfbl5VA`#[(UDKh[fn8+MkV&B?]`6D3o#JZLa9Sfh0kp%Z6>$MMN.!ARk$Q3og AXd"CNCM)&)669T76A'*lB&A".N#Y0gsJ A3sc #/cL"&a[dC;S9$.C8R\[Tg`Rk)nmt @AD6>sk5+6-8V=]F"Y5`Z-^L>(2Q0_ pcig6GKqho0/5dZG>6.U__ S6,!L) sp8eYZ;F`K7GK-]ViPKqkIrhM.AT%3H%eH 'mqa4bh>\.3P)Cis(/;W<%LVXeQlQ5lO'31IB_&Ue0`<AdoC&s#KA;A*1oGdKf268licsVtcpU,5<#jnr*O`Yl_fTAaMrlPDU ;d JH4g1]Hqan Y*"qWsiA[0&h+6EY .D]4&<d$ t5-T:-@/Y6!A]7;@_#k-%]A`VO`h1gDR A!i>e#eCRCSsC8Yg?gRP9rhdg:@g.H!X2Ab RNKBsQ=>mde.t3)7&m#DbLG]qkm1Gr_tAc["br-7-,3#r];%W$ 3m>>K%JgT;,!@t`IH?]R9]CEq*k)At7Q9<@nKbX[8m!:OB)BWP#<_AAO89sON[g=LMBk3](F]A8\RYt[VmMs#,iQ[)eC6JA8r""")gW?Jq#5!AJf7nAa)R,3e2Q?cA`nFp"M^)kO[))qS6lq#%<8%%,N7A`#Lk= >kAaE``=S,r"EQN\3JMMR)bF/8!Wf.O%A'MqIg>EC$s`6%: >3]pHd[`hZ ,,j#dH1>OWPkL6'^HNb).YhY16B5&s:!k_,"&%A:!ZRpNfHVTO3q<\QNAt](F%K,B03a,MYh`k^jreYh&?NCqF_H8\99 tWpjJJZQVqS?p.!-:NrIC7*[7g`dqa.M[W6i#8`I80ie6GGY+FWfAp6Oep^\=#=B#.rA8:X/=d` rP)t43i,s^bKkPBS4G?_Z]Vhb=HA)+7E0M ^V,&^`c'M&kS(r6b#ft(F*@rYg5Zb%4.gih[+,r '_V)d07/8(d7Algo)GEhW>.g#jhJ\`C\Z,Hn7k(41`o:. `9 pHBRGA0q/%<_+43_2)lB9gjFH+OLjVa&:GrqR"$_'m0/GYKA`FPio<Z-#+1qf1/2YLSUW.:L<+ti7k^j(tVY131(Yf !Vm.&^rl"=OR-`hA-jlogkW]M.k?UD-2KlH`fk"Zh,@sOG30,e]#k\4a)47S:%)lhNd2-Olmb,r)hWDW^pq6t3](2('jj8V0oDRe)-r/[mfAHol)'>"R/5U"5;5lW>1RDc5TB7`gR<(%jmgVCl+.dLpmsb-t I^&@.lA(99NA=eL'j[ZS5iQ7(27&-JjCTlHt&<4r;OorA+Qr/1-3=jc'g.*$`Ap>3)O'_M"h6Q2?ghgsPrJXRbA8T._&_)04!0k`ls3/]AH)Iq>s&aGK7fU55GEQLD$J9'W3'.`i2=]F7q)8etEl!B+M5_Yo1bN-B6$79"0KM]CsnY6;cqeiHNdO.9J"BI[;MCo>R!rDX7T;*9[_ \s&=*p7e7>4L'L>knbW(n9K 45(T_G[$_4k3Y^8Yof)550FJ9,^6 #AXiQ/tekn]OA3Q_IG\;nbP^-@!EQP6n!h]`-AV*6Z8kUQ!g&dL"\@C&EP cN/>OB#AdfA["=OW]s::[WLCfiRqa(9;ldB[REY^Ep#//28eMZ4<W%Df*q*D5AM*-*Bc"9?fN67EQT%'6ZfDBlE[KP.^V3ljM3A%=?,>+/-P83Mik2hsGoB.a 4dne AeO7i-mqXo g"LQb)4!G_ [e">4Rg[Yi('P*Km3K\_=1(4IinfR:<Y6adAG eir?6UOAd'Be_bM6""?H;QAN]Y6leN`6TX(I3f$::F/ra@fAjpA63Yc %2\3rJS8b;qsC@]c)UT'd!A:Ak!'\i*P1 25WDDb'D)b^:so`E4l=?8F"lpb2nAp+\eDT21''$m\&l#h\g+%"R0lr8lfk=94PLDH.IoSBf,;]#nK"3kb?Z6RY\s],LZi_"Sd@NAI_$GHNBECT-grSAOcL@WX1,'FDeT2XL8OK;d-,L)lP,3\ngKVG[Riea`tK2rist,D&OfRZFD#p9]8CqpYIPq*n)pUEMW- FEpiW;_(< <6To3Jb?RdV(@1j?r.$#2^>U)#AT]+t?=FcB/aO1h',8peaN!_qE'CM;aLTPF(pF"b'`kk[*G@%bJNKU)=]#?FpeV#28^Ffb,1+mY6<8J4+=$M'!7 =_"1PP12";)Zt*MT!V#B7coB0lRHT]rLXEY+3t"-oq%`gV)1IEs7F?Y,67h%8@6,[H"ihY9+5:sHTNc/qo-esI"_nrmHUZ7Y$!Gi*k[.TFrKaagJ#.ZYc`IZDb@S;$R`T([%\otr(7'-!-8_P/?#1qX4e<^==3L3codji\,sAA\)"NR^]KX38CDA_ZRk9g/*Rgd'dIU'T:UREr*9C]bR^"e)&Y6nC(fr]"=0?QX:6ldPb8)\o\Hm7b`:k_PNBYO(itiV"o./S.s\Q0g(!@%qKX:32LDk^S(t:MBCXA6NN1AsNU7_-)@(He/,ltg[<=IUe6,KP$1APhQDl*O&lpe@2At-@SYUb0%WYt6-,Hg!)>DV3BDO:9I()T/t. dja7JL;Zl3@ )K7@*esQl?.:8Mq"YW@DisKkf@T:jA+<\AaFYJm>1d%;m:('"A0aP`C?>D7 eN>JIfTEIAS1Q@B4kRn\/`4JId3a&'^,\n0XGE*Zonfp$1?rO3LT3Xol:O`46kib+<\F,ilohHRS1?ElmM(#eNE(!'Ip;L3O"t'lr[VhZQkcDO\5*,0d]1PD/( mf bcoCVi2chgQ^I%J1Qa3I+[#k&b;Rd?PUo$Nj_:*[`pPNtob%3Xt!Vm],\`G<"[AAYl0n$k>dQ[o-SNbQ'ZU,<-T" Y8Zp15qL@=Ao[NY2M;rAJYMn)X8p;c7o6*ilL(`mXG:aH3KO oh1=t_*QZ8?L6Mrs^+U9h%O:b^WlA9QiiRi'nZipZ._VbMVI$4rBg(R5pG!DD$bn=2:!*HVUHE(4!TDZO(A$*knR\hoWjk8Gojroa..Sb]Md;t>Ri49_f%8q6(p0i1+7//+5P0Y+lso[="9V?)#\'mBrihJ9`0NG[*'KjpP(*Q9ofL^e3h*kb,B5YJ'M$#^P>&Y135]ci3aD"d&9P,"%5"_YUXpO"F83JU))9PJk=?tp(f0.AO7SO$K>B4AIa8IqNl'OYbY"jA;[7n%Gag_9W+egY.f8(k.h)q%LB@G$:#C1FA2XM0>TkgG$kF5[gPD#m&`je4[-'8PrCC"VL!)sf;7E5Kbh)r,&kJHlgEAS\-`bqlN]0Ya#ka2*Mi;K+@EArBZUIp.E>NBh(j`U<+-ntk>t-QmF`Y,jA*I__nA._k/S"U[ql^[Ctc>e=Rs:/oE7/i(6A8^c[i6'\tlQ.q[#DoBe[ZHk$ Vf1W5e?g2f\6bK*SSYEZboDaLqNrBB8nX(sIU+*Ca+!K:&/f1_`Ym9rMWU.e,r/gpt;_4Pb!\tIW"m)f=T>UrS2+ErcW=!#LbbR3h<Cb(`3n(fOSX2!jTA!i9\K1K)AV]12k!!Hn2@8FoqfBK0)5kisTAbMb:P"^HogtX\4q!OeF^!G,c;boDYB/7$#cXUV,+0W*GjL[3o\#(:a?H'BqipVm1-sDj$=d>niPS#J>3i61;qWL.aVmT!a_qA:%LZNW7(]=F^p^D$$cELa&_e:AACH0D/b'BMaat?hrA+9tsc)66"5OsRr(ckAUFL=TgA_4Da")KA0@)1gp#c1d.P4-n*ng*.XG1f.=\-;(f]\s"sE#sfSX!gY,?]sAjAOs^V_&b4c^?i=?iDjp7p%^[O+jC$Nb@l9CstnbkrQAb?'tRRE!KJ?+TtQ26[&eU3KW(L7`L)O>8E-)GN4H6/X;Pg7A7j,$]&[?KLq1* o[o'mI\iP_m?ECe=AMh)Vd%?os1eQ9#>+Gn8$L%dAkV=N_+Cb2/C9h0j$)i@]VCNeZ;d^A,Q7:Z.?]#DV6q1SsmMT$pqN""p#`5HjbIH2^((E*dOp\UFAZVKkd2S?FM=n&[nHMJ]S2*aA%WFE7(e"tQ!0T()5T]?F[RQ\R?S[Ms8*-G[fP!_J<6MbE&cY=$;1src9GdkKiJ+ZlR3m?M(;Fe:<_D`.;I HI !25$:BS-I<^1SPj)!NEmJccU1`0 >o-S!b7hZc+C(.=k(LI66g-"WP>Kpn^p`EY)T^HB?nA[UW[HMD6&,qcNb;($:gJmLcLa;mR17pA0,I1lBj;sB4U>?t>'_sA 2<7&`HACF9IMJ?HlSCGbng-J[$dG+&ntD26WAINnS$ A]_Eo&;AJdci;W?kUBK JbHDU2=G5Ef#hnf1aTo\AsqX0nBCH'iF)sX*->7G?;;FSkT%]^U\is?>BNWMXGh\in!Ld=b0g6OS,41jpN93[OQa,1.*kNNVYc`IMI?gX_3YZ;ZfF@+o>a^JZn+W6P;UN0U<.WdE4)=s.m6_%4fQD&t9@Q)9>F"O)3*oS An?632I[`68Gm$rdPAKMtHb:dU)R2DX#mmVB3GYt71=dDX.D,kLOnNd"EC9mP%S9Ln0IA&)MMa C@1.a+:"J)A=>LimCYW(1t+9,4h\./VSQHRJt7f4UJFn:HY7bef%/5=-n=;=Ek$o[Q( .:-a,fQG5TE'dntYs7hClXj!)CQ20gEE,3B4^hFrCOL$;id=;lml.kg-]dX0[ZiJ?mZISK"L#H=4T^osPQU(P/T.AA/Nq=oh4%n:m#mKM!D;QsN+1?+E^>iC(5$9-K?;J%^E3m.UIL6WZ>i[bY-sDtO+6_BDXm1tZ@%c<`&b,g 5XVjH+AdPTWB"+sp#^=hX^'NnQ;o;<7-c_>l]%:O@&2ei68IoJO0+h#Sh"'0C)^1=-qb>C)SQm?)ac!5DHA\c4sNW@KQO]c_FBO^B>5B('FV0`?C36-&h=ap6 ;KHkY'28PtoM00:m_!:h5AK8<^)O@&27VPRr>s5L6CFB9ZssE(ZfTdeGPI$T;hX#ksB(D8OY[:7_8oD;` ld8QA#ON4+:oi(Q75g]Uh#'YfDJSR "nVWiP$q'>(R[-=Z8T#WI0rWo&k;0<$\9F]B8O5!baW)45APX0PTd4ST^J[F5moRCC0InB)/t7Qcq'tWL%5tX!]Q)E`fN38\8$hGDg5AA:)e9cU;qGf2AG'2Wfqk!!j.SV2EYn6a'_Ors;=[F^6D5B+M&9Oa3J>E-DAMA#[q4::0jp[l)h,:3Y*IVcb/"pqV(EjehdV:&\X&]'f@ffj4P;)'W Cf;_2-C0Ps_tJ$@*ZeV6)LfY[a2U.m6'VL YFAG-)?-D<`8!bYab.GE&AiTj?*V(hAsHaqNHUN&3_M%(Z3.@NB;%gfi0.aH,XVl8UTlG6gAlcZsgYM\7ZoEb+</?@ekqFW(OB+m&g8AR1BB`NdPmTd8FD?!9*NHZFQ(*Hq5kc,/oJ efAmpWGYtP+QHa#LqN ;bGdUOep`3&Q*:NafN6@+-q)%l=Bh(AjZjaIsF!32;'aP31I';WtBo"_DEk<#?$54O4mOH6YhRTp\oUZ=JTEfDo9*H@I+/A`/H$)PL+EVM 3R4nR1^jOc!_^?`>8KBMT*]QFP4_r9a&M-A/MM%9&Vqm58C;IJPMR&!nXR,\6'D'mFfh(TN+.q#$=k>T?5t9H?$nYX:@=DEFLVkgA:'jM,?dGG!AIKHp"$0!KA%2%!d;(#\TG>ULXZ]'24H?Kq-hK%Ee]18#S$nTE*Q$m;[-:@7GI]r3$#bNg26YaDRCdb1H&G[]@f@&!#%]7o&J:RpN"J:Pt5M:2;Af00/b"F.7!?_r6gHYI-&&l*42`PqXHAO&cK1S q-A.dej%g2r_N6UPcZAj'/Q)iMYQoWA!63at](rR8BrAmc@5 g>XK5U;H8nY)jn;jRV$p.%cAZoJdZb0.U:dba+h,[E\Hhc6PF(h]l*!O-%"kg9[A3pWJT(CXae412[=6,Ahng7YjQ<>VoYsY>;?.56aQBtL,B+c(9:4]43_H(T--b#jp38=3k]5PJZc>mN81oF\,V))#F!FO8pMD:$BI,H2C\n1(U[r.G,2."jbEj4"h*G'5CQg"*o-_,o9Yq1"=MFqm;enNo)2me[s@t.b1,006:h*-7kAL!,dmGB%p3.[dh=meVN/,;r/n^Are4-1`MV4rN$"q,n-M0s[K#J=@/X9JFr0/(gle^TC=,-22CM71id:$F"'M4hWk9mU<\GM13iO&/+F'>'p;UlE'M$X)i2^')8V']\)W8i1h'=]!;D4sMj$7fO0=[r/O;G&@%:E]DJaKDVX0b;LB>1H7\r0+C':R5aq1k_kUef.BhFW40Y1^AN!bM][3j6#88q33ddAoQ5NEQ]ZZ<5A=(/cN(5@UZ&7aZos:0 pdrGQKe+o!!c !I8N0Tq7N*p/S;Hpcp6*<9ZEG+V%;SWHk%eQ7hU908p$nboO:5E'(Gn'BG4)&E/6C?OMF?ZW`(lq7QCfPF89#`\SE-q2]N2nstM`&iN_ '`f6Mq6&8p+*TI/I.!kM2c)Ibp+iC6Ll\!iB+2gP/7b)?rM]IHA0AXAo4"3Vqjr6K>D&\7N]`j92l9[Fol\B:l;QBr17S4dP,X=_US %]LJT$;ap1=F"U%O3,AH@YfgaHMP1RJX(P]JX_A@E85Z9A-MQ7Q4tR_htI@LRLoONhYCn1kpqIj*Zf:>@iD*9p5Ag_-7ea#&Xo,![+3nY>#c&fAjY8qiEjKl"2fC"HU2k5Z?(VE]lc2o&$N].k9o?*/;TZao'g+`[E/gpCbgp+2[B8nDGdtiqU1t)HBNMn4Q'j;b<4k,.V?XIQbon()B8)jnL$)s.JGUo><)]=+#Ha=+dLlZQ[<$Hg/@PD7fAi).d5*Z_F^jk\K`7&9#>W3V'1lE;N!`N-<0-H+R50#A_GJVdB3>@g^XX`4iI3 KU\6*/:BNo^U-YAlY0L`(BS;EY/rHeA^m[]t7^[dMT!-70VfUgS5`W$mH"OL'h5pO2640 nVA[6'rDE6sDJ5;U?[52?Y03-h$jT#6K23$;7pDLR\8g?SNojB!VLtchs`MR-75n.`SZKf? ?+4lTFJ;jE6*$mG4'$K>BSZf/=5c/IK&&Y`MARfqg/E ?[3n+fd&NKKe-HkFVch+[3ojgg?4H [5<=>]Pl 4?Q9Y\4gsUq.AGsHP3G(#^]6nILm;9dR)I\sH2dM3UVKE7l2aTN)7:iKG!$PB>`Er)j7kP:HW[0=Ad@p_(52`>AXOcgkr0aM=UR7!KFs8Q@06JF(.0sSM-*#Q-&+Qp$q=JX3X?O`EC4eAtJ7fP^DFRR>4MT/jnZLqnWafK\VL\!Fcl&j,?;aO@WCJ49e>mJ=]d]hD]qml#mDsM4t'Kj9j@@jWp:kmmoSU=7Vm"A74oA+SAe^JX,K&H_7:^"i^->gKdi-UZSs+Ghl32NZe5$7:^Q7WaiW[8Pr61_KI-e,r ?%4n iag8!+,Jt.A*:COLpr_HK$;_ga[H3E+('^")O6n]N@#:;dl?]09dbH4g^pS60c^9!>RF$PioDhJJb14(oF\AbC&2$JlC(;9g>DniH(`tN'>5aqA#3[mT\9(F&!J5L3?F.RU6M9;'=q eV&>Y1%d]5e9?ZE&7D;>B*-QJSr"O*WF\S=c(qe8#N4FJ!7lCIpn69-3B;W^+6l4&K>;^U-R\@b13VigD%Y.a/c[N?d+4-TRjI,k`m.LfE##>#lt27lgCeL_>(Z\W]$a0Oj-f+t5/rnJc+dj@d4d!H(a3DK9lq7 .mUI$^/HTDL[GncYFbZ& R60(<C7NZV@sA$5>hmHPd5FT5$[BA9A"!n[;#) (n3#5oC#q%f+)65O =tR3\(*dIjm5\)WO)Qn+6,D9'P]A9OO-V^f7Sm:__ $=L7SgZ ./&`hE )#T,R$mE"Io"_VLU4`qjO)fQK=2fS,2!MMY?9]=;1Osa^T rQ.OA]NZ/<@MWrQ4)".Z- o1,XjZK\3EB75DCpL^pl8aiUeI9p1EcH16ZQ(^V>NiA</,$R\&J9m 8I'qh4l>OBKadMKOl*#9nhBa`?_:+I]1@ssK`%AH&JhK>(L03mPfr# J534:BkK8 ^QD"=&),c0%-^WY1ZmWg8Fn422;M+I0UZEA<@-U'&A/`2D=Ni88)t\+F+`l569P/Z`7R.k=ei2;CLTo:'jGb;"SaLdBqBHm=d;O!5Aj MCsU(AKW7US]9e"_9bg,s:??4VZ1-6HirJD"67_)%Fh7MAN\S\BDSbY3rmWT3k39I0329e<2o;0`:W:4RMdp;mN)AC+>@=chL?8+XU6t3`iI<O'jjBo:,RC5pMQOFpY)9c06hS%@<"`N_`>e2hL:Y9)!NU)97V@U(tRck@5i+L,r+iA`9@A=MF%1crm%2(YLX&.ZR6IIFZ$tjZlZm3l&1/[.B6Yl8Ug7V5m$;/ >EB4\>MOL<0%&@d21bOK@_XNFh;H[J^hQN[?9b8(QG7AeG0NmSAE"LC>?P!M_IV@2$WOJt,O#0D1BAF3j80&)Rfn)EbYX'ke4dER48p*VRiW"3'8#]Yc#%bU0bo1)M/n$r\QF13hkF^sh;4KC*^[QoPi]MpQNQJBZqm=Oah2=GJJI^$HcK\d%_e7f$6=mP\;_QtEX/_J-+F'^%4Y%:n06T]R]^Chsh)Y'i_mBZ^ib6^A%aP\sFa[MNb@GCXC/S]<'jB"jG/)^&@@_ADT^bht;?=t":ZOi9b1lJQ':NR@gU%VA0ROb^[Z5 #Qk5%cldRbrb6$j$C7.r8p<Na0r)^4pWN09k)jZ79g*:W"R[\8PGqd2;e]t5M8=)46^I).[CQtVofl@>?.q"pm=Xc" YLPr[:]nh TK-qka^LA5Q=%ktd?W/cK!old>\C1bUIL3LeNoFO7.j+*Al6'MShW0ENADFe7MZM)1['2tK#;aID%gH9oZ6BI:VUATCX2K%(N$=i]]^KJ$tWQMj<="YQc-fMEJo<,rnQd!0LO;CdnqdL1Wc] .n@Ni2psT5BK38n@h'%PW,XRq^gH#A=k7t;4Op\]S,e1+mNgj(:9 IEO0$T&X1G^-CU/RoW_O,F(6rN<6J?SB#GY%;c=B;Glb>mm*&XI@!(]!7>sT7&m_iqo/#QNDkj\p8VTmK@$H;(9CWojQ9@ejK;`nfgOoYbH>E'MQ7MT$;nG7Z'9)^WflKHU@:Y4O;5I\FLUb5t7e:gkN"q(EOdOrehq&r!ROY3j>U;iTK,p1sJ7s1?4jN2-dnArgtpW0D+eC<>efRa_Kh?:aZ8$K1@ABgL_n,kgQ:\n*%tW;#CZ1'c)Bks@W;'5P:hg,iJSFcD$P);k=6mh#A:c/DSOpG9./#iTg57o7rU]Nt,2KN4rW/'!gVA"KgN8U]_irJQUP)7`oU9_NqSfZ2`dhX,ctR6T,gS,S^78>W6hiGW%!rJEdqX)#jsk)6(^M#cAp%@d%o]4dgqLK]5d@jg&pt.dr)`$#$WECm[Pp 4Q #0f]At_hMl('aJCsA2S/M3jiG.a1d@c22R-WIb3DX&S^pK*qs-(.TbG^_/E/F'_=p;U\Ji-hkMS0:O4.&i'a+9MObIlfMF?\Qd=#A$pq;N+bh6j>5;Qh>$5 N!dT&XSAbADW4T)`/;j,t%IK=GA\SP??R/f9!'E%$7mK\tcioalVe2g_FeSCE)qLAstRl;mOLhksfHc>@d&\h&FsjdS/n\d@aDA_PdU-_%fV>3++RG=qc>T:(0&_G+9U;MXYUK\AO?H+s3D!R$OV]mYT#dE#g_RWkM"q(I\AB81n7S%M!VB,O\6)l9[Cl$ F["h6ARRBHh/At4ah]s<"b?4;fL[9GKmc75:A2r\0'CSjY\ ?f@o]pWN)Lo::Y,-#+jtJ`NA7`[8Mkt5T5hqeAf:tkTP[K_,GE%5A'jM>h3J@h%WG5oVsbDHOr5V9V+Kq?iY7-:EQ)8fAS<\s3WlBPJO7O]$o@#L@.bC&hDoW<#!.8j.<deSSBIlfMlFMSV$)=XP]6_r([V2O\ddm C27IL+'0ifqoH"?/,Ji$R`$!_tN4=Z\^BU&!(PKnsrC8W$*hPSh!JZ?:j5e%A/YVOL?[po`CD(-at 4c#FcK-NZ'E.V7+pq,(3OrT$8%E>e37o57[BeTJDYASSD!^;%ob5K)46%67J"l.We*2nFE_+Q[#2o]h7@AKg6QCZO@rFNT=M=,"'fF2inBMKam-B85$AT6$0ARI,"ndV*_nl7"/@ATWWGg:k39m(>t.AWg&?f"3>/Rp/ahL3dtB `2/$5?1bYrhmJLfcMKte`@/n ;s\PnT/el`laD&EK"5+(3,l*jjPWJe(E7Ikt9cJ0%Fc@mm4c3s^AaaV6B,<-O/m`>G+(.&:#aZ#9-4LM," NefR'XeH@nc1AJ?![jD]Ct+iFl[%%TUY_'I:%<*,/&hC@cWUg-2(9>91LXW^WRb6Z1Mpp$-:l[ DQi0AoqIoO`]b[G"Vn:+jA;%kO0-<5Bag=g_$P\tZ\Ufl!4Cii ;QkA\1%*dY(s(sSHDMq=oX*gK?G>A!kST(H.)`!NNb&A>'kY/-)&n'UKd',g+4$qNIQOCHPYBJ7!80Lrt;"M=>5X5G$;DHMNYQrdj!jJjQt1Y!DI?Bq)ZRZH>nCk\c44PAC4^5PLIc\g.285(6$?(c/!0j8:NCC0RiF*k?AT^qQatHh0"d(C1H4W8P>>B:\"^Ui?A\d(YB mOnh*JlA 'VqmWe\0q4-=QqaMbKSI45>A,Z>_#qfRJ#[:c^r\S2+6le^O/TCPFI>HZ8=/G-548sSdom(J?C3[$25 @:Oh<;JJA6)#$H'B+`06\Pr)o%;\`#+FA@:D7CMl8."5'AU5Y0UCNL](BA2b`2 $pHjf\&jS4<0!`nLbYrA eMZnU`,o#Q.[: )3-IZ>^(MUp29?DC.a!)r7#h^d,;D1-coAB:U;=))#Ng!GP/>"]q>9M(1`FW0a#Wr$7"cB$>#E 'eDCTt]3.FS0roi2q]J'B(JtbZp-es2]((SleEpVd4,B@X`=n,LT_b+/I;b?K )<6CS7;lA/*qA"_;J:1O=mrAgeP&JekLD(Z$ffEi5O(E79KWOfd]SG@7@\\NM$^nV_B/US&U7s"kM%G'"K!&?gb:%Kb82?&'"*Dt^bXt>k9E'h,Bl94+.Ns=el@F/FC\1-sA37Aa&<4p,BO5>LLD/c2N@01M\pDte )*nCBEAN]bo):3V r8BdgCl Jq6TUiF[>CJND$=UnJftI5^ApC))lfM#&RX*lFnJ'h5c@/WQ14=GCl'6o=;No2"C"JI/TgW7SViQ/(cjX>M[@.K8?RN([-2HrgS4B.@A^?AP2??N`")AN+U<@;BRAOX5=9<)\F/B!sid \]R4qV(INR$/o\*\m(_8eC3ki.QkkFlPkVSK2?HWAXqMY5*L<Q+V:HU=/[P#l*TEt!fUf5..0q/;ANor()L]\1ZR9YZ!^qaJt4dWt$AoGk?B/@jn?;1LDiLXq:qX8Ip`ciQ>87TOE`ko<3Dr-QBPV >cE<1T([B4^_CgZ,4LZf!bt)t9iVR(1kWXpj3-rrq(aG_SZM&O=-2QU37V@gQn@Sn,/!HqiO-gccspXsa1$%e, ?Vf'5=@/e_,ItO*U2`3mYcqB^eZ+#Adk'>A;.&2osb[=ZEO@^U#:ifJ<;GgZB^o!>D5Gc^/Hq9XH$KVb=A?c%DI294lh+]p[^cDj?&J/CH>p>,l/_1E#i?-YZ-)._(QrZnSc5?KekMbBPs;]SmRbJ=(P-?I!AedL*C@,$dqDm%P&*/*( g*qmb%q!nn8.hs\;nt!UUlXRVsAQAE*#qaO#Y%E)r"LKQNJ@dW"EfX)+\Xf=5.TH3/>dJ?9W tU9s#&CHsFT =c`3DHLNJLkA1cJ"D>aQJh%Z+I=h^rE>d1VW7'aH]]JG6I0YGaA\I4_.$q\b$R:pKB;n)m>%K/0l9LG^(bW1$qiQ\NbYONAA%c. ;:PFQ++0-E5P^s=7^MP8$)rr47`":&$='>ihiFb/>A^7^3UO39<>#]l6N[%B8M$t2jP@%RBeVOYO0l]pOnrFAN&oO:7o Ts,gtoYh7:\1!Bh9)!XOeCHYE%9C8pB10HZh'L-a0$c3AS=r^a67gCNkVht<`c_]f>R4ZAitLW!L;og%CIJ*^T9RsA,q1:c#X`UI`K>kJdN]*A"qD#1.Ua/!FE7e?JEj EGALbU2cdRpPf&=$do/?2),R]p 2D(HtnNsNp-J+k0V;gb6l2;k$e5o:JBCXFf.S)SHs:C/![2kk ,cjJ Kr2,Qt@$$t:-qhO"bnT3e>GFo`K+PbNMO;Rh:fKEF b^T7a@'oJ+a>"^V2Zk)@J`@N^pmAq%QWQN+!+M+bt90mtZE0 `g%qYf,qqqpKg+tr6`aA;Of*\RbV#Frr=&+-pqWsEFAZ/&ToT/sW&kO_7Lt4FL-UA:phLq#DbcirKJ;:J!iUhKdJk`Iq?!8S=dGd(kA8d;klrp4J+:88cXMP*\1)m=,E9k=hd6*I*90X90`?JA1dXAYfX!D16fdaBiI2gA'(;n"cBp4P\XCih-r#GAN3R<%V0<q2I2WtQn8%:*V2D!F@KPQf[A1`^V*qr7U(D%1C0t hd!_.2J4'jr-]MrGV+bo'"EoM:^a3rR^#fm*eQ'T$gA/d'Jp>5c)Ad)p-E(Kqk78CE#O'\:KZ.$GT^d*>)K3MQq&G=R]"2OGEqP%;BH#9<f.r!D^/1tj[ik8tIpRlXq@#7H8R3rJB;AKNR;68#k&"1O)^$.PB0(p]pN$R2i1>-%+i4*lhab2R3M5=b(`WeqJPG@;KkT,dQe)M*WF>&D_N*ib@0E#,[WS(Ne3YPtT -;'m-BQ,jbp'eo[pBjAF>f#h2b+qRd>%^++bN`P]?CNq2Ks$^/XnGO3@G&rEp\_&AX7XH,7!gr@**7'BiS)pERcqFmntb5'[=Z"c/#p:(E@_eZC:p?kPH=o:1p@3)J$\A]q'*C]G*9fa`jeSZgj2laCfVS/+Rgf9=%S_KB[8,l[@`lR"B[o4mBA-dY!UM%Q2c=13AZZ[6fc1["[9g\"=Uq5Dl@d4n^K:'982?V909L0= Y\5AlX1V6$1m'%]"ERYJPnT)Gl#/Fc<]k`/U.[4;cR[b)j#q4q0Qpc=c$eAr-5V+n8(\DNtiJhPis3:@<.F:[`KrKL8W\i,[1].b((pCjbj%LDh0?H$2Z*)J+*Lc`jQZI`Na.k>`PhQHNn2A=OJ@cppcMK00LPg"L@-WWZ5KE#s_ldV&Mtf)3DBA%!#?1I@"`-^E^=!X]4AVDEQT#%;70kd_4V"dKX!j^/UfH'O@[*IHC(b]AZ$ZhLM/X!0/Q]Hj*V%k0mI(Y8$XOn\.qIn5/e)B"I]#/Da6V\'O]QkN_G)[I=8'Y(Z_.RqXB/)[MIAq#n& +nm qtG6g<`OU\iKY/dQE6D5kNJV[rJ=8[(S8T$Ig4eIP_Ff),`&Lp!cC phI)oG57]I6PZ7ciGAcfh87BP]!`AMF;<5TcIYXOemL8En[ag"!hb]T(1\M&7[4C]n<>X,.(bE"Z=([5+>& rentPm#3'4/>U[ mc^#Z6rV*\t$LgGp3$:*IG-1.25FGebgA4U&coE".Ab+j-&ZR+E*e!p)qS>1]'bT-)RC+6/A&ZKX'T\CV2Qr3`E]]iQn[h5&5Ma$"*M*)bf"rb 1=p'I[c>VGXD4BO&O<7Y;W=qbng1bNU[-"<38PdXNhN941Oe,:'opR3b^,0YF\\+f07p3"0lXp,tKtrIL.0e^*.pf'00aE$R#8W]O?4=0QB3LUr?mkX7B(m;)co6E'"<1lQtfQ@5mR0YR*`FFYID+'S0K,Z(nal4ssG[7IS%s^48pi2B,8 (A)KiNFLc6m=&O)5j2 ld*[8=I!/f h4\G#i>h?@8P#VEE76!^E)V!l$DeRMMriK1&8NgVG;f,X^bfZ8;N4$nqP]C^A\%?AmO '$aWQLR^Va,+Zq/p@aiWi?>N[Z"2S+^e]cMRH;7DWNFR1OOaj4sQ^l*]XC`tZV8T>FWeS8N`'`ZmSGbb2eSFN!\>bDh=Mg:S!ks4EOLh&T0[*TN_`kpiT1=?:k_k;Q0I]3Nl])gbh8Qe[+!k4U1g]>XHKo9tgI1bb V:/`FVt5e&D/pg:(d.@+Ti`LPWE+W&/"YVOO`C4kk nOkoUl jY0"< %J9d,%lsY,a]+`A!Qd$WR\n:0DE(XF nG9G?GMXFO9&eBQcA$Ma3]LQ5RBX""7_De@DAoZQNAZJegBWjA36hDcEt.OXm8d*gd_-#0fc(:9*/ N2F9AGikh9'/sc_ISAj:h"s3Lk_'a=a`^3(<`BbZOk["B^_Z[[/,eq4;LT:oHXk;r5;lA( n@cjgaLC2[i)rKZ;OI:EhCnER4k#)1Yoa,+EQ$i6)dSr%2Ba.i3: Z6SA($a!gl$/nC6>X0EE_a72CE`nHL"`ZGU_5SWAA?W! (WXtM9Wj$I8P'8dij.S0aU*$(MBK HLH6'U[tq#JP7->J=na1WgXIWFkjdW;1Y/sUn#bTMqen^`7bA>(^c[!Kn[f7p8AYb(N2%5\FG-L0^5"qMVFfaV;sBVm9oiEHgj8H#OYoUjZMNTL]MqdZ!s]cpa;;lN)0USZ0k+_G!MnioBE=e0hs3r-CTIilr>3q]9?JfI)sNDPA#dp;\3rFdLnA@Vlgp74%r7>Cgf\N4eLYHU?3*\67rK]pP cW23D84fAQO=2,.p#g4RL\<&QdV ^;qPsYans`GF=XZhl-GE%EW5^K=(+(V=OtTqc&:bh48P[RUX/.YKGC]^DA<><6b=Gh2Dq04>^*V370c+O5F&r,CEhV5fK)nMfG)Sr8`i/9K-7fO=b@T+\J+7EJ@6klM`Q4^Yf+e^kXIrNXAGn;/:SJYhcqAr=0shWAs',%1sM.3OZQcJeJI`fO4RV]9g$#h">h=C.AR^)4e&Q&K5,iZ-B(t$:NFV#FF8tY^GHO5n1q#PIMZ_0JrgF[%\I7R\CK5A:-rc-P6fFm:TGqbU_rjs$q+O(I4So>0[ApW!qQ5IQnZ5GHgr=EL-H20@6Bk(AV$0UUF_#f9(6#g":j!Vsn&pX)b477Sif2mg^V1$*D#_.DY@_CmmU-8`$i1,h6^8U.(EtH9<m]5og)eJ!bbP[b!QGEpJkP@:bmPkCONM-(-`U]cXU]gC"%Mj,@f%/]*q*9;UYd9!)=Ne'4Z7rtB]b9pj"dpVkMkA4d>@k<(tQjjl"\gQa7PArYdrTe6r=Fe=T9cYL&@LU6=r5r]hD:o42!1ARde,?dMrkU;`BbNYcA"=KM)hRQ`r\hoQOAA37TNtXr^(6q9@=N9)j6I!8CJJl!pg-_M;tMdSa2sD)B&*c8t/dY0;+=;j)*-03I1n 2I7F1jpOc(ocb%%L/XUj\s$EE2[!<;]8k#])^N+AlXfNZ6/jO^Z2^!R,"s'd:k<[[^ig6Z6W<#(\l5m0+^GHLN:tD`4,k,D:V*HTp8)O_K7DO[>f!AM&]rN'< MOn)D"o@mK?jmgi%FltcD*0.@,-H(e6!!F<5Oa!Q)A4OHKi=2=NDBR6@jDrV&Wj.p`!VSUb0Gh8*Zjh-X[3(Gg3Nl0:'`YMLhApqnB0#aJC$$_67?8k]:lA:+pqsqs/Mm4jBpTGGsKA8RH@k$)kJI<+c^HbkSX0%Q6i%m;?7J(<X\V\G.lX)qP]=#7?7HPMQA>D&q+P0N@9)JKEX!8dCA0b"8TbCZ-4C%L?#,4$UAo`9IPt"K`Sf`b$7?,ne4fS';ok_3l4HIS+7H,JV(5[NqX4TO0KdO_&'"*ZKDtK30&f;;*"3p#]t1@ZYl82b^sjLL,;P)$tJC='b,pm1Cm1CoL1(]URj,HA?_J9;VST47LXYmIq.O^,!54Q4RIsp6QWdbW9CZ0g-5J;Z1i^4bRIk96r.nI.jUBUtc^I![At*:&UE(KjS(/ Jd]I,aAkEn]?QaL!&MV:b0tVF\$_(fq__Uo3W'>*p+6%E,[*>T5hJR^FkJ*$#43+VhrK&&p"?K%S'r";pKQ_1qb8JL_:#Np5>I_Oh%>m3;' $kA]i&P3A)7WUXm*#ZnF7kU 1WcU4+/c,^ -0gAri,BK K=cYV*G9sXa#/#<iK-Y]`m` ^jW GtqIn+LA4/bkSW.9MZ)ZRbNBKV_LN\>$DohPie]e3?rjWX GP.8#A2O5-\7"C,KPlP5Y&U2[KlMQo25q.3EZ/#]X2UYU:gAI"E4Yd2`IY%O<$ptj+Y5]LR'G?P^mRdRd'qh/>A?Dch4Ys!%UG'FYh>6K5g'Wo]c.oGTbGS-?^eAW\3VOP=+T)_WecM?5/9/6e//Jf,$7((V@0/%O_k?8A&H!C(gZA$\lIS=bt.=ZY@%!*`3#1(<:>NNP_$?-H;O/FPOsqr#q?B!C3%4*:JXFlF#cLCIjr`AG:B!d'B:ai=HEr&4cICiI=dGf.F'X;M6n5/S8'LkO6,6SRf"?UQJ 8,8[=tiC(UO]J/AYl0_?+#]rgkV$$.dI 7HGbO;WJ8I^^/ZW:jj+m+ZRir%>jmWXkmbC"Z$[TT\)Y[%)L_O+>NLsS-^\Kr>eStgZ#G A:R:mQ9l024Xb[V]M'lGW-%sjY%:s+b?o?Oqid&TFsJ@HLOL+=1SP31P hSX@eR@61(H7f\W"`mdPf:JlLE\%sVboqP4m\Nq-1j^;jA3521f9X,Aj8 h61c=0G480E30bdNHdj&m!Dp.4OQXj#aaF!H!=VO5-2R)NsdM]o;)bs d/2NC8_'%hG"68'4CP22i5 ID*8>Kok0XF^'mPq6em/"*-0SQU`KfTbIF."oVADl9.i?JbIjp!>4;qd>\/mJ%tM9S^(IBK8CF!'a:/*2^=R&TVHG1AoIgh$;4MMC.sTZ18b@_Zo#F^a'lH%VkRFeh2WYgs>2'$]7o 4)V)"jRBN-OqbfGi5`bUbEG^cc4TB*.I,M<9sX"\hpBYZHZU&@Mp`(t:oi*W:4eUk:j=1q ,E77#5=+>#V]iiI`,A,]$+;aTN]qO^elX5gd1_cZJ&FRjfe50o5YP2'/3.:tN)GPGsWD^3FHn<Po<9t.kFBFP/9mJBM`>qf7Y)jBEs,'lX0J\@FpCNkj$?;b53k3K,1&Op =ktW98o6go'DlS/q$]6qIlD'XPAPmF+52*KkbNsoh;Et'l?WA^MS,cWZp(t5!bSfAhfY-_Q]XtfE,'-9JKs'SPbdC1h*.2MmDb#CcO5ZK4qR hc$;0*<<]G<3F)bo 'As'2@+[.Oi&<\UAp2/fMeA.>A6/$Z"R/ENAd47X+n*=b4Q+FRK00@a(!! leYn1B)b%]n7>`@,nF9q4>7"BE9fLGLt1!X3%,!\R5KBn;AUtn2@2m,"#sBAj`+n(HN2KR7c2Q/&9'N ^XS:_/A'igE2AjG,k@@A^R,I/t:L?DO'U2Prl1NJqr_k&80fZcK>Og<s-&1HYFbg8i:+=@8TC6GL^"HdhZa@D$#-BtK;.,Vo(!keiM:(oDc,3m`!eK8`/jha2Z&Ch5ohpX1bFM8KJ(4*T_*g;DQ#N/SH*GBlsjtIsQ(*>'6c3$J];t3h6CH,g2P/MT7r?t,TKRN9\;OM3RbVC0bhSX_6F5R-M# Tg!EoD%SYW*1Qb)JLI/!MfTZ5""s:8Fmr0*Tp7P$FXqJ#%`#=_Hi91XEeFU(m9+m2hA%ZW4E[?l`=:QW"mdF>Ps03m<9`7jB""<4<6$-`bCsKjMAMPCG2W BC?^;O17GSDg1l'"Pmojqq0\C^,I_\).2+#%I?.kI##'n*@PSh /o:lPp2Z4b7o0EQ'c7%>Xme8V0/+A[A-_n\L\l)=Lt!%c70O[C(7qZ&Xk_@jh'DphP/i7p^g2br/7boPXRH[Eo?l];bY6T&LrD@4Zb mjUf9>\b\PdtDQ :AG\H91r>R(6g6qAb$7DXRdjt&#mdFFjNoXE&]0FU;,LKf.2lK`7In."M0#RCDI4:C;p):5PNIKrL3?oqj=BUQ3;4 AVCAC&1nibS^kES7a0kLA50\3((0f?85.QdN-/k:in<)tFMAkQnN#Aid/G'-+((:Pf*)lh20R&gpeI7U\Yl2k#r3OD%VKs\#i>oggj6J8"N-QlI4:t=+raJWD%Fj [k"AM^O5frFf[K$SI?eH2b,*H<YJZnt5(@Ir6VDUKnPh:9lsHAn C4]AD&Q`"lqil1BAIW+FfiQ[K]K="X'dM&Nb)L*R!A?Yq1C'gS(Y0#U'52,4&f5$">_FN4iT_2W5`Dk;&ib\_qM+VUPX*#<Ftd(f`XXa]BO';.a61BGK(DaU7XWs^d* f)=8R\0C01IdA(>_o:LX2c1!mBV<4l/QA=!gg5c!dX"1f/cJ1P((2,_LkH?hi77HZ0I=A:fO?4 ;$FnW3F6sg?Oof1g'GCA$&]Y)..5U76;%d!Qn+-kp0BTl'km"!0[bL%2]?d_Br;oa(Z>qta.#5A& 7P;BhDR&rW^c(N?H$ZG&eE-b0]m"^:$D&m5aAeh=a_.]970#lT,`a5A]BVThe@Uk)_8 ZpR+H-.YTY3;1>![%_HdMoDPG"s;(hh?NRqHZt"eroGFR9`2OY#VA1#2g>Fn`]<sQ]!,Mh1Z'3Gofp(K(sF(?BUJCHa)%'=L?7gb07T-&X:'n"3`8jh8kaK,]9IG6\/(`5fS$U%Y(qmE"h Vi40&3B5$.\'V/S^Mh$\P#,Z%43m%R()7^iP$oVJV[p@6-t)n&\87=]I^1L\7Xm$T9cp,j7KZNa<98DU:iHc [F!naeI4_E3A15X=K/?&%%JQWN=Hd/_DN];2 a2d0B4+h6($ 2kUAp^im/nP ZYNj/+7+E>\t@9r<sP'k&JX9 h2^2QD0/;go?MKAsS(<&3AQ7?MN=Y(hX9#bLReJ6M*/8L>="H34g#/NK>Ad1 \CmZ'F^F6E`PKDjC)efPUQ&-XD]o?Eo%(9,N3NA#Z[P\rhcrL<84n RsP^.b+KZHk#;\'XYg'knHL3 gJ#doTCiI%XZ@alWl]r/9b_7@0q/TIMA%=L2AbG,3a)lo?H(]!$t&k?)a?b;gpK@tF:H)I5+29Z@Fa8^58D%0DO%(5564 (&RH(!OdYt9-C=.ZJMsfhMR%ZFUc(Y\\5P!gcVp^+5)\]*)N .1<"i-71jr$AY7p7"9T),c)=`S)N*B6:L0U*aW-HDXfsXVf&a<(l/tsMn`;`[l=;f&rbgcDP19ZEZA`M6]Dis-MCIcAO6c+p_Cjkirb!a@hLMC@MqCs2O`]B#rob8S>_U5OXA3pr&39^o:+e9hi 'I3"4N@\J7Xa=lJE3f( #c!T]m0R%].V"YU.*=4nA:rY`)W`4sGkr.ZjqmcYC0gq\QpDs/%Qp5h1>ZaEk$iG4ddArO`raj:VV 0a9Co?8!$SI/:Y'1@hY75]?Ff'^? QFb4lTA.f$Yl90*85i)JDM)1n "UeV\ZcL6WMYrcW7"8A=OK YqMAG+\;q"$Q$C'>(S56?>3A2UgAC#$.EH]?mL2VM;j1kO[A__NaH)etB4AY.nDt0PlpQqVNA`@O>JJG]5joI]sKc[gAJ3GibCf`aceB6$AQO@=hcmn[:%9WVS$?\24 o>I^]qF01Sc18 KGW9[F]`I"A$rA]$6Q?OnpSHiaO5_q'XZfnP:UNHje<=W9eXhr+2qdXobd8)-FRk2OK?\GHPXt\?Wk`3n?d%5iZZ.fCG#MDi_2N&OObPNm(' SW:B8jX`%fFdY+_'f#)B?:*J8sbf$D8f.?<&Hh-37eQOA$E [(Z6"/H`*"%I??Gn<X&q5,@D!$gSMs/ :*&%b7,-&<;A"Bs3CMP]<&$r=Mrl^`$Gg"Pm/521-C>ldl[&$aZ-6gmUAESdC"t`86-WGc'm0cgT?0g.!InTDh,_;?C7!-SC-B f9t$\^.0oSHA94BgE+A2)Ca^"&sN4aY-`fF_N`'8''4mTaq[2kH70 i+EJh<,N:0<@Z`dsBKA/E:$];\j-9O5#`\Y6.'F4+AAI*L >.+Aa"smg1e-;U%U)M/>o^#f3*la>+ E/j!4FcZM(9RbWR0'hE\*-A68[F_G?dIbeH!+cS<,-m6L^8Ffa)]!9>E;kkaW%rds,W+a6mDnhJ2E?DU'f0OBb[Oo&>"-\P2'Rc!Ls I0cE'nArkdfYsfo_`.74[rF` Hi:9a(?&:SprMXm4Z#nC>I4SZ3Zoq3E3207!e`N7pL]?ALII%EcE)UcAsE.W2Hp;H9f.6+, ghLDk,_;h T&AP("mHq/_[9kfk(L0+c_kI+X[b[n.99_:>$f.%.56=4%s9A%%'/"LZ^Q)EZe,i%eJmpGE?Ys+0$FUa@=fjAQl!/Q.CH2_%2AX^<_Y:3SJ]rcrXA$dP).gd([HQlTq=]p7/]!LO9*@=ca0/Z3@0FIMFf_siXZa@9.G&^+ C Fsf!VNRTJV4"sdYt1e`A8fG#/1shHkP&:Bo8g,r^['#Tg?tFsP%J''$2>C)+>P`r)'DP&/J95^P fLEpi4=G3)34qS:,XGEEiEqS$Qj^Zdh7D/7C"8KP&(1=We3^kEtL4TbtU?mk;.VSrCA$8d\08>K*hJib__TmH4e!?G5SN_49jl!&VAO^s"^ PQKL%5)aA [@#,S0O&p]=6,mKq=J,mAB.<#*(_eS ii#NK#p\H>Co*SBDXiV`"%;o^=4VaGiDdCsB$H@\[ FiZ.iALhM>=p0R8UoC&CRV_OUDI5@4>iJ,%'G=Skgt#hMR6H)Ka=91GU[ao9UJH0Ym]S:ZY!d,-1$1"ae].!Ao&h-`/L"ej3YYI.Ge(Qce.Gn*QrSaX7WtSP`PKoVMA;KN3/?YreI$!KB'/mi/ h^$W2`BjDB@9p_JIrqFTq22\`WQH:;")70d"di`KBZOp"<:%U6/-@@T@:KiYlANXit!UJGtk(.t]$C#o+k;:WA&DgiP+TR1r[W2n=KD.9,<_F>i6`85t/+(]s:7J?78q*>>7Q' (Gta[p"f`;AAsNQntj[<HcSFF"iT%Z,P]j/G4lXD3O,ABJ\L3N%PT8_[='i+QhC8A \.X9$Krtr0WPSG`"p8 tU'AJ#e([Gq21Or[em.EB,"-r'+:\t:ZmBb*&( kpA!:63RTsJLbATN`//D$WXRI7,UIpoJ+jDc`<1tVGpW$Pcr#OHRPs6hbZSTU=mkPVLAhL]>@*^q:UJ,G"`'&/)?BB3]4c1p%P,_% +/?^@oPQ1?7o+ppq"@$J+cK4!GY">?J1'-1fA_lNn/[rmG1,_j4oq62Y?^9Q11P0E5'0'3J+tnBlP^]e"0kN3Ekc1WonI9-qsMs@b-.'/AACX:FY190e GgVY!hZ+ Aa7V`Z_k0E865">AW=1Dk^,,nadpT?l,%$1UUUqnh51&M:W,(UFc8Knc0ULMJ`f8h]Pb>T*i_Y$RHG5hsO 7bb gM/A5A'5 5,*;5S82DX%QmA5fgNi/1&P;q]dsNU41[#D2D^Z:M&[;0>b\:7jR*e* _H;m;@09TTsFcjAt-$H?DmP*]l<i`33Lth-ObZ#[_K:E1oBKA\U%ZRW/$HD3JrZ$M-%5!t<7.Z0]pM.75r+4gI;5rS?sXMr`\0Dms:P]2@-S@b7hF\ N\EOW*Djph-em`ak,Re(UkHPWM1`S@_8=pfcP8ZF.\sl9LfGbh6r!*fU Y@Hf?VDaNQ=><7L_aC4oAT*BE50p%_nI),^WUrm>77Ah65?7lQMn<"4@nc]oi3t-A5qp*BD@e'&XCij9#C.FZ6\dt?YRb+^2EJtNkB#o$)'-j*T;Y!\55BHQ"*"fMtP2[jgYr:N!ncG>:B^p=+AK+8_oOY8Gd/%R9]$3`o'aKE34?h>E9q%iIQM-+L46?T]4U7`fUoR!'Wekf._+*ED9<%CIS:^tD+/dd>0^3NWop?Inj>Nj[%&qpVWQ<<'dAhmO\pAECmd2l&?2 mDI:dVSc!3[Z`'!%dlD@8pAKZ8!mkb^^kWP[l.[7\C)Ut\hHaj,H;QPBdpohH]fdK?O.A,EX'5g-6 ZS?]! 3rTg@NE1_r9>p K>[;D9OjYkX&b1g4#fGP? @VHt"HUY@2Iso4nIZM6TA]&Uc]!nEHLj2[@dUd"(f(l!VOgneeni],`S)L:dL!&h2`!,$F,=5MZA4(5*0m%#/'iQY 7D&mN=2VB,19(_Rq]Df+Y!\=HGTK:1J?rkOLae^5`JbE9dah/X,k\]:A2h.Gginn.j+Mb>EXl)Xsb[NNF"Bltp.U=0mq?THM0*nHSblADA&aHj#s#Tf13Jt4@!6NKoK(d5.TLh)9Zneh4)7i=N;Ns?BA5kc"=Hc7gUeX 9spSSBdPO(,JX%a]"Z_fAJ!:"Ds9frG$$lIrib./&@O%f(/`P6E`3T@e?Tgo]rbc*+5IM:H8"GN"j"Ti#37eB@"h44>+B"gCU)eXFRsTHp[V/&a QO:W<^A$_:tU[/0"2>T,YTRNY Sn_@0#m\3"cqBtQXY'?Ial2BW6nhIA\cUc=c B^!d^W9^_-2_/qD&1#nst7C-&W03D>ah.%AU2(Je.AB.e#GZFFZRP_GPM#E dNaY 0VP1D8d.hL-%'UnXRtLI@YE"@q"QSJ5*.1Z&LKison[,3VDs[^MEaS]Sn[35_.]M@DNso)?sOc94@$QJ&533m.$k%T[B?%5:!;D95dCAt"f8(M/,$_8@4Ng[TBACtPE600l;0IMBA`e;JD.6+d_!,C7X[3Ap5S+JkPT-T>@p*HfGgC8G8l$Gt&;j qFHG47U5rP;'A(8RiEp@-"gq85#djA?-M8U8l`BjW*7"o#3'\$dI"Da38TRHP=P=b^Wq0LaaA]%K'8YkcHJZ0>RVokpZ#)k4 $Ta( E*Tc`dt_L%h2PhE.5Al1Qj%)HdAUd@.S4R8'+U'p172,a1$&m'*N+8iMb:A&]JN+-=Ad,"N$NbM?d9GjD's27\E<@s&bG1?me7&qFJjE?g)-^fUf(SoF1K_\W!jN@`lf3h*-Ud%8Ua!AkXGOL%U]+4Ol'!5J)M_!`X0/T1,N^(.SC77FpSiE_rZ^N*g5Ul:XIks/gDdZs70+kKtZ/sdg(l6mE"akc.1'.6) OI%Xoka[%<;iI!q<$n0[X\X)sJ>:.4trHQF,< =UMci)!lr1H'8bAc_m\8W7C0[fP`^sZU0W?$$.%XAB5G<%JTq#0L7OC#F"3Lb#eC?XB6:[2%PM;S+e6!8p[lA*QK7Ci6E)FZNRk'42FmIK"7$A NL!DG0!ih`'L'-@jH*PF0+^e$4336K>LoV!'YRt+!IpKM5o7&]JRKrL qaLj\W`;_NT >)t?;[?')A\^oa518(VaT5ifW7i2_DFA=.XE-R%Y+TWiZAQ_**DS@<6]AtYN3qs=;"t+ni@$pS;*K)6BAta'lcX6kMF2Z:H:].7)+*EOFhSH4S;R7:QU`N>c.S9B*o6^F01lSo\/NX3nd:7>9Nn0! 1Jm7c8X$<5`jQ9,r;qNsognA[a*D2sp5:JlS@D QI+phUn!m(;kKD,2k+b`Wh\M3+1TY(, mAs;!2;NTN.U^ /L2%D^'L[QT2Q[;4OJqK]Ck7E[o2IM7CXBLW*m1?#s$* H"MR[3R:[/.gC\[T!`2h0oWM]*&K)&Z,Kh(JB1&.eHq!N[M[AA$"Ee"IC1\:j7:DPn/h):XZM\OPG)o],.9]NghLT$DA#5Cl+I# V%t[!l9GmT;)8AOiFEXoL^(2'AVZMN#>0;9L?,JF(gifpJ_*pOHQ3o0:dC>aAU=kJnrVq_:;m5r9BJ5Y)df/`3nlE-6e:^i!!7@!b&&cK24pdA]mdr(%hi@YfJD1YJZ(Ddrj08G:J$iR%o\o@4aVPjB0h59$ek;]W)hK1B1-(^=.gD^<1Hgl8LmF9M*e:B5`Zf9!)IH%8(l +VXME\Bb>IRe8JEQ) XNm9A8j5.Doi^+%c&l;N$LXq4]U/fkm$0$;r.q7aX3)I\b[`RhVg\&@]Q.n/>g 70`Ugc7pRQ*LplB&QOro5!!g@8HMZB7@,8RtoC01JED6o5:l_/e'Q(7hal>EiWOh)`KnQh+h?5r912!?'r5'b+(Y,[Q'#='!H\( _`CBR/d;`6AUDN:%d)@n`Ag[,#mPGYWrZ]7?(NRG'Cl9$oCS@^WW8fL#po4`[U7&;&#MQ4l9T.Pr902kA!LQCkkb39/GjZkTm)8VkLZHmj5%UJ#G2ngHtb([`WTN$Q+33HbF]qfKqUmRZ3H$m9l6*G06>+h g^`NWdnW*Cg4kkkteOf*aOTRrN-:\e#%2m^87^1[J9T\#&ASQI9[O6gha2]jqa Id?:@^8]ANc>@*G&.(W!%J0?U\FJIrV&_CKVR))Gs@H=0I4f]-MhcM';9"l;L>dm-)P9fUJU@G*`SE?AVGn>AkA >Ce`Q_-Y`I@AZtkJq!oD\aIZ5H(X;g<O5U]Z\hpOjksfb aKpH>9K2fds^;SA%_J"Eo*"F+F41H,KleCP717"L69Z%5(Ah*j%:q?HH.maa@to2VqoQIm!5CoXk&"Akk>%/['&bP\X']n-A.)q$1OA_9C4AqpW%f`U-PrC< M %6DqGB\_bYLtdAd)L$+4'd+6K/.:ANU.5nk<5$9fSM+,PIESS]a'Fn"=*qg5PO-=bCW7EhL6/1.=hgF.JkE_GPMLs7/2WhW#ZYGLY\Y 'UTr;M7Z[\e:JIEAEjr nisP*ZAD%%X5bLSMC`_0Vg>hbD]l@8Wj,;CX(K&3XT%tFR<>F)'q*#R[bcS7Rke'E>_6IV[g83]4@QT,&,. ^7K>nL=N'[,Ka`2s4gerT?c1>+%+T9E6_""$NjT-]_A:C,\O!N)oLJN+cIh>7M9P;I8f7L:FJ`h[$88Z#".tae"1(Kk12CWL:mUi@[/R^6[Fl?`m89[Q'7MIKRtbVtq?jZOWADLb)5LfY9NDQlo[I'jbtm>1#s;n'F)J\B&X$T!9sH@4@gBL"KZZ3lpNV*pm%E,i]i5PQY]K[8M8A02L]4.P_8!6oBbT1e4U9s+LmG9BX1a1SoTJ!RArs-M+4oHkM kmbd?dm^IE$`>fCid0I^j_FA6VAr11+Grl$h=>6ptU>V.D$-Go<;AF@[>3j)B^`8scNE>>Mn-B>,d"H6>3]6_[`pbI Tli@StiR;]&^BmL(.O&ll 7T:H4n21BRe?`b,Y9@G=BC`3%/f8^#S]K,AJ]Cd>%tA?@JhO+3jjb6mg.[lFKH_N54JI^7n+.R9()PAAj',,kea\.,*heik"i@KE_Wd,=KmhG]")2:_[JOp,G[C]tGs-d=!_7L_pb\'kZf$1I'2"0NlS5XXH\hW0+tL6tIa8gWqDQa6SWil*jk4V31KfU#h!L-(2kYC=6RZSMKj.M&W44@Wikh*,8+A/k=b8h5/*O^Ei T.X=b?\bmFe4p =Y\%/5Ad:(39>AWP#ASmINmgl"gP8&^icBi;B?3,qR,UdC*COaV^0r9^j'J/g1'^k gr`W+8\reRBgta9P,Tao#^njl!.aR"nT:YQMp[+;sLi9m?"h, J.7VpH.?LB&'75J%9JoR&iS@9[rK=UldXCCraQCD_O("f>ahCTF/-Pq,e*QC7HO%sAF9-@XEV5QAft?fZ+]j6If9?D/*Xq,>H]8qjGaZ,4coEai+qPAnrsoL5!OCPl#OQ2Qj9SNTT5r=@-ghrL#+Z?)f9Cn\^+VT4['%"0Apm \ajn%s;She/E2cGUe6S7HifFtC\C'f$Drqhgn6BknpXP`&%lOi=t-aD\j.X/SAW)7AIZG&UWi_(%A! I9pLp8hgsS>;Q;rV5oG9dLDI1=[E9K19`__]/68q4[nWZ+J3Y0X Xop\8bDX.*#el,[HVfpa#`@JL-`dp)[Tk#.:sZG[J>9P$:LU$DZ--9Sk;"PMja,,b+r*i@qMY*07mWpi@@c*@ G'%setr`Oo i$*<)K6UY/`X\3./4W,cg])P.^>ENU4ZbY,p08=b9KW;06emM0r2D]rk7*eq>]UYAQC)68bl4>opCE\@Cia?Yjh'DNB5e!*%JLf=/:.eGj+P4?DC_Om=IFNsJ`Q,R`E9*te+:d6sR8O$k?=rhKA_+]7Z]$]6aNKc[mmE,:FtHn"Z[SU`r.E6a;'n` .6L1QO(!JhXaMIO@+Qsq)'+DD-5?B4d$!Oqb!;,%/c=+I5tW,Oj<^a?%TD:r%f_9U]1t5js[JC>f&O_cV"rIgiJs^,mD?g(;(_GAV)i\M)[#kW''Ur!O*kP57AnnHY7[47,R[&9SbcXW*BVr;=mr8+_U,nUr0I_r^@ br^=pAgHqka3BEOph67]1U#"j3567IZTC*`oGdO21Q3l/V:m7$KdVE;bV28[Z#G.F^&cISNhZ82.emT>oY/^rs.//X=<$%]BB"528)tTn4ETK _5C_IZm;"&."APR@,;=JGk6"o.[?<%Tq4S+9WO,Y:aB#0JLjW0#Sm(\nr`o/sP3Ql%&%j&<>doic^smX8+27 '4\1M h_0q6)99eo^tAm^GH!C'QF`e5r:ns#*bFm7-:1 ](B`E2trob<6e`^FeI\XUA9kMIt0'M5)T_IoX5pN`2C*E#\2AcR-Nsd+ pqo5=;0JsKDQh+'kN'%;"o%:ChHIN$R(KD5)A7Jc[eHBs'!C1>3m(-fGVYj$ZiX/Q7HArA'Mn;8r.W]i6m8/f,>4>XB@MJ!Io(o'T8A@s(?h`KbIGDOkMW_XCee:lL;\#@1I:YO8,p&dMm]#h,*B[o;-E%qUt_O00%l[_BkDt,Wkl8g\6@:S#a302_O>dZ>*>8)Sat@-\/Z)ds3.t6]-a:eLO/0_0tPT-Yen9(*eGfRT@F")SfYnV,$?L>%q,A7NT=/k'oh.kI9f.4kQK S(%_X%`:"%g0/]-iEm&[U\ARk8N+U3bl4(Z]G$9_d'hbSoK#bYreD-cQ"]W1T26F@^WsI QV,cpI.<WPTPiGi0/^_H5W^PSetF:UY-Q4GMPIg:1N-Ol;P#iQo3i4CE.]eYi!b.HPqP8?8rqMK&)%ltAtt7I[2Rc,.F3()Il`)9B[FH0NMiF"imOiBAAQm??^25+I6r6eonS@9&nM5t#5HMGTm&V?EMn(#^6B(X%X_4*o&["iSmAC77R7$h<(k9T(XHbMA7/&C:WHXsLIsj:_JJ*Pjpe$sh@tIp:F*]"#H8KFR=QiEorEFC2VZhO'(\4^C9qNQh,rjGm8[JAmGAC0V@=G;mMLn%Va\ZK>niK0tYo9E7\)kK\U<#6(oX1Ngcf?Mo;dB`lpDI9fVs2>#Hf>LXnq7PtYp[8>:NaCgFI+Z@#As?kokS9%.00\jN"UP+F9*5dQ:ph\)b]Lr*Z:E)bkl q8k1L3mKlc\70&ZNfp7Xq&3]dNg@[T3&/p,id;XI54:&`jOVh]U"Gd4Y"gq5)\n4f!TN!A#lCG:4NV< ,%p`b<-4q\dt^n8b&lpgM+dc/HXAsPgFABAakW!5h38tHVne0prOK@GV+Dh;.A1#;WF5Pb &)A`Has6C#0[TASJW&\8JYpDTHK3_DE1RTlPjRrcm;G&I88C2CrFY'Lf;8c&sr&pBrTSsN-&LTj%\-ct[k^\Ro8JPP% J;Pg]p&8C7`CRLg:cd+T=L*p9VD+'[R$EPM"iniN=s(57WT0eU$K:l,;rATGAKKE39d=`!N-VEA&5[b!MH?;.kKP"XrkJKa-\kZ[SLD5VO,Z+J_lNp@2\HE6^^NO%l%+D0^c9>j6D<\'V;;6[8hd4)2r@\">!pAjXRrKW_:hPT*039!&)D^slWa8AVt35M?6^?8)XTqI*9O9$SGsX!cbr@t!.FSnIGf"_TA(FO)_DGr?Cm"*'hhOkF)C2fiNoDP8YCIkA!l0gOG8bCXsn.F'3=9#(A#r@K@Uq51k=@_,Qmf4;^p7XqnGH=0h#]p](HJ?Xj[>r>?U-4ZH_iR3c;LenPcIF/4\*.ORidj\:Amc]oJ.XFN-<es"F#Q3IA9>aNP")GnN[r.A9qFK;Uc;f<$%X>U+eU]\#pj=Z hqWM:MTq$/&N;eS&<8TLd:&Ab*r$I`^Tjo9Vr=O)->.eWoX67"jKGNfFA%?q-'EK=8g'_3k:PMOEKE66cTU99+#(D PREH#Xer)2ZO_:4H:'/d Hp!I)nqOrglfos*[lJ#rR&]ShTa)$W;ZKenVk`)S[8@?B*'3dHLh$9&h*XmqI]Vk#@AZ"RV8n(tC#LlbRUJ?(hjnf)ZtlUY[ sgHsHKC%1nREJFq+@D.nb4aA!9pS?c$#$-DA*6GQ568LTrtQOT79!lk2d FPo5@"s!WY7q`=s1(Q^S90M#2I/3pHgkr=3IlK% 1r\_'N\1cEU!;668C"1-W-JJErl:VNKbji+2SUDcdH0\3kh>c26a1h#6$8AV3dCAk<5EbS1Z 4`1CE7a7ELnOsLFXTVF9S =N$7b4;a&,7cUY2hr*P]nX06GrASL`<\03eZ*[lG`_k`i);at3041D"Q$`9L]YVZ)Im)IX<\62,DmYMR\HS"t?]o1:NBtH=[:>b#K&Y,$Qa /sl][0 &?pbqX>nU?)1#?jkC0)^$T;OIEGAQ6RT>Z2+')DgKA232na)2586_o1=A>?mBk.9\J@isKbA6//kpEdDbA]pCoK$f!%#?`e;Y-;d[<`&+=XS\&VAoaFZWlAJ#N\)4E=0tMCMKXk$6 Qd<#5@rNCh%7bQeAke(c)Vi0bEG/"8`maPqA!RC6D1 ZH8ME@A_[flBH_CGObF\AAL];j_@Wkf?hM25%P6&fg3/0&ZQYE4(ABStJ'qKG&=YQ"A=esLca`BO5b\!,Cs%U5WTM@Xe@59in0#Wnl2CGU/f(I.nnh8d9nL:.ha],dL%!O&(;Nq5MR]rN:/Z;ga-Rd_JjKB)*`_4T'2AY=IC:d./8@WSU1) [8s3E[W#gm#Y]g4;[r>XD`LY)lAF4[TCgf$-_4' 9MH"I=N+!+g4q:;4m9WI.n/0dm?!6mW,,C==\O0^I"PPLZq2b^J$q?gQG-16IWAdHt5a>4J/_ls R#6\J5$X]o%<%'"3 `A*]=0>+@dhpC!UWb>_+;@E;ka\a h9Y9M"7Z_IET>)L k$dbAaL9]AM>As=oO(Pc-D5@p#<'NM[JQqZT[P=BLtscn*t6C+EYZ_fh0QSCk$LI0(a&`:jtpm6^%=L?8?]\F"P"C](I*(^fSr'$[gatV&o:&k?m^:PMi.f?//`>jOF%`N/ 7-7N>d(R5l"q8=D^C0(-M&tddJCYL:UdMj:pZPmi$_;/0cb7H/1?AlmR(S62#F"e,&CpSQO[m9[-,&dal@DWZ.7+H!;etAsatJpZg,i*okI,S;8Ef`rj$F-N\'%=DM\;$jk (Wg7!2531OQ;Sj$^j^m0jU%(l]j-e$RGirG"po^71[Ie9h+(OLAU9a D4e/HbsAne.d%SN;;goAQ1_`SV 'N*3#kBs 'TfNp`_JsMp$VYrcpIG9C+pV7[j4d,5N^\EK.q1ff!AU9AQ$44B8T6Hg=T-E%"VjgbM%dq d@13`UgbS?#6I$pdl=Qb"p1;A-Q]0Ro]bA "k&5G(8>0`#6)JtrC;_hdrU@CBBrb'%$C=ohkmZ0Q[\1a4A'8l)nA&o0#<TM1aXEGm9.%BqO^dP(H&?q%?'FKQ&Y0g];8,Y-5c"f<1V.t(%#H:;ek!imGA"`(k8+.ak^_CUl(T(eZ@^;sf0!saTpj)5peDp?ZE8?S>n'=3!iZCh-<:f'ZOb0;C&mAF\[7(f7=KfAhpjlM7RT)%=jrK%C&I8J2&E8,+c"mag3"re'""-#rrA?O _0G;KM2gQo`HheqqRGAmAm7"I3r2WYc'eeioojXT"V!hZ3`D\Etrgo-O,VaX8UU_#7GiCgsXV%-PK1(JSm7R'&eN$kQ "#kUArkU4lS_VQ;rVsiQ &@A`csf1E`*+EjNC59F[V\'o0$#Rhbs)><^/Q^/bqL3Z3k. [Umki)clEnQN\. s]S+8ZF0?MBlAqgC\[o7F(1WQ CkHB@F>BU2f2Z>AZ694KkP4q;tkSKaoF\RJcB(+-92"7=6Q_*$'[h>e9W-2,'"E#:D .TqXm'"HeM?]3-jc*(T *QET<^]bb3m-P Y#-\Ql'WL\X5r: H_BjbLsb9a4N"Eb/Em)"hc2XLIKrp.QIXGDL.n*X5A6:Iob=-6k;SAQ_N'>e#C\G?BtOAd%r'H8aX7%5C.5iR.`,Ng0CEKL6_:=UQ7F])d6r(Vo,^O6[I. IJC(Z$kS-sBWMT(mRG*::NS0$Oo!1O<e!7hE:R9hJY6IE?as"^YBI#/Cp'9YGW`V*c>`IO,&)k%lQeG4&oQ*2\aPM8]Fka(/AH508dooZB@\\I\5;iGUNH^;S]NpcJZ>j!EF>NGe<i!2Fr&"T\cMiC@K-h2\g^pTTPl%X3Q#2%t7H/cBGACb/q%>rU>On@+&d"5;;Lt2A=N;$S67l*ZT@Q%7A&t&c[&04&C]e3M;+!:k&ZpA`B!oT$CJ:IJ@Zd>ki/!2_-9/'mki_alD bhQB,nUVA#7dW^8EB8?R[o.T(A5E-?80 DSoTFEi04?%h1h$HL$L-L=nTrHlLAj;q^A;lL1E\XL'p/B5/@9orORMon>Gmd+6B8_r='+MABWfsqL:ipbmcc[lY!A#^f;AS\(\;inAR$^FTn<6%'P3dckS&]nV/q-mpOIgF-6\kriesO&TM;B9hX.[d[>qbd-J[Bmfbd_/j(OVKX83N8Df"4JX^:CH`\fT4,')p$T#0XGfAqY`i]/rm7"PNQ[e6J1OD#LH$QYMMqH1%QL.[tW $etq=r$F=YA^L>DNj4Y.?_C?+2WppMb^:j!.=gl1/:?pBa6#tZltcS)R58;MR09A#p!Rm%RDaTT^"o@-C@*%<;)q%/4.W)nB7^SrWMB3l>$3`UfoUkbgRW>FGK$M7c:gV6G4cWcj(+&BXnc]6Tp+QP%.RW^'-d3Pq! U%l'j26D41c H*(gS3NiQIsa]$Ion p8H3nr*>A^qpl.W[6)\-o+RU]Ydn%s.ON3@Ws`O1*qj/B5AVF4W/-1!ib\(B9@a^gIpW;e96\E*d0'bmpb]\1)22,D(jn1X?ZEglE[U[9;%D^n7Ad_P7)iAXj@tOFI[@4=>>%[g87r8T3+Pt<)4)5Hh>ODI>'?5@APJcV&bXH*AY`#L<4`0ef;N?aC1 P*76q!4M&T3T-/A$njY]p"KSCla\=(UAaWKAi@>iViK+" `]F-EJk2b&_:6OZo9rJ^!tWW/OFNCN<3lF ES=MTpc<kpe1G32)[*p`'At?J> S-AnSDq0'Qf2,.)r5q!MQd03c8g=VCR:)CEe[2HVNg*7p'+Bp3^i#3HjDQ(7i#!!XSAmt 4P-K;,!k9iJ ijHq4k]LZ %KNOA+kAN/^X1fJ"2I,0#<1mlMX59[XUg7ZEm,$GRW\L%LW>Go/qCES.A-0D/fBHd3R("7&n5[Vi;&q)4Rt)js+YEJg^0 &\V9A"KD&8r6t-@=$>! (2aNc:5+I02R3qS9Y n/FBP%$;&T8Tc]_X6p7(;*D)m5<#b Noia*7V>Wha)9/Z2i VW;S"8h=LsYpW;%_.iM3=#g`L][H1rEKIPHVV->?):`8!*Kr2Tl?hq!LQ;\4=rAfL*Aa"RgH1_lR&S?F5HAjP&T0PIg4XLAYRAh [a1Q+lkSA [("*1BWR+$W+i&G9q1][oPdi\' V_1[kqL0K3ID 3h.MCX@V<8Q3PDP4K@=]ob7A)cI*6YOkn\"R=o2@2rXaZ=h&&8SLr'2?8ht `2Ygj?Td,lsoe`b9c8hMpQX&,:o=A``PAX_W;(+4)UmgC.k%k1`?HfBg(.l4%r2 b;s)4q=/kU07;*Z!qJ/3_n$j9"=@p<([2LfI7M`##'[*meTIHG%AZCXWg\6SUo]>aLFk'&#RA5n:oZ,2raU7dIE)l/eo6S<6^EL+tZ*dQ^@m.nr6F`-;sX'@'hOcoT +D)Sgg(\5B/7%-ckN^1gB77WogW&+=4:f"d."r)paXl3>HBFX6XEGjLJ3*ChXJS)k.IXhHZXITitshjDD;mSU43qBRH!,MK$AD-&H 2A"H?q!dj^rZ9= \TYg;[G`SU/@>A`0n;(a@Z/2O>^1=5);qCFnM*3EnN-rSQC ;"+$BK: ?ZjaHJ,FCq>R@cBhXG6\Nf?Yt^99f!pI2e]S1*\p)78"LIY;AY+f5%hU`s:heEq;At/0?^2n\V&=pP5/n`KPVO9UFmNTgdZ[ZgVA`\ILfOfA/$\DXq>@QZ/1AC:73)shS_[o;&%iW<;^2M3=hU'@TOmK>A#)OW`#A:N^@bWOpi@[3st>adqdQF>5]CsdIlI;JrleEc;"dtUI.iPA6A:eTAs$G^oKcUJ?+ct4idA+(`C$H%M?G42c*h(3Fa\7j^#U9(`34N8R1b2qJ_dr6dhKdU62W2L%];]8MN@ipji.6s*fh[Ji@bJ3Agpt_cIBU89Tt('!t)B'J`3/,W?NaYSr92X9t.n=3A.djBQ3Sa0p:@8/oqFPYh(*P42s" 8@:1D\>nE*sn`/"^ATJS3W/?atV?Bo&P8@m1 HK;AS7+K,*FEm#4X9_oqJjXkHg=S^#8RWRp1`!j)k*PY. MmlA&1\r@*t$//AKr8F!R^.bqmse14(AF&Z:Q=o*LSj:>FpFn(erd;IsnaOKAmTMH)9G8G@YFp*(#nh95M.@?iX9,lK"]%r><p<^' T01#ekmY?7leqSFN_a? jA4B'I.VB_K:)P4#;b4#CR*A`cT9q%CUV[_(NYU7LJ%ciL(4P=DW\G]/7)=M31E=Q=._hI1+(Y#4e;EAK9!6qbZX7 9P9YY8q7a\#PeKlAWO5Z5A(1/@r1?J@FA:X5[0+j9I9,#)>26ScaPBl_T8G$RAk4^b*K[F\k653JaN1Snf^lBG1o=[$7<``l1jAI2TsIl-;#.16D%>E(C^t65)0Xm0(CkpN9F'Sg]VPQ`j/D3?$G+?L;)$[Sg$(^80m<].TF&C+h8%[-,ojf;GN8 qWYRg/CPL$qj7b?7h-D24*G1mC?c;"Bq trOD*aHJ+8:4M1'8AA,r2*fK!%&P)[.nQ'af=`W6/0:h9!9W06U2&YW*=m/K2@ANJl&KPS"e:=S$)sYC< _8E*4`=d\]NMLW!R*=5H!@g4rV7F)AtX0!^U CFP4e-:b?0AOmp2+UQh[PYK2H;@\cmW*!QfTraE2BFWQ]\M1jBphT6>_?#8A]'A./9'.[%o8W_KcWtoF:*>W,6PKR`P=$N#*b*R.0.F*gIQhgV`)j3mcLZDpnLK_*&=@)>B'.9sP4DQV%dnb]>=.f+bMq)#kHHUJ^dC7"RiAL@QDLj#r%A#QV)`5.6esha9J7*>-[C#:&N(>\tCV*aB[]$XQ3S@tE<$%^Njd>#n9>.K.0A\j@pEbP:FBAt9qap*"GM$]=Q7 7?kR7l6,)fXV;^^GfoFNL GVS.ni#P\@Me] <&>H5o4(B!g9pUY5o%[o7dnYtg[PlctW`5`T.RprS0CD2m?*/a.?+sHk0BpAtr84RE``9iK"^$i=aMg_e79AMf_p1qGGjY,=@>E+E%5Ft PLFgKN$;bA)XYFNdg[1DPlckss5mfe"A>Sp@R`mL%KDnZ/=HU@ZA&a,N"cA?KOY*(W &UZ+f]Wd6R`;q)bgnJ(m>9D/c"!6(ki;AlB8UGY-?0m6l`l[q@J;.`RF!^^psAIHXr)CMPbDRNJ\dFA`oVG1l&\-?I5QpAQTF+RhF'!#=F\bOh.MsUKUKr;2:Arg'(Snl$W078sP:kPhTiUGL[0Q!I$/!+)1i!@5+/hs9@El2XkddQ&JoX4f]cB>Q9#EfY':^D.I&Mtl.cAR@75]Q\]PbSlsX"G/Z6$NUe.$Q)+gGpF:I2iJ@O1HHEgA,d=ZZ:-jLe0U4QjDtN:pK.CV:d&_^:U(,EGZPF5rA73&L8V\ t E! Vr6\J;*\[NNE8QqA\(m1dQ[6VHT.\?PWq.O:l>"WAm+H^AdIs a_H\2FS*tLBZj=*oi7+Jf!T##@ 'gR\Rgh(GL0^)a\?aZ*53&&t!Z9_h)CCT"]^?XB+>/ZD>e,==9_YQOYZ@=4C%J)n5"t<7mA+s;l\?K%e@pCjq)Y5(QCt>[&L4m3kb&5/7'Kmq^pWUME.pNKcB Rn#b5Ti='Fr;c64M!@Hb:Y/O(=0T]K?8JnVf %(:H<59Vl&6o#ijl&r9SQl(#?Srmt'#?co"JSWBT"7)PanS%Z_=4aSf.:1-Oq>266R>OclW]*4h9_A,j/^V PDEN2e7cnnNn6Wb6qb4E-RXK/DC_nkW5roNrb0k/T_mjK:8)P@[ i^-:L]_?JE.S^im:89(g2?a8F\->fZ\\YqY$79i>p8l."H/EmBP=QL9JX[jB1N@,c,bg0f#=/nPLaQA0'a,oX)C0Q1TQLSYs/$;aGm 7mC&<o!2/ph`YH;ek;#pT7J+RO19@k7D0Xk4K4.sVX_aA3FZfX3(9Pko:q%PY.H:8@^G&pL__G5^![#d?bcRl-kQq+3WtiAr"EMiTTUB@Te@YkR`1W(TfAf8a?dP+aBj:A7C-eKSFcY?KOrl$U==9e:i"gA(?XBcK`Mo,)igG6btA:%C$6shNsn7=[`83AOth^RM*W%*oZ(I)WKae@:K-"Jno\#OaH!"gYq*Z^d@97OX4'%AN+lQWgEd*K,\=L,iV]!AY'o!ba+PXQiaViLAW P@Q$n!V9n;].sM$^o<.[mlHAcK?b*=XcROiNF]eVD9Yb*&iq&TWnlFgb e%1e1+-@ gN*Sb/1q;IZ%mDJM0r>Yo]i\ZA!%:8UF>@CDT-e&t[',Ag5#0GJhM''L'f7tli1A(rPBYUhe5U@\%!;3OdHa%qO4V>!B059/Z.c4-8GCm+=q0A]b;41rQ9W229`FprnZN1o!#.$^#eAp5R(*1K;/\i(I0<_ISZ>.?\^Wekbs]eZERn@5"3)OD=QBrN[krVmA]00HjR(j=.=3.#G&jDT%*%[0QUAh7RGV1=O>a"T/KV)b&B<%JOM?!dkEf-q^/d0Mq-Jnar7HsTWVeZ3j)ONakRK_FJN)[YTUQdsC/$^Elt/blPLHhiW81hWX?19KVeeB()c(piE0CY*HaZ ,dpSJoWHnrkW)BtO<pa?s;M9K`E+1]$-W.s7pCC(&AL Kp$dpX`/Y0@RZ5B[;1Cm"U%*D?.!__E<[s=$XbZhT2iVH@[a4JRDt@*XAh]eXArr4pj?YM2555jKLI`2:&A^ad)s,#0K4mXTpU..-@*FDU@TX.N7>%(h:JBFtYkr!KEG>Gh5KstO#)H7Da@7j!erQ`_6qs3 $8T6D1gP!5H5\`nP-_TCk8CKoDJLNX5-jbnhU`g5:gTf>g#"\QUk=VoSJ4d@NMV)ZYmbP &"rDGK Q7roi.+^XkhrP\VX!m(:-,lEY*bd3B#1$*UY&ans$GBc*:E3=&mZM419#E/mettA@+'=grDQJLY^]GP42R;c?JZ5;;LCnD0a)nRYoftWdk4_c(5#A?M;*D.!O[lT\Mn(2A.$F-H&+P/rg&TXCZILAc9YjBXA'28IZ'!!F6A__mBA?D2CX1:H?hQ^54O\Ba;=F=?rYPk3)4.^c^=OV]b3??]lU%$!*g`YkAa!GRG+UQtS8=)A!Y2='d:;#Fp8B-X3sl'qg+iW.EDU5n3[1"]1\<^4W"oJiE@Ma*CdFJL9`K%-4 'lV:5'G`mj)[]bgA3W)e"3ls`aP%05SDcXSM]d$;-mOc/?H)NV/#j-bl0YG2K?_c(N\5AtW^7mP?b)3;!!$P8\2BRsML.(/,.9t+?d>2(BZCk4AnR?AG*Qfd=c9GAEfXIp9(a3T8Wbg&+A_MN]'p$EeTXB0_4LUB5YiXOsMigM*SY2?Z9+&=gHlk\i7*-M'TP!e,!nb]0i21r6EY@/c,*np&P`( Y4ntisD 'R4DV.h7e'=gchIDed:U?bR9=NO,s\3mm[#O+:8+6?hRRS@*VAL,UH\Y`"DaZcgTFqX<"UYE7F^DrG?A 2l3dZ<46f9*"WB"Cd]$&VAo!JK0=YnoF0QN*ATZ\$16RY(qg]2F5&\,(29'(H'8q!)V_'pI1l(R'm444.QZC,@;7AJmP.< QnYbCkEC]$2,%OIM)'snFB^4T%&X8RMOS+8Z\?J/'8/N\2Gb/<20A1\V0IN$(O.MDh]MhK+,NAN'$KKfUXb(L/A3EWKOk$Af7;ms"Jrs%)H#VL>#^90!42jF?(+btekZPD-_>RH/q[hY%eNS;MAMkAM3[E<2M*6C)HQ>3+I(I^hkgE*;Ai-e7-U53bDR.E?0#f2f4(gm"m%B[2J!3MPZ\DXn33RoBN=>op\XBU(.:g^)g@'<>Qc#9e?Z[55L]jnW_^Z5U/:+@/`c9s\K`)6OZ[go(agP,i+Vpbid'A:N5]Q8q%V@!+/*V%Utd_R?MU1e+;@:*GA/\DQjcO8H])p:4A^,i[:\<-1tj0VXI$->% /5m(OC&";77"BmI[^.8C%_;)AS6+m,;j^hKG0`Nenf!@%oT [Gnf.n'Q1WQ,SMVp\'rI-M!tHce>(+B67J`NiFJi7SP1>j>$)&T#)tF_b;p[ecN,Y?RN!$F!/_>;(>:;GVT\dJU#nO-qXhI],t$V1aD[/]-[2B1%l0i\E$fDCmGK?hnG^p?K_H)\#UCZ)O$C_&JDX$F/_o6UJ%'qg%#r,`1jE)lDL^B;TnsO A'mk5pi/1Mjmc!AET;Cot?F3[1J"-(i*X%eRGp$.nKfVJ=A?h)4B1W&b6=8P."oo,?VWWIo-Y,DZ&DL7]laAWLW)$sI5\NQ5<.eJZ?5(h.L97rDJa4bb&AsH</gZ[5rZ\mWKlQ%R#6rcAbsfH1"Zf322_3l4(cT?q;dB;DrfsK\mtfJ12.^c!hlcFJZY7qY\S$OtHXpPIk^!Q%=5iSD?h@%)<Te#Ad-R%\^Ahe\oF@*'f0 n-\5R:,lm/n5_]iji%d$;!]W06#\Bo@D:o LPPEM@d&JW\n**q&Y:R&E3b0>Aep ]PP*9f"q8-]Y$hA+/bfbe5b-p!"H(6C^P&k&sipE\-"cb],a[B.kh^ ,"A=/]B[)6L7'9B#LjOR ST/]7ID`Y6/n]D^j+[A@V.&UXVnS7.J0Pt)<-[tZqCi#sC2PJ*68,ngP?: D3P<!*)9ta/$=.'q^dIRP.*ec*2/^YdC&JB3Db^e>=g[lEAA"1G5p1`7nr@sDgt8AP7:\dFYSgB\e##sM)kQW=tmI?A)qqFKfGn\F>5cIs 3qM0\fC]KJL?A$.((ij8>";_a2[=Npr[H",#s(=I!a&*)TY]bt8L&bhPq2TK7kGdQQml<[*i]jF9o7$]gK=dd ;>jU%4:(^nqQc/c[>T]iS9sXK_UH+UqrL!lQdM&_S7gr/tbFA^P2"#f[kYh.^Z(U(al5m@TL#Et$`(LO57%Q c^t1&\4dR1F lqANA+o)'@/IetJrJb%b/WR-$8N$A=d38K3[is;Y.#7=Xt)cQA:lX&.&;cdq!si125Nr#GW'f!"@jX#oNts9+25Fa5[jt0VNpBVE27/@4IPk->VGdg$ZOI`c? TP)OFJ8`%nhE@=SflQsXQr!T(@5hPA<AF;mVb@m6<2LKDedE(o@r&F>#F?,,\Xb0c"]!A31L(/7fUf4N!Z,&O7n4YhpK['K>FVE1R+oT'4)YR^,=FMNCUIa_hS=8''%VofLdgT,Ik*DggSD7*X0:C!'`PY]qfrU+76Xl"P?sZKmLAgn*LrcV^#mF=1'LN<6+[.@qTT0;0#N"FIV,F<_s=^`nF$tm"1h.-Q4Ri0*OI2,iJg05>*X"!i#_ctf)lV"?kn=1*0(p_]SU[%U4J2q,LAA,b-h q;BFRs6)kBgp'L/4EAU/kf2+KP_o";?t =44MWelLiom7@UfkO:N"k\Z2,=AhrY$s]'7&A&A;_I8Xc)dMP`-*Db9&U8>YeL<4#-d\eFCM3;YM1;A)8\LL9q1G[fCd*(MUSZk"/LTs42#&YaFl1BFQ*-/)a>>@2X-(;ndjcTGT d`o(p8ESY&Edi;q9?#:qG'"AbAW2$aK/;.UjRU0-@Ih:[$n!c2I?n'^IFArki5)Dc2,'XQTO+5r5L(^N^PP $OQ',ET!pp5dLO-E1kJO9a2=g02OV?Z9DV@a+fASkLjo)aF"JNjgGZ3p^8g5^N:58?,)JK#Zn&4-eGrHXU2Z9OPj]p5$+/Z$-Q3=[Hib%jL6\6L3^G(sAZ;/;$!9MIe!sVY*c-)c9hX ^B8!`V0=CY5XW>FmA>3X+M2KiWJl#nRL/]<<=WG3Y=t;_j2hS?_12 X7O6lAq.%n)&@bbm-%g,e->2ipK49HW VD%@c6'SE/81mAL6?\Z0ig9"l(%-&bA@NPapRAeBosJ*H;eSBq5eNfa7KI\_`FAe?f<*aRKKmm4Y8\mY.E?a\AnRK-'nCM6R4_rZ&7@U".:pJcl[+SNVAp0QVkA.c_<3!+/-KpW#1#gPoTm$-AVaQbMm)+` #cY^(s1(\d3-pG[bQTS#X2e>jSN*6$6& :ZR87O>&7=1C,7q9_`l-f]fln ^b`^CQ^QI5%nAH8=j'Z5MW&BMi(Osr$*22[[js_:%J9Y7FH9^/$>%%L(e:gQR:f0;s24gOi&J%5[[39bQ&f/%CO",Y'QZ>>&g7=ag=@q&9Q*Dfp:7-"6hJ<"7dXNpIT1d;]"s8SV6l?9Ra7b=heU^<4Ackg^FQAVhiU;YdUIB&V_m2#B$/c.`Cf*AK[!*0Q@fBJ#X)cZpt$=pY:_&bJN<mo[hZpDtn>Xf@&01[g+j_Y1bBqBk6tDRZX/\\lmQ&n0E:"@BrsAD#`8MX5d-;EU:ODs.Mkbf m:\"08hIRg^6C=kItD;WM$8[PMNbMJ)K'3#sbH6s>QSlh5o1Z367dNDXCRM4I)N>)SFn!:'E^GN0A@6-6,sETk?Ak8=rA$L_@39h]X%-5JAf,3eeCXHWgo^3VQCD mVqd!Hl\O$15c8dQfHVSnDCSr'0nDAS:Y/Em?DMWqc.hQ2Y*;WAK&CH7F'gWTSho?DTQOj2_!#LEBP=NA,>KX5&>o;_PTQRO>\Y@0gCnerAWa!6D^+KF+YL.Z'b\-"6(F?g\OE;Fs0kDr"1qVA_PHSWXO&;Y+:2mhcGaHsS/G_Z:!'ChZ7I^Z<+:?0.^-@IS@1@? ]: !"$s7!SE?(KJa*CJMmdD,1rRKD5O.6t:j6IddI-! UfW#H33O'YM]hLQY#JT;=5WH@V!nO@BSd-nSJ:8&k"0'S$Qt[-K3,m! RX'daCqMS-dfPHCBe\fEKRoF%ICJQ`NcG'M/SIfQns,7=>U[_4iF(LO(UgQt4h844%[s<n!gW2_aP!mj4\1G"6fA:3./>Y!:&bP/+NL8:4c6+_-F +J_-[E[sV_J^Na&RTj._ 6at+M)2&DF98d.e;]b@4%KA9;F";Ag-"t8>l(-(54VB$\=lFO4[5tqc-,QtinJ*5]D#i14`&C@oSP9n,ma]*SXn3`;)fF6GA(Q_fl"K#gd$T&_Akelq#%h7kO2qN*YPY*o_8'2gXSmE,Y7K?"$7(KF[.C5imgT%87;WI^Tnct1@N\C!+qIT&a!0U"[)).N>,K-rhQ%p`W'RM<.JY@RHepUbb;?-3(a'r\;"hk^d[7Hb-95b(/M/f4"so2f--WAPQ7-C<+!?B0SrE$eb.)m/-`A8+-j44d6]U"\QQdq`^if0mrDqa`P b0B/8cni((k(oTd>Z[]d8k\Glfo25A)^[)Z1pE&^5dN4HG^($FB4BFg%TK1^Y(:,M+>4os9N=d[AJ)qZ!o[J9$F:6/G2f[o[3D?+N@O4:U29OLK,acrJ:B..A%N[o=n3%!U5jleoIPD8Dc)SoT! r^B'a4=+%lp2%(*r"]ATCh^+\[KM@7 h7*9-S(fc_eaUK\AA`U+9P;DQ1HPb@Wc$NX%gOgQ:g2dR>0,e$g;\Y%D.BT_jso>FpDAFI$9I?FUMS1?$iI5enW`ICBJSP^Jmm)pjnB3.%s?-MH[t$612MJ_B'"R X\$aV".J!sEp`q<'>[nbZAbbm$Fl49A?LS%Fd%g;[ggO;FQ-i0B+(CS/-?g*Jm%1PH)gOR?4Q\IogY-JXn8S^Qf0AWZt=HjmS[)Y'CjWrSUA%1&4>o`GA$gUU\LS[kB+,r`/cA-J.KWbjd4]X-*$g P\Al'q-d3q-AfbA@+_7k>AtIJlL$$M4qo21\SQFLo1_V[B;tT>!$^feIPTK)/)V>EYiEJOi`_) ?c7Bk1)XJX#PtR#eAP&T-j2i6.=4tsZm\Ht9XAI+;M@Zj>lh6aA*P^9Ymg(-nB==-!A!JrP@Ujn,c[r*(jRfkdp?C`Ka'\tCX"c-]eWnE2]?!>E.353qKs7+!n 6#@GFonM(-?c#7/U `%=RF:Mq*<"(TX%6m'N##4BN`FCU]KA'IAZIS6Yl^M@.Ac9lM&j+B^nBPM_F8&U9A>4A1\,?]Dm"HjZQoeBS+g@P*r(0$h-(o%_)tF-^\Zaq[G!a!2*+kZEg1FIUQoQ'Is@!O-q6,RDW&L*cfTJMr;Oj@K-m4'q.h.&*g>6UZ=(NAE6(&A`Zt6_.a"'B,/4g6Hfhln\_$VK<9b%sD6DS1ik7n?VoNl2"AkNMRJ(srj,ggIqTJD7qinH'Dr"1T?,?%hclAMI"nj1["LM3$H.A[]_V;R5U&`:]b&6Y#jVf)[s2<3^EFT@'1k[m.sAA^O_^LFL59`KL#`c@_.37hW^3D!7q-d+sH]H"PKBbEGaao'4X0VO*q_]DiJ#ETa`/.\VTG:6;/hY=Wa!&dS'jIhi#gQg53R29DWgDB2mM!@0YmiXSUjT D!&gnKpPXUESfKN#bk#]%`T&M!DV5H#\6\@D`s#Yflk3&2%qXLo/kH-T2+lB3B0d&IsS7IA^oG>>h%GSF V]s/^>I\V7Whb<_U5;P;9SW;iK^'9MkJbf-b>'I^DY% 6/p1lqe$rmpi%@9QBQLOCh9Wa$ABDN&:17**U,7=]j`42D]FA(X='_`0=&J..5R6qj#'X=_SNl&n<0UYriB=h[1YL>bUtqiOrXhb)B t= cb@@148"gmJ<%kTK QA(T9]RnQM5*,[3K/00#\qa(\$r7 pID+>)5j.mCf[oOPbk *Hq]Un-2Neb**1fRf$19k]UK#)%#/icFAV62!V2K=>\f3(@^SAhR6rO9i`c?MtkINO)W)6m9r(H2'PB gFG4,I[Yp0;d1!BqB[S;'L+& pVd.dlcQ*bXk:70KQ;WC< <O4 0[T,\M0h3dL;rW*\m-A%C,B=p:F/QK'WOG47'$)1C*`/I.tc7*``C7q#;%Tf+P&?gn jN,t22cViK-s22LlGpZsFE.Sa;f\QVM!`piM`[X/BOn;b]@p1I3\*D<B#Fof/F:/4Jp5X`4!Ab`/ ra4j:RFrQjYq`!8AA!a;<G*is+]e:%)$;VJEFEEB.A^piDC\,Im^#IfeW(68F8jA%+/Q>s/BgLP1DB$OV`lJ`REf[-Z?cGs;A?ec2WMM)E5QT;A10:]\WaUT)s%-iC%7nSb6>=Qf#!q7Fjj+#Gs X$k(m9qAm;M_4/:AsX$Q_V!L5@1`aisf--I,&;AC[7`2P4,RNPD45@N?C`k!ZR_YRgfWtIfA*6Vok#S+>E@>19/TQVImrkno550EkE"V)c9'Ak:=[$#_,JiSFUg'rJZMD3D'fQUcZsQ+*q/MbR]JtbAA;O?Qf.X,4.#q(WnbNEd7K_@]eeqZ MCJIP0Qjl<5XA#+c(53G+)42KD1'>-#71FPlOpT:)L=gpA>nio"mCS/C>c^t@An]C_m?Kg$/\&fJ3U>TtJCaDf&!+O"S(\&i!0'Og;Tm1Z7t@"jbk[D[oI1qsV4"i@3Rcq&doS$0o-1+U*T:MB!>$E8qA:,s4*UFg]8P*P17W2"*NZWk6$'s2@ `bOp,s1C5>h0fC!gX`X@Q>># BH'>bB$BF%'kd/j/8KKIm7W_`R4Xa49b7+Fqb4O.qc)A`iVW&6%S!,6IE K4o@(lpLEUX96o=SU#cE:J1HKn5VFb3T-kJh!!eI.b-Mfke/EhEm7T0U7h+q7K`Q*]D0X6o$H Y8:Zi`Wsi*VFDtgRdiPY,A<:_M_`^h,YZNG%YhF:_I7*LF3`R.<-.0(o?; F2,A>sW*Ci][t3-=hpVaAQY?Vc`R@$2cY;'8+[,kc"r;fiQI(6[_GF@TU!Qi4NI*?=0/s$VR<_YZIdI.=9@]gakFqn4@on=`"Z"`/G!59#%^lhAi&:c-"Y1oN:dk;isr'Y7FC0`hEAoh6,2` Q-K*``XNoAc(gpA!A=[nB- r/\R;P`(=7j:UB/(W\F!L8+]h/#]*;tW<dP/ai#piqZ0sXqT_(LOb*8.=QQcln\CWLL&)aA)fGi=Q^DN$B 'Z/_^r$O$kW&dU39I"'[E`)$-X$\9 CI04eEc*'n(Pf>C&*A/Z0Y,Vgksst7)T^Rfi9=38]od>kZ\$]h*9cUU,DMlqhdQJ"?h^/;m:@:%ho@6ZU3'gmrAhEq^D2;"=8[O(h>Zm^,jO18*&>tSt4UreJ, +Fk<,;A1Jld[J(W2D"41o[jBL-P_Sg+RI)S6jX1.<>B rd.TsO%nj)X6l3Qd8@W.`WN6F^j+tJg]pdf4=?q@,eZg0&*-ALgS"qb*St>4bhsJcZWA2!A2X"Qb`'Sr@-MVjYLo."C@K*VCFI 7kT1*A_HBA^M1i\j@.^b`NQU\o/c?'Cs6%hCQcD08#J.2$B;aQm nism8,ZKpAgh%.6-UU;le#=CURN+:R,$5oPeg7<.1(okE@\UHV0`\e @4Lto7<1I-jC=PU*/0rX*jjAO>U=7q*/-4\lWG>#KjftF@`/SB_cJ1h9L"as=]ZQ'0N&0Kf`>Okq:oXe*]j'hn;[[dsd*q`5kH8_TkB_4-ESEqgMU7d02[s#OebDd8tBH+jo*MQ s)F$.-UKfl"9+f@4'bd0XsbR^=`NJ*#`.;^E,ftp;/6#AA1(VM\E9m>*4tY pe9V\+Odq+V4VZtYmNShEfd9s<a[$C`3tN%HWU?,p<CPL_@WU#Tnl/nd^ DaR"cW`HAHPW" 0#][5A)`'LTC\)%4Kq"\2p`O,;(n5TVe.JjAtWtt%VBs^<`ZV(m@9W:hSJT#%IA,j5O+pA7Nac7B ]b+__q9>JnP3Kd4,?'R$;$a!;PEoDHOL\GO3R\Z%*^0-7g_cpbSYgI=U%&?Z2JN*"c8+/g4n,MUeG.ACAd41bI%"%1=A->InkNKHVX'AU%LP^@0n4J=Z+:RtgP;#C4#r5!]4kXAh/rtSRk/tah0h#qq6*UTRW)`?9;_&agZ@<J"L(d9&%$&W:rIWCD;q&OH7<8@nC9:@:E[7U/&#.SKi/)1Hp#1CV$[!O:(Gceg60Y!a);BjF:gbLWW3,65%1qEJ Hj;+0)$rN q'#g# UOcf@p,^WAsoi&Y4o(ID6&l5%sAjAq-+,"`JUV/B5HY070!'F3kNWTSb[A9!gNFG9%3-\^*Ieh#e9'_2]DnEg3<:&TeN#WSF'0,llsE+^C,,1'6\LCg/F/68aJrSHjY[BI1'&/`Z08'0YJP9&<=m,jYFBl N'JJ+=t>UYMrtFFj53\c.Ane6QQY,%FtlTt[: _>\P`WVoMnO]E"ne- BL>nM?r_L(.7P,$l <'oV0+_+h.-Yl5hLP_tRUMYJ]#`/5@aW[0;rZ(\DmXN.XR@N&jW8_RL",/`s"4V-[l.VF&DW1%c.<-5p:fY$"bCl3CNM[-9Ji^tngOUdo9WODbYcd)3@r3#hHR'3/K&/DLA\LNkD dM:XDU`=)S3tKgZeTSt^?@Ye&1];%b;NI4qde#_^Q+mSk"caS%p.NAIU/6/Rqq9J/?X_e/^W6"Osj&3QAcf,A)+s$NA7=h2I*O PT7!jOd/(5RU[j/[J+P`2XM2JK+q_f$bGlJVM*B9C@IWNoD-!>Vf$ClFqj;J5\@PX i8T!PLA@M69mfY+$Hj&GV36ko?,P1XL#o#5N]+.>Z&k])W2JOC-,Fe,@o>@H+/];/0kkj+aTqAHmYBfDiW_:I!JApEq<`,oCX2DI3I8ls4ZX/CmRi+_LMX4)`/b+Egj3W<&Yb)-,mq:[$).fYR\230Q6N9J7pJs#g"EQ\:O-#lp)@e`NpB[LHo$_JbNJpt&-5..ct@gm_6)]A8qRtA-P1b7-r3X, V<^OHNB!VLciffttgVP`1XLDJ!Us5H?daa?nspLARhrasnA:iF[PYI4g]5E]6X3EUe5-3AQsMm.*[J#*El(M:SIf])\A@hJ6?U &*Q+sJmVC sE[ n5!WVkb!?+n"Ab00Z8gnQ?i=FC2B%gg5qi;k#Cg>8"2o*6YpO_5p7D4g/c6ESf&'Ao/TpH>WhrpA8U5tO-g#>t?SAgG/-h9<lAL54>gYZ9sAX\Gsc0m$lG^/%%H(gY+E#!.iN6BnR`Sh8;7.-ndY8j2jrnC92f6GmAq""UXsE8-(s+n_3rN&04pj]'"8#TV-W/etb3T;$q=%>Wf1S^CEZVr7q6HV21L`<pg-f\0`ifI`/fmVe6Bl!F!#'UcL 9A`Ltp$=bS7kn3*8cc<+3t6cr@^Rok=*17%(KJ; $0WRPg$7#h'--o22?aWnC29!YPe:b$mhLU\XU0&mp4UM=Wqrs^htO1\>aCI6X99s_9C_09XU>4?E<(Di:\Rr&n*^]DWsZAI[iXr1Nr?j;gfRdO654c*'/k-D-K'k^/)NTL5n!63.>(&`hrYB'/-2c4lkKq]G YijUHe@% bSaa!gbLLK,NANVFKeKsmA^pb0qWgWt6K2iFSc&h..4+l)q.%)F$C!Jg6*ofZt$h'"\Y''*`SRa.ct)R$ P2JRs0'eos&9V5Gh"&eaT&?HG.ZUBDEH*gD&TZQKTY07"i]t1'rY8SCMZK5f`A5pF-n`b)U&J=p8?^>+&SG'sn#.X(=Aqm^6S)KD@8mqG/(5]^Z4LG[kML3$>>rUX7]Tr,kA.s`RNDea#oA)8Vc)F;NL:JSMt_`9FMlVLi[MLLAU;Bhg4qXW6SB-6S+]!pkG&/IZE4.J&p\=b/Z6EN9*!Sd Q,S t3mfRlZ:$Cs6d9f j;BU&&\?Uks_bSLr<Qg6XoeaXK?M(U-TeeB@oFNK_ Y S]tnmL?\SgkPL CKVOdIkl40HVapSC& h8le+Ob"7 J@#(E>.`P`IO(gGW1$&)m,j8)]FGtht?s_B93RKA0!^?f4_G!tET9hS6Q0/33RC$l'-FfdHs)RAH17:IsPSD3Y+L8\e-)W\d`qWrkkoidqt[A6PhNX?Hc,kh!,?,0i#TJAdmoaok['CQ[(*J`8=@FQjRT@NC31hk""_>[IhkY3E/635,_J"A`H_8GP=<.%rl'dpY/(`9Cp&Q=>(t<$fm<6:/a!O ^Y,%1&0 ghC&!F0'A5dqn/LW?7ehD5?>^Q=)ZB]0&lUPjW3B^2S1D&%,c%m*f^ @NT>Be<9O0No`VlQOVYlRV+=.sA_&ll/5n,@@m+RDkB(0Oo-E6$VLZX5kAmnr.I+?h"Yte6A'Ia"8,(=LJWQ_b-#UC%m1I)6AS6$rJ1G$>Y(C;;A77A!C/B2X!Y1$L?Y;go.JT2WpG3O/al,H/Y4TP7\ 5Yf'A&^;(5d"kSGmmD/!7(C<la8B!L#:b!_UHm9,qcc9"DYAQ't=$jhcAQA3"[&tF3\rs;<"hiXI3I(#CMFk0&^73Y9E!aU:m*27;!4AS`,X`K9JgWoa?N>1?a9Tq/!BmS%(+n8iJ#P[C.9\h6>1$O"5mZ?=L>UU7+r7A)g?g;)Dkcf`Acq+bUWt;aeqJe&YNT&U-^MUctE8=P@"M0Fs IZQiji)(!)3I%2:)k&Mef.MfPP2-b!\287:Q O43G%D^9T1e$/B6-_8JZ[ 'JKt&MM9+?&d Bb8IX-'tSaYlD8.=hl*Rck:+T!Y77.9I ib2EtT'^>A1YnIIF(A?QPAL-]4,jJb'g^f@[NRVO\bU)jTfRmX+m0+B+^O)+FDi*4IYq@m:#be*i"F^8N8^f^TJ!?W7$Ho"65r8@s12=X ZgBnWj^XhnL5i],M(#oFKs,YE"=Q<(2.s:0632=M_;Dbeb1Ka3K:I#NQZ)92HD1?O%e]Q"/0iWXY&Q8,7!HJnNs3tY6-($@L%^Hh8EHL(s)tlpa_t;+lW,]"sR;6(AX 08Jb3_VEBs'i%$k."rbc]Y(J"CnC[ES"Z?)`pQH&)P^T#V^J3Uf%:B^:1PbkacUf)p-T8Sc]AF2:j0W:b61-]N1khkK;^T-GD,1Lj`G\S93cH;?;df]meBX"@Q61BW?;N\>HJr@b6Uo`e/FJ+=>Gda\7lQF`2D@pQ\rUg:_M)WfrR-*a(:?\:BnTFNmO3)_*741ZFb9?L\VNWbUQ\ iNOY<'=m[!K4<:N&933(!kAQO+0ZMh>:<^.!BL-^LXM:sPMhE >K<& P$$UKZ3-Er`ZUO'Oc010APmiXmC$YYLmqDOB:&JJGr0p_h`U^2!Zi$O$+qqr:X2QU7>g-j$rBtt$:=st_ST#WiWG]Bh(m#U?86]Ll=[#M)r'K>Y(Yd;*Z@OPnc0O6WBIAWqE%ChqLXP"4XRI6g>d%Oh2c3Sl@FcA+]9TN!1)5Z_4qNR!JW\(*OHor2E9Z YF#ZW3%GOHbker*[$1[)V/l'oNts%P3Yq0hbc_\G:!%42PVKSTEXk)ZL,`sRD1Z>Ht]ioAri/5?oa:%rO%/f\+lI(de*J(!W[Y:,fF+3`T2I12"[ceY`4V&'#Gtn\ H8MPfCF"l*d1/4iHnaFoJHR7tG9rPtsji[AL: pY?'VlW;I"31P ;SQsd6<_88#Vt?#0q-gZ?CY%]D]nan26_$07m[/5'm?0>)^EI@q>a N:g^9DMY!#g%)ZmtXr[T6"[]WH&g#Ds0tq9;WH9RAra!0qPA#0^AM#s_&OM0Arr/Ng0Ym*A"MY`+GmNeHKVI#Bk4& Q:oG-<J@=KXRgr0=A3A^P4BnL>oWQe9t+QN#GW57cYNorf(ETGA(T4P(^CIF;\0s"r.T3QQ$Qn1.mk6a,$m"[6d@91Qrt%s!4.c7(nq[n'"*c0A^I!JoZ^BlUrAA;li[E-fC-F_chc>/IW,/VqFPOM*1+)(f=tmCBeJ`CBc1jAZ<'E"!pa%_Ig`80;/4H ;$'Z%9eJb[?W5NaPtG9T"tfC<=HRJhdRT2GRK5rE#9*>)5kJ8KD,8ap Ap="lA*c##gWa4A-c`if_oLc$L387$c)*TNVJ`'\L?Ok8lsV!A\?;?]46HkkRh,L>aV?"A2I$N60>K.06:4XZDh=6MGRheK(^]]EIID7ocQXN4B5HL4q;QS\>6qp,A3"G"GJCo"Te>5ihQ3`3r<(ctdP&!s)3ET*8&ib:1Ak08U0G`?7rg-AAN7&"lc,r?-6@%T-If4`m`/1Nq>m-Uq\hr\tl=hM:DH@YrM+n`(Qo$h9[[!6AsA7(JCm4J"-D0Lh^=$_OpM##ZRb5-&>iT-,l](anU0gdZA-=&-ag<7)glW=ftg_kRNQ043b%AI=r\!Ab6T&I!QCGQiX+[ADl:?%J,AOm#HF5Y6>/6Ls(U?lmlXW\Di?C6[a-[%$.Gl$&]9#d:#)rk`6Q`HEQ/ZR!dQr_K?;7/]>l*VAf;6-2O"#mFDfes+.%=CPbXX"0s.=C]Zhq%-r$GDC1]fO('PM*K>qB.H?9h8T0pZ.l<9EPlClV&_C:lPmZ*P+Q0\;c]4WdZ%==5Lm/BXMVTH_-d`::Ol*7q1c]A*NNWKM=-/>O@H$a1c@r.=0@;M*FRARei!@a:#O9GAAO%Kds&>ddJLcVT?IT$-AKATC8^MBRmm(GW\SX/WOIPH?1imPf(^!U&2A=(nXd&^(]XQ"AB. =KtFE$A,-8/Rkj^7>cYE,f?Je-AF"l,CA,jS>l`Z?&00JV$_X6262,/n*m+enS@*k1IUG-1f'C9QR2lG,\NcdHf^*N$JZB_#m"4`Sl cpW/6,)5nI;j48=jiE%4X_PFnH:EK"QRW?HZt-L6C#?V6ng iia$VRY>/X,1)C6*aU-mO;Yp"`Kb\oI>?9.0_E3bM8F)%3T:=T 98'L^C2M,'t],;*2d=(AJ?AA7LL>)+cp^F+5)^?Z \@b.#E=m%WTs!3?5A+Il_aA)*(1H>]nC( [o9'5b5%Bc!k.I-(?Ed/Gn8:sl-(Z\LA irQ+LAqelk@EJ!C`:":bpGCT-%Wism20#Nkm0lX@fM1*XR.Xeh4pHSHn=0HUL Vf1_r._85CGRJZhi=Kf=:a7(_(=ARSeai-bX "*&9TZORq.62:6DcMOFA(=NN37F]q1Xd)W(^L<Hp!"DQAgg_XTqP/(0CoEDhR+@Wnc"@2Wtod;\/moOnlSqf`VCehK]cI4%5&=`MN558%B=0E.s&G>5mj<,CZP$KDAr_[0kb7b4K"i#>= "[46g0F/0pPWVpNXUHgOfiV@&b=r* %s2?([p*jG7&re>C\qtb^_Y.Y\KT7GS0@m<0E6766[?_(c)H7JSqT67AQd3&0lUp4.`jiQ'41[,CQe2LU*.,in47K(`d/$C#"qCDHs4?L)rb4,H!]Tn7Wj<;j(f`rI90'$HQL231/4fq3A"cCd]Ob-HH"9`t?89AhYoDV#<\4DWdo0;9PT+9ba;E&.5&(s,,TFOGO."Aq\gn3-r\5#a& FAVPE(-fOUcJ$;*JZmD\b1fZR:'2'dS;fkfEh7B-kqL;FDp#s+[T'tpAb+cMk\819^86`6@'@k'mm!Ci3J1%T; p1TgG1mlKRe:C>H@N&lpR>_2'RG-7')C 35)H0R\88.5lFP0EhdH_FRPRRA/U*7op6c@HrKbo(_6InOgZOL(I"d12 .7';]bcB=PA1\tD^J7q oo$"`"=AW7o5M#PclL?%Y>9P+/+4I^[k<,08C\`o!=?MQdHI]SQm$SGZ%r7LWGZ_]Nm[G1Qi9,Q`Y!bUF5o);(q5rdohKafk-/)pi-Z/i#E/1Fpn&3fXEAl2$gAo%!9@*RDtW/")#H&jF!o$4HZQd(k#bT5]1qaY55B5NX*qAkh;^JAdlUt]tG.%AK6)=G>T0Q[Ld+$M;-U5mE8jc7%!QUiNae55V"1LMVqO%C001oeA9\UGglJ2QP>,]j[F?3bV&_X?N>$ mZY<\Af06H.HP"t\*a8!Vck8PR2io0\9!?[!>#]lZh*i/l(2m3%ZkF513FWEET;5f@?OhF&t6AKbYOn>H2g,$[\F7Do9-]dI!#!!=3MO*])A2L`Ii5)hV]*\n6;L4IDPgo.Rtthd<>HN<$:7@K9:!=\/0t'$CPsc(lF?jXTm*gA_5+X[X)d@EOnQjd8f'+ho-P7 Bo&02Fo>BaU<5jFKWrmm*3=9:M)U6MtbAX9_;cq$8eWP+YZ-VsB7_ZNntt;!HY5o0%NUq"7Kq]D`r<!6"W7$Y2P>Pf"%!@7Bj?nK.t6L%(H(:r eJ@A&)sjLF"OI/f!h#rS%lPRV:i3fhld]%\*;C9PTAJs_+F+! Srnq]BHjI4h;6AA&,7&j];Bdl;]X]Z[;H+.IC.537HVN.ZM1WFfK^o4aZ4#f:.Cp!rK"n+Q8q_@+99&AEILR4EF1*kV#Zi17-M`+#B-%C(I\ 8D`9EkPjJ:t@\;LAc(P6#%em7NMI9HhmZ,]@[#lH.W%&ejsADRKVa!B1o%!RXJa)%98 arX7!r3!f($ZgAp%d:$9;8%Xd$1.a&kZEKbqS1 *TPbtBYQ\fY!Ct\- bBAt'And8N/Z3elFBm*J/J5:qY)A,o@&`f,q\Pp.fCZf\E5JB>&\`2H\1TP4Jj*&IZF`7"h7MgNVV)(Jg[2HC_O)ipS8L[^'K!lp3re'pN*E"$M!GG]_f-Zh!]jMotT(32."?4;=o*"&Kks9sBRc98c=gGCGoP_=EA0R&B4;qAQ>95+4L]mP>%,$(6=@G-GO'* F@l>I-q-RqFB>?8@7<4Hb;(R3Jo[Za_dIN$=I'W*r-/.Rb&.WK*lnL`iVrlYa(GNh62Gt#Z4L^L(o>pkCn"oNI6sF\%0U[tLrdpq,l&NWt4giAdE&08K:ar6nBh&kH+>,5O:EQij+M_[@g5tM%TFAo#^naVFUEX `cEs/Fo-D5i(WNQL:4`WQ/&#LR%%>t 8).'fUYtMl?QI/3KE")l:.7)J0)Rr4p$Ui/?rV_Ui%YfeV9i=lGNb-I$HmR>q3(kdPB`LZf"&*%+"X*O@>nim?@nj+Bdd\a@i7tne0:hfH7WIJ75M*)?FUtYk?GXY/I"GR]gl/th[Liff+Q=hc.U&p]r<7Yrl07:T=\:(A1pltB8%dS#//>7%e;K_""NbN($:BP-i.aC*T?AmY-NM"_oDFrY3-pkL!EkM=ZFes&KC\/+:b?iA-KHX"AESPrS(*A>F'X)+=s/`!pPje] \"(EF'Gc&QT]n`9CM8W?4kraj?*iYB,0[FTt"3#@X(.\VHE;20 m#_da\(c$]3@CS?*s<ld9Dj^AW"k0$htA"BDK`f,/B.Wp=1W)LaA'Okjs)U-m L[n3V@[<%e3-gC!Z)+_f8i9p.'p3 #/940)^4&P1SB#.66iPVn:T7c+/rtgOA-CaV$%8jEc$ 23QX9j<9lC[Y_VJp'1?l"577%U>>(HO?qmi\^\HFeU:R$Ik:^*C@d?Jet.3@`=Ws::id[qSspkk6He;"kGSOpl__Dn@"!&9$IEUQtUM !i:X'G\LDpeEs:h1g4PJ]GmO@d:lkc^t3(D2WFM/l_9L5Z4#,/` F^&1:bXk9C_0jM!bdcd.j.1?s8O9i!Wg_P8=W13AMS+"MEf9j-'Q)^,o$hnsl@)d#e>l&+Qjh%hO=X_ZrARVQlT3N4Y![N`7,h_VXkEnnP`nTt\!\7!R:QTEK+'fSo%)kD0:#ZWe=*FO3Sic]i`F[W1)aY9kRIaS`@1_H<`hA9.#+.W^`V)Yqq2Hn7f:.2;a PZJEKRJAjQUqDYU.`Rm4*LX$Z >r[!R2Y*.ROnXYk?+]JJ`H/K6(G+(l0n/)tHFN%$P,R5_S]B?(AZMH OPbCX$*)T6"YjcMQI^B+; %:@\&+A$KTVB `M+)<@TZ;7$jggJ@b]V*[.jp3;I)$" L**>X+KHgQ*N&PDG6C[Ccs"MN-gl;jPbg)fdR+^_Ds7'`UeMn1,@a9`A:SG]UO]rCqXtQ_C j>AaHtKV,$-cN@D[O`?-A,nU1#!1Zd!R7nb@ZG6+6P''^ZhCNet:lR";8&l=3=6m'p9lA7m=Ht&g,?H"A`ah=qK\O]Kn=US6cJBAt?5Ti)Q8!K.MeNKn`nAU_Dh)=Zo_,R:>sQ+]O+tX&b*Op5*N__mkJdO*-+#n%3pn7?E 0A/pS`V9:VCi+*40;nXU[WBG]t=O2aDBU9(fLUH`AK(TYD( 9JJ/[#Cbm19n'3H,b(Ob:rprqVFfQt; )b&@WZ(tgah#SAJo+W%?6gh6k+*20T;Dh,,XpS36`4"6DX-nB$7lNq&X;b N,f)T?9lbGVFFL$B%9ofD5\5o)CtthNA]CWLAn67h.VS\Qp[7++]s/iZc,ZBJoA1j,C,A#NIBr6&!H>d;F37(A59@btq5./1?S;.F*94=?6@PCIln`M1AaBoge7C18K%JS0m8_D;ZQ?W*4l`1Qa^ [[[^SG U%ZMXP:.4>FpGV('i@fZ`bD8S34<Q';J(")%BkV-jk2c?RljcE$Z"!FlS/( b&k+e+o(3](Mj=jl#is4A&R*Wda-UVGdA;NpS/NCB=3Z_m-+fs2s1C17;qf*]k:*EYe-5)oAS=%"g*_\pXGSAb&doD0.f\SUjKO?13_1+9X[\=KbSM!0B0C 5PtgN( m?%;gP7rG"-Y8,aqtBXne5"_7!*0i/hG&jNV7V5FEGY3TW=L$^O2flhW?7.T1["^Ef+fk=&h!JSi9J_+t226p>8K:`[l^[&%AOI)oI1AIE0A@2mNr*MKAP)W$>l-,.s$614h&b:hW@eWaO+qS7/`)EZk=P)@UtjI)6G^4DiWRB[GpK)=:&YY @ElO5-P+%BV\8;_H=0QV*En\TG%_YM@@7,c@%[3TDLVNi33!2i3-p4UP.$i-653qrVn0&A0F(n5tPm0o.l/SWe%<(9$pSDml_9JgoY)\SQn6:b_>TY&5/9_BmY->iD!@n(W!0\2kS!928^B  Jd%jKS?l+S% GiB$Bk(N74jEcJeHF_ssI[&E3T\R)NE0iqRk^c9>t H3MKKH0FU73U(MU&V\IW\F"A%5";[ri=#A`oPY$=Vo=/%il;!A\*D8_dHL%6S)Kk2IIXBBY]3s9F)H!&$ahAOhS1?18SY.b@WX,.\SJEfbI!78Xg!U5(=N<)iYWOJRQAEIi%s!#CN_[/ 0#aO\7@2jepFrO\^ToBUKf@74VT_rg6/_:kZ2R?,si Ks9_oZFd:A/@\^r'@k^mr'6$KICk,F$;@P]1H[fZrfpWFbg*,f7[Ln$4m.+(;3i:]/A 8#P&fU/\ZI*\O@Y)ai64fi"#_G<@4N2>TDlRMe-o$A&a=l9JWtY:;*5*L.>'rID!qop(R=f0SD*S"0j7Sh!@M@HWkOBb+QHbL["*.#eq3,j;Ri8sGq:#6JRj)Z4?m(WtCZ@DHo>W$<(=mS7*dI :.f$X51B9U`"d'QCCr7s1E_,GfqS)N4Q](>[:4m14*k/'oW&g")9i>F=mZ3YL=">B$=T1O=M4Y@AdaI7\)23KEcM%-B5cQ'$lp]g\1LLm4Do'I[[+[.KSY(hj,[=A'QAHtZGI)iSB8.O-pDH:K6Nqg_AY,aaeWo;9&.Z6!lSP8$WY?%Ucf*l,m=.J>X1(+=ro)$hWSRY<[R*ESAO@kYE,+ZE=B12;UBgB[r.`HektD.RXZfAd=6tMIr0mkAgXrBbm]%hJ$Ia>?]p]>.5>a;8!ZLoc-eC(KB?3(+^o^to+Pgt:LT4Y(A 70sos!rHMEpW@T [=`SA-,jTCB`(HbKgY(!]S=OiPMRDP_kLd_V\?s`^* a,OXlt>i+6Le`,t'^_t[@1,q:dqPA855MEc4&m65\1j3n.+_J0-V 1jej!PM4LYrW],HA]3GAtLF*c%NpR#eAK7W@.CD08 .K-4QeTlr2A\R#P6:t;npdCXPmE;=M)H.Ao2ki.Gk^X7OS?jRr9I4D cg7U]'e69-f-Gj'2(h*.js:I%FpTdhnfDI MNLcQk7B+XY\AQWZ.M;&N)l^W9g*g1)O>cIh(t]l=:g.8MNR[^^HpbAEKhN_VK>=/C]'e@TKAiigaOjofP"UTKJ4?g)N,ro=C:q:<=Sfg4pO#BtfCrk^4*<$M_OI6>\V)"m[8?)=9K.!nH_\@,[J\l&$o4ZS+W_32GH\QKWpRSPo\9ST>,*YIQXj54\O<K@R9ocIYA#a@n!X8+IUq'Dg>aWT+KqQg#rCIpL%:/^A/Zk0!&QMFDtt7ceOoco(0Z9$o:1EV,bq!hT7QjUBK@FRVXA)b#FAG<;c[Ad_&R41&&P<CcTR'taj]EF(fCsFb'/$Of?@1M$!(.'m:Kb`RAXh[X9IHp/ ZG35b.TZjN*!hb(6F+/qUs'@A04ik-#?=YWgjc'Y$)47J*>">oU5nkr'tNTC&bnc,nG*!W5[`8sfC;aF+tTG8t9>1jIf@nOAaEr]DU$chWZ61 )fB4In+i<.]^0af-pJ/C8RlP(ZA`\mP;T4h"c[VMr1X1%fmdpk)4BF9#i&*WbY+A OG;2"V'LML,qI>V4P@U6H\%$lg+D>=B(I?-Q+-$Z&+#mL8f UffC2&RTX"hk7eYXi,55tjFO41th)'T*cSD/\YDiRmJ&4lQD]rrF88apB\qZ[Bs!OX64<PGR$adA:GTfT70q[W*X^<0:S_aiHQsq2%tT3]HYs%IYU'm7Ke\Jiasl258g>L*9lPXApK`SIA49YYMr/D;%*1]8G1j:A#o*MP?N.+=4n=(fW2KLhMD)CQ000_A%XAa^n?a1!ts1sg/V7Cp-:6[fI(YQp*i6AJtf\):mj+)`"[G=P9FVQJ\H"LDYi/<\I#aKdnn3,$eeltPj#iEJYG\(R[*.s&U!KcS).Vm^tr;gA$kc\P\?=+AhU2%V<_Cj/KS0sZ4^QR]pVSZD\:is+:-GUH8i4HIJj7B:tT63-B_m9K>ChXigVt\MN@BUmBDig5A)4?;TjAPpW>6Ab(jdh'\!lF&IH,AN!Wbq E&=ZeNW6:ci%"_Krid<\`No2Vq^]KG>RW'C63MXS1o$(jWI/J>Xp5=N4Ns2S4d33ifOM1!A$&@4VU$1&#-btCrgF""Ge^MR@TD6)Almk!ZgqKC8OgppkZJHl6ZL tR#n,31n]$i-)AO4)LKM?bVV`b[*A.k^R8 9>/ZV+pP(XNi),k(\X F2)T9;*?$9K"-l^#K``8m<@Rd'\LCGqshA9FJs[2Nqiik))Ek.M fgWa[":])lE ^igSa+'4FQ8?O*(DBWH\?8L1qXY(h?k,=i*/=_]l$%d$*cW+5KP87`6RF#c,1r'K6Sg2=&74Yd@7,b`4"95bD(e'UY)YR#kX )A*9.q0sl,j)R^(O'5kP7!jMprGFM*!r5A]BJ'&pkPdeO@Q[B++1KEPLJ0`1MbqoS!GgCZ]-)aDiol)cq@5bkCAn*@8 s-JT!R*mo7PX'&]\A&Cm)F8!1+a!rpK6#dO8;0:gC$?XEb6N.WQTK;cS%KF0*mraSTAP-E[aSVO@7>5$1E##aD5&,aIZTkUE%#9W]C.5@=8(/KHW/t.iDZ]QQ5I=ErFf)HqLV_J)#X&FbIh*QJT[A_Os-/#f!Qgb\!KArLj!UGN#9gl&k3*X3/g;:n`dY-!Y&#RZG8Klc+PSQmQ:e\BMCgJHQ\Oi!jVO!-6g@A3rmb\pVq*B0@5r*ktX\BAdl-L,@@GjBGS7AO^.!jU%icc-^+@!!nTN/E#9)1"m86qQJ$)i2^"e>4*h'&'=kETF-3I(=5c7,bqY5Mc5c,'R!n0hr87*phBM:%t(44jM(!F04pg"-R]DIn@"d`'A4##B;X9d`,R1S%n boGUpSY!4helQV8#69MQRj.(fRJi<;'oIhK&Va@g*eo/k^3O+9tOA)V>;gZ*M!CGYoA^Mek(+p0M7AY9ZY:sS)&7Q+(h+t.NRqX %`1)dh4q$.Ib7s ]SGKn[Q0h]mm+G3IUS@/bq$C%<#2#k9scGN*V$/6gL!Tf@.FF//.r5gBY?9D[#mGbQ+paH4rlVGsXXBqJ-E.ZKeP0AKQX(mPh?W_l.X\I@UKb"rHrQ3n*5nk3L_jA&4`@SkL/4f&,UYsrA1\JU75X `<2QeJ(4,(s*SYAO5<-tNh>V:F^p135lAmDd"#FA2_U@raXOmOqjT&=IdAoa"88UD_5e*=7Yib-q=ier1/b>(\b_?%D)kh(A;A,9Y8ob.WQbi'S@QsRf`%C@%F]qsbq-e&il3-&s/`riH3;+8M7>amMpJXI/XoHAkPKpXJU71$-'?>eo:XbD^N>1J]NBq:Xj9aW8L4"+\f8[r(Nk3AB2Ca3:9M>>(>r3ZP%S7K:Jh5'_)JiQn"2_ff6>#0K/hh2,*,dUbS(UhFeRsr"ZO^p*qM'BW9p8 (/EOjJqM<[pbme&L`2XT/b&$ 4R[GI8.6ReDO#/HEA.2Md]DH0<_YqiF;]mFEX?12oq,NnE5qIV7mM, k+a*)D3SQY9*9!Q?=g[m!mTe:jmq&jAQeCad4Wo^c34ttXHq8Bf&_*11a90K"$Ti7V-LCJ$_\XHOUe9';=>pfk5TFBpgJ.\<BA1RhL6Y7^tP6=3EAG=JlK\e<Mj^a6c-[d=VG/#L-djIrjB._(/KosS>`)$rV#[kDp@M@%)Z`2MQp&=kq-T*-T!`.D7*e*_BM:oA$`O?/,$FB>,^7Rb<`>?QNp0&P?HH\6e\ZW"+]M.N3GfLPSJ,&$UHZQoT3qk<7r'RJD9oFYcY%X*LdK5l\M=VVG%Cd`1V;0AV:/@.GP@&;pMo/%70[36V@UbeR/bqp(aA;/8, h3cYKhm8-!X>`Ak@.=KF/Kn*Lr9A2HBMb+Ma5=6GlaJJ7D)VNsYn>kS+[1W!rF-2=/LV(7ee-LM%)b]Xf@?MknFlJ?6LAbX.H7toG'U*ZhALkX>'`/Z:O7Asj29LgT0&V!+/ABRn=aEK+qI\,oU0sMsfo0e\[YXY]+Spbn67HIJOfCgJR3<43tZC1KnJr=f4fr:.#KRfZ(M=;!k;@HT :/iZ_H.HTPn2VkAnn)s4A1'Y]1iV5#,mI=m`^(4@+(`^%-ia"oh<N:@Nttel]\]Oma*LdIdFt+O6aV/t7MJ0c&8Q%M`attI'R0ij3hasMh]VJj?"Hiq'GR4MWn5aOt-K+DWJ\!\mn[?LXWA?MRs9 ][%Q7+=ZfN>6!%g[_/D&;8!':E1NKG&4))ARR-Ar6=)@Q &&)>/f/=SLQ_#,efRaiKj:*4G.8Lc*>*BkJi#bXoHQr&^=aXB0\-m;?\^F_AF?r5oA\EI`X23a=8RZR3LqN#m,VE5+C,"Lhs*mrmFKG^(4ffII==VkpJ"f)T*qO_ja9,\J"-Qt$"AClXSUTAc/t[-dR/?&fV0E3r-D% ]M;SGmMo>h[H`iA%a@.N\D+eh@*-`Ap##HP&$bIY!-Cm14pK7X@T)^%b'bF7M`F;)Lh!SN9FTG*dY_rT\pK;8A#6lINMYs+JGn9Q`?-oKWN.YfE g^?#n@ZFI8"a9:sc5$tKmD8o-;CRJ92+Y[3cAWNS:Jf9/T1#Y=F-64BiIRiQB3qCbIUXX=p=DA*/j=nrPcOsf`Ja18I7R=_(g5mABgVD3Y&*>JKP')OWdVkC-fRrPcX0KMt2 C`Fol[nRllZriSWs']A=LX<3RPV`?cBfY#-A:#F?Y[$Y$5.@2sW7T?L`$;QH$$VgYkr4B_"eSC[a36dC[ cT%*a(C%<%:X/_R6Fq;YBAgd 9)lUFXg$PtnA,"EQrAq;:Ss+tA"tF3VA^7$\]/!*]2+8/ ,0ES-1??Wq[>_$`;2kf8^lt-fZ>h[#5G>j(BNG.'Xqk]?n$cLOOLhU2F?W%MOLM%JsHp8GJ$VO=3h3P/*fp1)hl]iP"32CFGM@_$,G!`KHh#d0L"5EeSn hj'.3Y06q`#_%Z[%7PZoZ;YgN)b^@&'Ym_,_l_q"#)gK(#6U`k7W,ie/W_)a/Q;r6bl-:@2c]KGGY5WW iKLZe)WWjm 0:;Nm[dF/$%U"f:DoeGgRmY-Lf:tf:a!7_>G!lAB663CedhibAW+PYF-,_"26:NRO@:B8;>dBk?Ej(%NHQ_2:p"5aR#<:N6+]b3J4$31\a`B-,B+)M\0Ramq(XMV>jNKA=Kp%lXbN+E;#EbCHsaX00jg.iAXL:q?\L#1UFRm_%K]h,C%9mo^h*Q,14#^+Z@m8]FqVtFL\BH.m$t8SqGpc?nHLlMJ=@.SCkXhjE5-lqg= BI9Rq8PSf;LmfJTa>jBUaQ,p\,7V]"4jf@dT+,T(r^B#)gk3*FR;'*mq5!2)@N0AK/.`^1tp_p^VZ1,\O3"S]qO9eNQRo`L.eG?/f7Dl.2nZYpd aW8o03SA%ZDLNP3G8*1<6:*hVoJ=TrVa&!t(I+DoLW6h0tkmAnehjg+>UJV ]JTBnm ;hN^l+)S.CG:\j[em6m>;TK5Y%;p=>H.8ZedEk=BN?\\DOG)PP.S-!lT@#&HB9)FOII[CO(e0&JLLJ7V=d(Lr:=dm]p3"SL;'*_O)"6V897cWP$s>Q*I\G*JHZY6/9c[/.!:31'mibAEiEkRa_%]d+?)bna.,ZIf)cfcChc;gFc.e'[)6.eV#/itVK+:Lr0HC3$Z4*oLk%0mYLj3#DU\4qWqNBsNS'_B9d-*09U9),e'>bYi?#&dAl\X(7?0%eRQ:V*hDeI84n"X1a/N,ITr5/N,S2"3Pm,k5]s5gf7WU`NkNrdFd(7P:,)(nPD=jH8c4ksI/<.WUfE=_OF7Up4H>qic<.r05nsEoeXfgB2$ ]MVSj5Hj=GsCs"\hA1>c:9Uj?%[Y=<N6*`QE*L9M4K'k@j!eYC/KDs5AbA/-ATEn5F*tG:KEVSKsbc%TMC"tV]j!LA[8EG*-i^TYY),3hZ1tlKbf\(Y/o66iNjIW-_g."piGg0kT7IlVDo1e$ai'iJ 1k$Z%gJ 3n(ZmD1X]IZYZgHj_"hP-a)N5FCL9c@s[j-9SF-RAeDU)eL0oNT.\nXZpe$,ZHH-:ch:.6:P"cL(09m#L9&g_F)F`kLBfC+n&`MaONb\L8&'XOjW&A5V!9FqPYk1:i9*J@1/=4jA^TCVaLePTrY]2IlGI?SXRiA\0loHkLs?`O\8&?<>3!?SM3AmB)W>oRDU$[2k`7_>Y,a,+C.e":sEb&fTD0EA5.XdX2#ZTM>$X93b37.*$+YrFTorc85839WA[A:7?4>X`VIN3`<5!ZH\h^4pFA^JAln:8Q'HFG`jnAnCRf`8WHPF]]$k[B#1;LHW?)W5IS4@C=O$4E"]4!Cl2GpA ^Cm/tJ *?`6pLMkVdd.iMlo#[/<l\b=JZN$S]G]#Ee&/pd.#16olAklO:s,1e+9d2;SA 'j@VP3BEFcAUh_9Y&Y!cnMsh3>af]Jc#Jn^tn?BefEJ]jMMkWIh`]sha.f+e< 80^_)6 `G0=YPUDm_Efb*\&*S?Op6kBI;Ae!C)-(DFT>2iQk2tOftCQ!M8V(>S=@$RNZ*n=ANm2B1kN#I)PC\G;\aEHjW#XrRo">"YFD(`pU5tf)_T^8SLUZqU#.2C6`#EpJtZ^KL\.(n/&-0WWO&mr`1RAF"&LtQ=`i?5opDmm`Aahli-r,H*1(32^Lc>n<,]]-^]0GRn$l5j_N#hr4;*.e6P?-$+Sm%PU>9as`Ls1-JINC"eFPC%5sATQF#,s`I;SRFCN@:- C?R)b:tX\:iVpK<`0FR`].7k:KmlBjI[,Kq"@QGa*QK.mkd$CnOp$5WW@GqDZnJ>p'E4,/j[_hX"1@)O=A>`-Qb1Re+b'!': $kUB`bgrrJ`&"9V7e/)i,(:I:7j5gh \,&I5>&h/^C0PctX-3s'VAdCB6sO(F."4:OL50H3+o("=n.AU13=OsE-Y$8a0jSp+!3OS0Kn%TY1VjAGI2EcnJ/f,9?RRWUhd^AHAcq=%NF"c_O6\5>lK<IKE"!6G[/=OP!)K]mIYCL_T*U;BmBtV3[1j%_t"OI"c@`#Ib2mim6e*#KG t3Xpsq\MlB>L45A?.jr0B.]XRc(?7?6MB0P1VWEc1n!'/N!75,.=!D>92_FPLHmPDB"qrJ'BK978B3g.6(Nh/-#\"SsokOb>DcfJ^eEa &.ccAH2_bdA"")'I)7Y$3o%@l]RPrAogDj;60"LXpE/VtkjV[%4rYh0NAs\a'_0/Uc(iVb_i%?>[GTP\5@9%iiiB6r91qf0At[t$D-_:5^M_7g?M_ZQX][6OMK8"S,Um8@S[Z3M&;ZYT)N&_LA.=c PAl5A@(\5jB(8O!t% c$s?+Ga?,JjP.,#B_DI8,PPjK+!e"^dqNKdd[jHL'\/_eaPifs[2CiG^nm:.gjV`&qak@BJ0SRVSQhtQQ2[A]?]k)o`lln\^4I>6*SfJ#tc-'aqt7+?h-.Xsn!B*AKV25a'NH,j&YQ[?)@PK8L'PZDPtK>n)+F6^Nnj,ZrfpjWg:H+_*>/6K_]a?#mn^dAa:8tDLa3hi2_bZ@rk?g9%a^s&eW_#k!9Sr(mM0CQ2Ot`qnBfR2Pm`8hq6"g#E9XNF)th%(IH=^FM'bso!)n7Jg3o?\6mQ#jlI0GU5G+#DmC(V;7@(^gs(t\mJ*V&\V\@Ed[b2[[>N^;#SIWj#Af-cF!m,=1Hh$R=VSclKEqnom[0,QV-s%K#!g9G;4o@c^?;D,jRFHaaCUh-L -4\6TX)`\IB4:4(+Adeh9CQf=t0(tO>n;C@Nh__?Fo&Z8]TO:hMf_+B D8?+=PA*bE<M'6@Y!^eS:G`apd(:5)Q>[JP1=Hjn aYs>SRl"ITj4qL)ILm$i\f^Kmg)atqED,]34Mt+IAA,%Y ignFm3&[4rbl6#c9+aW9/R+HSXkAA'.Ij2>1(OJWF24H(SBY^;V1%&Ora?U#(mr]de`@&QJ&(^Zl"9%N"`t_[]E98>c?sGjo#;nd*,kW=>r_Ddt!Q,Q25FgH72eL*fW2f7E+[hihR;bqmDooi9`jiLm)PM-(A:i=D2%P/MB)k@'dTBLX@:EKK4`A0"A)`1LmBr U$ql2)AtCmUsDiAVAWb8""#kV=b65,&CX!H(Da7sdd-<=hHHo03,OLCcC6* \?(_T)47RfWfPYc_eZ&%1lj"0W/?.=J?M%orZT5?9C;#*N S*4l6*R_70:fP>"mlEA-#DPXVdfF>A5JJ*\Lk&!.@CNtQLn74,gN_NK=h'I`RAc'Kt7^AslCRjMGc'j+[,W6$LbUJ0@GLd3FK)]81&P8b]DT;@^7??c:NA]8ptTrR&,/eX)I]MK&'q%TcPe(TaV-er!'3j.iXGAmdG3$GZ&G$')>/AhbOtm2T@hNq\\sfps -L248n$^ALP]ho[@1/.ZZq3IWG!*2WXPs%[S-$**YGC?($A-;.G-NOa>B&)A0_.`Cr'QlM_=>GA(Q%Crtn_6Oi+pj*iq@eX_As'nS U[LJtt4p3Dn6FHIY(1I%D4\>r78crA)E4aD#\hU!][mh3)ME5bCo(OlVLEU35q (fjKUlBq^qCn[%N"WAV_8Tb-EA3IM]4S'-5\phTYY3SFsCn'( F<TWXKhQ&!Q,Nj*!o"],M5_YfG6*EHcZ=P(SiAY%1CZmnIfeA;Fb(hIdH3WA#$?mHK@OFcrF<.pBUQC46T2'?qr5`>l<(cLB=XG#rVjK5P"b9%bJee_/_AL>D_Oa;XZs\ JFHRP"n+.#AY^.$a1p'j+;3@Ho4^)W(C<;J+PfKr'DW(qKn/L^lB@X`8[9\.$#i^,)RCE).`gMXC?p_jh`.d5$Vb4^h\b;Q5LY&&7"BKkn ]$^-`+S9M'=!f:Vh643P-OraoJQnn*@AE3n3%kcMt"dh'CRBK',l@6`?Z)M7_1*3gg)].:Vad("+gft$T3aW]q+3o(d/WcSW:_B2#e@n&mq7N7W09],V[Hio8!6OZ%nP=LjAl"]h1@&T`8XDF-3F,%MD=.Y[j8#Wj6>=8;2nLO`93V8HiB3GYjW4CBdeI<)W(SZ8cm;SCGgC`ZK!$)Z\CM>W!Na/:VK`MA[-YdoS->HZ5Nm+^R[W^NrOI-(c)J6HCC7e'M=-DaNcPf]4r;rTdl\0[>6"\1)kHV,IoaP2\F!PJ2jL1G-4Y?)ML"a:G^^/EkX`>)@_#r$TZJg6;A7YWf+rJ5hec<&FJ@?3%;]GGmB9DmInjAY@^AE24MZ2Sb#(:!ke1J3mU0'q;AM8XHLgrj3<&Z-]l!M%2A5.af>ZRh!qLr)MJn>>0bbDLRR<[hq$8oi'2h.blNaY .N'L/'h[&3*\Onjl/LUoMjA= FQj<2l4[>JGsCM:`Q:#[QL9/U9V>LZrfl%=9OAtLg3.'eLrH75.:Nm,i>Bd7 3n<2-q8p=?`FM"Em6g_ngd*WND4PtcgT)ecQe%d1"8A_(qPr*iW9N#="aBd8N3bKONV* -p[^^h`/C$Oc[b':)#W3>rBBtQ<;giCQ?/kSK'j.gMK8i>6`c^h$6rX>,2t#^r$6Ai)Z8q^=8tr]BdP!WAb*5=[J]Fl $c#Q*JPX\^PnSB8BBSZQ2aTH5qT;:\$en7K737i'C.14gE\/ FK$.`6Ps>k@6+l0G^7fAmgEb\siM4rVF?]2X=Y'(4]O)jBFdVQ#ER0=.BZ,scQ \;l`>Sc3Sej^,YRk+ka%l,eRoANq5+E*$=edWYdJo<#j,8]YIK+t/&6<5.WW2& 6J$i4l[gj.^R&KtPq:+\:AR:cpX4M30_fl77Q*j 196-t9i>PfNLh$/#&+-:tIq__jbj@fj@:.>e?Ysd?=WF`Nf:mSM.0he25-Gbb3s< &Df :$OJ9X%gMm"=`p,(otl8II&M(kn$3M!UI(M\Y'/Cmrl$@AE9 _;cip2JS_e4plaNP)S(9;76Mj]deeSaT.[2b+ZJ1A<oh_/t!XWI\Ac0#@_m^aT6Ng@0Vl3AscN,ib65]4QoCLg58d)g<O87SsN_-eUS6#nccYZrIdO(&&qJQ=J!T^2;9)d+0WXp@E9/n188"eMrV4`Dt06]dY`pX;hE)!PlT(CAa+.MNF3C@CCG<71rkh;PN]Co0VcY%biWbOt]tLB"__IU:L 0? 'CS5ZlWbAlG#$"Y[7rZs=4UiCPKiHQO[ai`Ocl-/R@a?FSFaEJ>%>:qhrPK7O!qS;#EI\,Z(A.nl>r:LY2N47la4e]obrh@0k->>sTFQ6L6T*$AKBJ43DHNtij?HMh r#d.WLOCC"@LPX`-_q1Y3bUHA0<\K^k0nS0O,?f[lM'Y(tBM$2A4Hq-F!3X+,X\"MH?M/6G *NTRg\T[ol5"V+(T@tf=a5'g1(iDWr?9b^D12@6PX1a!C3B.M%PmMNXI:1k9NegL(#9D,T]c;ZhqWj;:[CVs-nflL+A\:7L:1Wk=1e+%4`J9go(4ap9h(trBJaP+3!]LJA-e-lWMp42AfV",>7(5$M58/_UAs'9m$:,J@Uc8jefpVg@PNXiF/b^bV+],1];Um31DAqk"nE"OR)VR/^nN `giO%X 2ZX/S`&rr5\6Wo7ZN3^!SN'nq+P!$7S]H`.(&gAs!?V[6:GptG1Z(Der*Rb]1^D--jX(gPGZ4Le<C&.N2/no ZMP*IcX_A^rOeOC$To5YKg"%r/+-%h%iQ>^0Xl$\dX@I` ]T2h$kFhcQsb/VjV<rF]D$!-Q9BWfQt6V&g s^O,."(KI4h+ARfselg[`Z;WIeV=A1c-jfNF$s6$/3\ek;Jb PHk-X9WpV/"JMT1r4/iV%]"UDg7%f/k#N\!ioc2M;CN1:4!@+XY4d`K*&/Cdjh)KO5@YDm?8l3*2 cnSV2KYg+-S,?NEAF'7o8gE]iVnYNXG9mPb]g [j]1(>!(l1]j5`7E)D.th\X 8?G/dOP.)@)GRSn(EW,,<JAl,,"PthC@,(Ttl3]S+2e&%>.j:)0#[1*kD$]!+[SA8T@jt/^iA,AE@YQ*a/[BPH+HQ5 FSG*S:,BiW@H_MdBK76.<-k75-AR.;6"PD(%0INhS7ePls57q;J1`.aK-E 7_W.mK"[VZlAEPkb7kI45ibQA5LonVs7Ds2_!&;r%G"(!o'FPDT)NAbg/.R7FR[ll.f]#!1eC<@YqiCf1q9YsRA5@`^%EfYcdCjA!Y,6 IK=VOm&sLmA1kkC6eC!*0&e+L"^)pdKQgXAaXk3$mnG(43KDI$Y-pD+h>oC9F`RITFR!D'oX)=OE^eO1IOQ>%Q[5QY9O#ETf!\dc;Z85KXhpALN#4g*.Y q`O5I#XUh*AUb]`R-+TP[@Y+bm6n,N?5`#-hoDn']>A[]Ar?[r6tAA*1;9q/EVV<3*>Br_)kk#n2HP9j.8#c+B8\38($=M+';<6e4SL4"1Nd&.O4eVkT@;8;fMXBrj%bWCr[Qcj110"pWRckp^>qnB.X*cm`S27'f]\0 "l";j(Ah.CA +$R%%6.lk3BPTK;T'aKeY28eQg;2%:bi;5EjP^PlDUZEDQ9 Y%s/'AO?s&+4=&ddn24D&0Z$D>%W#[>&-nAgX;78`-5hj?^GktMm%W=,>KjVV3/a;ik.[@=BoF\+fHtBd3Vc'Rrpm&+PN+sR31AAj@kf*mp[IieK9OqS\=1NgFG5d?/G4`Da&k#!dr3n7jM[NQC>jk8g!5Ie__3"7)/Brqmk1tFUhXKi&q5[9UPdt];$tiMWa'l8mNDZ?Z(SDUH\7N4$F5Wejo]_^J7AngphnD)O7Kk:$;jKVE1\aCRL5aJDW%agA*les"Vk3$0pq?dLfi#2*'S97(Zg5PW*?8m5rjkAhhjd9hk(AS\mB(K?i#AYS)?P[9(bj:jEG' 272%!"*r;tD>"X$/i0A?NJfp`n?dIA9>nb\1TOhZ:2@l1Td?M>H#Q*)>1$@nb[7XhGZKln*7K%,Jb@i4Xl#,_sURb_Q=eU1P()+Xo_N&ON(koKO45`8 3pH_-30HH@K3bSIi7UW*9/%F'SE7I?]<0rmcA43mj*O#s-U$ZeU;pTV[lYbr]$O11l;_(*.D/A-H9)*XrX;7'c[XNmXb+YIgk9[hQHlU]_t'k&V.;qh9+N %A:A*VSRQ\:VL9 I4L.ofoGWqA\90>\-IASNB= 8?W7Ef#hT$s-#@rZH2\ESG2tgon`oM&+9OgEU[T^/B`Kp.lDr(G #r"bOdgjCf?PDPZg.s+5%Gt7lPo"A=L%0cfi`NE)U/&J3^02@-kI\=f0radj/R/4242%X$&pj1`kbhm\F]M2?dnK(T+n'>D75ZC\OI0Ocl0[`2:#: Zd#bWXG[IRSRtj6!r&L/DhcLQ5dl!4n](httJ507Zt)b\=gn2!giPZ0KiI*c8`dpG^`N -6"dl&L2[%\G/gOPPQTp6->6#-SpLM^ aqAR#"])_*BgmV!n7:VU%9`j83E$F[K>JBe )I&4hD"DPo)^nML_nKQem!rJDojCaO7hTLZSUFl=^"al.;AiZ#2;j"ICgk!>#E(7p/%Laonf9;qrK!7&+KeKI[`><'8ml`a=<]TBt>!8Tl#(.JAs*i?NWLL>)'sSpV>2qp0FUhOg'm/@8ojW'&pf-\/hYo#-A83*gclkEZ5/3XSRd`Ae\+7d7fN!8GO(e4\qA&4'N pUR]rnlZn&oWCCiG5q1o_"_@3XMb\IWf$Y"b^G%^,rGY.7/1&&mF0<+cf3jW-WbIS ?'-"B6iS.SL,OrS!+"cGX_DQ\V5[6^7bZEeVP`C#W@;XaC^ oK3gF]9iUS<,:J;r1&U)Af(,LV;`ikl(b+0@#YY2s)%`2Mc#ksHWVjk$t2iM[`Z$%t<PbTEZG@kX4e>4iH*!AlRrpVHE5&)/S:sJ[>U)jXMq)4HmT#o0f;Z*@&%-LB([#m3";cEA"jh"_'#Mqn1,q'Lds ZL`b'A2JOoL+5.aH1i5l$H4+ ;*Nhk*gEl(PA^a;ggATU[8!3$C;JLU2ne9)p<$NV&Ma>W"Ak2rDf28\.($7DnUOGr-n?$K32WYa[Zb^N6%$,I>[>0mN+rn[A#Ph.>M0e@A50.g(%eU-bL\.bSU&imF1^AeY@GC<8qj?Wc"+rls,o%,QLdCk&In%PQnaTG_g!)t@O.7Ak!od5-r-9=<$Y?:5MAW\eD(8R4MK:WP?V6P_OUPoYnCW9@#/>DKr%2q5PPP:?)8L#>.n^C#`C*2k=)Y'\?2A!IDVWa"cHij2C(g#ht8S;9<]Hm@.`$]q#0":;oDCZ^%-ofcAQJp8"eGZg61bW^-U&:t0!9N[caoZ>Ib%,2$.:$;o61TtgB$mUmT:m/K^k/sX\R9[5=fk;#E9+NfC,Q;R3LoOgoDW02QOIOQ`M/TZWXX%7\dLI&fk\n2-;A0>3Ua>+&BpV&LeF8_?QUk7er `+MKIMqT7hh5H%Y'!2ahrI!-XC!aDWd gbdb-a7+"+&<$\s54nDJ`k8n"A(SP19r$mM1ArGA\mD&8UK#o0S(@4ph^[IX]@I"Jgr[gse66b5[AEG@Fa61jSLcCk,F7sF+e%\UV[_0`l)S$a<2WGsA2C+dg8lec]'^3l89Dcj8@C#$Il88b'H99feK%a/Ee>Q)%rOWf3kbth,3V??N$H,J>$lPUiA/gD+#!cJ=a4]ae!aD&.fL0e67s+g_?D*&aU=P.n;4EM]Y/8f4qPVAA^7ML>7IA&>*T =LP:VB"Q$m_q7U[X5!@4Y!pe(UF.Z#YU"K[[2GA5N:a7f%B]N$$OPD_(t@MD3<s$]A"8K<1ff]MZsD(e1`'A0S?[/eK;"(.j9c<09/58p$5YbeP_LS:1'K5K\Is(9jT/;.3"NtA^"WG>r_UEa#*E=Y%f(@GAtqfV@d\:0]ZN;B?JG;-C*0(-OcqnDQT?AS1Zf[Uk4s\>`08cJ?h:*,$Yp$#M'A^jq'DfmVA=QJqbo''r<&f:&`*+I6m/,`Lie:5lgK1S+e',SAUZ0>2LOB;_%H?/?Mt`MlQQ.5[ga>tPdD]&&a\8Al-Yn5B]QNaN!dkJ*!`Rr-;%WZ5V_FgbX$"AMbL&CSYRhS*_WA0qZGn8UYIil:!.[7XsdcNLYm!=@kfg\onU)FT^[(GmW6@lm7=2rGD3.FO2b]+b'l+VAo.]c/sHE%LKr;l@+A9,BP&p##seO-I"RUJ-d4]fhX'4B.LAI+,eclYrVadm#aeQF00\^MU3R4eUj-hr)jTX-F(SZ3AI@=k8bkn"]>&.(Ce"fT\50#OAk`RedN!JqpGEaG)Dr@a*<]3`.#k/56P;lZoeQqt%olh:,_O"37pZX[B$Af`>r/&DL@B\1tso-;2.frdR/[@Aql@D95JQP0+jc#FsrA!814#c!ON2<$bjejUOZ*9FO\=4k_[[oG1L)GVVE.:4)P'^r(JHkV5HAj+`Z2,AHjJmnhRLK$=<;=]V^EV-J@4XHc=>@tYL<d6 XEC.sm(lp0UAp;2 ,OZjbJmC4TWLA#5,Q4$[.[-nXI_/Mk=0RZR5Y*?`4,267N`Ja'a)9CA:p67de'Va4ZTs5*:_g>P(^gn8T;ELls#Y0qZn%%KZ?"4EYX8Q&>cl1]5` V/rMX1?PcbEN=+mf?_mOgpAEB;MQSk^\1(J])oAdGL,F'KB5iR'(:#i<&f[r-9Md\E(#2h%Cg^_:6ISQ+(Hk;fa7A(60^Mp2(Fl7`^283p."Y.bd3CMbK,b#/sXc6Oh:pKC;VS(UI<2T9A%t[*T8V'_AJ)m/P- #+1i#90\;(!)e<3j$pL2L"#oi^9L@)j,^>si;LXOB3p;tW1UHlHo)&GEQMN]_A^DN2=$;M3q7%\\=0V0?FGd269qJSih>/acd9njGn-Q-Y:n%>For#\7'o@Df0Be._`)j[#ah"PD:-+&k0,onnBgH;U.qN6/jVT(.U5Rp),hC7$_b]rT1<d3r%W"L8!M.3=`52(1DtP-X%`dSHZgI*1p8@eXK^DdYgWOt59-DED+56A))BU]mU:n.>E"-b;caM=YaZA=VB.k4EQU9qH@5R-K<!k6qT"V\j9SeiEY#"bBoA;HIUof: B%ACMn&fPsCpBhqa68)6>>eimVRI&,)q(F:AaE^4gGOjb4XtUpotYh7:DCk<`G,d8\WDn@pnDW=%j6"#PU[&?1*9R 1nINUf&LE5*tk]L=q(`+Pp'A^QFg"Ff,!UpgX?9_FhQN9 WGn%"6/TXB0i=@P.]qGlBhG-TV.Y,&/gU7AG2#t6+ZDM<Hf?r4/`#5hM9U]EaeVqRm'0@aA!_4XWM3-i=4X7I>*e#4)N@Am"8O)!YZT??m@,\CS3g$3!2_V)SoXh3ptCNXA'BS?a+Icp$S0Fp,+:rO%TP;KW'f2Lh3ap0ngKVc[JIMRsXf LT#n>6G39k9dj,4V89ccR<&bCnr$Jft*ALJ+Kd>,Em4p940ItR[1Lg,A:(WA$d.Z)PrBJiTPn;kB>7(/=D[Wee5:T;n:2CfWM`"T#nW2X+_09\pr;KR0j]R;s)9F>k[oK;c&.'J<%,Atfb4a+8?#U%M7RpAT$7:!ir$YDY2$5lL,Gk>#JSbEA,ZgeQ[BEg""FFc.)5Gdm17UAV1@?E'No2ETDfp!(@>0=.Bf/o% lS(b[:Ji4-9RRiQD8IT.!bVtCSh\c\Rs7147GpTR*0g"o`D6 3;iHc\Qh8ojSW9*Tg'.RU@3]ai]O3Dsj-a@_0TZ_9Q?*<EcLfr>poA90%g3mkH+->"sD,^TWp;W`-3pP??NI%QjO?lVqq3-h(.W Pm`/[`3F.'4.6/:@%b4lqtnL\86s8@QLZ\On14Op:jRkH0q52s..Pk,<0%gq"2%jdS>(RAVi:=7N?deR`1G"N9D 0`c] 30^+mBmYHW(,o/:*g,VfP/?t`[:i1pd]g___+t6IH=JNUI>e8SCpa:g;OR:eECAj`6'8nlo@s53e\WB8j*DF4C) Jd`K#IPBX?#N2@#8OK*EjZT oMhTfLjt_TqAno*3`1T'.d/ R.kffa6E9i @=3k=F&h/D/n5Z,c tZ63f$=ma!%BOq]1%n's^k'ZmsGE4*:Q@7/JTY]iA&\KU1q<$bk9N9j06e]F&m\207TRX[4%d4g!3,sU`cXAY9$de]E@Q!C%q8P281s_d7d(bpA.*`1in,f^pnIElntTT`1kJop*<<2^r?G5Y1dP5BBYQZ!btf3G#1oP'EY%N+'MU2q82,SQo6j,oU?.D9? rZIdf_AB(VUO!M*_7$,5QTTX@(AY7IcNcT>-U\r!$.rRF2!d$=MBkBQ*(A`Om5)LJ:. 1*c6YAI/f4o&%OCp33UWk ,#k15.:I!@]mT^-<;'_ANt)H0)!FSjpBV;7[;I1/D">_4.!p3V\CL=@slelia8UIF Ra]t^X=mFrQH.Z,kVnk`iFl?mB^;aL,6DA_HZ6A9(9n0sZ<!2/@jT#d1GRR;tkP>a(q)[`!!Q9,OOd*Ua[>\5kXh,0Qa^j`Qn_Dc,&A\BF Z\]7M77#*e<X[tbhG&Zc\*j*O,ETQ<=$P_qL)ssU6k^mf])>'a>HGXk"=rbL4gF:E5cQFIS.0PWfh^/cMi4DZtk3;f;:]-QKmP##oD>`;KilN>6f&\?Yd-QmLoZs*7[A&UE1h*KCl02W)R#/c>>E!8TiNCY[NLh_aXo M_.7E9g9o]PCS`/)Vs4P9;fXR'3!XTO8*"LI37$RbVf8qYC]Dqp%BdUNX]RO;=OGd:\icQ)i )XP#,C3( 6_S9ksX7Ar[760bhT/R:r`Y-.\cr,Q1A9/38#YJe%L!rlC4mO;KCPMm2@p>C aQe(;9LdA.M .N\*A3,Xkk3p>HU,'f>J(m+&eRi`,.10dWkf#rJUAW!Mf$-6O""@g f1[Sm@@]d[nmR#hENkFb_J^QQBo@g+@2:e0Z2A:^^C5io&\?;+nC#RYC?-I*e[Pk3iA^\P]AB'q5)_ _C0h7r^mbr(VpO^>?0K(ATS5Rah[k j%@Z`[!Nb J3jAkf_S(\>jb-bYke>_@]4A#QW(M='_pm3FVqkBG1Yem83gB!E\XfR*!19aXN.P&@`V$b^+6PV/Ql1@Z(>`dhXh48@JClL=aFea=?dfo?V532QCAKYXbUlg8;_Ubm,!j+OSg?MJEMMX/M%[(\WdK :)ibP?LHj5)ai.pRQ"dt<=mA#E-`t7C5]DOVN!!mlLfC\\9&oj%AX]@1M"BB*bm\ >L.sAJpoI]m"IOMoRRmgD,Rh/k>_KT.m"8``%f`:2\bn1]!!B9Me5\@,?8]59]rrR>GeEJi$knYBNcJ7Ht4&TWEg-[end5AZi>8"WI!LEFTjp#e&jOIJtQh'%c^g14TmCH ^"`A1]Y*JU1JU>TU<#Lb4)lVVo1Lf%mJkS.g>VD1MTjo)-P&g^iL5YI8Li,n_!;3F3/e.\I<@;C3E"BIW:X\<%ULnr#W33Zq]KRYjGXCoU\mK!l.B7 7,/!_XK/jQ4qebJ/F9jh8IU.8hJ8V>]B$6_8NFc-bWtA`f.f,66;1o"QkD`1<# 2@HcgshmE,p&cm!Q_n'oWB'RlMl<9"DBtC;"D[P1:b^8gc!%-e(=?T2'_ZoiqWiA9&:57Y"PXrTU_'!UAfYA]H21M(lR57/e=AO'9SEUFG 5_^"^k>IhTkL<7Gq/gaFldm\F=.* (PA;n,QE/q@N9^$Vsedg+ar;;&AK\V'!7>1#:_E??M\l",@4da:][-dr!I6.'lrarP!TA06=8*k-Am%osAr;G]9MdLjSj1>ThQ^Q.8JGN-YT;3=C*a9>#[B5NnablrMirPbjlD65!$Of:@[I25EWGM[X \nsIXF=qc`Z-\]^Vq2kSX=G;$5@LQ1>9_4*"4Vi"QmAkDm_ST*7;drHQ3if`J7ng5ne`%8aL4,f:Q5GS`LRcp7Z(4XVd^Iko=$]@V/ta'o -9hdlF@Tn]%86a p$R7Z.7bWcpgT,87=ZQHX:KN"6a^*0A/ibL"U%:E$&= )bjRo.+g`%JtkiVXN(o 52Q]K,XJ8JLf=T=$'B1;JI^5*Al'A$$!*PB/%b/5s[M=77C3BWb?Y\hb$ceQ[pm+\:IL`Zc1MT3\a_o_T5603tl?dg?pr6&\8QkeVih6QD%-3,oT!$bc1[+] 2I"dh+QA1jrB>79Ud78"mnif$jMJ5qH>lr`ck 6[fmh?%2%9F8eCPJ/T7<0P%kP DFG!V4.N9IG"&-T%p,5PLA6PTA5`_6Ibc4lb9)#eLH("Q=jOq),ZD$.'55&rl;`54' ]&%5W0HV[_/=WQs7b3>7[I $j;SDo&!c-=P@cQ].GPN3D7coM=Q!#SZP09*d,7:WjsF9[6<k!N-/?QAfK<&.1$<-dO30G6tV_h5T(45a"Hgbse"TXr:W1XDcnUp"f*R],61TVIHW+0L$YUS[h1A=c".(D:^eM@^\&UI30.aURP?P72(17NmiVi)LGWON0BU\45;oaHcUOhhrT;T17Qcg6O@H(#4r`C65*m0R4Z1WpeM:nEjHZ)sennKseA;)h@)a0f1@91A:r8Re_p[CJ9[o8f>^2kLA=3"kN4Kc0al_W+MeIk"MhrUT>X":0tOfo"U[A?h"AWa8Hd9Cn_>ULQY"fj>[:]EBAQB-9YW4\nbKj:aNm9(Dpbc[jiVb".Y,A^,F@".G=iF6"$G R0[;L547[.g(A+I`+8!]d=$4IY< .b4K3&+0-H7eWgKL^34^bQ]*I:eC%qFtmrF11[jIQo-QPG>_XTraYIT#+T#bc]D,Y[nf7-l.d9JO%jq+=Zd91c]3/N%r-H=A)T;SMRde\KaV`lXS184CL.7LW4S+<^*2hA`PBFIUVXm3Ngfn;jCjt+VCOF(04T()pTfY*n]S^c0"!O5<Am+_b)*8*p[QDj:;/d+WeQYf^5b3^$CnK5MFBV'Q00JlLm_>d-6F/M9d.p+V1_AMJS>1(PWBZXG`hQCQ1]\7MS'im!Y$N\B%cJ*("f^Qn-XHj)$ehjA?TmM!rLA7c9N**Oq> DK5Rm@[jes$PclOsE9EmDG:)5[0Ct`5_,Y/,/dbc\:ZG4K&0DbM.<]d`YWcPqbnQFYb]cC#\JL:^n\'s6A^GJVA*.8.k)Q##HI+&P*AldtSe%O=5V-U+`&SDbB8iKa4"'1MA7*>/BA&m=W%U5"U!$M]l+mm93_Bs.&%VqA9%>UL'?l1CH'\#5D';FF?ia-pi2A$P=Eq+R[$\3c&%![H60R^2+/Dq8m6^rk.0`YeU.X@2LM_j-.ZN%An&EHGc4qO5/ZqXLU4OgKnr0AH8YDn*Q"o&YQhsEY'^KI&d@sCZqq%#UE?tNA,9_E8laO%Se\R8LW?HA:JA&qsFB2_HI]k?'4$-@-GrNisQ>$gaAALde9n?Qt+&L%1R)4)^Tar\fW(Z9f@%D,=K).sVO^W"WVP[X/-M.aN'.hQfO,N 7o"2`5Qfg3RLhkNjW#,qWaM@:\_=OGg]fSKrh=[\B=9C(t>DDr(geZF_l`,'&"*Ifp?N)cmT,6bOTRCr=A6,s]1sB3n,5PpRDC@m,,'jEo&:=@%Mdg:<^p=d:`8a<_D=bD`f/,([?%n2e\YK]"D*5Zc@\`3lnF5jLjKcG'A4RJI>J#(':t<rG9Z%&_FF[fj'q>LlO\$/L=/>\0^B&W+RG.iIhaJ8rJH5 sI9-$*o=@LKY0@c\8oVO9_OZK]eDqm]7!9";e9iTo0^XZb% 8gIpesVHaLrgR?`B\!40b:@j'Io>8&$fKts7%c\>8WkhB$/@It$:oAlR40A2&b(4"/d5+/'-k H4f=2UZi/QWjF QBX<"/ Cfa7:JNN&<E4a-`b=;^^G\'BTG8R)oCOc_@H,IIG<&3hMr'*(<a.&DhY5U(Qi&j[D]>qPeg<QN/o,!FJW@-0ZHG>5?cBiMK$l>D;mCQSJC? dYN:Q8rhGa4&9A>dtLGUkiYAL(N5C-/,NE;^lq#%c-GWh[A+f;20+i*BZ:+9=BrO),&(L`N^s!@e:WDD#fWY8i_^dYReFT4? _"9hh>)k,oE["p-)2b_j:)o$TRU3_4X@Tf-E2`1$&i[Ar)*s'-AZdQU9V(^_mW0sT1V*/W[m75A(_4jOjRAc+\Y9i%fH7$4DoZNO3r#^=`s;6(1-Hf#\'@&R-TGYKTNG-gn&"(jWpA_,a2`tFkM=aAPAt7)Xh\]g9P&S*qiO=+b&*Wh`OL[(g3CU3!d@."+<%?DN#5^YXg,^b+%b=@sA'-i"TZc6l0flWAGJF#pL':>)`_(baUeiis+5q4"s!VaH+X4I@e_8>^OnTMMEaJ7Aa4SY42kjoR _d66kF6iHA%eK&s',ib[G:>2 70/dLeZJhlsLba%R+9f1/XosAdmAZWbC[\g#_c.cJ0VA6gAB:o(`2>O*$NO_E7^1Eh!in[dM!Y8r>j@dtFcqZ"la>,d]49+e!Tf_J&A[QUCr,c;?HO%ji7g_9J)$6kd)ai-P[^C?Wm)M^ \K,RVU1)iZP9lmC2(Hod:#@$9cj6+-X3r)Sr9`97JWA::m;rl[9J*2XLE#F0U*IB$P]+\Fn>[%cWjdk._ tc1"2eWIR9#K9Y^5&%jZ$L,LB_K+19gB:AWdR!g%9?e>W/Emc26++H.\6F<':j#P9_kH_KGT88=4TmVGm[[N_)C5>;O3+>i=1F1UAE# \"J07pp!oq8d..g(((deH1[)^[,= ((s_9p*%(M_^7 l"rJT?l6n:iU*dgfaM r#e-_*+ADo%N`>Abj9'"FoLZ#db$&7Y_U^?4*SS>dG;K#O's7lFWA=6qH'rC:0aeXFB<^K(DV i%3)I*JAX3NNL jgeG7Q[XHVTa4\2OA@*5B[AIF26I]:,Bla4,I*ecIY.I9Z?8*)k`=#]88N;rHN\R_9414grVceT'LM[6IF]qaa;:NHd@W!`EAX-D5Z?gU5?bZ_TLR!llZkUaiB?iD8cjVZX9B^'(/OVNm0I_0&6NS0OD;;bK;',UX-GlB'gpj-n[fKaEn>sUb05NM^$HNR-<3V((RDpGKA-PdUA]s<)lV@r&7(n$A>M;D`0LM\ekE\Qjd.';qdO7 9KC6g`Y[N`.$1`raN?o;qR'r Vm@_'JF59($l21"`=A[Y%\(GAG\qIf5 )N'C%">WGA,Q>!-#RTW/?XRB:_n)^(RWBA]r^GF$U@A=oI''fAZ+RY;!EOV6E#sr<iH44G+hZ;`hR_Nj.CWM(Ns+_$a $-mrSr5nt;(0Y)fI)S4GEjX=`Y0n$B(q%%cb1 An;1nAi&-3\#Aa3jU!N`!4"^IqAU)[p$Us9q&"WLp:@Pe:Q?cLY(:Q\Hf"-V9?>akg=f$,Dcj&7AM5s-t3`N#Al<:"UVLG+c&,\k>ejl_qK?j6`&Or=Vd"%Np"b7q$8Od1:;*dfnp[^UJ[,6t)YsVkC@aU$>]3S/LKp<#40TGfNP*+8K*NUl!!]piG]O4A5#HQ@mE2<rXNH"K[jE*5g^(5R9!Pi?L3N[:3AWOUkH@(%kZr7EMbnRn395W/B57o7d*pN`iHQ hWbkC$j%ge:%dT#6LcPK81jRcAd[%s_$c+q>8hO)l.bbY&l%>Z^c6i>\Cr.GY^eU/rq2C"mai_W?,@ JTTS*lHpL.DD.\BBEe<:*W1db#%+*,Ql6?+X=M_nb7%,%lh[Q,['nTHTgdT7j?*ls;GT;;"%7+bnB>EK43GV(j"DQQs l<0A,/o (+G71o"@McZ%>0c'Uc.]PXt\>X@kjXWqP,,,V`^l*L&6(d\<*cc4L),GbBo.TmE6/@7OA^/^gA;!pPs`Wjk!RGG2\nG7aa>C\W@o64tKl7SMAX>k&L,0V19b.YK_:P[DGZEPLHX-/`*-n\AO'CjV+&Sr/!>)8r>&diAJN)I0aWj4m=&&&=Q^Wp#pU_-3Y13Q/g#"EQMpBS_1YP&9\ABL6Z6d)f#arHa!Hj?*X+W0:'WWOGV/1All"Qa"Xk\Oc UC>\AqRtCVbD)X<+9pXrR&`"Q<.0-M.Q'c(XYRF0^%>#TN-V1g>Gik I@1.R.4@"HA;hWF@Kh+X4kt$8*&N`;m7UefMH)W6p]ap'J)fQ;)<`BCa@iqjGCDNlQ&-A@^+H)q0CEYsfBs^9+$b!A?ifH`4e`5YcN4WR$q?i;hOgQTJZ%^tZ^3bV>;+FGPDO;Vd^"l,TA/^&.UI-A]979L&'/4bQ&Y==om?pZAVf8;@A(B.FUY4Ao3rcKMJi8&V6pjTW9 1L-$M^@?Xo=Efmp,!#2B0 iT?%d\^Zeej-I+,Etdlo;GeXtq5Ei;N+QHKEa>:p70G6Ah0t$DC[:IgmKiSg7/3hl#Vp0B[;2dKL'SW%pG1PVQ>U_N)0^D[ALc/QTOaA])brkR5&Kk)K8WAUkhpSEj5nB]MLc#(T9Je#LOR$=gn>EdiskF\p `roU>)7C<G$L2gPH`rmc-AE$3=D]UZ@:UQ`q`=sO)18I9L!pDZ&nNoiOftb^1l(KBi9k#Ek`SmF&_d0(@t$Ybj^jnnXCVAOft4TD_s\%K_IcT'C","lpJjjtl7fGG1;J*@]BZUl54j6VFW=+QjTO[1ne*GO@RsX=j4F /^nFZWSPS=VE=RJ[?V$21hQYLS[c<1)jMEQSj3p;s)_?D_+s9I!jokC8[3Npbd+kW fo)kBat,qpW_YspA_A!fE/7g@YVTODlV?f+9LKMVI mW-7Ueks6oe4AF4]Qe6I6W!J8M+?IGr$&/r@EA,d4-hU$]bU-bAapk6/*_ 9k(1)<,P']K-_?KtcGg>rm/YDhjO!3lpL,t*D4j"Z63)kB1_A17LJ+B?#(?9*:q=X)VQc\pR,o:J7O"gRi#Dk18$\Mr!:"m*_dh9,8g0YIX`Zd0XjB!S+-Pft(n.?'kD%%`K>'",Oircg1L^\+iJE]!QEf$J5l&_nGWLGI8[B:k\qpJV1N3(/'/HRLb3G57Hfn25*[:*\E`^< ,rr/oRh ##dl`7>i5"= K&;;2-8gsF"=(*FkCoFTd=_,7\^R]SKoRlkF8]sLMXG%Y[+im6_^`7fLgk;lC-)BpohMn0?p"6`ebR\'h"%UqBC:?A0-YHU%[^K.=pPMhB2K'q'oYgfnhsdH3:(LTqpV6;'q9pBsQR?X9^6W:F<5IQW#Sih2J=D"( A0CT9W_nKmV2,EH0$JWV*6D\s?!:8`4$)Q_366,!c(ga+Jd;lpk5gIE\k+&f]o"^m-R)A(M#8%rj"NWKf"NcE$%l"!;&lkQ nB!cpgJ5hBh@Be7go+o8fd= ZelUGrT)o@.,EQ8Z>@=elER?'\DEN'iJrTYV*7&EQXk2kLI`CJDZ^,!dK!U1o1 N=*qq8[>t"sJn9 r].E0b*>+S'Y`s;hpAZTDZHX+.DA6^0L;cA=B!12p#P=Nk8V@[7e7"9+YFsD[$F/TKo=>C8K<[,T$JZYs(k+cK?ZXgNtQ/H*9'h9@f%Ih>G%/U]V]VYXE_^o1h=a:lkC4Pb.L^eA4CXn>st4+jakA@NS4O#gD1V?5kOHNC heP&X6<>2UkP5J0Z&J?/[8ZElsB@[TMI^N3-85UZ /mUYZfSjGL]0@si:nj6;9;I)C20)BO?W;F$!G?<Y.:s%e5Ze3=7b8I#TbITfnK8nOrLs;*(GqG8P"HX(67Q&0I?8`DD;N9k<_(r0p#=P:FV^W,#& [H!tVq#g)rbj69M[;_aQiSN%r0.Q]$jAiIU7Eb\PEJK[(:CHjkg!U'>\?b #k`'>t"C-C'+YJ`@#Y 61KEb K?Z)5FsC>IIfH+RpL2>W"Q$JZg/2Bk;%Hs6(#a,_S%9qQ6_\;N_Dh"BGrOGN049+fbDSANG=*P"RoDQk91S'nQCIBeng42;,>&GA**j?edh,:>Aq\]5q)c[$E?('Wd-Z:TC5DS$BO PTUELG`jLS7_N> bGiU 76%\QC)5FQSdDf\D>T#"^"9J] n/$aA^8n#t$a]%-fW_j#%fH:JTF0=l3?oHUVZIpJoHlnM:ponE:,;">)l:Hnhg:@bUq's#DbK`L(,MU$,N+% r@@4W?cc[I,_)daC_?T"tSQd9^%`N__pZC:O[gWgdhG'b\^0ltg'O"koJB)J-V!iI3(1fjq7H;BrMlc0Vc"YKo(C/Wco2YTaU?s:YE2rFqB81/df5\W3[#]'0IYYp/8qQ0[_*tN!3KeAI5-4`d'G=&Z)hpqPfLVJUG_>>>-AeHW&9Mmt,l1T^hPoML&N@T[[deLkgBa^pGoh3rE66BW"?%K))Nn2X*=5FA_6^bT2hnC7/H%cMkZ-&MV'0JFf#_HRNV* .@j6eU`&l2"W=R)_EE0h[-,="/m2='J2>KF[Nk['@K_,\%BHY4]P"STZ@-Aea<&'BE;]t8No8RVf',M@34\/G<3jI`A(T0"@b,Fc0;,AfqSb0=o:a"I*5`'>ep4#4D&nQ6\=Lloe5Qn-ed&$4W.KN"!i03QP9DW+:smc2_$gO*T2MV6;';sd-06W:'ne-fpapE'j1,f2ieqam>mJVD0Km\24 _\ApdeB&@gq4%fJ3oq`.&tiR-(A bYiC([QPaT6].XVe'[Z-6j14_K3is p!1t_l^;?@SMJC;pJ=_6LaUer7ZpDO"@3R:lqT_(ac:bSd!EK*,sD^s8R0]as0lG17)r.(W%lA(q!b=J:E!rM8^dA1?Zk^ab^"c,Zd(@tD8 sM.[E96p.DKRG?Xl)oWB tD)(>REQCj(OlNi(gC]=!1ajYA0AHo[%2cpmW#=YIga?,f1E*W>9Vk(0DS[spBF,]+a8NWn2f3A)kOs$eG;5 *LGGH:3ZDK!B5BZ+bX][I,Jc47T7;#i2Re7tJK&]_N(e;qSY2l#.bU9mebC:8EE"U F+B.-o3GRnEtA%NM]7ICk(+h;KO`I&\LDE. B\VO+0T!-OiiOkh+.]RE3DDda0Mj:L^id\d#PdKc!Qt/W`:m-aH+8*gq\Zd)0HoGG(T:'8LH\Oj0`oJ(YU^_6ZKrjZ*t(S2d!8qMTUn 8Wi38sSCkKcZ"/_5n%fUZ!HRiaMYF'g^EXj93.-=(/oHe'!B,LGG9?cF[?X[WcE5\?=7% ]OQs6nJnRJ/':A6UGZGm7g/Ke%F[7p]Bs"J+>CCigJ(T%bZ"jnPIU@G$(++1S_@b5%mREh&2TbH5II@A,jS.[MH\1-b<"?Ak'6,(CjbRG94=qV%8 TJ6Z6&3(o?hYfKn95Wb=(=m8.IF?JS`Qh*R?@IEp,o7U-J4qZGjLnW aaf[VF(AD>YDU>0@ZreJ0L)(&F)-U$F@j5msJn)t6K-SGr:Td+9$PJ2j-s9EU6\:N'$=7BfT)bcHS)5AeDqbeVO6r@":i09:':jY_-2'ZY5['(PYtgge0LB(n/fK"i6?9]4)C9(;g= G;" AZlZW0t3bPYs^?t$OtdRVn:nV/m[@A"p.%9!p&AP@G&S^)g="qA>AVTb^=6T-HAJ@j+Tc;GU 3pDNba3iS3[$*FE<$UE(pF&@9a>)k&1MOK1MTY#1?df*dn2C>hH$;dK5>1b)=j"CNaV-atWE_"-\'\OPdRk;b1U^eIA4e=7k)U9rDASSEhs;H[*,Vef3PhO@&?,Ri,>BAqmEZ^tm._A#[@[9%jb!G#ft"Bn?:^0G4-Y`fMSLdelJrVb3:"KDAlPH#@m1!MX#.VDA6ZLIdnF(6Flqgd[GUtN:YDReU`>pUBBQlGhQbC:`b)A]:'AfM86]'K[A1G3[Yb"4oD.V=NhSl3JH)qA7TTW?)`2A[(.i=S0N0%!J1D:#";lcAWp>,#d+7MgM&[8%'>% P* kIrG4,JZh6ArHLiW<30`[U[`n0X":Z57 [N*HgZ$I7otWr54/Ok\NEQTXVZKt8D6,q.R3mp>&_IPAI(%?e!5?A/Qbe@ g5aGG(ni3aQ%8;=R7B4TgE=cNBq+FW\An6k@VSnE<(EC-dYOXi5P[Tii;s=l&'p1UFmJO[#pNbt8/q8Mq:I.Kl7[5+g8)\XkA7=1"7GT.4kFYob70WpJIM/7`^?rOW"*C\'\[Ot%I@a\dc?'cjQPlh\h5R/M@DqMap%_lgJ\f!Fn(UQJHGTlr?>6mA,VAb3793AjHbXFg`E"d-kr59p,"q.g1FgFVB?%[V&V2T:?02JO!OEQ8?_GKU!:6^lAL7C;Mb@2b o_s\1j:e]df*LQ79TSjDhM;AOd/9Amf--]#c?4Z4DA*h&/?MH0(=W[H>U,j'AQ5=Z84qS_]io5sdC/Y!)Ro/#1-8eahG<=VGleBq$GtMgJ'iaA&!0>IGh<Ar[[r(DdF1mRYX(:Ah^8=<_HA:&X:*+ra(p/_Dh_,i)B7 WFq+ZfD1/-rZ#rM-i\)%3a@Ud]n*+O;b0j3c7:&A,T=<273+Ib2EmD[`=N&`99S8??o&/@qoP?$"H#EL ER[h^aK(iFGP%TAeefT$Eib^ "eH`n!A5\Tl.DjW:'CC!8/rt;Xi`S_Cj$Z=H490!0#9:$A!52\G@WG =]X`K9CI4)gYNKW0]=OP;HJ/%pakp c>":0rPlQsSSUKaEQY2iD/7.]oCP"omV(OO5WnrAI[&&A`EL>R_/"r8.O/6cV Z$JsGlfKOZ:6t!G\[[;\Yjb42^6ROJ[TA=jbf9AG>t9_6pnNXioVqA=2<]-;[t7LX58k`<*K?\p8IQ0At;LEW0+H6+*fd3SaI'$abi7rAfNh/,V!@M^H@_i&]O,^,hNt"(mg!7jji^R\ 5WC=]M[q_[Mb9.nl!"BTOBj&Zkp:0X],&nJ$\]]S1?Ra^#V#X3](Q9qUlM2FqQefOt`oLUd=2`-ILq'kl';P-$m&dbNq4_Xmcam,pA6ZI^Z&eX3jLk'W0^hf('1^&b:oT=nOhOTQA!oh'^#R>P?3+L:XM@anPUHL8pEW+.d*,t`Q423Ea'3*,\8?[_7i8SQ,Z8-EeA(or+LtA^)r,Qdf!13HT>+l>jp'qK'!5\S+\1R[T(lAWG@*@WXWjiJ(-C,:$Q*g;ZAs$K+Hf3f,l'(.`2+Ltg=LlUj]A)h_.D4AVThb_:o"E,Ac[$r=`6CM WM85D/Sa&]RgDY7Q%1/8AP\-`Lla-5N?aXpkcrB7VV`E!E8ClT8gsmJb'3W`?C9rUFac[X^gUQ9TDjZ"(jmU54^H*-E?/q?8cIS:dL0@ b]9#DoU)^p5b8X$*I51q^WsA'd%2O*N$0gEfr(ZTj5]CgAC2n@"p0tBEHN1mYX"?InEGR7A0T>VMD`$`9?cmc+SA!/^SHKc6PB@7-/P'NLQ)s%@ (7\Eh$-;DE*hDtr/PG[]J69FRXG2K(MJRMkOrO(Z`KnNC<)o[<;`1hDl#((g:W$CrPUn(FVC =a9A-p&SQ-.Z9I o(1,pIadRJHa3ZLTVh].bH;#MkK<-en/H^=(/"fsg&B*bOAQE_X[??,*N/ ,7=',iAYKN OnML3[P^e;$Xq/Y-%i@[)P9cim"-8t<=^bh!srU3cB\&^^>O8IjQm5HNC/dnKsYf:Bj0dN_)i26qR\k8k@Q0]_tO[dGBL4Prgl'n@/>Uq32\"I/pFTG&X`QZDM/,O t]LC\nSP'mjQ:'NA=&ln^;D\nlQL&M;kAniTD](c28,8,18:6!M7n$&RVZce8TeHW#o\G^F%2_XM-/U5UZ9q4lg"St_'MSKisb"#e#NfZ,Ce(=nU] h/$U.Spq*hc+e[@1ZC^=2J\P3bp8$c58j3_O:0k6WC##3=jW!& .f!B,H^\e0S;adAUOo;6ekIP$>Rh[\-nN+,ph ]3C1"AntH(F?`s_SB6CLBsh7D@7 ]SAJd$j'.-aoYTsN)r:=>*Gf:U/! -03/6n&B$JBQ'70?@&G8eDUk:-tPpsa=-lYS'G6,^t+WNDdb06]"EpeqtZ"fq=P'"pUgVY*r#D"JNmJXs1t$;P0;%$ORIhWYeAbL@ZSB&G'n4QD*L/nS/^GS_9?9>N]3fFnAGr!neR5=_cYH7$)Pcf<Vf[rh+C"(2A?.m,SQ+:A-I-BU-Kk6prA&+><'ls^\6#l5#gEl0o5l784M_U3.=W_qGAmQ*%%^^]6j$/S,O0"1e5/YmQMqj?<-TR!*0lOrtSkQA99kNQh.%r"dOm+eGSXYY8- )FeVXEH:P@Sa##kM\2&7EY$WsDC30'l"h>%Ar#"]CrI`Y2\8o#-\A+qnB[3Nqq!a+'Cab&_3WC@]2?kr66f$mXoJHVQb1L;/"E/[_i"2A#O_@8!_onZ:KfIm25I;qhK"A3L@W2?$7>_J%UAKVto3lMX$-(b7s#nZRWJ C8^J.dqq^X+f;:nS.j'7',)boQ07P:be3Jja&_SjlSF/KCf]MlAj\q8MYh@X?E9PZEAhdOI9`bB0)DN3M[)i!`5iE&/6cP,K8fd$Z;6g0ZR&MA+m"ikA`$A2.0e5!2g==^N`#'j#rqt:\ _q.1dcbKhVo5QdUjl=<^Q%pF.J[KsmE/p<.0(?j=(@bU7 V`Q%*Q-\pdr%W@>etp(Y+?H+WbnN;JBNA)3Vh91?M<9/f7_j,B =E28rLFmb9C64o?NB1Tf]a4#GU:!(3o?;79.Ij^jkY+e7Q^4?[f:@sFiqGiP%`n/f*IHLa0CepA>VB3hJgZe32-'2hf$1) BHM#5PtgK/B'5D_/qY1=%*GQ40 `k-S D!DtVCL"a9kLRr;^Z\S5?4S4abC^_Ji.9=:kR\r=)D7H=.-1r.OZa.N"T7(U\snk_BLVsX%0AJ0_%V'jK_.e;o,A=ercfJTZRlB:js__+O%m9/`Z]`[CSU4%e<4T=F3NGa83EIc^MZtk;J[Yt=&hJ'$PTA#8 F?B]XWF(CAKpLX_Iq5FWSe5._?it'%Bh7EAbZA"95NAo;_[WE/Z/0bGIP'FkIK*/Ie&la!C\nR&'>'c'n2C(t-ZcodJ" %s04ZBVLT1OpehGq-lKmTD1(1"Ds^"^Oq(P?^66F9X\HT/&MUTcM 0OA;\<[A=d\TRPmia>:qdh@qi.IOBj]HO#"0.h%nSlXOGY[$mrSVp[Y0NICa8RL-.!ClD,90Hk^'k6a6cin/Zb!&je^@+[00bfcGFG(LY81#7tpAeR6Lb=qT_H("eb:YOiiI6hV*SF3:9iQ\d qs2h->dl6OT#PDQEbJX66i)]FtpBF -g/J^S\sl6n=G'Jr2:#B8)KM./9:S]Br[&7qh*'hl6L;"4f'[e8njR^#S@J6]4DAJST!XpW>?UcZp.d64.E#fAR#AQ"CFqY2BZc+AOK2VqA6I'YgjrfqW1rL?F[BD.fRm6+@2nsc3/liS%:$83NB]RUFI5I; M14H'Nik4^<'eaTB(=6L E*d$(CG@ >mUikAR:"3Pqd7$''eK1^GU`>aMY*;?gnmc_E_1ct+b6LWJpR_AJG$b&?iCaD.R"S7VkB*8&"h`YciIiHg_3%54DpD51IWl=V:5@t\EJ5I^8K3%8#@l85N#[C#<7]!*1MpRCS44&TfRhG_?BH 5;)CoIJsT&m9KBB;C<;WK$?9r(h$W0X5=W:_B+@W>O@dJL cU' fH,8;M!O(08I?W8S [oN8c\,Cc&'bP.;Bh&(+$P*Xq,DmW)Tt t/(Q(EtlLC:fCY&XD0d[BZO0^ht[APo#Egl^c<\Z"FUY_A!K=j8?9#/N30Kc)n78ib8?b^7cU^(fT@q:%(W-k-FdA4Q\_8r9VB]%SP]?(:>DYF2H@);(A:!2$'QhpD:B40!K.BBlUk-,W5T;#QD7=Q;k5,$:!,OF>XA/N#+ia]dUIF:!i"9tl:a]$e2=CE&KdWFBC0mA/(%d$qgD#5=e?R=S]\$M5jm)EJE4McR!Y`olVI#D%AAe[?*KXS,b":;275`hGb7QpHA5/'sqb,m@pXtWq#WC",L35mH[FD`P@mTP8-m=nQ5lOpVobKa##,I^iK=Wj8SN@^^sK(]2\<@W8oKs:<Ur8%E?i(4?H5(,5GiqX]A4:"rD*\cg!*$*(DN[2IaG:l7S+(K@%G%XGLW`5ld VRXkrEIJXk@,6RB4RBbrm%i9rYsE`]&^' $FpBbgjj8[a*F/,7*_Q0"3V"e2_&NW_Q2nM?E@(hjd1lm4O94'_6 IAJeXbp;m,!(J?H6I$k;(n]H1a*p@P:1+hdYQbTi.8>:j.H]q*N'cZ1a,a.IsC@c.rl"*q[s8K,kg:3PM?:t #s81l&,"5]]Q%N1H`D\WUS+AA!'\2;4@Xt*2b:JI2F@ERF@rem +O2.!&L#sAsZ[U]B\O$p^=;_WUPcp $-W/#_@jmh-kiq*5-LC*i>Q1)>7N;k[_jqJ!p^%sYC^*h)k tMUVh7E%P&TgZP\B_^1/SS](B=e7C3?%C=f$$?D+R-R2W)[ln`(Zn?\/k\;%j*+_;/AK9iJ Zb&Ic7UW&GU"b"*sU_@D 3Q"oHbX5;P3`UAAqF,keZ`8 "j6_fld7YUI94*YMRE*K99rnd$o78=?O>:Zh_ LpQ9F_L#^A3QCQ$Pmt8>N^W.)QBB#b/fefCTOO\/C[DbqdJN;iQc)_2K)i>tEN!t#Eo7EFcDQM*/Q$DVq73A>3q"?rs,DC^<@Xa*UNT)3eJ`p,0@eB-^MdL]-+AW?+k'TT"=*QA_6N#0QOFGW\J +CDa"d]!*[O+l[\"D)aLG*\Uqo /lpZS'`25':Se#*7@QG@>i1.@tN\l0)48QCp,Be"c7Vd8C!NOj7,,GA03+k\JAPm6'EkqMBeqlI`0o=jW2AD#Jr"eLF#K#DMXTA?)p\WG.+)@aT5$rEkal[sh#f)7D1:N@J.hLlbZ5gld*A%!]Nj+93+Mdh;e8oRR@(OQdp$:KHVG"_>S+"/0$AKK"iET>q4-g$g`'GQA#O`iA Qa AP+lgoob, QXf&Bm!5/(8N (/Ht#*%2/dPin7^G+o0+$6<8RAVppX4`\eo>*RtAe7)'dO9B[GH:)cl<Aic(Z-4gZeOn1Bf]g 9epr`)8M;m#ftY:ZEMI_8UJdaqj)q ,h\piI:L:%#+*+7o.GkgkrmKBU"`WMJ8$XMWK=hU/AR ZC4IUaT'24[l.XLM,/.K,qtV(2cf:]Y#G0O_92(ALUY:.'q79aqZ4CV%P? VF8qc#^Ss3fGdSA>8SQdK?;MTW_UK"kj2,F#_OA/objAB^k_BZ%re/blK+3Rt lrAJ#ZeACaIA(jh \(Ne]R_`BNQ>b8A\P-"/ABZ[KA38!pWd00d"FSX/]S=CB=,)FO0QioNX76k`K:9,YD5HX(arVUq_-Y0co*V)Z?h`C+Tt1o0e"@m7SVai']@hMG\*)P9M7S">c+bEkkCS>Hlot<dEmi4$KCat_n#)QhYAUUKX-ZU*4O;D=/4-OkOYdbVm)Ng S:Ia5MJ),E33_<^dHQ%j,t*#?M6SZNUT#CH<\a82m22`@NpdTH>(1[6)^ZVlAKE5i2o(s)rskb3MfU6lYlss3&96[M, .fSc`*OrF'.Y#MpkH/pde%<7m:LtYY&V)miFbqegR7Q ACrslZO^J@J*#V.H"r5m]5j.A.U7#82lN*]3'4mC2fQ]*n*`M>JZYCoAr6m[s7=V9Jfb3U3o77(9XYT;A!MY>ke"ni<TYVJ$6k.#. PMphNC_J*bi:DS"BTb[CZc92qjomnC;Xd*iHA3@F*C^Yp?Fa6>S2[0 r*ch2+bA U@j\VAZrA<6[4b08g*:-c&ke ?fU9+5$ bkkDB#9?FP_C5aTLiHaY%D7#empaDa4W%`KV$<"tD,H>GSLPNO'TEj./\m,jt6TWP:*hT'eP[?V]-Sr_AbFZhABkt1n?t0*Es"WQI1i',F#/=?Cd<.?!LhStaQbW0,1DS"<A:Y]5rIq'R<[j<!tYP8^mf=,n[J"]>V<@dCam7\A-[<&3qo:RSSHB8\8qVEAlG8n#$fbnV$5RHEtbDJ-6QA%J,OQ47n@#mO1'2Xt)>_^ocfoAT>Q`>GkdZ$$aM-Y"6acopBLJI!N`qA96bBoap9c5FR&(T;as,B9.D)"6n6A#-Ikf8YJML?$N?eT@_]@Y!R*B!J&`0!P#IW6I`eUO>qm-NA/W#hJjN!M\>=%iXX)Ik6;G`Rl.BJF7b4+Sd7;q-Etb0Smtp`7/02B^]@7>GHJn9XdWE1LL'bon0j)f7=9-I9'5gi)-RHhV?Y+gWL .W2*XAT-qg6VW,)3>(86YA\cIc6%s(/M8FM`/3>#akaIC>"I__#?ls`7PJ*Q@RZK/.-%%9toT/m/V'"YQaV1kf-Pg+$;\*grK1KD2aQM1tLp`T -V+qXm%=$@/%'k(!f?'HY"9")?KZ]<13,lPL A.CXOJN_h5$m`%a[S)fi,2j"C(aAsK#?db:m2EG\ Bhq>Yn:VVQB`VMLIK'P&n$- Scm&j=ilONY6qSNS?@j)'s,(K;K%\1m\A$Y'GHCPG_sJ U?+S`cXCrDAM0_jq3.q#R/FMf2JekA0bWY%UPQF>E3g&TmJZPY1 8bj\Gj^`q@#!DMA+`1rhm:]n!D!V#.\kA485=ACZNRP]m"]fhcJA.@&14C25=Iq]FdO7+XWe+ )S*qre%GN[ 9=$t8,g! $l.1$[MO+FUXqq8o$[dpAA()4[8^> 5p-9i]L(Y=g:M%.EM:nCF6[O&"B4;MQQq;\E@t'/1,NZ>:iXc6 *QXIbbUMA"[jV`iAVA4i%HCStaApU?fs(_(&c-`?C6W(TD:QAABR;-=p1VhDKoQC=Gj_DQg@j?;_"Vm,8Bk#OZG8sCYkii2AHa7'-Eet/>Z`(hFCN ]Sa';LE>#qn5:!a#-WGAQt!r'BAFI:B'r>6nqngBVHlNK5Zf>9VQ9o\*Xi(1t4lJT p#YQ]1c37h`mP-8J ?qRg['1UY2!KB./E,`BP#Ca-RNbR5+#o,npPUNdCp]@0Yk\D1*X/+cog&LS9?O12P-:.9gk`)K#=SWI0]RV\Hi]-b\^N&F;tUQWBTY3"[94O!8mc`?__6,[ATkf-X"-h?Qs1hs\1&AP:d9R\!Q]Ul&r-NgC;&D'_ gdX%j hX[hk:p6khM#7'8s'/AfS1.;FFji7):shg-1?LcP\*0cVT^/g.4WU45eMOms'FX8+ihJ!\ip/>)Frb$pXtIYY;U.]q`XC8'->lm2?0l/_9d$1R#Q "MCPLgc9t M/hASnmMmK[nMXJ5-Usj5^I?Ut$1:O@FYsRm*V<@2W8EhOA,g_Cto"2b#p_"m[_^`Yr%O?g);KE,/C4+\;drM)$*$UZ)7_.:DCA+k2eAk!sB5[I@5m$Or_+:#^`M#L%Mlj&P$XtBA1Z>4S[rf) o;'?;E>+$k38#JNNke[RO*!XBKMq$RaMB%a#]FgtKLWndl3d"OF;/OTY'2a56Q.TpOnBT'c#52Po"N jpRV YaZd6\4/R0E/ZY8@G*epS7ja&_M4W&OI=UjQFmR:]kma"f_3CrNdepp6O_-k&+Vg4-A)H/d,@ZZ;41X]XB`;3))Af12R8d%nqj"9g"%XJiKUWM3'l`:-9<(cc8/OAUK,G[f^iOMoI>t.At&n[(+Q0@pq; l4ket*a10XhApT`(0H@Mtp:UP=5M<$SJFm%r!/J+2h4?:e36P[]54Ajm^#+*R*=eW19S[$&(psdMZqX.P5:'G5'@\-&NEk+(Ptk/t;b7O"'H<+Mg4*Kh7(c!nZNQ=;i_)3iE:gDgIl;a^f/l/Z!7j$;p16Z4rqp5]88j[[>1\?psffh;Yq6DBt7joW#+T0E$b:i]L?&"LR7`(N1cS^a57>O-!LOG^M'bH3VqY];-:dCetc4UIM`ciab,_Ek18dYU"g';'"HKbF ;>fLTPi7@sQ-&er``/-X5C/A.G%q:e/I(I]dWTV/BAj\HjVtZ>aO,gi#o=(;1D%tds3@\T;ZDC^qLV:Wl[N9i'=VWD!j9P0hBZmE>1dDqS][[ABO)H(%E:'R][551":,UD$*U^`lU&9WD=@eD!]R74X#qo']*FEO3tkId2eEb"=cea?@04l ME%QZ7oji'B/l`r+.F>9@/c@dh:W]E9T?e2S?W"i>l/F;f9jF9/do%]S1-9Y:sn[8B.!ss^bHB7[9>TQt_n7W]2f&IK3KZBLAR5M`-:SQG=Nm!^2O=oXjQmN**Bbg82=,?%1 ZRb;4:-tt1RM5T`%)5X6Yd'3`0c"UT$-$$ ipE;cs9ng;KA&- 2 p\0#/YI/D2S=p7qF%W8kD9.T&E>4[d_;s=(*H>p,ReVWnLW-U)X!.A.pI'=Zf*SapAW5/$+fak%QqgRL`_U"CA!@LAAfjE-Cj>A,`<?m+,,W3XOVQr[kTQHY>@1$PE:LSf!'FjLjR;;g%j?P0?LiC!fU[AY>TQnp6[*!Pf60],b_%DI/%`CqMgDp[?3;P`M#8U2BRAm_^PQ_8,cFB!O8*ng9o#^::F^AU_JTUH(IiNs3]a9V;01;<7Bf-WaN`)F^"Be0RQ7LX)oAFlTL9krLkY`V;_8qOj>k#1;Qg=@sNr)I&/gAgX lVbhF.FCEGo2ChEgGH0:&@TBik&Tb7[``d7T>L7-_%:Xf2n.ldtlj>@Bd= j&N[s[R@5cQA*o^WAB:%A=kbN?pS14eFM#Y3Ls[b](spXdn>7[1"(8XY91\g"8jdkQ_)P[FE`O9A?,!ZGs&l8>%1%6EMTA_qEqsEZcH!ic:.=[IP^7/q0"JXId2 8Hs+2AtK5l5ZW^%h8([?A38LIPT`PAshLUs,''dC.6i0j^l.'U%9Z!"YEal*$6s2(N$nM21&T')KNc];JP,K1AZ&HgQ5g0i;@Alof@02jOWXa(mdOktRImheaBTF"+_G9S$6RSn';FoDmm?QeSKHkA7.DfA]b.Fi1k1LBMXk'>K&Al..qA1daLmIQAgD =bl(WW rKQ^kg!0_HL08,_&coL3"L)8Zp(cm;K#J5-)#V*._78W_AR($ZKHP4-:fPm0@/k1!8^[BXSoQD!o:Yrn2"2T^"Jb9s=UDLX5W@Nr@'SmXd'1c'VspfP#7b4@btdUBJN3!^Ye@n\;)Sf#HeATK9mrVQ;='!-::"IJk[^1n2Akm>Gi,e,aIAZ783dI&Ns93`,i)Ml@%l^Z J-sqj"b*a$$9Wj?h)>a6(0a4@^a`NoF>EA2Z"%6O@'9%.2PaXIDk-MB^h`RTrFG"Ki-]4k,[2kB63/da"r,g)*cH;HC-daTZ_,Bk] W:? ?`,e2`=TCLJ@knRUkoM*i`_Ah9PKTTIatn#:pp0;T_kfn+$c?Mq\S$_^Yj/?fOK^&Q$-94\0iF%'8D/C*3@@XfcGZ;K]E*)T%llg]b^SLSt Vrdt4)Q>?k0SQQ6:Xeg@pm0]1>,TnkC s&LKP5n:EHp2")g='d@s)2;-Y(Ud!A-'AE4R dVZL>MT)q4<'9Ymfs*9?Q`d)b2H]Om:]r+Kn`gt"_>:)t7!GA;&6'h'-.\lr'erd(b?#9?9Yk?T%;AXE?=09Y[DSUh4)8HltINi0J#b]Bdt"k,Fb ]NBR2/8_AtKDN06M,(Q*0IVE:pG[%)2l@A`(R$%8frtGF^i!6c*[)*Mc%?+6q[0@Zq=V^]`#/U&BT_'6FD*mS,AHh["]`N(QVo'7Z-f,1_^s&)nG!,A4j53m`k,%Yl0i]A2S6"DHDUN_,kR.66#dN];A$\_ggOGpVsS"p9]cN)rL#C511GK*j9H(K(0dqSJ]Gdb5A!Gmn+hFB2]jA>'@8iscCUTqIJ@^Sk-GT'pR9<P_Wql2^,(O&'An3QidAhi-0VS=^@dbe%;!On(OYba(j[*dJ>5b16&<;>3DZ2G L0,]6V$0)Q(fK9o6g&439WHT?C/W&Mkc&&&7g2V/Kq"_LqJeGEJA,U%Z`^$eT reZ34p^FaPAKF>]3RJZ_,)>=r\E1 I-K)$b+ -@[&ZT,mc0b;C4A@T3,]Q97>AC% ZHN b"f8D *a(! YCXb+^Q8j4V6+*:<]j+De"ZeR(fL(/@Njn5'&JG`?@f.$AL%Ht-:iLUCa*hl17k([ZY\MB kDRh#JS]J.jt@S?LBh0SVG`AN.?!gqAH,4DjnOmK&iG#[P2X"H!fb(35A[cr$HLcY`cp^Sd_7N[]@o2i9,N9Z7:STafZ@E>,"oXL>W""!IsW`n'9%>O9 .]!-O``>qCK02AHnPOAYDK:f][ZX;^E.mF-#JpSNM45q;7Npc;JsgQVtD@dnT9n,SN4Z_8V3ML .Bd1brK:0]9[-'!?gqOl^$g9#he@F/#0AFi44-GFOmX;1Y:ot=40rm%G)rZAp*;A#$]bXcR)FL.ot!/ HGcOY6eboK>T;c`Q@YZ2)E95k0(Q]Qk2mG!lA;3=?"f+s>Z9gOJe:`%EA]IsP^bL%a0'Qns/V/oqN*X\A*SWV1 7H.;U)V,f?6l26J)'r9%S8DHKYBSA'6>d#Y5bHErPHIH)h ; dcmLG9=WNP^dV2+N;./c>/.'Yg,G!Z ^"c6S3H+AJWf =i\^@CX$IFJnC(,AkAGfY;jttXd;0K+,#j 74DomGDbk'5OeaYs;*0R0b]$N4L+#f"s?8$`t9;OG%Ya@kQfAANhdLr=qRH:2e"T)/b`Bjg(gD( 6Pc+^[&VdH@`B>"qJ8NAa]8A@t%qd>[l]RHQ]pZp2\In6]5?]l%j`&A)5r2IQM:;Y9rN+PP*lL`ZCP_@tq:r%T?B_$39l r\hehLm38iF,_7?jQ"=.\Hs^+nEs0Jp3[d.3mjc1]OH#`oM#1ikiAL`]8p&>Y>.AKBB4KGA2r%(Z0K1\QW7!X- =.BLhN=d3as/*B^#MY7W>5hH,55H1,tMY9]Cs?H4/6da 2JSJa/t.(Ms+LPPirD0MXP0!NF6 =`!+`A`RfU,&d3Q+lK`,e)6$IcpA]r0mMfncKc[1WetLAXiV7]U0AHB3/"nBr'kYZU_/3:joQ-*(OE.2,@L`K cM;WT3sF>(s3=-i`o!-XdtHROf@RQKdIh<+\b,GY!d$r.8ho5%KDtFok?`?bP6:T+D?(qj_=htP0r*[6B'WEt"m',f^<\`noMW!_e!c3Gq")i?spm/#Yp BAQ2jmc9G "]FA`L@8h2aSZ9X!Ym`fKQg%ViTALaF&-3%q/BE(s/%`A7q_lf8DJrfgT,'o_(dKBR7j=o'G2Y6"O`<-OCWTGRV/=f8HPB:d_/tg)@'" DjV?mI%[4fE^MtHE8eeH"h2pS./3#@Rt0%T"-"X'aLPgmk&1WC7^$e,Sq%Zm;%.+=c)2MMg2@k1JfBNFJO20-$D=@abC+kKf5`\-g9L:tll4(mq\6X9jH(?dUVK#t>9J]H0?EtAO&:BW_pV(mCX1qoP1&ArT[oU_NWphc14NNs60UO9]gbTH` >n!IH%IO*(FaeHm-ePb(>t'beip%>6(FHP-)+JGN`C>D4ffmfcYsWcmJXBpOVON4``0Q SHQG?@!cW/hoZ ']MH'^0T!5"(i)h]Y\(9FTfJV:4Q&ac[Z*f:,@(pL'T@0:ooO73t*S.S R?@3gc+=bcCM%M[$P:K<;o$J='rX9Sr h(fI^fR\'E/#][^@Y$OZBe;-88NUnS._L,N\$5cs atk#T3A$ffIU;''(A$%rrsBGD;)f.Ar(>3/\BQr\Tp@LX^_71-\)@q"5U+dG\m45Z[RWI,RY]=UE=nSh4\4*(F4K?&Y-XSFAP-irK]<">lYQ-?o.j_N5>#L:^aaA?%Vn8VQ3'@m*sF#2Cr^CNV!f"S_WMCICaMih:_?p]%MLTPB6C3o^&L!<13?gm_qY)o9;2hGRSJoD;Dt-#Yn#e;<1=OL7LD74Srmp5&UAq(t2;"bQ/\5n.@$kZ5VR*(Pd -Uq%T`9j[S4J@*g14fA-LLted[D.m7f?"#0olA3Q8%m4KIoI("&Ks,.d@5.m%7S.D*M"XSC<iUQRKUHa%e%8LWNS#]I6]](9""8pJL'd'ba\l%9Rcq%n^hZ6'=pF7^rYsoBnGcg_T+MFV<k0-h'*YjT[-#DfD/L`6gqp<4M^M?<`Dt9NU^!=UXV*Y7'P=jA.:-^ _hP5oYKAgO/-VA];+43=cTaOg"(G`@$6M-J*C2.jPo9)Z%IOq7K'5",U#XK(WTc:D*s0oSK%(pEl.Do3Qof+P9A"Gs &o-20FR_;G3Ab:KV!q>'JBX,2'^>->L`,,8odNI"\<&PEk%E99kZB'#\R:.bgbgUj5**>=NE ok7F-:0.&DXk1Y_h(3SI4ki"GTe@%(rc=t4>jk#o!@rTC97+bJtVnc^[*tVpW*6NIZC* ;kAf*))ghWh+T`47Y^6h?s<P*0ds(h*"8Cd$ ()W&_95S)U9>t\MZHTgTBZ01;3;TQIMbjC\PA]r0$D8Oj3>n=O ?N\)E e>a@\+AS77?%N1K[qjLVAgob#IUGIFa8lQ%tCBIYXCjf?iH.5]j5+*!k&DsG_E_H+Z"(PJ$+l'PRmA XO>5BpmN(MqiNP*A,@?9Wi44tbi4'0'W55LNmM2AZfU;DGU^l,g-XENS,rh"ZU$E3\=S&DAEm9r;iK^N-]cF?I>n*ZLbA`2<5[7KBDLZlA1r1%ls9R;oNZJ.9R,]eQCnhBnF)bUL&L.?RYSbFONNqAka]OVF*#biD75m(&]@k6d5%dNiCs#NN=e\=^itmKL*UX )q\j=hb'J=.s`QV2hFD1K r(oZ(lmdXR7kK9`j?MN7,ghZ`r0N:_>A Z#kS(V*C Y7bAeYGTpK%;tl6P!>Q1W!SKT\FS8hq4MV*:leK^H;N>pFkI0)F9K7MZ1Jpi8Mp2T\_(sjO!b-Eq2r1:[4%3V%gC)pmecS,cs0GP(/(l?X260AgGL9:&)hbAUX0q7Wl!Vk9$D3.X8#,COLJ^a"B.KbmT.*%eJLl'HM'i81@)>>qfq"HJ4IZ*e[&CF_FgnM]WT%;Y.H2br/ir>G-]="3TJ]/Z9&1i5a_DArr$d6ST?+ 606gF.trN;AQg?2TXfUmfNE0P*Tt&AGpK"*,,]\k':dVcTY:GPXXW=6\cf>C$F@-KJ$B6n2ZR6U tYkl-'1D\A<l=2E9TBINsjp1(&tsc>Z $"%O+e(QUcGiXAO8JtZ8 !K-O]NEbc&R*G)_:D^nfU7p->OA(Td05*?\`A#D1&$Z,L7 3Qh9i)b=L737;!*a8$%j?Snd3\tr>gd\5tXUWs$!aB*-67+&l*TL/`G;c:^\L j=pV5:[,pE`tKNIm:"r%`b&^61IJ)$2Af86;=AFkQ'4H<`L/S'X.3[?VXa7@WiOQl'oV?Eg"j;m4Zj@$][-.4Ak+3DqADc8+<9rZ+h/%:6+OQ=4-(^Om*s"6hnAW_3tb=?H5>"f5k$bD]a1ULOWdf7I$/j6YeaFq+5rrJXWkAGL!;Cq.P&KD@IJR1 ah[nI- kM"l5=bj 3O4F%P8s\M4T:#aZB 0"dgA.V3*9L[n s>F+RW35/TO<.5iX!P;X@OVeZC=p&]LO1P!aGRn\!MiYF>n`ORkFbOenKAD!FKg.RNAl2jiE t;,;,i#k]n;SD$c+1b9'j471C!/0I RFm?:h,Ac_Pl8orLp4&A@oUX65JFZ7,;?$ZF$c)!Li9Lh/bLr]gCRKA#U)ZiE>g?jIrAR-d^Jom7ON9Y?^kaokCpR'QhF8M86-4g<TF8\clNT =K?Y',qiqE&3F4,T VU8f`K57\j@!sO(Lbrm$c`GYK%Q$fn0P/,telXc->@[Bn!UB+l')=]A54'PjY3$-4870FO^0+/8_BDHd.2^4.`(/I.dOY98T0NA>)t^h;5*:+KJ-6#@`=B/t@hHR#p^m&k!;4K9B^4FMr &70R(ErANQ^7U 7E123;pZtT+72f69F>4;HDg`kAg<Pp0IBJU1]+cpM9Pl,Ae8X5Fo[Z9[r(hEd(>hLH@: slgm+_4Q@. =qXge<."NP!0A5]frD]s%/;TTUDfZ]*\p\c"HW$=&-#,MA_VE".&+o%3*P+O?E$oE>2o/&R.ce-ST6kE<U.G^PPZG#;,8:E?b<`3QWMa>!X6NOT5CtIc9D9\h&YbD%0WAPh@#3KK;UgB'XOp0SP9/6T"mA`>CaBeebX4eCKBWtOc"'HjS6[.*YMZ5'm'R)_88g?P.cEnRBb+C7q>Q@TVX]a-DfE,;Z4n[0ZV:TGQF4>cc\IeJAlhNJ3`m4A.4;fOtMI]E/1C,%>UrO,spXDX^7pZe/B5@='S7ChLD1DiY]U6"VJ3"pUPJC!`A"2Whb4]c:.]4B3"#O+Z*4*%aJ8BkP+7E/jDcH!naD+iDmS`3QS%OBM>Q'cZAaZ!a#Hh?A(=H%k!;]/:AnH5o&JrV8.sZ%c=S0)oA-lG[4_Y2TT/KW@:^gtt$eq?q]R?)ZEC`Y!^O&/k,I?A3:]<`2:As186Y0PPBfDm34gtctp$8@F;BVd(,4h4[QAY-tH!TA*nY []?mQMIe^R"jrNMqs*?KF$q*00tT.l7t0M9;S>]MOf=]62.RG`arrBH.`(ZP5&3POn%=,aSEW >Cb&Zq51r/^MqQeX!a4U`H2]$$4OhKag8jdpk-JALjcp8M^J7*ga7J0!jTBPa AfR1_1aD"4@CUe9) k#T(*3WG?j2%-m8$3>.A02XQ$(P3>IC7AL:kO$7kJ'pdWi]A-)tlA&3 9dh@ L-!oa0r%7fg4i<\TejfAKt?FVHV9b&3Kc;fmBi`TF9f'\Sqo-J%`F8,;-&i3=B+F+>qWglV;!\T52SeM0X^D7nYjm<@1i4]j/X2Sj[L[5-8]r*^h2_Ega6##!9Jpr`a%>+1RDg/9"G"@><97=!nW>cg,r=HP2j:8Z%bM,3)&^R+=dqhRmLgL*p%Qd4cDnTJA_\kT@E=_^t<3 TbBON/N4p+ohs=)8d0AT&[[GU6rQ)U=@AS3!O.:ae%$^a:eF$E-B*)NC+I]RMb(OP:DcGh$/kmKC^Fa*(aQUa%aIhe@fTj`SO3p2hf^cXp],Pr+?^N?qi7.+PdZ.Mc7gKP".^,^M^>)Tkg,15F*OZebWqLVtmjP_'tX "dJgUs^=('a99?t%3is^Xc=b?$+R.TVfX7LQ_4ZsSs* V<E%#6d69WI>:bQRrr<="DSFR;h[*=Aj4j:3:3:&n$LA'="tGLIqr>Ho4k0[/k;$_abW0=ne4`NlXo1!VN.sA'5'eZ&;%9kq)#s!IAfo(KD+?ds*nYSVcOrhn%PFM%hQ*Zh&ArDNHq3p7TS&Ans>Z:;@:a3:8-T#rQfUdad/nX&B/1%4SK\2H[]k(42sTnPa-om6ofNB52NMl('Wf\R;G!h^WjmtRS%`R's ?A^KUf<>E)aHs)mUo/U_-,1A(MS]C,0,3Hkk6QKWYOCBhMp"o.T/mi]3Xd8e9%296>X3>Kd):Fr41"T::Fg&<ht[WAFrshW4"bL+TmSsj."XRSW9gV:hBk&/'c.K_&G8tf.$o(W^'EjdR=m>k#S'JBX4p`d+5[V'T!rHTV!fbSRST$kr8^*s_4,n_HRXCOUb:Qh<:f.^A*6T@nb!eiPa$77Q;:-2lE=FC9"Qg<9>8API'1:-B=\_X=)8'UrRgU"'4>V7Jr9k+lPGT*tZ((i.OfYj_N\PPQHXA23G5pC6NgFAYJs0#+'Ha`1hVf/>td- ]8T[c:qm^IkKp1*!c1)m1lYmKj@V"GcI?^ss;ZJAk%SnNfbPPI^>t:Bh-BaWK.l>W!ChHrtKEZ>ee_\MC^\C6]<:C$]Aa=PnMq(l%LsV`b&A/?iCoX;oXsj2Eh-NEX_'"$p`1SsA+Y;@/U3R"4TmTtRS1PX2-N(p(tE%E[!f54H X:=RX]04.tMH>kd"_qmXao4"PhQN [)2E3X5^KFGUs^*6nbXPPB>`*m_X"bPRr_j09<9&MUXsHee&m=pR[d4; GIhr[^A-m5:MN 0BfKb"V.72m`$R[rbZAk)o r%KqQXP;kG6AS9oUk`rt#i\T4@'EhXWqDk)s2%VVKYrf]>lZf;4CrH&LMT-4_(AX"amL?UeerlB:f&+"ko?:K e4m2!=LI55i;jg,-;NXPU3gAhbO_7Ga$,1FG<)lKK27]2468]I9NKi>c"&B4E%Ga!qWcc>A0Rl\EtN!dkfkBM@.+dS^`+nEAiaE jP^7"k5do[g*R"eZ!NM1_oeq+?E95+SRZbZW#mq/-p#jL65sA[TfB+V_+8YpG%CjS/R=eX]F@hf-H8cARJP-s2/A'A[s%+% _d_roE_7!J] qm>F1&7,=@0c%0o6NGP%BA*Fc9@jmKL_"Y9PSG"'FJs#Ki+T'cSb2 8ZA?:kYUQ[UTY_Cl)%9.'YjB c%[-c0/h!S>fOFV`7pFcXEo$/.k^JA:XAPqg@\ ?tl A(;C,llcO%HbKGJiM7);(PK#*6"df'QK@7>%_ils n(J=\(=2mLPK4#@.k_RRKX8qAeoR%-'4(#cF!Aa9^kiF8gInAM@1J#cHN)D]eUSh%.U=4K#<:R;]ApDS!N/UAA[@KPPQG?j'-5HoMK"a"P+=6E\#a)\/'$XH:f9AK6lAPk=HH6)&a=,[L\[00iK8Jbgj-lqA2jX#fp^Vn+D"'fWg%pGM0L;eLW-]]k5a/fhh,#7`75hhR/a*L0;3pQ7P8$+le8YQ0$lGoObrc=N@fA`_m`^S-C-:e"!/GZ@"g2;(+*7AJ*K8E''4_Bh(K0;,)3, g't>enZq/"VbTGnJ.r`9Zm\P@MV2Pg6b82'$X5%C*ccs,o8>G'2Vnmrf%7- Y<^>TL#be(V*ALae<3r30r\^=a#^o!OA"@F9=CAgO^nUC+*_%b:VZ<0ka>XB#,t;4]S'Lf[3j)7,Yl=TrK KmJ1@%QebB.J7 ^F=g)"QP,LH>45bAF*l @Jh!ObUpj;;eH](mN#gAiYNW5VrcfCc6GV*aGnPh'S@0@0;K\it@r`lsn`hWXa!mQ"Km gtp-:^;>O-4kHE`*MrSq)F^0RI<8mBbo$=0e%;)YT&2+?(!jjaT=2Qh+nr=#078':9DA9m7 jH3gh5YM\]XBls%gibpM;bm(T)ResJ$LGs;W`!GNs7R387UL3@CoMX^,BaUT-Xaj'6$,30i/VlT08Ftl^R M>`ltK`/?.N,MLGN]?T:<Hl):)U/dG@X:Ap'k16(AM-KPd3]KQ%/=eGFLi`UUr\:?>A+JMa=C^?&(5GchU!AG]GlO<`(qinQg/2t7;E[Q4>8^(A[>$MNj4=/K;S53Kj1_[(7%aL$.t^XltDja#<0,.#b0lYG%$9SAALMIcSoa7Gl:`G#W)4\mH5"MH+WL7FF0EtR6K'.^0Qbbb6pkdB>]6/Fk#`MPG5BC,V6BfQA`gpEEs(*M?rl>-RI"'b=jEAtl9J5Fhr,BS?EN5#83F<").-s^i<G(pF/=BbrD.o;hgGmbSC"0Yog9B8i,??ddI#/FD(WZkI^?(G6,$2[nE?QF+THAUsc*SRE2QaA;Z&'d5QFW/F/K*HB]%VeNK6_'XQ>">GXVQC] 0cAL$p01/sK\ !gR23"/_nA g5\"'Q,(mW@hMd`;-S^A\d_d=PP2AP'VC48n=&[(jA\Y0DRiID>6$hAN@ M9=;=Do7=MipjH\DMefN/7Yt/h/e]AZr'6XQhPVL5b/.?Y;S6h-cMK`-Znal'^>.E>BSW"<*!)h]TgMVSBeV<-0X&olt*fk^3T1otA@N>Gb,Hm*"MY/%e5[j6g5PFUo+.qO$i_1=s8mf]I4dRSW:4da'CG%"H@m$<_cC>*#@V\k<CUit>TW6+6i1&Fqa5Kmd0LQH7[EV``MZnlDDoTjQfU[eXQ3RN=SF+pVc5o1Q:EH4gojn2$Eo&Mf3D._j(`fcM;'gQI>6Ec&qO%55jKt^'5AF=]$a".(A_Q(p_KhMeD(mJ2H)=gm$L"`ED1hb.FY`kR2>FcS6Wl4(7*=F9l,4`TKEB=(5Rr5"P ?h4$f.@p"gQO[C>n(gPR&l>gU/I;.PU1dF4DO?%^m?AM,aUCGaP@8_>ABJ>/jW)m4,'jUWTFga=LA9A6GnIr[*r9NDRPd,8\S%JV:b?8J"Af8(tf*6LS3^`_sh86/FZD0h'.OXjmoOOipn_5@6EhHgg3Em/k9Z>C< jP;[EN4iLRPa$\="`RLH/7NS?OA /kCX/:Kl6A[qZUrl]dgBfYB^WjFj[Ho&`9:s8a8ik/ ]d-=[6F[*>30 )c0"JQ&!n1pde8*2Ug?0"E>S_1+lL,eV_>16D%8iWW%?^\cbNC?hQ/mNla l;fbt_!NqG!!2rO\=pH  fs`.=XdqGr!AA)H7H0lsAhj;O[I*F^[T"Nj <,8'1F?U\': ;JB=E @L0B&&4E>k^=oC;(ARWB>RME.iU,nrF G_U-IM!MjZC:5h4?tfT_GFe??DS07>U0RJ(r6&RtPR]GSi ` L!aebX\<#;-L9ZbAR3f\cs0aXj=/I(57(P27:)?i,%[9WC##2I@l/MNB Tq4g^@PX"f1R3`)c(G?AWG9]UUE\G9&s&05dOAJt"nmF7I0rTe\U"eUm;H&]Nb*J ;k2?fLYAetX7.FH;qhPO34e;dq?_6 4W\pQ[-b0]q]f@8rSkAhb,[0)N3t\CM$%I]T@J&1McJ*QQbK_%:tH`2AAGo/nAN_Jms5N<P>f2Y0Qs3k`<9p5Lm/C1[N#OGK?42e(7Zg>J%"jT"LE]pJ&fMAA,Up+Jogd#?A+HI[8m75=C5/g.SpQC3bkVMlA-ne\9Z%^Mb:G_*P>s9*?l'NU_OTLIQ3lgp$`T-AhF?Q8W,]t;j?m^1"C0%L`]9l`WA%A?AEhEqagE]l*c6;AK7HBsZ!O ]!BSebksPB,p7T@Q>5CIsRh[:1Z-*(g,s\I8o;ZFbE[R)QO>&.1fXW;XUG#7,ibDMQh$QA#,cO\pa&G]c*"2!rZ//k0Z':#"mt&!)[(./8VSA\X8%teD@itpI6 8lQ/1^_]a cKtH6o%*C=AOC*G+Zh,7K,);9iVc?bm:VAHT?/_*U\mAfAm)oGOA2q!6!QJi4"`hsjR36p4K+LA'pt[J;1tEZTs!h\V>G<,pVpA0B0"D&ckk,QCRX]K2]*BU>8![4U:o7K#F3$H4mI"t?r=%3rj7_I._+CBYa]V_"% n%9cN\)+FH2^cl3mE\=`)OLeEKs0AFIFBlGtd> kT`s4Ql9A@m54)'DpL5J:Qc3:gK/`>1AfWHcA(+6e>P&]9'/0U`(NpFd)A$MIFPM'ansaARG*TH$dHp@@j$&T+]A75M7)+gbBDI]ACmr"E8kDqA$JqXpEtH3Va?QOY&!A_=/=7p.&cG5_K8Z?+H$rdV5p?3ATY+.ea+k[8-Q;]!V2\AAc5g24:,^MW?hc= 7tAeqM='\hjSp.?p:O2BF8$TkH>#=6:Ddd9,RDqm61SIQ(+_d4">YB9et:P[4s>6>ZYeL*E415.\=PJ;eWJ+kJ3':`s^H,/7:iY1=Ek5UK^8CnXV[@^ dEACT^^;0^H\GUFTa@oRb-LEcKo33\Zl]0*`lWW4:"SbaDkO5)"+3X_,_!J5c*Qfb%X#Va^6oV_/V^[%IVlYI>r)@,*D%dY;U+B[`\L&J/XBhMg9CrTl7FrJBJ_$sE**8i2ae:E68aGQVX+Om^q\GM6q2F[m[[B6'h"lQ.Xejf,5`H%[Rh Dhg59IPkQg[@UG6l->.YJ0PchkF.jU69ia*L]NBA^MLliPJO*UI&AZNDf%qX?5UXW_1:AOFkC$I$Q6/"RMZ?' K;#b[7IZA:;)'mn9oAc'1"'QM?#!IfT!tq+<\A-51sS^s97deem-.JT]q)7S`(N]6,,j#8G8TCC/M6'tjhLIs!N?7k`F5jsXQ/^YV<1l,#![c`mT6F',B4 ZRb:=m>!Fq;jfLX:;9%tQI]&NDA7U1a8k=)"AY5I-tPH#$tCOEC,->'se."W%R"\hAiVcnMr[[;,RP8#+g;.1TYIEK`&NRt^MoF7f+?>8`k 4Vckq,7.AJ*%U5nZ&1<8B6d 7U#aK^NeRQbBDWDhSD!?q ;AH0#[b/M$0Stjd?p[*rM-PR8I=rT,U(/E;gP/\@Q$ZO.ec:)bfK^189OANN'iYO=PEe!99Gek=2BAq\ctHAfK"A9B/Qr#"=YSY$N$;OE"Q*Hs<;N_OkJ>U:(BSS[NALge&RO5^]XqCJqGoq5MX)b,eBV,6i]Q)a.GcMpK#E8ZEALQj`VT"nA_VCjINfki8V1#KOMYVs@6*$nt". s^KA(4B-A%>H]`[Z732#CRNFEZX0*XmWcr`V$/#DNc(a. N 9NY&-i!D&]ET:/pB1AFsBQZ0>.U!7f4pAn_rgO8VDWY7ThT)H&3C5:T%@AqIK50Bn2:f' oG]8^$Q7VQ^N=TQPrEm)^IIbDB\oA;AXk&F;*rPl=CM6-5fB(ZJ>#l[+(=0[HXjC='iaOHfO"^BFjN7YB'o[,p:Ei%HM7&kZp9"403BHU#?GPN m+r\2j`,T*XL-*d LabS7 Ke. AtPe+9h5A:rBbLDU&MYk,Qg.V;l30V@jM(ZsZ1.Ic2A[oYE/Hl`8'1s.AOC$* 0q(^1At6LA.7Pb1*'ElHDN"CZknM&pK@+MG;2r8SCWF3g'YRb"!CcY!+$rc]Fs3W,jO'dFE_7Bs;W2`SK&qLYo=?N<A%<VD!nAo[Hj?bAf_A*Af*PpIfE4Qo*9RH)RKTI-gdD6/Rl:G&gGG.\t"DeGGm`.7oJ?#?3>8q8<`CE$>p0h0pk&E8!17`N7?XmSEZ4jA[5]&99$PaNUH(-biCJc.IGrEP*0"Y;J%/Vm*A`mmT2KN)iS%BG 64Qk?@P/a-Oa6f5@0W4*I>"eM`q>X)_-L[\mmm9Zqbd+#rYi&%@\doT:s^nMTa5]].d?< _,r"D(E5HYdk4GdYYbN]h%QZDi7]oc+l&b`Ld>o;]40]V"V.FtPF`(E`nE.]c)=NfAN0<&+cRhi?>[e1/i9m4=RM&<;GW:VYO,$8gb.M;4>_7<+DM+.9/C_[F`DC8iQ@p;:ji-n94iBF-D8o'pO%9%ANb>4($nEgT@k2bGKXUNp=V"Y!ZKfPr3BjT&cOLLA!/Ne`o^+W02Hl3J]_9q)AEqE)MdYf;1tQoA#N`jb"*A2FiY!-E#Y(OArJI+8?#$?Jre6gmP=R#bc>m"/[U0N+l# k.5IN%FrnJ`qIerjU(:D/\ZF5l4`3qYppHj?q9A9M rVrM5M!ng9>Z .$^2Fs Y:tr/AgR_]^6^FRi+8#kss[PBAcW#KGe@m8?PVRq1A#nkFNiT`_QfJtM'M-sBDdDS*D9b57SBX/e4hR+b45<5<+X6i22k3LP`.X1:gOVH>#mjAcq-jU&f$30$II3Jpl76qKf42O7t,s_%NRVQhmQ2Zfh/?bX!S+f6:A2O1OLM4-o+KJrA1d>2B*\F@o2g25^LYfP>r,!gB.DbCs>dfAn?p:LZ2V2o+&$XaGhB&MBZhZUH)oXgD6:pn*(0j6K=rH;6??\Qn7Qd-XmqlA.$YE]`54cOA3(["9-*\#t&jd,6eaDA6"D,\2D8"mCM9$S*!YB8A! \<1P9MVXgVjp$V*ELGEY*>2%EXTrDO]^.9m:mmh^nV#,o5)$2.!["@N5PF`:(ljL[^ES^"1V5g,*%\UfYJAlssgLlT-+b%kqJ hifHUKKTc1`hB&3@Xf/Sj;((5HM%j hd-i>k\4(d\@8t1gY!Q2SF>t*O&Z[?QYdoI_K%NG3"-dLTco&-,A\LY9s8SX(K_S86Q[I E0*;!HU-)Nr* d1Dhll_G_O[c6^"3U_6^`O#]8.6lF[1AZ=8&lF-TSp9N^9Cm'rR_dfblH%KZlFl!Q1ZM]`oBi*YA>"dJSO2AU[5/R+`-QI+cl(08btkfVY^$)TL'7W`#,[*Xg%.=sgDW:D-$!97NarD.k"Ya@XWOA:Bjb<B%6I4p7cb6q(*D]0+\Fk%g-2Jfif1pkcs(!ahc.+EQE_e"?=H<`[Tk<ts^=K4bX;5lMB.D%jIGc6AHBc\gUP#:f!89g-%ato` h>TT;Ne>bo=?cSkQ/ n^lSUMn6k^+;@]n`0&"V9tqlOi>9ZCjNr#bof6(12\^@fEqP?F3U!W;6D%WUd[>.SQN@,*j:g;g.hL==7YMI4$[g\8 cW<.:8gQgI$n$=+kT F 0`"e+-mp9Nk52!"srFN-hh9ft2 =[q7YDdknBcb(_??0o] K\+35LFQ+SKUl*f^8G`b1 R4NKb\4Rfj4HN8V7>"Fp-9t`<R*H-*O^2QTEh6ScZ#oB AnS(7Y/40ohoYI`+!Q[2(s5aSOOQ;0gA5-M_SEF=0O/4FE\!C")m:SC"]@^6=%6,BPGNM2mc'Qf\8<=.sKAM)Cqp="[(7`U(QL*+JjMnVo-d-J"'0,gWsff6[3/<;=j@^Sp? 47p3P<&HU;2G0;G[QhJV.(m8Bi!DA&GXQdZ4>kr9$Q?+%4ho=WMFE&B4Q5=AT6Yr9%?[4]&6<elV0,,p[GMo.1o(gj#>W>]m6g:`_DC`B3!kD\-/FO_5/iI+5Ls[p2A_b,8g_aXt^g7ST!"U\a&AfN=UF CG^X7I^5/VL&T7pD]A:E0PQg;0R\Hg m&jW:= ;tQ.A6=F=%:02SI"9 ^EZg11\e0=2eF^/ZSZ#h&bje9%.H4q@'p4*YrB4+ .ZbA-CdN\30^(JNk6cKJ\Y"EKH+STS;Z:UVSA1mtd MXd>*hfa'(A]?p3'?ZNC4p82 fn*eZLC8Kp:)0@mIj2)";9SeqtBB^+42=Nd3Gr^Vns3<-"+WF%7$ge94WS"+%[;^#8Ug%R&spIBgUX/HJ(^K@BJTeFYGI:jdSNX1Qo&a.OgOt70s])D ?S`\<#-[S[W"aQkA0m,FaN+4:_%F +m)a%BHkXB@Y61/0 YsS2>.NlnYZm3&n:rQEVZ'h<4^/M[@$qaXM#X(O7j/_iekr,*7M#><$o:f-3D:mUO2gTK82A5,a.IP&ScI+tIdM$)E%T]WnEooPL&$JqoPY fb^D^&.?\.c:_tm0AE+MB_B.'pnltbInSb[.o8!2)I(XA3_+a?#DA4o[k7]2%,B]I['0eoZ]t,,sXd?D+AGN@-9c/2Q9'p(e:,hh=5JZjZMg6\_.n$#mr9f[-A^kY%@s(@Z [8m24'C!,q)=9*Wk$,,,W:#\?HmrlG];sRATTY!29P`MR3B0Di&b+_h_,jrA0:E54>js>bs%8).Al9_(?6Zn)JLa]S9JIApaomLeo0$sDEe0V0,WVe(WR>Gb5#^J$n+7_c=V$:l([4G*eX=2b3pJ<*j.l='>A5OhP\;D1nY%91q)!>*^J0G&1&k#*3Spm^]3r.rHZEki),`@4CI,2>mJ"QXYP&k^nI4K8:G/2Lc!36TC$%:0 AAgP_D']j.)sQ =80_XNqYt?E#S59#CR`B]rG';Q#tj^LJi'SQ&od9WnN]CrNf&h?n1lMD[nHA>3FV%=Jrh\kj'$&$"YrQ0k$2I:8#.!07cL1#Y8a)K[r:eAXSOJK/aW8WAd8Xd>hWLfrDk_BPN XW44E]h:#ai*4)k%*638_nj^;grgpV&H%"4Wti8lG"J@>J+M)#hdtZ0E7^?7`PacX48dPYEk<#TPH)$_Q#,d8qi`IA$!ZmYB/rXIS];mFSI6VUAr`om't&oa2g`th1F]?4\G,o%>t3b:4UgqbtAqHbS$#cD8I8k([]Me3Gm@)Fq\H"$V(s1h?>_^Vc;a9]kg+5\)^+MjVj07]=JY6mlk9qZ_:g+Jre%+T fQ.cJ9TK%YG,71(:kV74(Yir%i$,`g#?sM2Q1a<]VZ07FX/A=qb[?1KH!\nSq:kLTXVBmW?WY"c])sTX<\6rGL3FiRU3.sB<60=/,h's3N=>qs5Jit;O?nEam,7757l=6LA-.mGbk3:q]=#oC8S_$c>mGLEio1K^'/h1.=9pBB!9a(-&VgPglM A8c14j1O/'8M\M3UoBUccC8roZbLOep$ND=bjQ(2%.1C"M$L?m$3W\n6K4&7S!g !4,`pEJ4F5jAY$E),dU&jUiiC4><&!rs<)#?JoWcc6IY0qtb9%NF\/p89FWK>WH.Jq&HTdgddl3*T%N]0p !;"2GWLf[O9KWhs(h@Ac[oj5t@$P2M.:A>PfFi;3*Pq?%MX0Lt)hLh5 N?D!si%hn_Btp2Qagn>T\hU4gbMiqO1.'gaJ"ioTbn_T+M%hgGPmU$<0Q*4rnt3bqR3)d3kTnN0m\;a^W<#@MtdscIR'HZjl)01*Zae(Viob5FC?O[#UKK^Z']$CjtT8B[O/p)h4Jm`k=2c*B=R$6EX*8I*[jgd,>)sp:AT\fAZL?G7!fBimJ6+:O(j/4o+CX A")c4B:8=Qk1V-WJ.kDOYK8th[#Rmk&=f4c_f-R#K*?U9%,pNKDeL+SHmbcL(6]Ti<S4;i5NKcJ2&lm$C%?QgT141 iPob=k&RYraoEj [n_gdRDGnc^qW2srXg"s")HY AAD_97N+XYql<$@6]1?Ksb@$='?!RMK;IAHH_k R`lWbJP\B;XAH%gWptjHrN['tc6h!$b@ l,?-JU3M\WNQ/M\Z.k"c3m#R@]gP ,WAa/Aj=JCg2egdf cA`_K1nrn40JM+[OFk:2.3J5A<71USti8Hg*%TtdXPj4"RH9m]K?kR<pcZtGHA8ID/I8fRBQj]kB&\mU25<"DTp#G.1N?54i4bX;(kH17'r[7]VUrNnnN! H$&;>I#oD*&2EKF5.44;Y1j0[08Mp[n$+/eg;Xs\sfm\YU+.XcP>?sGfKd3QqC\JRS]ndgoko$'JYSq_/QDfAQK?9fT2BW83L*1E8Hf%"@(]Q Q)2=g47THjh*p(_#o29^/g7`/'==eRQ0[Af0`?&^D]DM\!?:+J X2bG>AiJL#kjd0_1"IB%)P'5o2Vb!s`6ASOobS=GadjR1q:MJAAdtIV:lL8eXF4K;^\iS;f>5fF!TD.tGSJo9qp,]!)YsSn3VsiUtqRq!01`QG he7)E-sBRXgM67Y%rACGSM1EXn\R7$7I__*kr0A8"3F?17i%4?@(lQNCm)acGB;G3I+i3rO)+2"T`J>A8I_B=*Q2:Qk-mdJL^3]8Fj0t0COl^Ln )YtroDj?J_cJ*%".F=Wh$=tO-9p#="/Hr3n<`b)03;iOXGGdDNAEFA/s40;X@9jrk4=Y>7^V4s4e/]-2%cL`/%H.#C/66h0aNi8W+6BPLi![ n_OcGFibhZ1c=sO^BRO8JrpE8n\15]l3;9Ra?;2X;c=dTZAkjJ`sc@SIAkoBIl$QaJS&,o"B#)(ec*[ehJ&?ksoSn0RGC#ad\@WCe,&pDS0fmJ`KE.iod_8cQYgO6p'-G4?"\-5`_bjs2V)t)3-Cf:SqBh+r_Sl[8FJ+sl:NIOL*E)/P0 9\H)Z<$c+2fk,<)$+=5UK 3_>]QWK,b3X_k9EI2Zn1.OAJ_+Kjc:.>iLGEUFV#U;DX";n!SG16@3fcP?[6JMlPs"-j0J/:i+1m":VsTss7E-M\Q(VR!;R3#SHSZl%JM Y[@,-(n /;"h]WIIPk+ UMD1P]gobmSKsdM.J4&#P3M9:ErT8%A/A+><`oO<"0=LK;c2Md""n]o_TbOoESkPN>Fr1PdB1j\?5*.V,)RAJWW`@csFaSWE>cT^PO3EL(=K%]=3ld;$fISk^0@40)o,P"W__$Z&Mhg6=.RDj?hB`''9""+8jeI5,O:s4.[ODpEbr7cL8YA#*0l[0orYp?I]ld!98YXkL)XQTDp:?Q"b<(gY-L*I#f,]4l_PO$&o29Jh3)5Bo^FLs`mbH[F@kNNAnIR:aR.E7 !2U9\1RiE+ml!J?ZTWK88Y=gAoqE$[iG^2&#SPp!+_)iRrjUBm&`!e@]b.d^iP2eiVIQgQSWJa]2Ik^mQMPJDO?q?7"ONnK*4$n*jG"/pK*bUBHWoM#\YQ1D1a[t3_s8N"$[!)'ifH Z.DAaiX7e_Ub`\l2a!Jnk0'!Tl]1OpfsO]jdcX?PbXMN4#_DE=,V<]kWX\ba6#V:GRH,*>BYKS!0ome=EtQ^Q^#[kW]&%e5bkeSY:p&'=J+EW=iRQl%3# Ar36ir:$M0tNsm3O;i0LSj,@JcK@KQ5F$#?0;p N817&,m^s7aMrdbsCph_d\pEqLjrJ$\73G`Z_janham:U)L\f1O;^-= rS0pMF57Y-fXA$,-rp01<PLIpiQ;h``1rlTF.)t#Cf8*:Nb<#kTYfM..W&r<`pa>>)B?%3H`VmpcV^>TXRi9]mbnb5Z7mR=H_CbK[:aAbaNpJ2n\M40n>nOe' XG/Wk!-'+MU"d-:?kQYh0it<#n):+ Q+km?m1kCs,^Ui2\WlA*#ODMPfKHEG]("XQR)?Ohc4YPr?t?_>aP>TFgo)c>`Q;jokC1t=Qq%#&=\6kp/sA8+"MrD>apNL%`Y@; ZLsPb4_"FkgoQ8*kNfU(l[8$= "er0G1Fd'B:AZfAlo$@$O\Gmnjm$P$=f.Y5Cep(jc1\:5@?9pnn9MmqSoN&WQ.L!5FsR 3Wa#E!7_fD+mq?OK%#=JUaH0)BE&;]Bs780&ptA YMLt_ptb\8f)/AM of6QC?#hmUEem4MR"IE]0:CT]s5o[OZ$soO!:7I+!LAeCGH&?00pMA/Et)ip8&[%@Pa&^?a'F,*DEe:=i9)UlD] OH@+55;U_%VAPCQkVGk5;7' +4^W.=OP2SEB@?(.Bk)ii:+&^LB9cKgj8Btg8b@=B5K5idP;n%C;N)*:^'H_9aHLmU":r&d Ff_OWB5/g;M4L@X:D/2JNE0dAj"Ceg-WQ]*7I:D?BW+#?_FoSUs*9hCUWe`lK9P^fP KGGI%)"sNAQG-Xr:opbQ7IO3^#GY\Xs@+:0qKBI2+isSbG+W7O8dm%7hbllcY sA(d]Q:io--%h*4Ge$cAgr`6bh0Z8siL`>Kb=BO_*&ld;k%B+5d@AlW_DBI" <':R#Qci-7Mis#?=D#9S5^jn]EHXgp*H_HALM4!&L)N.IKDrXkQbNTYV)LaJot?O6htE%^OE+mIrGUKKGXL:R7Ji:g\UT(*dMpVf\:a0co7H2"6qUnb0o=.B3rI:@pKXMA+_UHaMp^>*>Rmt9m]La!GGAP%0,"%MEF\JXr<%n^OH!c_BdM?NOq[DKqdBL_WC'$D`\qa["]D'c_[AB9Q\AO]c4ad7P-_U"paLAQ#L"_"\-U5b4HnsjOsV8ARl4fi&q=q.(JO:iVZ!8sle$0D&_Y'dG/oO>\R>t4-?kUmH2- =N(;="ShBU9hGEVK P'b/T4-9:`'`cT2'_jTU(,)`p"=@)8"qg4C2hh"A*'3nJJ0]V*89-4t[SPOrkbN?KEJ&#4k3pUV=irI&8gAt]`4iM`r>A`3LiIA'E`'V<^!3mRn$sA*Ci.ahto%Nd8rn*gast/>8)GANspk69PoA5G&>;:9!,SO"0OMa8r`Vbl9B+M>!>1!f"+:9-ctYqdg1fW0d(_#/te4N/b%*DZ%b1OU9sr)G9Z9eGT*aMKiTGY65&8*N35siCZ=:W1GRK7HmAXCUF*_`S4g 6Y43V>rf:rAEV<0[/,UZ\q5?E20A_OZ25!9T!@5 lm4S"[NjK lC:[(P?V/if]#;Ie^k7gdO$mTDH.m4[5>YIi$hgA#*!]k\rO1U5"J`$N1''Y(Kjdj>Za8.12gsSMk)XY99k8_f1GYUFfn!--Z'0I$hLUKQA_t@W@Un%C;NrqX;@%M"DZ(ZV3UB'B<#Y@,$.OZaKAsmQb]^Qep+OCC:Tj-.W?P`Naoo\W&9T2IL$BH\*W_%Oo:G=Jlr:fiW+S^PhWmSog;i&lO0A09jhl69Fb_,Ghn5TP^4Uh$i"%;Fa)P;>TPj;W#r\%=:H\q`*A)/EZ=eZ Y?'E75_`*pL6)H6#ed&3\r:Ug1t*E eT-_$IOsA8!#$b5m$(O$bO$(6kWG@\Y5jl4R-98lt\Y\[tA)IJ a`ALi%)Q*%j,!tWYi3[oSc+HO6oZ>;a>BH&[@=kh(g)?1%s36gf2;7DcC\9)n/([6BQIOB8UFV;K2Ad%8E+6MgNeCff4G3?cFN?-_joN,$<=X+m%YsA;OU8%?/.Ub$fFtQ:(AN9m70K2XEL%[XA-L0Q)>4(OIWAp]qO[cqL>N9&X&qk]]&)?r&UGZPQfj4["I,1Z#QPq\p%_J 2b'nn@p[<1M9K@Tc!<3D,ESNOYoK<+gV\<(ADKc#Z+:MJs8hj_=ae/2m5S5.9<#$hbTNo"^G6=]e&2J3F]$=hS;\Q"]Akt4hj+MlcfdCWL64MR@-^oj"HY=,FeRtbD\[S0P:fo 0R3O t"*#k#&aq.5bbOf8Lfq\f^=[6AN)&oXctr\mNAJ.dt\F7a>GV pnj2+.Br\&:0:_S+Xr7IQ`bU?Vf[:asH.!W6`<_(?BUIGe014HDKZnIDsY/K6`hq1jA["gY^DH02R7#cXmWYh!s^_ A?@E44Z.cEr*b;cgY4.FRT%28's"b/@6,7-c1.kHnb2$ZjHd'F#E-ir?g/Zf\_#AdeSl#0YD4C##4Gj>$D#dbF9;n/Q)a&cNlM;]&=Yk6k(DQk(=4@'RNh+=*e+kj1AcpC%N8=r2;G+<So 63NJON+Q*aX-+)PL!0%k(:j@.5n(/)2o][O]45X8-Ai_NQISKY$(&r!3:5MM6e"8tED@6FADKQP+JB!oFsAZ@D"39`glmmmR:UW@'8"[QH/g4tr'Uep[+Hg$l*,8,ZLn)s#I(3WPLa.1j(3\_DKW!\BIj#+1N[GAk'KZl0f#(cc=)?9Xc^FG*h[516XRZ3-bpie-0>$=9,4J$0XL!6D0)'Ob"dgmP[20BtQp>aB7D+-B\%4P%\_9Uc:bimEB4od&b!@7k@V\UXltEis6.R,&'; U(]P>&XCp-;XQ\-cU5]9&n)qKZpfC0jEA^++9MA@%LEqS/7Es`Jco=Kf@,Xi.4_p-j+=5eqP\C#qp'rKebkWK6ij!b?V=4-dr#dgXF`9qYWA.nsn)Cf1/0Ag;VC<m6E*i )_)+X:Er\=dg$;L8m +WECs%3=O[+hH'h"Q>>e>E%m27a1"Q.#ng['MR+o;03mp_%#9QlAGKak/A/"Cf+5,Ic)+!*IA,h&jG9(A8"[YMVMCO6m)? V/hN]_c1BkFTF3Sso7pGQ19;m>iCqXEr8:Z@6!eiepA.8K^h2_?Q5@r_8H.5)*d_gH;41/__#gnT8%KE+dqqV cpKtJIF C9^Maq*,]P=Ct/Z-c&E^;M%rlA1"t8Ji42gR\c*EoR)J9.6?e3]_^G+K$:)[6!Rn>9\;O7(`8)jBj[+4>AH*Ei@fUD^A;gbla\d7MaQtH#Q"`qF:"04oiKV=^Q?PEI%9eq$7"-2pMH3<\X5L5LfhiojbbZWd?#7m4VESC&=K=5,6Zje@e(58Tl?mmh;Y)T%EPk1r/`H4j%.\p0s%X!Lp2m:L$7KO:B4F/qi0[Wp!O_lO$^*k-lY@QfIDV)sWY*5aD.&ctt)=l-s-l4KTHGR]FM?g?P3s"o2[lh[/Y_!K3gIUTiKfQ5^!pX`md#$hL*/S3=hVT/B(P^%8&l7l"'hprAqWCl]c[O=.2#8oJc#A4]F:%\_0K,>1MUd4=;I9k2/Dg.Fo3AJ\q"JZs%XdL7UXGPNmSO![L7acm_XG3cLP886lr]p0N]dI99IKZDEHU9:oMAj&Q/NH+3,28S`g<>RDo\CtZsGaF.m&d,H>*aA`l/.q6d3T3[r(Zi_EoVf?q"UfN\;S7n,Fm4es"OkbE3X71]T tMn(/iQEP>EBM'M@8pa2f`>@VODBO&66T>.3F;^2P?7B%!V%R3#1n$>a,PC5.s'me%T$igaenhZ/';-o&YA+7g]'?9R0 HP)q`g&.N"$%3a0d^B01.p*oAV*A#_9D2iY.Y:n#kT7N?XMp%6(HC@??ABt^H$%ABY(nZ!<"'Y#!$qC9>mr9/3fdl,8rl[ rD_fBHJ8?oKsd\3hbU7*dB7g:RHIg5lO(/Q?m1&Pjh#B_^i?ZC!3+W6O/PE$ZKKbnVHed4A9aePnRZ4_X02CShsUb`4W7CK4iB0,!2iE2(1 gHgQ(JAAn25(1T/g8d*I+*lY5YG?:.0j[5iUAjmA5>\U"&Y%>A47N8,M\)4B(iobO%XGHK^Sp$:o,BtCTsOp?%cnFK4Z'D-f'4&g;5r>GB1)HApnC?DOCYj*eF]N]1Grg[3+LTKZEj*3S,d]MUsrX+U>EEDJ"%K8lPT\hWM\VDa# 2m&VY&SMB)L2Ot0>2P)Mt-j,UYn"ei>WE%g30n*I@@Y@L.P/'&t">8Cp1',b4*h0pXQ-TQ[_!m>P&>H,Z8V;-[OMTS.:O\+0ipF%P3m]#k?%IJADme'c<9Li(0rHN76C&pg1kA7!G-,.+83dAE*MN1e57FCNkkN0Y"J69C\k_88)+NC`Al_o[G?XQ1VAiMS!0.]*39J&P^+:D"4VUN)A\Fg-0TpC6j))C2\>;/gP%;C_%NTk^Q^2EJ7Pod8Ia/758r)aF!V'i%Kb)MGGg-Zd#.HHc6^h/^2nE #WQDEKkJmP/7AE'pT?RMRN(>?jId//^M8\D5A-rDDNqn9m=Ok^%CSZ1V^6SZ<9=Wa?B_Q9>lJ#isoZ5-aS-BOdILmhWf*cih9fqn4n)/9V-le Uo-'=@Y%>p1qcQPPM63TP^nQ iZpQM;6kfIl&o[6_MWA$I3*V&nS.tt',OLKtnrCS7Lf.'p Gb1W3RJ[V]7^e8UV_T)_d\/d f+`a6t&dTjV,AC*c1E\[f(FM?B4[3IAWIH]=K;n&rK5_Ts7.T->+;2QEL^^Of`[mY3\Gmo)kRD?`hFU:XkOL."K:a)<-qK+e3^`32^7^Ah>-V.?]07A&m['DG7SslHD97<>@rPA^$fE;st ;UK1]8)<,qSAOS(jtr!sh&0MC0Bp8:dMq)7d<G;mJ&to"t"g;%)M'2dPe!)*2^mE-^AZK#Q&d!.R(LJW.^Q43d9e[O(^-G$oJAJL2%^4p>7tAO< &$=)]3r"#,XiA8T49/[C5?md_+Z9do<;Lb8s&4U5_PaJtN.,jVn^P$)<'q8QE.8V=r90QcNm@q%\kAIN!E^kCF*B0+'qMf'2>Ah(/^IkHc]fa"`JAS^$$fRX&o813E;hm'U-CS?LR54dTU82 %'^_MsNOMghCH'tQci%$WPfA,Tjkob\\,5=qAQ#&*#,h`.jDlqi&qXS#e%94D_Tfl&^R=:0he\FO!!ZLX!=d&,8oK64Ab*rT=9IQ.lHJ-gPb\-K'njG7W$`moQnl'UsIlA7Y>h3[$.50@m\UFFAbKPekPsUg2?A0*@-cRT=mP7TDER0\1gj+WAQ`i\Ts3Z*c1?;jqQ"CQ?^L4=;./Wdf[`cEsFdr6=0QD a18&gs"AW7"nh$AH08?M:NkAGRYL=q_6".6[2Q14nKtMpP'C2I^8/OR!JfrU+'#q[*O3M4L986/%E< Ao8'5X8 O[&@L._>$ZYe1PPY9-7C2# =YUqm+;/5p2_Ann]N-lL*l:tX6AjBiDc`e%!g4;SNaV)>99N!?(KPQ0Q:,]qL>;,.`EUo<&a$=PpGhXOm)t _&;8#HfSRMR? />clW,HkdXYVdjr`:9k=<[WZ7EJ^2l$\=`lM%+_bAnd[?9>jn_n8RL6kpI=kCj6Qg_!6$;,27AAe#bV>$3gXJXD`>G&VB$#H9A lhGF-[4.2?-+;VV02.1c%2Ki3;W[I2>qa0J4WM`K$;[X73`flB,t;e6GRh)NXkqRt*Z>f$fN%_o&6T@0QjL+8R1O)m?!>YI^K3tWc95Y\;5S*9?Qj>]h._Zs^EQTJk;A?YA^Q,c81pA2Kb C<*dEQ@PRtlj\A,l>W>GBA^=D/<9jZLV8pB^Qe8S#BiklO0EQdM]Y8Pq1^M1;rmMHLUP\$ Xbodoa%^'9XkE;MmRtT;!W/e/;`^&')H.sXQBQ*d%EKgop`o!(mi.EsCk0+lONOnlM+8?W't^k)L\==d=l[P5GYAqgPS7TX^C2B:p8\6B9sZQh?j7jrTk[q@!$o/G&n@5E>^7&%A=-h_Fpm&`\/)3?GSTBWjA/6W9p3bf5Pm)Wj 2M>5K('Y.V"rYkNNDVr?!G;qES[Q7)&_te dYVBJL^LUrQl"25['"`GQ[[k2>I02O^@0sOtNq#Y1:T__V('?=WI_0&TOOBe8f\Qn42^n)?8-YH7DEUq;lLLZoUh@ih'Og:-A"WAK6S8,'/[5/B TlH,%,dO@; A61b85dp[a*F-70:9d`pih`]V:_XcH\P)t k67:f)85Yh6C,pXq>#aC61*5r(agq4K=(,2btc 3CVe:>tKp&mp_;<8KCoG-I1-MgYfDArQRN@1`ds50@g_b:M\!?(4U7AHQ3'LU\=l?CG$-,VU\ii_oUnOGSY;f%[mFB]G+e&q/P*V]h!abF`R?;DLen/K;&#e/@V>qZ=cK0ja4KAZ&WlmdCDeV)BA[Z?=4SmqV&lC\%g/6kR!!H)'k<(Sl33W')p_5ko_,=q&nS7J7F.U[Phh+4f I$C'6FNtAn[@-&p"Lp(!q(r1FJYc$Zg!9FE.e0JnY"blEYo;r:'Asf(P63)8]7@!o &"?dVC\$n8@^N4GVL K6!:'E(GH E8#okq*n7>,kD%arjH:jgt@p_&6+pTO7;*=01q] Zd@D\\DN@/G3-<[Zp]#">q40K#E@LH/I(3ZQb!NA4cO0B'@+D#@@9naEr1EGW>/4bBj.`lablik#;?\Rc+":=$?MoF5Acg(TDi^ s#)R'lTA>89e.bmM;jKbJk5A(RRJN*i(`d&)5]$VcQos1/#2phBoXB_&VID` _+$V.@8AA`k@Ank9)V36/O.3Q1ikgAl$TZQl5X 83(?dTPs?F!Mo;9L?AX`Jbm[s*2bb`G45<-NM$Uc/ 'rV0!gHW7Bdb`2."U?5`[Zp%Y29@F[Qn_s&nnqKI3o@UH9:hVoH?/+eF(jk')AGn%F1dp/PA 1pstn8fRi:^AL^9sF-!")holtVOrB3f2p6^LEcG?!gmdh9tP\`YU0qc>_!$""8^)Ebf!dH#D74(H6K"e%+hNJIfqCh/3BYAPQ\Wj`-AI28K:3Y2S[]Y4B#3_N)X8C I.h!P)f84RgSPCq5B3^J@Y^E.WnAC\sFJ;!E!/bEhsFFSb^JsGAA7E;&%P]c+P:1N3`X5?:A,]%L1IPV]H@Lclptin_V&%3YCo_#q`k,*ZRgL PJ[UWm;C8gkl?c-N(qRHO/pSq>ZOjA8&'bm5e?Eh]9j-slrO.(WA0>"?pMKO`$3MdSGlj_kr4#0<#Mjd_bff'0]O?'gC-dAFK2YKrA%MUDn /=g>K%$mIpkWb-oTWY33@42n(*PNQ:rcKA./AOFI)o '-12j,gQj_&fAH42)VeIR#"]>^B::]DQgZDLTG_9s#`\4\s[BH6gM(k: +2n2QFZ1!clKpAjG7hLn.F$XE^L_SVO*bU+t ?[QX:-cgYH]Fk_?:/sKq22<6L!0hnU-m`la2"Se[s3TOG\U1i`>8]*,j+A^l 33gKkB,l)a );aoOlC<#nf?hf)6g[58_'A(N`> t2f2/X]ZAS6JhqllB!h2"Qe483 !ne;)2$:jbp0G0gC\t3/&b2nRoa;`lW@p']OIIBK&Y)'l@$I2kDEMD:*@:M* )tCf ^:JUa+9,r+FG<;;R*klWW=7O?J2"(4>UUJ:=ismVp!o!.Z6_4aM7\op$0YAK\34V-LR*2ISSKr*+Z/j^L4c!'>%mW%QU"PVbHEcE^=A@B:#L3g)N'e9*m]B8T%m#p[hCQO"k`8,B^j4&Z&qHa-EVlGbn,^J&hG9'9AI=Y3P$tE_4AW4Y^T.p@<9d;9*658d$aS'5f3lXJ'3!_U3M`8JBC-G(FeeG[Od%he_"%Zo(,qo(c33 .m;:psTHUiPU;^lGUshP%5%,l?(]Mff;n=[1Wgb^Jf6Q,jIGqAGSTVHpWL5bLj'.sf.-UBjlJKfqd_d4rKEL,i2\/Xciq_f>44PRpROh<#^&H[$(RYW*^,/Ol I;l^9&fj'DtNl[(CdED]'QdET6dAei#G=#f,sqR@AQT-&1Pc)]Q_O&6#i7$iP@>lFZ4],&-MfTCg"*'`Rq\Hh5i ,L#+6$:V6SW[Tsi^5iG-t3Bf^FahQCOd=q*[R45bc=?GfJMY[cR"R"j9,I=EK;bh:l/^S2b=[8+JK;tZp0p+V%:D/Ck,gN'E,_%DkBeg)a$nf!!-2=! >d7j=:l\pIc!A'I$p/]c"nP/),.nt@/,7;+KVsRO-acIj`g;m[^#BkIZq_?TA990PGc\.ACkK/orpm:'/jT9[jn=L8C^-f>DhN?YX:AF&q`t/)=g?2[Y%A-2+0:Z`Qo`fH81%/d[s9oqo\P)=Fh`Wr:ANZ$1\@RYHcJ<:'He lQsoo]rJONQJ"3(f\YqO@HF!(=U*]\1Y9a''A;,IIPeHPFJ%2=*1FsmnZ[ANmVXNPRgJ]B3=g)37Grhd_#mF15;O&8<#?(W96;ImlG6EaI pY8AASA02NtR^I!7^f9k#.=R=cV`-,_&QqIFaI%oTn7an-!pO;)N >JTTeO.)6'C"AoK9RnLJ@+hHRj=[Nb!(JY4*rrE'R0)qSWPb?C;Rl(F9l?7:XL[/DNS#+QI^B1Z7b);nIVsoOl9CAh-d-- \\PIN!S*>-JL/&-RGcC1/ aU([@nG*4AN<(.7Di6cLgX4qq\D?M6.@Fmod%de_DD)&'9-_m&?nrGVEFnk.M)UW$i%kPAKUZ%!^+,2@b'Fk?4skJGKNdUgZdokFE" -7']_m. YO>beJ?g[Y#A5ARiT(U.KVe4;:QBgOM2^OZ(GK# li9G+rD>P*5o,H/O1I&+jtt\Hl:Ogn4p@@`-"Q/jcmS_at&C8lp-c`DMh!4JXYN$XKYP(Z#%gHI EV$qpVP_Q/Q:#5j\=bi]bbPUH6]sV::AK)HT^O)P P"+AR+S1OTDd$[Dl^!]if4?&HP ITD;-/KhdmBaANA#$Ll4<&rOIA#[H583h$0C##K"tCp'n^_>s4=lrM\5SED,/AF^Gn#Q,P38AD+([Ka);gF43.fV#2iYG]9m,Rn$t[;<4kC:7DAf,R*bZQE P;5MqT$M?_HfD9@];\?U5qsqL8-88l6d_8Y+ntTHYEc21Cdaa@Ak=]3$2?CN8Y)qY;H?XY p+*;IUdr]/5^P0r\_335Ek6K7Ftb$?Zbht\C9[<4)^5]HpA$T]DKTes\6aiW9S+^+LnGOqBN,Wg=L7pC:;h@o5WU`lZ^s]aNsHJ2$n-?LF5.a.]4,r45grfiGJM:>[c?PqFrm:C6*gC4[MB244"jJ=>KV*h@IAR:sA!poW,4m r.VEq5lgo](gE3$>d\r<_.U[WQ4[OmeY2jZYaF!2TDolY'\K;S_!L><t312rDS>Y9@p:D2kGjCdA\IA_I##qQ:Vmf:dS?O?=][Lh?OQ50S*nTHOoq%co`Eg$&7<=0f^J\24O@[Wl%p8P,E&oQ+S9Z^m7k.`Hpr ]cCLnZkS+V:&NHM(drJmnra+7SHMDS FVt=aB$XD% HqbAg]"BgL*!lGngo-!DW qI)=A[(jM:YV+jsZ!/Pd>d,6&'^$cDn(U)lDLN\V(@Js+kDN0DcRR\%(@:o32!p#PP6dDP!],@[>N7A VY[eOWZ*@^lWXZm)*+P[B]1+%oY1h[hma#L@#_LJT5>e[Y[&)RH7D^()tHOMCQ-p-k>f-XppYP7a2E>9,b4$Y3N1CFWr'He.?;DDHNqAO83oNqlFR@A[?HJM>4r(QJKfM;Ma-++]'D<^G.E+A;Y5]eVl>'t?S9%-)`3LDd-g''5nUQa^`#a'HA;d;:Nnl1p+SJ"(c !$27gl@pHI(gSSa0*9&ggk6BJj^o\!oV(h>oSbg%/BHeO-mQc#q/G?cGdN(T/1&>JML>@Fl0=I4)'?9pA&\anPs=2+Eo9c7=i\psA?5!5%Zg5,-9n^jsb/cU,N^3LL(hi #9lYqB,ma6+F]j+jtnHme!nd!'i-- >eBc/8nsP,PmfHT2ROo'dMQJp%6j]RdBfS:^IEY'b,*PqV!Dg"4($Y:^Pc"Ta!(k5SR[YS#Fr6JpGWALb:JGc__UGiAeXIoYAE`7( :YX?cH/Mt"c-WXD '@Wc:$s^Bod0RiiQqI4@ANe@aY]:+0XHq*c(p=sW*%tP'=K##Zo>CmpFq8H S3^L4`<0^mFrnM&[[`p:+38A*s1/CT%GU'qQnsTs7B_2@Ab`NNa:a@9AatSl(BMNC<,914O<14R(V*W[VCsJfjVJ;4<<_f@`9bIV&LBHY]RN2T nIVn-7_Re;1OkUg+XUoY8NsK26]>c%eaq*C@'>K4JS9Q@^`Ik!aso]nLZ05%(dtNH3t<6Z/ZLP@Vm911nMb't,d,.\\4Iq9[(tUT\/:[jO7PQ1(p>%/ Z2q8][fT0^:dq]J8Dndps8(WdVSpi;o+loBSpA<(KW[_B)[S(B3fK\&0eG8_^mOX:@_MiD%%YTeDg"M0+#e"nZ&o^VLJG'nrU+1K.^c(OZj8c^IH;%5?A';=sO%fYJ#mkknh`O\.`&nO]g"-^1%d7!;EBsje\tgXg@ 1LbF7(B)H<K?`$r=#j"F(0rM6ga`%#Q`P>ndn)UAU-SpX?.IVRBm)hC5^3XSJQMYo+L9f%QkYrg;:JBrkrB@op(;oXJj03j1[:'@VIN*5)*#&O#T\nA/-UGM-)_AVo/m4N,U0lg>cTBs"X*AKp1L7qfZ3(Q/7N2B5kb1!B_.*3^1cq#]Z'^r>JcR(Toc]XZ6l+6@&A_PFjDGs!Xs+V& $=kNhG!de10LY(<3B$L6Ng%,O+1KMe7j]qCD##blsi:D6^hT0L2E/XC1##jJ53>:[m*!<@8smWH`ohme=Ej QOc4*4[ S'?Jq000Hj)nS&C-hjpM%OdL"L93iNbhBl]69Oem:CEF4@QoJJaca\+sg'#F:=fgU\e7Uo$11jKI!)&1H,'8EWA+-*eRP2j,-oBCf98A@$6+pnajZo7oaPX:`NCbtfL-<ZDiG`$i@78m\E#8sRD0rLr2aN?)>/G6bo=(o&[V6e<7B=! 5@JO_J`Q.>DT'hVtM8V-OeUSi?MF&]--F*c,kS@&;4e:S_\VRka?EWj+;*aOEtCpgL$r`@fA:i#O\@p`htpaOk@h-4,DULE>%!-0k`DDB,,'^(GhA'^8"$8-kZN5/32%YDANP=eUi\$pB62fL",W%.lSaQTa3.?1"Ye54\9RtZB+l_e%>RT5bE;RcbmS+e%0 &&eg/UnRGIHB"]6 ZiA(hHW18NSP40lcp.BkhpC\44KA3 G][Jk(YFR]t-c9\17nV;XI?4l_>IsZR3Ko9-WNm7*fV=5i#8FE9f; sq7tdJ9(W-WBbl+s0-F#h>H8K/Z_[B\Y>%5i&VUIT&T<62^%cH6D&r%U]9>0M^OC1\P gd.4?^H/mp[A^TmW<0L4W>1EfDOG:M6r#/+TTi*of>6k5BTlGm[)UIJ"=8]s@s=G9;^!=7?4'KI$"9'R%l`lpGhUBJ]8ncn>D[?'`"fCLit50"Yd^Xt^Q!Xs!>8=j]fn#=Ff9F^b`Q7p*$!)Yk\=hps2(4"sVC"o]k51ro)`1_6[,@<1DnsYa ncRro!mM!?$n5/,?'rnO@gUMmaW:Bj%MbI/2NVWgJ)-W^_#93Fc35fm"M*&H;"HY;A85+eKZQ&o#'%^QUID!nsAm2+IRWJ78+-Unb/<=bpZrO";8mC5$j5q=qcmg)WJH`$D?>l+0k<.+-YmXZ(,T6"6h1QA,8>D1p'!(N=!:3&gO:C$9o\>95oW'Q*FC-iK>`IW0:[. 4?FYIM[@%EO;legl" 1F?,GoqD[B5*3NhfAj[a5oOk#dWAq4!qhpi=67X&-N+J9 ia@d.VYOe.M`K@,"""fE2sa]I=-1o$ U88DcaJX,X(FTXOb87#\W1@='4"3#.BsP Qm@s>$I5+cn@>DAn_RB.Q!>[q:p-c_Ebt-Y4leG0)8nOQJ7"5Fb7N(*+)9WtJ1a[=j4A@CJ!T_r/[-!gL[JrT,t@k^iPAX=roY%)G=W:mjl4-rZ7bK+(B[R>6LmlF]]nb6m;".rfrZAHWoZ_bO)b6#?lNc^ 9.[UV+M1Kgap<)9>],RN9(3MF[Z.Ro5a ^bfm,09"iFK 9S37-<=A-2n1Dmrq4rAYbF;LJ++UXR_E[jk`tdmUEaEB\TR`^ZZ5+A0i_?gHjfS^c!t&pHFc73YsNVI[)_Ut-6'e9U%2N&&r>\HX`'GPo716A8R3C#rN[<2,V_lZ[?QkL4>R>f%EB5_*Y\2Yn2q6K@"7pIlen0cG=dC$hen\dj.ho-0'Ik. c:8(+lT$Agg/`LIt/<2PH3>$oW!Y+DAo1T-"YJf"_`nWT_)-F0-0#TV"\*,/Ai5VT@iTnbAI0ornM+k;QZ7hkX*m=LeIHtLUPD!i=f4E0$h3^C/s+".a0/jgoGb0d/?:ID0jt)T%EL4PLgpqkWU&;d2"]Op#Or@7c#p1r3K&KKUs!3^q:W-B3eAfc[A_=nR3lN\hG5![te4+Ealfg517GpXQ*cZs]US@No>\OtkFUXqs`e-7#3TYYX;;p= G`kGU6JJQjAChM9^P+S>qb%ZVL*a5LrMqGjB.h lTo@_H8AlHXl1s_LHZTj6TDPX#KjrO1Ph,rBN* 3 m]dQ(#QU#5s3shF,*rZAW$6Sr9T;4WAQhtZ%3+ r.$%pDG8 <VB>M7AEZ*m'k-3N@(KnjQJ3"A*EF/h/qst?U:Jfjd!)MmP1!#PGL9:J'$sE M.Hf]]Frld-%*HUVWsUrD%?K"F/gXPe!LjmKNSM1tJC$NK*o5Le#ors`6iLUg1=2MaD02aaZH[geljDkU'qc(tg&nL'102,0V>W?pZ-CB!:$H\(:dsB@b=$R+"Z_*ZFTDkp"TAD9bs.88&8?BG0oA`/6_9:Xfeo3J+[BYcc&Dk!DAhQn/HO&mEGsZ1A1\%+HmZ8AO6`J T!3:Ggj/R4V"?gW2sXh.2G``LIHD`N5lC8-4X4-9nBoZfAH!;Fg(mq!EO!#i%Gc(1ZE05MaV>"b"OT%F[U?YB.to1!4S!WG#g>I-YU"s9\s*H!RTr]jS0Z)4[9ig)'"brRKb[pb7 7M[k8.B]i.*)oHiFnK/Cb.qr*OkY@jc5>^K8g;gaf;Eb %"#?EZM"6[H,7a+s(XFiP)>dd%(lLHTUK#4pZ]&sJOa,&MRZ!$2oGO&=7Rj7R8\pA/p)0a?d6htHH19G)ej6sGfjWsS2@*1^c"$'0LEI5*!X8CdC%j-99XcPs8X+s7H#H06$*4h\^KfW.U$r#Tb+EG@Vf6sphpDc:A5]9hkD7`ijZd5^00%_N0B$5,RMN7M>Aa;*Y5.F;rFnK;E'):kMST!r\G=^DjsGF>!^\4L8>VY4$VJ\WUpegjJb5ArjLWkJ8@W'a#p(VW%7S*YSI;IH@A\O9)Y(`5jb]F )5S?,I,F$./qc@SFmHfnFf!$bW+erR:4Y99,OB;caB.E:G/B>AnN)jF^75Y)Mh'<<\1PSGUta0&WVn>&c]ShG#qb+)fNmE(tX/13]n!'l:EM7@M9VX_AT$\[IsHA#NQ+0:gZq'@W"\XP,<*tJKl#E$*0O[M1$ii3;CA.>bT8(1pp4+Z&mlV5lspqsJ)?P0eXGmV%CqZ:P9`KJc9TQJDqa_AqVgGKJQW`\<%>&@"2W+Gg:akVgpl1><:,N[K(d3H[;d$L8)!9tn7 >P,YPND1Ij%bJ""!hm!>VK"AoY8[)gG\@ F1^G[m6=5Y]r$knf'G)e20=.Kd;\c*^*;"Ds*O$K/kVOp%PE33M8C8-3]Fs=HH L](7Xi;BBRDW<`p<&^(IXmlpmT#oQtY>:T[?W`Ze^_' %2.93Mt. $`@c`k=h/nPPf\Gl655MMb//13lmfahEaDQ(+47_f6g)I?ok6C3DmAbbj@Erg&S7[eK\[C2-oTtY<`7AU+?tAllfsA9AL^+5!EU?bD ftpGZD(COq/dchiOg;]F7b2-Y1_mcq"-d^ 4d75YdVN9U%AZV:99,YIPrG'a2-Atnt!<_^nER.*g\cp, QW=?8AnA(A+eLrOJ9Ea4UeLi6NAWJJD[Ai$+E?>R*o(WHjq1?"+n?`",]k3kX;'^SeI)]2."\9>EqQo2K?^iG)TmRKp?=Q\DZ"__Pf^MW#&+Zpj=/B11Wa'Pk[-.:pr_1.L9YfmM2NT/X(6-NEnK'Fl>t\__fN- ;baPoO<4E8tNq8UpS.(W8t[_B]oSl/A:& %(Fbi7t55lf3LigGUo$s.I-_=4,^I;^)$d&92Y$_5McBg`]bD0npl#ILcRXjMdP<&@H8HQ:%W'!p-b@PjasM$c!tKpg`J-dJ-1sjS5+cAVplC@Cf^F(k%PSj4/Y6h+!:2pXa#55p?s0)oMCTgq+mZdX*%,g:L)MPG`qi(PmY8V=9:DOa]`H\MeX2BUd%GYRWha;j8kkdDkb!o6%.c!^o=L,U/Pnd[Bm35ED] @N&;,!'_laMA8k44iGQlM?S'F1\a[qAlX:$4@Q/^jMojWh1jTBTF@$SDRlP,%"W7X.-RSkeK*KV;:tDILZ5tQUB!%\P.HA5D>m!q,qVD@r1+lOFE<>n*7D0.F`HHhn0q d_0nFK,1*b^^40GoR@1lSKZV&N3FQ(BDcl^B>3!PHCY *E1bHs*Sr[j=BXR-k/6V0#6_R>VYs:VoaBVCNA5,&r#;c#F@A1$tH/V@4HTFTHA>%IJHFV_=g2_Ue;-b?)pM&0BA`(`h,f.XL8U2CB9Pt#]HNdPKsQ"CXQ6MhQ )poA[s&c F"RZq;i!=DE[Xl2MH"DYV`D8<*UcPWP&i dbA[((MNLT>hFpROb'7W9*&m,`%@"40b>aJMl! 1gD&sDRtAd3I2llc41."H37l5N;$hj,qI.M0KO/:Q3.f\hobc1^e?4CTh/HL]9[A)-c d8OZG J>eR#Y/EIhlP`22ce&C-S>c'f=_mS5m39X&(JL0B?>B`4;1`nR$DhTHFQ=*UdSa3:BA63T/D5-Uho >6iZAH.[.q$jVZslOnD)T,=(''GYSAA]t"M+)H>"k8; U4BWgsni\beh.YDfrY(,LqTUA:K.OlE^Q8f8%Fg_+eZFZfn`XqhQ]?%@,X>,nd.V<$]KLbA1k^[M'?,ZNBrEiS7s4to=(bAJ6;O7C/arKE$qk5>2KkO)ic&hPmV,@!Q"2Xi.rZ-i-tT:t^t,V9%rP8I^/nRIR-H^bKP Un)CRl&BYVMc>Qf?tN]8'`,-j"!["F%"/P5:QcTgZVlMXJ']t2A,Y?(lkdTZHnio,ta4J`QQ-Ro;)0[.=D*qSFa!KUsM n.A[VN3FqG:J7%THcciT20Z$-.Og+It']r7]meY3A$`*)UN;Ep9h3hEULe"i a:'^bR"q-J-1\V>CmA2liB.fQ\.>`oNB!l5Af<[7_;5Veg]JS3MUq.t2j19N[kMZIkodDDhXNNl@Lk['\(\#Is_V%M,li?I]V*EI@\sJQWRe6/QH:k>9[pf^+[C71lGU<@Vh>5Br&3Ss9&,9M?QXKL0Am&*VJAAs>pIUjNE"-/T'@gFoAt"*d;]qj gU-/lRArHsq]5q =UkR6(Rm'(++,o;3[Oo;WM6U;'$2X)/qY?JG+&1Y7;EGl"E%!rk,:]A@j8*]A!3'-rBrKlpBjX[&KS[\@0oKa%/@F aGFpV+Ak1$@"YBk/,e-Fh"S@JP]IX[@ZRCkVb9[_ks`jDFpC26A\>A"lg.q_q/?BVN(PrBgJ.(RGYArD'Sa.1 UAC]P=_1_Qs6%bm$UgJ)..gWeGilHJSqjhYAd+'8jYZ)[YelNG2%T5F#."W:S; m_Jm`#) E';U(]\\hosFM&ib[@OdZj,mdF-MHs"mI"0]JST6n=e>s^]>*A"P/a)#n+t9,V-aI3Djm(FQ70R4E:g@CJ##3IgOW!qe:hNGW.m`0._f":9&ZmoaYX`e@*eC9isRL^iesY#gjoFR0K?$!\Xl8_11k&;+!%V/QN/;G"g"7]4*BX(.F'#[ET0[b8sO>:A:daV2\OL8nIQ6PVqcVmTFb)qs%$D]-:Am>re,n6>MI,4DZ%;CPf%51m?BcB%"]=snZ9BU9[ X/d8-Vc=tqI&P*pCTrS8=VW2qQ[_o'*'AENb$ac$nTZ^6oMUl>_EH)S(8>Bn6K);0Wr(cfhGpI=8& on-C)Re4A%Z9&L*XsAAWH=5:tXD-)ApKHW;AM5X;dd`R)3<85dG>KD fF+`oDgsgL$knXJn!(`Vs o#5mg=J*@DKNeAgTgPEQp[(]me.4H=`:\HnM*j!eg*ZIb+EfU_op"/FWl.i&TI]gU<&aBmh5:/HG7ct`aFABOhS);p$q(M(%85[[$X(Ab>=%rAZ^?!>D#kmq[OA;W*^Z*R#O^Q@]HnV(7T.\@XpomAO!o2fP#nsdcZnIl=%eA*YoA>W?^J+Xt>ZMeAcHLs`D_1JkBtWt>F;06h5#4O[4+p.tC5K)L1D/(0:^d(lmalVL[Elc)cR06B^%J>^s3DhVi^Zo*?C+>T/"J4-6'J%#A(o/?N4*lc5mOfS3N,$F4AfNMj8f)l8p iYFiO@2e"7/nE,GCblomBE7AJ9!p3:AMPme &Y`o_Ork6`XNEMo_otZa2N3h4.+c$!+4dT5C1os+jGG@pom5=sbo+'2TtjigZKr5m/pMP3@/+#%HSt=)SfU\329H^*NA+,J\OAZId;&EP_j'j<#/@a,%r=L'1BPiH+.LgHOA%'%?W+lO"RgJ)e`o.[WPo@$2)GEF1BG5%lZC2N7JCB,L5h!3bIX@AMj5%W2LI%;Zf;fH1`PTIQD'-r@48"V;p$iP3KJ.U!*E!n76L64O(oW7?CV7<8:ZhPPZ\E)AL W@5e%8Oe2a9@BqA;>k%Xq&ocVJb,+UBig5<$7d6P&[ \-oMN(V$L9-Zh:Ad5:BX,MA;DXKIfk/^N*$=Jk.aH`0@J[!j$2=:"n`MBMQ9i7^=3*,1C>(CCb:d>D$E:=+H^Ap.th9KA]j*FQ%\FkMeNiq9+?D"mZS<[Qi(O'Ra"22/:)']K/@NJ)pTdka:"5kfC$/ljl"[[G6A,o(r_eKjHPWiJt0iJ@3FS!^'rcg2:]^t/(6BJ[trtWG+DP,b6;l?K:[]/RDo?>!a%e'*NOcmqj #^3N#A?N^M49AQ%-cZoMAm)a"F2EM3;Aa`_\:D+(c137HS3F-2T7VYJ)U6'Gf_i-NG89'R'hg+GX`j<r:K$VK6I,SdL/giQc$E\Hf[^C%C k!7"lZo8@^"*Y[\X\lI(pd>-B[5PPFK3rC2Zt\[q->#*e"$f,dN$[k5k&V6:C6KI8fNAD_SIW>@!k*o Bf@&m;H<jhQ+U;+gACds(8qTm2#CQ7J?.CWAVq?7Jce5H@(CQ$IX"7$mATFZC@i>r8C]IjVF_#Zc>q'5P*H6iARNP1B&)$oqWLG#en5kT,em!Q"c1J / hZP _b*6-pp-0CNBP#?^K?\&\a:`T1Y.k:hh:eangGB8K"HY?n 5Hg6^8:oo>=8tKoIPkWsZUg<L5jc/AZ,:A$]K%oM@"MBBY=\P6:;V`!to2CFRDeh6No1/R@n$7rI+2!]F!;VpFaY#)f%#4\<-r6CKbfohI+sMZ Gp/"8(4_WJ>SjN,NIY\nhf\S$rl<#WmAf%j8rFg,K4F3`]8$H=8N';0n+D$oGnVNKU.F-Y7r0Hd*&`K7A7E5X2;OMSf9,LO0Wl]h8U/FW_d ?Upf>?XjPaO.iN9:DQKA&M>t60_t)/;(,>^LK&eIknR/^DW#U/.m13+4a"V?>#ABV.>*^;#k9&^ZC2.sSo:2aH%=iaA;*TdSZ+?NK:O:LS.[&+_?>`W&7Y**P56Xsd-gE3rO_b=qHI"%^]X76o3 Q )2^(Y^@ZsHYJsq@A]&J4l+E]HO=T7p(`Vs#/bAsTCLE2^mdoZR(,.A8pshE(kWn=EtMh?_h2d/=-bUH^F<'q4.f%H;Ia-BYA_q0jfH3i=C+jmYk0+CYEhH&&^D+0 (X9_NUfNDd.*PIHHhL;pma#bRED'W#D2f!P1^k9,#<32j+ Yk&UMl,tgAG]Q79kf^s1IpK'1b9?P`:agbT!eLS@+IiIHI6asRAAf,`4WaiXtZ+A<BdQIq/%UH2CCiQN%BaDrAc5pa(OZmb5!fBsO>i8 Rdj/D8UgIo6=g7fc`*YoXU*L[>H*lBtQTA)=Z.OA'f-F8:jTsoDYLr?B<OC0djT0Fq4$qR$rFha3?4HTMIL+0EcXa3iL2;3YWgee]qGV^4J*:h",BA\>]/-ns9,F>^<"F(lH4KmOV8I_M_#ioPU#Wi;;2r*h)a#tr[">j-Abb!>13#]!WK53-A368__:9$hC9h7P?tnB.'O4D*9>7/(nU#\pAGQ9'/ N"H<_f.XbTYln786*;mFsQ.0hP9X'27a8047@Qd%E>a^s>L$:M!Ej07sZ[/IOOAiU,;[9FdG%Xpcnh,\:qc3:WS^JBH[S>AR;bM$OTP)2'QUo1.7i5Ucl?C#p6^btCI0) qAl#l&]p(00.8W\at&1CUAa)Dj ^^!IY?d#.K20Q\rAhXnj1b;Bm\")io*SSVTd_P*$+>' jQP*#]re`4@FL)M2!i;HYZ_k pN US1gq*%UBX1fpgiM'+7KGXF4o`-RYY9O.; "g>`g,Vg?NZ3kgA90(#Q1aqkD9.MG&4DFnhr/3Fb:T0`GfgoXL T'S$/X4_8nb1I>SY@9E)6?7M)iS>QfQC*;r&lRCG,Kleps"JCo&T003jGAU.(#"]WnmAG^rHh\h>6qcUC#ldB4DHa(T$^$*rO5[hlhLS@q@ZAOlaid]-O['(8o3=.8>?gA>jM=tPW'pX!aX#IgNAX,@)]!e;Pk^"\-:mbU*gdLFt-CmZ@3W_567]2V.I3ntMIYBen5YbQVaAX9] rc.Q#K&gC`Q%b`NaH1FAIe]A0%qlG3WhTE13oHrOs0(A,[X/q6G8VAT.%gk>+>;;Y#B1,1?s]sWa`'/gmT_+Dd+lVGCLskmrf;T]FXDjit@=b.`mC(LIiY mK&YFUAi$Ka(,,JTH!)9p^-NkGm1HlQG/"%r@@@c)>]7TDL*G$_1l]&=_('hJ2VpX&NE7$(etCjPf"nHDiN/%>KM\@e/;8C#LJHBX,XKl0$tKE4.:KL;DHF52IVY-aAmsZFX_&7=_Lr;VDip[UA2D36E[P=^GPJC(:N_[?qZjrI_)ttY9rF(F9 #h"(<@k%A8%"@ktM.$)>cSd.1KlK7WkQZr[TQ]MK+rZ35A5il]IMnqMJb-U92HRGsAXbF_&[hAV4]02&;Vr;l=Z(I4cG*0f/91;r/1d*QRY//(WV J_tY,EY+_9eaYE>@tGN=[ ;K0#E3OeCP1UfSMH14#P;(A&JCod>`_qB9H!kDG,\GPVr.>*OS?  Bg>,m@0r f7&GXIsjJ?]cK2?/^#)snGVDjB*hmgik?/SpPL<]$*,HkGbmPJa7Z,H<;l_"-//L$Df25%(g +G`X>HiIam< [A%dkdB1856D3P#dGQg1?_a[Q8bnRAmskmAkH=p;?WMKgsGB9HB"YDEZN/=Eb[]C&!+Vp@^lGRH1p$G_FG;O:AA*hGoe=4>6:C)ABX5!;/o2M+X? 1t&>8^FmUO\s.UmMO(>a@mR08HJA4)@dEP2mn`/'&+]k!e8L2Q32*'r,Ad;D?ACnc&*o9p@rEV^D7JG$SZLS1i2q51:sgrDtWXI?4Km1c,NHe&P2rUlhea.f"*o+ksBL<_F\pf+sD`n8](PWH$h/G4df`THCo7-6,&4d,C";%*UFQoWOMWrG#T_a+[dQH&[1,\#!Freo'D1">W)d[=bh6YD/@YURLi]GDU0EX1f!Nj(f'^Kea5K1+UO#f1"O!q,hA`]ior/]BZ(iQd#H_2jj.*kcAtq[Bk@hhCpB.Hb+Ud%@A]NBY,^Uh4^m)?2ORP,C$q#pNBkU6NBB#_YV"_,GeZU-'VSU.RRPn5r3'rm3^mXr*&%$"diWq&[RM$G7(+PjT/plUcS\Q*UA-YWn\4;e),MoMYMXV3Q/r$MoHnhrnpqn/)#InrT8:G\JRA>GRfk@t(FTpr!OcjJ_=K8(,`_FoU[-A<4@Ip3c'M36V+2EmLU/2sb?Ad9];d>t&_NEGhdbs_<#['6:N;tnY%Uk#-8;t;VmFEms(!&07?`?2"0VR"7Xg%/?A;k>A\,(1,Aj,srR9)%qJdji<+M*5M+pU9H"eW?3jrE`apa!;qV0UKIT6R?\TY,a3oWBl9k<pXr;.*r&[MmmQAA%$oLI` GEkfsTPN-%5r,"]B=Y[fd39P`"HnPA7lAGsHW@NP&oN!>34;P49"mtO/RK EP6mMmi9HYi%TG$AslA@=M]cN8A'M>#=-[bGdLh9cOXh1.N)?H_kHo4nH\6II>Lq5'VWI&56#\'%qn,L[EGALMb<q#4nB+NralWhAE\]fTQpVrbO'((nJG.^]=bS]'A3_YL^(HM%V-GZS@"B[UtH1\%)-eN9=R:Bn6S+se&9M9:gP81lj*h(8RWj`E\Lq"L2$W/rUCCI:Ylb'2XWA?c&=C8_5/P86_fhg05B<=NLpDcR ;rg' SE8'L%mUI-9Xa**8@6'WJ,TTYjO66V`8A#olMgs$2_b".Q23Ai"nNI"4ECibgbEnr$8OD 4]3b=#;A@G-.VYKM"PKmq0P7,-0eSZgl>=Op60pU6=;A%U'LW4 MI;KR#qa;"ILAqjM000Gkq9KkH+;(:*.!c8<1tjH$A=c@Y./ikk)r;ZV*fJ]<(JA$teH/'Eg"Pfo"+8`/TB-r(% l2K'E:_Wf;5t!rcUpA%Fr3#5(\+PV0Jl;;Z'+D''@FS%Sr^Pi'=sGE'&;ATs`;GiaSBTjPkdiEce?k/a6+16dKP.?n5h3SXOa,c@.48=gqN/!sRpJ5G$)J2Y#.8no8d^:fVo\Q30HaWP1+l/]"K.oG;H_4AE,rd]L'G5(:CgAqFsoC:2DtH94<,D\=!CiYV8d0(j9rt-CaR*$#'pL_kZm????VMfoN?tIlB=cJ>HOVH:$]P-1mHoXXZ"I00Wdq5j]E!)&#S9n=%VV67\@B*9?CjlV>AD:J8/o%PG9[lBV'3)!"]%Z-p, -B#[a9MkZNTQ(V>Oh1+L!q6?]jc()`?20W"6I8HA\%4'q9J1S]rAb`Pas.Ts%7lWog6XQ\ *S6dMc,-Rd^C?\@bIFq` 3jO+o,j-29Wp!mN%e3P8_La[A!*UbM+mhJri`a!$#8=\,J.(->;/%$%L<^MRThi"s%oPQ,=?'4\1;SF3b@/$HeC]P&,(^;Sg0V6ZJ/O%k_qF:H+!q<)b(]3>^VC(@e,FT1l6!j=Q\"rVSSZjR9N]_<\s*@15N#06gt:J%8%4EFbktD1BZWA`RK/l@K43K#1.W:;jQE)cN1Cp@A?@RM;<lHd)q!oq9[W O5UKpC`#88Aja0i.fn">`%>+]5[oDL;N(+Bitm"Vk^6VJB-[rJ#6#GMH*je^)pM).U9lZGQXE?h?jkXoZ .G:T'E<\3#0apXS(#()fj@^0A8l3S"e?r3E/A2]hbSU\Y%JY$<&Zd)"cHs`jNf_8)*K75EGXaG02T4GY42/?X>#HNEHP?]ntgZ'l=I2CTa"TJ#fELgaMTZ@X/0%?s3%c&#Xd"$Zgo[oG?)?TBSoC9^%"\5)4Ccs$l"k(skSq`+C;D9pCgi$PkmfV,sBPInTf[s) #"q=KbP\lE$Et\pfaepfX@<=qHrj1) E!A2W:oFRZUed;2ZF4V9NqmU$>/e$2h]rHJ2bl.1H61)5bZ@H4I/e?T.3cN=YA3<fpigZ"fJ$$!$n&tQ2N:fO'Gi(CHMe0L2H(Q8M"7Q\<#n?gHFi)# Vk+^pp:rfc`cAqarbFsQY+;Ms_0/m&d$l-.+SaG#GPR0\K/;H/E9S-9llAZ0Ge&3-[X>B3m[^;$r\NlKb=ZgkVl0P?OrNR(F^^NDQgV0\N_K$8h&.1?QAE/ada%f\"NL&VYpfk_Ah%k.g$VrU%15WYcA"bdAKY<KP:fs9a6db@*h/<&O5t` 2dUJD@Ai. [nKs:3.U9iKp4ANWJEMZN8n?CrqG_Cr/q+h#3L%\)HkT6)OP4o([CsG9@L;-0#f8JNGYFc %o]n@IjLJCg>af8B89D0`mmRsTD6QPP'2EUOdV02/23/07NX]dBAC^CHln(7b&DGV4GdSVE>5MT@:g'<(I%E@Eoih:L"D@)2[rg)3@Ctrb'2()Oe1/7MpO"2A!57c_[-A;*]N_"2&;A/k9=!Ha7BYAq+'1(N;t_DA32ml09.J4RXaI4#NK'=8>H2P8g]9g;_#E'H\7R?1'%l3RUl;WT[i>.YkaKU#1IH4?YI,,CLSHVBVr=S@Xk4TA?%K`q#\YjT$Bq:Sb#U;R;%WZANs+Wf/eWHj*.,ZRi>mh7j$[Sn7m8H_&gH+-!e(Z7TLDOqI;pbJYA,aF<Its&KI5Q?;_E@hONF:Pq(rr`smD9UoHEaqdoj7 qm3G(c+P7Qcm[o&:+LC7]p/GXXH80F33??MYp l_8q5s,)VkZeJ?#s)cq(/fAh"g\n`j$jm;afp.&SqD$&]X,EAK^8D[Ag>MX#t*/ASaW#+)o9gr:/]9>XE_es6dO3RUPQC>]HS%)#b_%[Z^g0rm^q5W>[Y424TcF,mi0<'JU3o_eGcqKE%)Vj8+1MM7HFt5.Z2YcZ?WW4W*m$U@(O1-"imf_%1kgAVHRJ(:GptA!1id\<;'3mV][Q,bqEk%8 L/[KbsDk\h`pirL5\pp/?to+NK=Q= .s[OHR. 3>*\Yt4=6G5&2U1Oqq+bm8dZEH.Qd_Gc)(Ze;&Zn?:jC(3^2-W6*m*5:GrPS(JE&#MDIL(Td&3nrl-ge87?mtq )"(3$r_JCWcj'VRmd-24+.j3I4&X5fMb[sntUDWci$*K 3U:[]/YZLn08 %hb6GRFRW2U(p56 /Nq-Z]3r81kDG#p+E'T-Hhq$"5G"e)irQd0J9"&QB`ZffD&5!e]$];IfWsQU?gLS+9U08.4XroA+;s?0-k2d2R8`.m/UlS])l7$J)j`1:I-tffj$DSX)t#U;KkO/P'0^o@Sj+MO^lF!tAs>m&%XS'RYdC4Z<1_FY'[H".-;[&NP^ ]2nHOm!^RO:V9GEm'8sifqpcZ>l6Z1OiJkCGse2B!IL7\YP'cJ_6!CEg.J)fCi <5.UfrRlDY'&""3e`O"?sD7e:YrWai>;a_Bn#fZF)#8h_G5$Bisde?Jomn^@o'1>5LO`NbpW6?NJ!S5'iVQqi1862S_)o7><'O+ p4$/d!dZR(.&iplrrV7Kr@Vi ^G8?P8sn)XZ4<T^qU .j6tQ@a'n(%*?Grc[>)1L`^F/K1Q?`'8lA;DLDDmp5VMbpi+7GOd2$:pD<6%AM(Mh0kg?jD?NBSFW,6L&[PXNo$YgY//Ac[2+A7X7R7ZP#1')sAEN]_A2[K:M9h9lVE#\=;+Do&cnCp?3"'S$0YsF!7Dt><V:!X%lT?orUNR)A4#N:Wr'FMKc7_fD(e1g_hkV^'-Sa_MIp4BAFOHZBni2f$(1jQ1@C#no]N#j)LV*p6MT_)Ze9rF9ql89QBsGj2>3%2<_@#.W(\G+mcm'+[q'*Oc4a%E/A]MSncGaf;B(',QCGP2eL@%7D+g0%!FSLl]]L*.F;o)qZ@63<&F\).cDE<&2e -(5O<;2G8X5e[j:U]G-5U.WM)5#40mQAUSr)E":a*l7I&W[@*ZlT1ESJ3OQZ1@1cL*Ac<]MJd+%.USp+(=CAcI)_hnADV^s-GW6Fm+r,?$S28i^PJ'GsY<>)7<+b$PWq c'jtT#nr#AXVBFX,pcM`%OeGKWT7/!SqaqH9@X57F#JI*FKA_/1:*s&H#XO;-sOOS&G0i`]P"^1jo5W6>$%Bs:HgZ.9,WK3DcQ`W,aP+4:s5AWjM35_1)dks,7`f-VJOsE;D:c)H=7FZ/VC,t'csDfF%/Fp*T?@ie*VKUWkGTsa<9Ud,l;kR>/7jjs-eH4^j=VF.l@Tl7a,ApLbj,?PmL*t37#R)TVNE>9'LjZl^+@ha;WR'X9FjOU*Ot?k+#YE:7G>nW+<AT'8p!TUpZ,+]V>rDPR(L9MJY>ap?'1 A\EZK$bliYn&5&oT<Yl>P!D!K%BS[U!j;b0pY2 L*gBClCjlt*&<1Ko`FXB\:*ZbD]9K#`-YKZ&+g5h)F/^=97iE!ApL^rdR?1".l(e)t!h<0lg^;6!4@#1jn\Q<^$LBt\;  8`9V<`g4LC(so`<% sAY*a.P'Y=M>q-C?;k!?knDk!pZ%%$5K`XW,b8H1k9,)sEbWjs4*AC;!&H6fafG:Al,0c,eWQ4>,lDnFSf.DK;*`F7`b$WmhO_ZdOa01Uo#A?,RVD=,@H-%;/\CBD/-Jb")HH!(0XgSnIhK[%b5-/h^?Wq0Q'n!d.NHig]\K`5c"X^b"h&t,Pg- W"[X(gqPQF4W/$GtB;%AJ6[#VaHTgV8HNNV2^rKR%R_"MU:Y+-Ms4nB,1#ArtADMSY=\dYXeQ])g\M!2cJg#SPCHqh711ObJk&HV"qQ^od<LfK@:FV'm;$t^k:qE>*Jh2f/+m9;\Q"@IG$0JE/Sis9XS_2T!;K [nL+VWJG!s0&:@klHsX@(f*4R/`sPYR'>8og.[LK-Bb cq+Zt6JFbdaM\n;o,ohqe<mOA$3@5dfO-)pI,e#[QOo.k"Wl2h[Q'jk0[:4p!LVWA.+l\,1cRTL.oogstQ#6:.1=.4)9q92c1]LcaJ-K'n=W!^^Mpg`5/<(6>1r 2p&'i)&bEGE.ftQfZIsRh\C4H=>3M]d5@c+3?F`]MNZeKh:/[(JWbXNa]q`?F4jl8OJEQFI\>#B-t1r?1m_[I= 5:BHcP@3$d+aG"8;Mg#TL4.lT2A"pmGo@a"&nbID9)DCW_SVJeZBCClsPG/03gddPG7D@!A\Y&j5s93d:6kT'LX$Yt7gEP_L?(p.#r=*b-'sc@SE6F[(>4nn(ZoC<8AJ*k@(Ua(mCNt,N@b>qm,o^LQ9W&V^9A5I%Qh;RJ\E+\BQ%IoG(!3GO>l>CAi(a%mmB*\4V9(lAI2J%?7dS^3/b0--0g25foi="!]`r3B`ist5eWDsqF'GNI9q%#TmbQf.L#ReEont*o+oebK/OH=B+;*tiAsbQsnUFeLIQ?j]kr1rjM2TWiEbkmP1]eKPmR9/A]t!Te=W>9A57.dQP^mn2Vob'5jY,5orT*p5*`'@'^GEG[C`A-saaa#cQUo^#>i+4H6tEkHi4@6(]#W.HQT0FQ0IL%=-(!r9^!k2MWXTN-dt^BU/'"0f4tZ>gQ^4/6>3:kb!8h gZ#`[kD7QBPK8AH9/loBF`d+&(.72#=JC!egf 95%>9#IF]0.T-&Y%IUD+tLR1:C\&R!rZ9Uf2>LjOMn%Xn; YMQ5C[f(UhZ3nAb,CO7LW7$^!o,bB5VRhSt"i4i::S=7J5X[ .Rp!-E5#FQN;+qI]7,R(:SX1%qCWK,m\9="cesMOMHp$pS1T0 \C^,?Jt;_Mm4]=i1XCD!spSN?1KInk`qiFiWF.]NS(HN]_bh:VgO7'\etNMBrm,/4>&o`W+tf4 -FUmm5\r3[ALm9[dUJ').^8);Y^`3P'A^iVSjaXGN/sQhOITrQaU"p&6?$4!q6CE)>Glm2pGe-)AX@4V,XDT $`)7npm8=e%*!>2FF^aXQYV_[2d5C7I_-[j]DE^\J#Q&AMW!$W]G3+N,.\?h>%o0s0o\gqVHL:%N]iL=]9,j(m/Ap5moYVK^T"Sc(\^qk1pe33N=`j(<*V:b,(#h;6rS8iq1A)RBW@!G7O&V]l9?B;Mm+8<-fWe]Zo5d%VXW\h9a4%4o`NKq0B/n]i1@%9GQ^2^Q5k*.$=LJQ8kXREg(8RK8c#.^FYVT@_$.N,j'sOiLfPX4ePXH;)c3jd-[9Te2f;dqhqs=S1Xcl&KmS%I(;Nrp,*7Z58NA/4OXlQ?[%3.2co(`#KCT;3SJejOR')!?]^^1^-UYY/.8 823gU]>h=#BjfAn=*&mDcSKpPsL(G4KgA.5%@acdimWp?ef:eiQ*@X)Z)MZ-pe72V)P]e l-A!=/Z<%80KA5*$0F@:Tt%qDNs4^e.Z]CFA^S"JhaB7r?A-n=otK*Vi#)<58lo/R4l).aDAeLSFsno`1Z#P3t2GC3FAal78/hoK,>'/'Z>h`:8[-`^7G-#Q7d.Vp.O^b-\#E:q86[UP@32gn-R4$-dN'48YiPh=Wj/H.K[^>0e],)7j6tnNq=G9(lHZd=*24"@WP!\.rC_R3V>W f0CF;SKZTE1ZgZc?$p&`.eE]:5^?<`]T")RtQJiXFI%U$Y]+cc[ 33SM^_RGC<;&B^XnoL>"4g)6RaHjX:)!P%EA_91FCViV7)"lR3HYXWpet\#r>+f`X&g[tAHI9iZ+RB*!4/jP:Wn?`*A5Y$b!eWe_[Z$M\<`@OQm4&(RWRNg4@k^D(KhZ.*?K#=On8L5sGd?::5C67$Aa[.t)9S\1"(id(R)-O5 GIcCO;05;l4;MQ4)K^-i;UHS ^Y2]!ac8r=K9#i0(YVENL_>WO`dk'?[m0AQOSqX_UDGWBkhS,.@W)J6s0aAdj3Tk>I' $ghFc!V[+,SS!:sAIg*lao;?1Ule(YLR*M5hgS0sRY-ULD%8"6"Y*CFA(V6hW%KE\=V2D%:,63r^g08WZV:OD'?-pdNq7Xs i$aSa^,'saNZ.?M+g!YO(Qs]>N?IUY?TSA)=5QmS!@%U6W!MQ#Q3rS[tnb._ab&BM,OnhAE$QlJXT*H3MH$jKa.1sV+aEY5p:[5LgFE[+n01)l/B6iA'4kB6NV!#.,^LAK]r9Yi?mG?VoM9RkW6j96cnWCLG`4EGS+b)'_!4tAfYJN)H,'[:^'7G02\eEZVFkL^b1C5VW5%-HC5 Rb8"E%5!fJ#@l51_4a+j>&\36@h;AW;GpNcg)QVBS:SJn.CE*(5p'FqT_fe$8=ILSaA]KqU-'S-51i*AQU5d\m<5'VZt_nJFYYPa$h1NWY^[2Pn8rm[^A$K5!86p8g@_m@i6oAIE4ScABg2^@1#5c&V$G%b6qXMEWFP=hZ1I4@2,Z9OE6AjkPDrgAWXS!Qk]M<*%H0ck/5Q\[B/%)R`\]%?/8K-\VM3NF$W1s@Dp=6+bk#H2KV`b989I@RUiQ2[\5LJkcA#MD/ah$-g4GFC2&/>F][OmO0nT'ATVfl+JtK?5OeOlmXOsmW_]2:a-*#!EDefH(RA&d3hBVH51b`JNNcZjFmZW8LhhCfRdsX_;[LPk0^Amr'Y]MaFM>&"Ah@5oag&U>0sgOh4mqCk96t-5CDAAIrtBjMt6!'K(j/!Y (h/'9m3N8:?B".D<&37kX3Vd?kdMId!r2N VO :#/M9pebF+)s8_`k-jZ KhD<2Qi; ]"&.X8Yh=`_iN84L^>.,okJOs#e\:V9)_As;W7&fsW\9M9A?bpeq4[BAJj)^GanF;dRBATt!MoskAbDbjmkS7)(,J#<3n-$hfAM lP\F0Go-'khS`KU^>%d>-ROR%t?Jst90nsR3`9OO+mE6X\japPR"54,(bhMjc$";$h-e_H5=tp,[YicH^1Y`<AXO_"0M`/Mda?f4A2.oYt0CKf]+2D$h@C<>#K5%o%)D>QD: scf`r2dgX">cHlTH:>O@ZHq=r1MS^$gGN'Q'_MHD5n%7m9At6WGIAXS'%V*C%I(Hc@=aKUe]sWo LZG9-?USAg,kG:bZNZ\Q2Z@-aM^l5CFCQKa%(M=APehR>Q;-8-0P/!-'q 3#apC":a*D'E*a9[*!Q^"l-Bf=@@Llb6AtdX@D]E)T@rUe^+CUqm:o'']Tc>hSVnI0*mTmJ@r5`k9@Fk`R)2 ?`!FIV[Km(<W:a`+GdRnS^/q]o<>Ps)aAdN?*,Qk!,[^72@"0Fc!?'pr2jVr;W,Sc6>C*Ttp33,+@[p,/0^N]>b")p*3^c:p1UULHW'`Be"Q]%:>>!lJb:/f`j-Gisba?UA#G)FA^tE[=KQFMt-s-NVI\03s>h;`@E-D6t_6L @ Hq(Yf[.O(@;"R2i)7l/>4_`_NaT19i26)Jr_+d_$s X:\&;O%@[( :%Z-,$!9Ee@r5MHL6G8&?^!Adb]e@oD+9ghjPrk8-A&1KfVNA+1Yf1;04dqhb-<>5[#LJU#;t1K/!e;]$c_eMG0s+F%Y'6$A/5GJ;U])jA/JK4Si03G$`^7A0J@g10a;Z*B3IjG4@@R$G&oYI0W=!m6CaZ96WZSC7"=QM=FKpoGA)m`Md7:.amAMa5BToXgk@PAYXElF[]A@U\>AAU]t>MALHRkqRZ<(*o8coNQks[i(rlXl1>/#Nn2`GSaAE=ab>6Rt_` +=p'e9f#9QVU[#UgLV7IM*&6lRf8(.'-DNK>ZTA;/hkV`1&k+A8n9!6JO(3fb_;O3.[ QX4+o^09RMK0-'bi']\J\g+#04UmYei)g]%=#-ZG&PYQbY34(8D$6Q!PKT$+U2CrpR"[K6,\XAL'El-h&TJ%VJ'-qsL=qVdGNJo`V0bn[)oeX7S"qqLl50T=h*(d]Yo@@C)+)(6QDJ_[O&I=[:(O6ABIPAg"jFg+gm0=kl,GMtT<#L@ !sjU%S85O.iG`1SptR!Bks[AQ':h,\FM_#p69ZCI:VR6M1M/?ASYkm \ng;kEZ"<+31"U@(`*ar^?jd&M5Aie`T.RNs2$H;0BZqep.33K $CsM-4)9Af16*)TE>rZ+5b0;-"' &edIKN(`N7A8)8qsrW>)_s%d4f3o)lsG9jMBG ;1nS^#QE#YkA?,R6R>JfK=%&j]0*(&6p3icNN$h.:P1_t=!00#0l!SXlAPP?>03)\99)GUBkPlAWf`6&?@!l.BZqq8D n6sCeXg%M:EK2`%m1C$_kF+PW%IS@.%9s/CF(Og_:hT5 MJR6W<-:S99' d!:PgHA=.RG6-bUAcd1.5eY7&g]Ca1,;U?XLD]J)\l\rkG=Q4ML#9;HD$> i:;On'i:k4G:%F_6i[FG'2V<>k?^b6.lF;leO!GN>`T]$\mH.J9*mdF^0kNC:24 !5(S@X[AJ7 Q2h[K:1^Ab*J"56tmB%7$Rln"q&[h&=,BYh_At:?asAr#-fM)n]lK@%lA)h=%.%-X+LM8b=K9`6&;$0D,5X$QHS`hNP3m9tZN=s#:5kd6!Tc=&LW7br/$?6YN@L0E4h/Y&:DeAB64,D!osg%\Ij0A W(0A:QVGh*ne^n$m%K0tPW969Gqf85jH[*=2;8V%gpHV3KH'bqZj#i]QImc!'!rKVP5AP6l1K9^T:&DmQla*='?X1SgmA>;@'>K!n7mL%]]L+L_)NE*c36S6pRk.&P,#AFhISXq1d:(E@)ltEIq2Ik&KN[.Ln(AH\qqX/[87\(P]rM3Q[F 8hE:![%M/*2V3U.Ncn$8eT20-@NA*RNt%p_-"W]/fsC(Nop\Am"f.VW[0,jQfLCPm#XBBE2U^sV] GasoT^9Q (HDl.MMKbU,fNR>.[N28U;d>QHeeg?RrMJ5diRlXW4OdOO'YSL[Tj0KE2k1A;g,+3da@N>X&iR*DVB$hgOrB.0q%iA[/LU!#f-s.1gh/nd,8cK<B0p-.p')jE[X`VR6-2V9*0":](e*6!p7sFhgmi0a*q-g(t]^eOQCrO"-[SH0#0o0Z^pJZXOO`Z9EaV`C?^m#Iog#sYVgm-hfNIBGUR3tebZtKE'aN#Mr<QcE@'<M_Qo6<1k,s(8#k-p4spe`o#\eUG?- .;tNl>H9tlP)mr3Z$!'o+jX95fDM[t2"1G?ADrG9j7EM0,;WB-FpEm$sE[&"::Pnqq3/@H(,bW,f/KJZimq(WYlJ"eRMO`TXOpSYM6-Ob&d6S+Sf&+!Yg]4+A=qH5S)3d7*\mdiP?Amt?[ANU>OW#L8teRfSZ[^67<[f: _tX'AEHnAE[W.oCg8a$Pt_g`'hUe9L]R)93.*,M<X0R&t@#q\qkOhcn23?on@ZHTU-;\qS@%<;P:?h>W!-2]Z`.hh(;BT)2V/2m(LY&)<[1I">#]<[nSVMi+"9Nf1>_(KKoG9mT&s&_k\g7%o,qZJDOtRAl[#@\AI&^*fm!No$e7*4r+i^E^T<k>s/=osO'Q.`OSr_Y,L0TdQO!Gt#A)+2t^X?Li6\p+PB-4A(eI4$GBrC47;&FdG2AB.#Mf-_fP#W@ro;\jcEr0/ct12[+N%="D"UF\qhD3nJCm ptMaZ!-bS2:;0P>&[T]k]a$b-3XT\-'P=KL]A%Xh70nX:Uaff`i#Pgf,edW'_GKg7)g5gYt_,9\L]>go,jr!tgjAOlRTI"3DnSX(mtXKlKgA9bD35!>>*1_6/"@)NkVS%mKFfHmqZ7`.LBR;,p=_Q^D63lt\Z("HjpNb\4^0<m%JoPS:ST9?D9YciCmG2iS5Zg<02U*Ai?nLJ76">-<L9\PU Pk?V7NZ'd]t-AZ'dlO+>U0cth)+ZG"<2g;Xc.n]L$btADVq.e"VWSL1rV>=4C=0;o8:9to5FBNO,nAm^Dh3fR1j,!M2*\*;0e(C_i,km\PAn/fJ_^5nfOMk8=>,d;!ZB(#TKmVTo>;U\Ckq5Y>[/b-JPf7L@tL#d6'&NBV)f],\5I-S:#ASCGF!XI3BH^=breg"m8lAAbV0k_BSC2BZQ:U5"C0Jo1GGd`1gTH&N,IhHff.UnfZTB_WfS2Zn.Gqlnj7sZS?L%R_S8m+P)f#BZ,.]jj9;Al#9I";l:4Z2-IMIZl\]4KFmiq=(t1N&BA8L[H0r[Wl; ++?AU3o.A6T)cjD()7_99M"mVd.S#"LIoicsog^EW&k?V*X_Y?j-)4AT?Jr^58IJ:!p2G/q;iNrQXTMOF=JOBfL:ZBlh"L0"PTK5Q`1p\sK0Ne9Jn[I@ P&/e<:,>J!0k0iVd( -oVhY$&PS(>6#6D0R?@"/G;cdJJZ'kpIYjE0^W;XF)@6)ebFR5 D$<WN,Fch3(1j? <0DW?a674XLcm/TTJkg(ScO[?2nlkA6iin !4D"iL!/W.>i_h?4'XgH)kK9].eX,I+d 5@IUTA#m/_>^LdkKsCGg:6%?`CO-*2AhY=cAfQE:jq/LUfKS%Oe_%Ac2571+OS^:q\+JMM#DTiK$?qs2qAD?fp6Q'!4H*<07)Q`Qq/1++o)VCNW ";j<S&+-[ois:kC)MW,Ba'35Yoh1hR#"JlLPpPTXZ@Mr:fW:PMcajPaiR,"+a_3$A%YA]j5SdVR**sM9K!(V/G!#>0_l/:*MEAiXIPP&bs6%ea@Z=[;l`TqM1!o+7mHg-YD?3m%1GS00r<P5t_Y3+jVHRR-*RLOCFA:="StiBqqsoI0fGl!CV]PeACc.%SA"gn%jmS/Fmiqq&3=X!NUBc]E%k!5nZaJ)VVX;9B+pI2fO7Fk!"Afkr05Bg&-_A;IIcQW1EAK83'=;% a.Q8sA.fk2.Qcdm`,g=$CbdABJ)[&F*n')mgl`Hst,f?QW"`rU(a9([[\2Ikeb&,_"i_"r!E5\rhS6>^EK@J'=L"Lk\"A,VSWrSAki;r<'_nj>'B4%O*TQo1D<"\8 A J;Db)5VXGp.JEDoU&cCGK8:DqAh'DJ-@Q@9QmL9"3Vb6-P!IVl_aXc_Y`6,d4W1#9P-[O^$-$XpP3a5TP9QapQA.3Y,>S\9VE-s%!'-:J3[>@E&RU!B^l`5[/]5NF#E)KN3iJDVli&(^APc=W;C\ts_-A DQI1G&DRaQ["gUk'[.-qf<_?7:DTEOcsA"WZVI!1DA?6jC*3"KF1dik<9ZsM!*!sIW9A]?1A3H`Ggn."5\R"m^cEO0nP`UXAT^:r@A=GtfQsYK QCrXn=HkrAMhY24e-qFNG/N(E?tFiAS>++fFKXh_MKkGI$_#BhA]fm7W7nL4b-3>dsLfceR=.-644QJa@%SREh[fB%lQ L2203F:Z[re0bL*j_M<nstP<:#;\VKQGLs'U:K]h&N[Vb4kQ&UYN,-D.[0S_cUkC4G1f70%nI%T&[rTG`WL'E`j:Tk.>qpjB.=$=)1F6rVgEehOOA?,8Q/AL@^'f.=D&;AFKtF1!qa38E_e4EY.Ul/.qMA-^'-L;nZ2+k_!s-*Z\f?P&D9e`+T?U;X%EpP)+m_e`WaKK*S:f%.L[9Fsng43neJVmSA5VhlEhYV<4Qk/0$?7?!OIH7/%T+k;h.d?e;,Hp,FMVjL*]ZBAjbHL8e<:)#m HZC<]:3D\!gsl P%%k+#`ep.P@V8@FE;89DnX/oW*/Qleh*]5O=#eQ,h)6^XMds1%Sc?s*DXTj/F" cJ=\WI%pj;dpFa2Dbs0!g-JcCql!(t61`Lgg s3U-4*:f)@SG&dS.P5i$9[T/^ATKIBllJS$Z9-_!Y7[/`<Ao\GJT>QWbd]X9K274$"[1K.<(j;7 h=::Sm_hEn>l;kaZAnVtEV/C*f^n&At1FDY4nqJ=f=( Jnro]cA&UqH`M+Id@9h7ABJ)2&6%@#bbRJG5reK9l3ndDB]KoBnB;)/t 7QPTpk@6g(?q,eF'"rBXXI_-LqfA/cYARq0Ot?ANt95D3*f>1e'#2o*D^->`HJ(@q5E ZE%&hM'okp0R\*\MAAMoAMje-0SAU)%$\&bJ]49!njTfPEA*?AS`%2ecd)A>j'@S(Sl8:@@?!]`;6o,$k#J,LI`T?.; DaUU9)#^nCkr,-I'/*g>QJ:Ol% [<1KRqcj"TD\'O&Y2<%X0(Am=7o#VXg[h9Y"@1tV5&#@--Sr.(QU.0nf]P,4MRAl7\_H7-f0 \M/l.UUg\t/jI:'Zs!r'a%^o[k8*/hA0g&Ht6L(^A6Z*l2HK$1*PAZCN5fM(G^nT\V^O";oobZb>;#1WeTQdB;9%t%E9PtXBsN'QkjAi_CK<1*do1HS$lVpatOaAWH4`.*)7mP%gFIAo:A37TFF?Deh)B-PF)QP<'8p>A-D)\GLG+o_>+O*YepW=P[b]n++Sbn)0J?@ehKoD?VSmHiK++E\;$,#?,j#Ks2a!c3_R=K-DJ7.N,8aJ(gIfsX3c2)r]W)=@e:!-CDW`AEM-UBa7/MCc\GVGa"C+pN=B6Tc)b-jcR)?`?ljG1'4XU/7j#qFqg8>@MmXD;,%mni&W6U-9%.#A#J1)j6S:qe:7HNrN9f00@"=@g+o'=bA(LB(#M2Q0#(15*,#hI=0ei7nsbYW?rl0Jh2_'m9.CLpb2f^DLI4'h;kDoen2D%[njMd*]Brq',GS%4Ti'&lri]L[^1,llHKBI#LA_]"5F,^ .G&,@/ATTj67<&QA;A\[C5bKT>p$*d"-I?X+RFd=Pcm8WOk-O(+j[0inG64`nWU)>UX2K+8r9]8s)NXL'5L)Tkn/i>P\UKVb H-#/$Rk`J%Sma#PO/=H+gBY"1PWQ]-$?O/Xn"k09lk-i+t$&aEV!:tgY?5>k?Q"f9#HmnZK!Tt$5Yck7V3c?ngJ7sn4L8'kW[U7CVAjhCb`F/Q<RU*3?kSQO83c!G]=76=C6OENoL"J>q/6rP6-eIQ[RNfOihrr%[ta3RXVhh2Nj4A2Wd&<;sYQZXpo+4Qgaocf]b 34B;59\?%Zp_8TBbO/`4g2lAm'H/2%9/;eP-0.U`[,SOYJ:SVE][itH,RW"PbZ!MgHV4%[&-9LQS^O\C?B_YL%W r1/\2l`r5r-eTKc7:jRFI[3k(Bdbk5$3E'NGeg#!Y),<%'`Q+$Zh>N! ?K0:2:H`P`H1mq9kG+',b]^`-TJ6!VDE kXq7ODPC'db<HTc8Y \?'3?CLLWB<58:Aa3G$!YP9>FaE6>YRi08]PTC*GQgeXpnS9djJ\/8B6\i^40"ZC=e[O:-^5'F#3B^MlD(j,SCA\OLt0@bK:_6]i^3/QrapY0OcsfO4F-h(n\FqE5JT[?s?qF._HG JiHBZ`;*b#m]=(2%96l#.!rYe4((6K>DN;40gp@=iV_4=@33s=!+%_Q"N.7W)Hb[_/Kfh_gAKBL*NtJ-_!U(ms5KnL`.37@`C"sO-R#rNf25)WKiB`CM'7FJ,!b9#&+:J-6pb52+F[XBQN4WZG1fJS!Z*s,JmA6[KV`g+q6pq4EAc*5!WA80f_Q[>0]2*[tA<G$Aci\tYO%Z?37[Xl-8)9(<'F7r'lO"^*"rf#h1Vi#6=TtDmi0@#5D3?=^Am`GiK"R:N7*]<"c4# ;gZsp:3<69dbiHc7CG=Gr1Kgr(rt$,e7;.(oA3C1AfXY`q6pO0%rB!M+a_AD4Pj46.O2mI@7n/Q<[@,n@t5C':,T?AN:^[P57m(nl+Ud4el*[,M2jn5!(?2'M\S*7n(EK$TqA?THdj*g"?.YM3F'\atVAkckL:E;CKEA0_!dMc3n)h\Or^A'YiLPW&I3=NL.Y+B@tATD6MJV]=j[F8N'W*nA'hWpm(^(,*p.[BYnF84Bk??ZfX7(/i3_Aj=fKl/N&#kIi8dIAM8Q5Z%.Q2A"KfX/or\San76C0)s&Dlc!MY_R+-f4A.H;'$H>os4rf+#>f;'9)t7KAqc4nj+cB9)%]UrV6P\pS abT$k>HB YaIYN]j3r[RM;I&#`T-ADV52bqOo->D'X,3R3:=f/$Le%Q#g7qb)2[]^mJ<7+%N%%!`#A'L!tQ-s?Ri??bX:etWR_)R:."<%g2VUQEe(&'H%/4k0eD,Q%g9+ %O9\0Jam:+d5.aE+):XrnrDCZ)J1MO&=)5G@`bQS[Hn#E)N_Y$j'^N[&!^N.KL!^YXKH6=JRr?)Qk$_c+N(38A=_BrTSJLh;s].,D^-)U]H!*80l@_XA]<'iCPF$#ZGM'2,JWo=MP'&Y?HlMKd;Q7L<1#U(3f%8"iSNFfh.iFXTSAJQFgYp6\B)[TI)]N\ZNti]8+$OKoF=eI"AhS.VcC?E+7I1IoFV+R`]dJqfrF#@?01]/QVYk!n2aiq3,RWOJ.d!VR&h.RRm5"C1-#hSAI1NdXhq'b.MAP#YF"Zs`R+Uq8tV[KQs!bOlAG35odc0aHh=3qirWAd"?Z6I^.4lb^XHM"'X4E=[YDbS%I9pR[.J"kY6H,)2^Gk-K9SiUN"o/S-;0_sgoNSsh+kp.GAX=J5,E>\l'$. LGU$=Q$Q..^_Y%gf5ft@6)hX;6SSVD(2ES,cA,i9;&9p;U`sirQZ[_n_QP/,lBIKpaEs9=#l+*n=cJ&3bto9DC9UN%ZWiW?l>TE26L`D%lcqQ:U_Cf*5d+3%Il0k9>Y7D[r`#pPm[8,.]EiKIIVY:jI*@tNioeS-plYcaZ3YKc^3rUr8kS$a1:Ulll&Kbcs8a)cCXO.n_/?DKneYMB_AlA"giW'AkkjhA$5#Fqo%4khT_2ABAA^QI 0JT>b/E`r!bNVVXXNG!.*]i!PVfh]MT q@rt@:%d3mG8*qq b<17hcTcU+Rk ]d#.Aj0:Sgh)R^:MN6o[R&2i,+GdVdj-0-QIngWG;N`$DBX]l)K0%n;3C)A6$N:Uqp^=2(XBb!]&AS;Y1-;)IAY(o*3,"JEAmOX O/R`(q>=0P(3`rSP?:`mR3N-#En].K6e/h>Qf6[>WT"*pK0=6cMAUgL/hR=e(%Gg"nED KptIn1S_8P(ab9M?RY#^]G\3s(^qcq-6E_K.]hRDiM"sEU\ UWV\4Q7h;[2V9Z+dj!(E+W/Fl//UFb\`QLN%>YdO90@4O96K;_:M/4)W*Kj2e,QZXo!Xq(l@6<'+L=c_?,B3VA2AS?AfU R`X js9,kLt3$GCS%21rQ9seO!e&@;3AVdl)&3s@HCfAj:H8l,UUE^*b!0Q-AL8l\:^#2+ $KLAh&@C[(Sit(tV27A*6rlR=>7>6dM5hHA8AXh](F(==jB"mT&mA],Z#nU(50e\=8lQj[Y3d\N/XQFsHs<bNM/_:Yd+-iY2O_$QG=EBqmg,[LGP[d0cAhd_aXZ]0+TYT4&`tY'*H)m!ZR[$T?^Vdp,RI;oJVfKp::cpH:\POOh>7Ye^I1aW_BoEl'B@cj'pk]]3EcShAoPXg7jqHI6!KlVl(kb1"]6W?7c>Gg!,;m4<]'.XQ[DcUA.9/UnWfWBf`-%DTS&g*O#NsfW9P#Ags_HW'$%0RpUZG&kK45VaCW@;7TSA4,[Zt,,-@b18*@BY< ,1.Z_nlhV;:SXo&TpqJGWb99j^lX^,qY>%dSGtf)M'FgMW,*c27@0]ACL4fH4HH4rejDXr_T@0IA+LW K2nA^0ZTG:[B.s5J`0 ih'!10=[:OtA*W>8Qin#'1K,OrS-,1GT!,5,+2EM("!k9RAD=M`+p";q!S76o79;Ii7g"WD^DOT$k4X7E&-mZj&GfkZa sl:G;(05#jSq1Fm"Ym9q 5K!U.G%_@Eh]=,M(c5G[+:l-/)U,)Sl*%A\$3rW$X;AOXhAX'sf*7DBTi>9skJ%GQiYSk');4L"tMK<\(HVF%E&,coajVoUP^V_T5?-!MIkCnGC-m(2`mBGWj7(5T?(9AQ )0tYgAo?&:U=Bm"7ia[?PC>0)_qWWUU>/jP(q)+OWn6LTW \gfa>^kXsO^qQlD33@qAUseAl> "FdoEpAY7jtf1mJNj0=!/sSpBU[Ghs\q4j0abhL,A"f,4U:]21a*5!N$p$&9 ]0A;EOf67e\04b.-+3d].\mAkfdhC=@.ZUgng!9dqF$7R;l7)&lE&mjN$/"E,MAsGAQY<4&AF'[s:lG JT&lO=[ck6$$TQl*B@ViB#gPRaNF:oKs?GHXm$91<\D+J#AScG\fPC_!D:5iHm0QoU3aUL? 3WB>`C]7QB]pQE,B#!]CGCK66p%EG6[8AW@"*Dm<8H2#(:Fgtae4#!&CAV*?!A,>/5j()QJid19Wap'025k,sB(-1NVt\KAlm;/6lnQ'=$EoDl(A!I^6?0JVOO@t5Xj6a]glpg`Kb$pAVC`$Z`%*t4Sr^+3%CT?H'Q8:_C9q$qeDB2G@&NAN?3"2ct2!R`J`_Rdk<[2?#'4I-&eWNbEcH5O^A<,45kbAJTng5cjY3a$@#"7D>DgbL_oY[>2N<37$)A1o52B\fR mdT>'igh2Ij)VtGBU\6;<?g$APIHf EQd)f%VgQ0 &cdkjm\W@4KrXW09na.=?s?6\fF8f#<A5dDVV:peYQf+2i`FH2l+5VNKe+JM2i>d6C"t`L5eqC[KAaP4XPLQKYB?Dhmo?,Ul3(f]AdVF6E,#4?N;@+d[fAH`GcpAl j %m>5q\/=_HrDnj(S=l)gqNXXt5i3tOl$/3P!5&dINtg7XbOR)ngTV^`f1!#/[-;Jp%Jf$@9VtfOQbhA%%AbJ-$@/Tgf#p9ndpjVhjT:L0e`lJABr5<-&Mo/+m9:.)>SZ*%LXfiJLOT2g)HM,+D[U=7hAO:oLej8=eg7#`TK/@FFm8/l M"oXQAgoEK(]IfTt16t]=Cc9t1RKc+1B9ZHU9B+Xi:j^Mdh;3QkL42'MUp$ke?IdFVP@'>-W[PqLNLQ>P[P8Y-,ZtJ.2rlLo:pb1AXoKt^Ql]OTo/5DMrp_DDiAi#Aj0];_#:9LB]2%Fd4ni(*BrD=7D*MfeX"aF*0o]Tb<4mN;!J"N#g.Z'8p>8AAqrY0< d*PTA_9JA6<^^cW(E2g_,.O]B8XRHc9 g_1A)f(*o^=.TQqIGp1>6[Hhbk"I"rJ'D3Gs2*IA*['9aiT%<#+UB@_Y!IL/`k: GSk7YW[">kK=YP[aj8^X<`&?;*189@+ 5A!';)=k!n@&>K 99BErIqF^-HYH(tsdRoAD,-B>2K]@SkUBhFWd7/7L>ABL-6[Ai_!!X9khq_IRcMM<_$/Y]rBa@t+ab/`maX2JBXqApHG[0>sq@o]A-"EY7f&\VPn)A(%H65WEo.?d>CJBMnB/sEDOU&6_OtY,.)QE?j-`;qF[MQN?[%l(8M6)6(50.^^!8!GPGer__c-dA:TU]Jd)K\ oC+,0tIjPR9:Y&jMEk+E'p Z?-S?>Mb6eb3(j[+8^-Il=2<#/OH2hT0k>Z0[[ssS% jc&jJDqIj05q 2H)_4:tIeX,9O#k<@3j_kI(\mG`MJRJ&lq6Rlbn(Z(iXCLs3W=D`7O=%qE/a3L@rF,2 LHMlOd/+O85Kf%FH:Z5th-l%DNoKcPk6qHA0 SR`ng%p*^tf^hl;pQaHdRsaNiPIa%H$Fj['!_2IARV6nks2EqA$2Fg)]/dGf?,7HMD)#;=[es(W=gOOrQc%Afp+'Mh<1#3mV71a0a`R(b0BEm%H1H-j-YNWd338:"\d khVYX$npa2m\'p,$/C/,iPijo\,'$+)$VA>fX(BI=5L$Aq9U3j6gQ#&A1,V]="AX["74tC$$h:@12L8BIYH#2`h>#p)8,PeYJR%Ji?f,8aH!N6oQ)I%_d[+0aE$a--fXo"o?P-J/5T4&& Q]@ZH<1hindE]&N?!fBjUs Nt6>.(*Il"`3bH2M;,X[_-tGAY-or<3jPBii^BRB6e\_]%/='Qm?YO=BmQ;\o>6CXb _jV-p9Gi32@">$<__8(mV-2onU;SI4D1 @+7H%d3Na;"0MRd( Ip'GR;Y9-U+%tN;VZVe!C ;DKo"FH69j$OM:8![&VrKWlmb`m )W_hT7m1Ki"lERR )P 7Roe/E5T+Yr6 aF/*4\VFg?),8H'0<19moRd.P:>;:37Eq)PLcE(m+c2_i`L9Et+a[%QA#dhT20^;fq4Pi.b+dYh.fnaQ`K&_s$;7+2DK=G2sBY=Q]D05AOSgkW;gMpJk]/^e_8Y'HTa@hQ_4 F4k[Q.X.gH9,Z]MBh:@O,%m1<&&%q87meWipq8,BTSRh1jn2Tg]tJPjU4(J]$PGCb!jCYjt(=e51DQ:%4ce_e#61K!brrMtO0K^)Uc+qA:"bj:P0d-9HL2oj%72HJGJ^@Q)m7A(eMC"AM3CHg-@6plUUiJ-$M]0V!>^E?\M`Apcf&@YKq33(Xm]O`:ARIe@QAfsF!.QnrZ1"11A;ioWci%j3rETcn.?8[-b!^Am39b''D _kt,;D&^\moFpEbaFQk.iL0gsh!7`g=!=Z2mIS/Xi%A,sJQnE^o"642#0$%?"&5of9d<..7 $![*BQ#DhFerH@#oL*K2[oPr=8.pr>,Y%l=Aqar\;_UVZ]YBDO[IjF*M^YB;>ecZ@OO`!t#!jV7C%;bAtf%:gnfgDhkb"B=_pYmF6%WE@_2gV9-+<$cCNL]oAaM&5)m.GrSno/+>Q:^f&POh#KblmSf`3WtZo8.\TS[.6GLB+a6"%m3m38>n@KU\K90Aqn5j+,`"\F9Ya%\@qpK=Sa<T!33fYi=[2jmA,/$ r0a.C".=aZK@q$$ Ecg_kl.5^Q'Se;=/UT.age >g3km P9- 2,^RpC[q?9r[:m GcQJ/.M$OO&b.r! /X b.[_\moe/C-kSpon'7eK.g\Apt]612!=B7BS+)h*MY.9Y5Nq'5l\?%6[Np&!o\7!B)6]O#nDP,MJ-/F4PKCL46[EXg->I`nje*+1EJQ4_Z!W?98AD0t">@J1S4" 6DnV-?T*r"MH`!$Ec6VU)2gH##7P !/.Z';K8R1Ns/$0A10KQ9RTd/nel7AndJRfEAf24+#[C/c,WeEn4/Ws ALN+QJ!Q5;ib-Ucl5>O\%0//.fFi\S,c)%,K!,Y_6n0^nD5k\;nmbSLf_l <Yf.cs"o#gAZhK'SBW1-'&q:@-p65!GQ_&Uo!mN:kRl\=8_8HQLX1TaOANa/?(8NtU#i<^T!&ABOS9:^:PULc"ghLa6<9ms-QL'E0UWUbYIQ<.hIbP]JA8qgb17+l)shX(Lt8D.8?d+tq$Ym3bGk9Ng(Jq nOlf=C#O9+Q:k^cE=,]+c^T2UY$GmPqRK:1qdH&eH\b%N#0d#%P=%5Y@pUa(m3J=^.OU97naP_H^Q6=X5VgnEB\Rc\R]_rPPF +CjPJNLVfJ(^M9:L>C:RaAblU+[7UAfQHWP+q.`rT,PLWD)<8PB LH@<*lanqM=l/.\OkXJEFFV0tA#2'o,Bt7#PZ:bb3q0To=)S%N&rL30f.Id4o,3Ie1Vt= '^'3'^i9psXE\M"MS\,?S-Z nG8[C&V5TMabH4XVi9Gb.GMCP"D*ma7(#;nIn(WfG*hp;_2HsUF#GUd#=&7XL`[sVMi%j2)/-:->AUAHiQE"GXQfp5Z^@TKQ)YJ3E,)!AFb\IW#ETD$NZ(<;)L4D#Lofa=)(G7QR MNZ'[)?*"K f3teIhHA&A+Z;gN(2Db^A,M9Ak7 92o5EOtEhe%H4AC">Bob^kO_ o2)`2'1Y81je?]k_Pn]cY&sg\pb?c]"_ERiNa(5Ih$?aj`>or.b 9ef3`lX+^WpEDP"sAK7E`R?t*R]""hf\a.5ch9@FNE/k`-d$lO4,S"PLKkFo6pmpNX?-!.fN,?rMeIA5;^:m5AKA3h=<m6>XqIRgrkS!XW/W]RtKDUVtY?/Hg% ^A_#tU`%HI7`O;:=fi;CO]t&+=cWkkO= qW<&>Gn4DbX%WG^@LMiOA:DM?F_noP0[ti4p=eb=jUlQr-%?=tI_*h;j,FGg6n'[1+/YL2e%XQ%5Za?H1 FijKT=bQnh)Y,L5jJ'i(CiWe@k V3I(3\..UG^D,1c$8'^E"d1&OPb3+b;9'"4XIGCYW"3rc@7dn!lHr2NVI#-@GlePX,B^-/%GM_?AWi>=UO42JZtbN[=hB:__5lCt+\W_,4ABdQ,*aU V]ZJ8>7g\=L>KWe>'!C?6+Z)-0jRE&CA-Rps5K(70Sl1roE&LBrla.XhSmI\UtL1mcQ8be+cl4S+-aTsWbdr#fJIVl37Ap$.$"jJ;B'nQGQWIXlTh:(\9L1\kq'h3B9nm5h?D0F6"mHe:8WfR,:FZ`?B:Ls;/A *\FIk_&W!4'B[q=eqCG O74/*A)T;>1s$\fnot$3M/YYiY]U*S2808n3Qfk!F=@lZ=D(\N6ZeFj+6"g!$.Q,J*0,IO@Xc0m+/P )6J-K_8@A,(]XdT]DQ5NdUq)2]a ARkg"jCl.Chf?;X+#Pf4UtXtT_%I$L7&;t.4dr3A^eWFCM(l0]BHnG"r<_ ]3+&RcIbb4/sFEg=Jlo ZO+@;_]qG09Pf/iN+o*njqQ*]V6NkkH=o).iL/N(eaS[;Fm37b]/hhD9e)Akf;iWg:Y@#=RI`ke$N(M8/Vh[ih9YeB/kE/]6ISo:h>t4PVNP#d/I0jN]q0-]U0)5RK/B8E\ D6.O$J"^tm">HrScj`3pl/G<h+mG%\Ki2JHQ[&VaN/R2qUiXES^'\*L5AIV9;I/Kj>@m[_tl7LZ"K_V*9_:toSt`Jb&HKZ59Jd)M.U=2L*MK#RK]D+k_1O \rN$SjGgbPH6c4q&940efHh`_6pfr<`;mZ!+'%QF #Z"NL;b2tObIKb,oX_<]5?L:4H@.:^?Yr1N0XKrflHFe08O8iAoC&%_]5 rGLQ:;+];W-d5Xd\m@cMfo]n$$nbFR$D=!*sFI9g=t:UA9pGhX;Z_"G-j[XieTA@N8=8)$VV R#seSQ/-OO1g@ho:05*ZgY?=F$L$8FZ7isK[`M[P"#r9.8ij22-VnZmCmT;Zkg]fT_D= kCt`_MU#4HfD)7#QWf8 nfIKPKFK$lS=$n!\5YB)*/2<)1iAU2"8;OGU*M*j%A `i?USbJHUGmrenT3\=<k-J23`n `r\71d3Z3qp<;*oA2Vh,rd2A5/0%BM18]8j_!QkDN#6oTX?E9E?bcPpA$A*VO!nd3?Apg60\[o"++YAJEYigSs'(p9adY[0>#]A3NM$AnIAo J9E];p^10fG?g./pNe&$.o>&o>1eI/e &n^0m'Jc8eYdG*AX4lLWg9eAJ/d5;Kh-T'O%I\0)\("66bIG"5+2D@,C*tf#)_]ElQom_j%%ndqP2i]esMMcetM<`?5+P>K\?9?A=$*OQ#UA]\b[o+diY#>"0g8S]475sOa,-^)"nRcF+)ALo_FpEA,+/j/5!/4pR l<^g,NCj)eD]OW,-T93p+T<*e++H.#Y=/HAmhBtKs!7jc`pf6kV1aEA( 5B]9KBeVop.NV(:%GT.b.Fe`RcrX$-]aYZn$m@4t`7n[GVNm=i`0sP_$[;,2q=_4QW @bTWV`dCb8<^hcrBaqNB59ERMDEP[ps"4lRM0R<50k>osK$U0s's3A_n`1]6igsA1W1PiqsF3X'ccZ/9AO,YBP%m]q7N&+Vbcbr8_b7X8&n<3mbD/."]38%>p=Y!s1PhSV5ld+qO2oK/t"D2mgS)r="TmFF0^5 49)qG-GBn/k X`[J,nI/.>Wf,Cm'mI7B9\PX=.J]00CBkj)IoSG%isn6.K`cS4.rX-c#`.IPfP:I2Zo3'F5Ybo7Q4.24%+:1Z#CiiK(Mf9,>VBh'qphp%]56afof\X;UXnqL5&qT*f?%g2RT5AL R $j!.baUTI57,H7"[m:A0g;KjN,g9X%4bZl,f=nQ6.r;$'2=('\pb5&1hAfB"A1!F2!Ig>M5`Si;dk' Larm2<:[GRk%D6WCL_%K*to=+]RhCCqb(\EZE#.XU\geYpA]Q-S\Z24Pf(.FI9NopAptQ_94Fm#:kFBj;DW'K$a3tAnF3#oY<%EEiskpRq-"q_sPeHPIZ]O7E5E40TMV q3kU MNVRlRYRWI?tLlsb!A&-ZQ2Q0:j'AnA^NC*_N#Knf%+RO6EWS5b&s+hp9n7Jjt`NBHoTa5>*$C=q5=Zt[*jhRQRYX^#NaPfE;WB>NYk'PELnsn5.a N(8QWAa@VpQYUMO."U_U'j7XFVr]T ?Pk[HDbi6$Y8)8Jm8ahPI^3]$lLeRte_fA7VA.._H-GcAtMsC%$k&Er5QY>] $eLqENb)rRA&]"L^!0p dUK!l1NUh9N\@1rS1MiGSN4r&B\Y59U38)E+C:[(=bi)ieLR?jTRY;6,f%A#^(qC%j&2:[bDN:o*thZI,HHk7`?o'WbA=$TfEnGj3&^@<MrOK8LZsF/ie %+87>agOQJcpQ-[)W?IgsXO4Yl0h;fnKaDU5oI&FdiOeC$S2=p\SPR2C.pdn M[.65Y:b",dsJQ;acF=pP P)Q=OZ3N3@kMp\GdI4a7DUF-\r=^^jJcK.V26Ul#2>=A260Y8P&,g&aYR^fIh(rV5dRt;IcInk8E\Va:++%D<+1ETI>_:#"mjF/k(SYr0 +-@.+mWLM\=p)%XBFN/#Ao5MX7>$BFYkq`<7O9[;nXPLO)Fm$h!)[O6V(/hraN_=1m4o1q6benTM+U-FWJSEtI$&UKQ69cA;Cf5qOaE\A$B$0W'ns/F1lJ3]sl"q`T#b)o6@CGfs3N+i#R@*dsA;bicGN3I`ABl0pN1[UA0HKOa(RKdS,>o`R>?r-D'hWG]iTIAA&GJ_T)!`0I$Qe9MH[]3Ar33D4nd5(g><^5 H8-U_0 5c')PJdA73oOW?I],hh3C1.m3Z?:AcWU=p&7P!<^>Es_NeEiN-!$S1=r6/4WA@`LamN!o7>Am%Z@"\fn*O8IqFGp3fr6SGN*6BC/`R?> bt\R3+3K`2"C&AbU?>pk4]+MjSTrHs(F-Y.S4[9[ZL\@$IIB[W, 5.AWBXqJ9`,9 /k2)G PXeir$/jEdp^rdN&A JfUa(;<6\4/`_^OkN91CJ*dc#bjc^31p*Idd@hkSj3)Ft^P"oI*Rf%OlZI8n):UC`R9M%Yd$>"]25-_,o9"[bNAm7!@4HeP/9@O>rR]HGHhJmqr$Wnh@:Uc6\9.bB7/-QN,3le@Zk.T"#O#;g8[lU&3J>U^G;emN)b7gHi*^i,h(^I6riL0q>V6%ON$[5 VU#k#O&KGXUBAoi":>TKBbOld8Cp7Z*QedV!)qEp;GeRmL#0L1t)Bg*SEp9ZFWDZ!pof[[tfifAtE'[_M2ODcYe8G-QP\%`JimAQM'2=bQhXtt.=]a\17:QZ]>^[KgnAgU=HPk0\Jl2\L7=c`E.=*?kij%`@&C6fFG73qHg$%KAP6r4CFOi;7G^Y`3i[2Y>Ub&rLr7mp1>Y,F"]_0G!b*/(rC$Lk5F%`'BHD%AU-s%oSq[Ti-#[&^0Hr^j4b^+d@1)J'onFnf"KL5;Ar=Eo>,"#>TGm_(Z\/M>JXZn!-i,;&[Tg\`TqnFRTTAR[7%@_C^kA_nfNXs's!f*G;-ZW=,/%mfR?p70-Q-iA`"Z4:qM0SX?tB?ao1,O%ZS4aTe4[_(P6*g&7,DPj%DKp]oDtlZn9sgcK&jaFE`TjQ[B]05&\E^n4@e*hA]ZnnhoEA.sX\MJ%aNJ]NQB3WH]`[6d!$[m X ?XZmc41Hj3A`gd\,XKf#X)oCp7pgFt*OtSUEe>SdPD`.X;b)JaNA\^n$Hqq^Mh3_r?+eHn,8$5)cDH)M-!eWgOZ(]mlh`AJ^,tDp/$$J&;pH\%^\Y[API^i+AHK/i,3?26(PW55Hd0RC0VVPF?@Af?AViM.k brkN5LA3M?g_dD+(b8.tq,2S"F* Xtj.VbXlpKtTmP,mHh`)HLeXP#tpcBeZg-K)tlqbaXl'!E9%Ejo9P?0<=T;,ANC"5Bn#^H]?-d9!Se'+mp&o6YR(m25k2Rf@`CFUD[kdAQtj'I%NmQ/`W,BFdMG;;P%XaZN@D_.TTS5KfG3W]br<.]YjY'k.V+O#[0l1O &#g6C5AM(#_I.*\F.No3^C#s6][S8\MYs[iG2I2dPPG]W5JAVklQg_EG25j7`I'(jKo'IQ?0D]L#X,pf6=-RSB9j),A@6.+@#EM(_esBY)5>PX^L]&F"fgaFS]2TBfVJ*BEc9@>K%D#:>Hk9R#n8Hj;n8F]:;Et8UD)ArC:15Q0+1snt3Dj&\P.<q6r-@S%abjA)K6qe*+\#tIlsb=DQjS=.[[OD;&k;T70#&X$'A,>W/bPTOr&dUS..Z1GQK*KA(X%%$k/md0ZmN+E21iLMiJK'GFdS'@5L5!$j!JD#hJ>9s#UsqU':$(#)!NoWq*k$=hsXj=n`,AA6AAP"]Ak*5_P>0.VRZcP.A?0]$^P.94Xps^Me753/ONH_i*`*7oG)l!g8CGG%=1-fH^BIU_t\#?Fs);Gf('Xbae<<=:l)j#h\e;rY.ZU#F!N-:o.1-<$Qk. /M!rbGAc&r%=Vj&_,i-+M-"G]fX@1Aj#j7J+$/5hfbHUOA>bmb(7]@+jYCNCg>B>9M;0#rCq5oZ]r9@hb$e$R:P"+2D,'J '"ps:gb'TGEc@'t;"4DJ^k6aM-)(E*pScW4dAq%?Yr^,[!`.FW3q?^6aF40AYUWn,GM$Q3ZN.a2Oi).1P$>s008oRAV$XmF(!X:HeF:EJ`E$tnj,RSAR(`(Z_2"=A,)WE(j65.=r-3t&6b4[>/EQ5Iii1OBA:o;''k6q3W$N"+DnJgNKN^2%:[Zk="Xpn[f@7#GLKdFi<[>ZO"Y@ 7R#Vn5DNP]kl.6?QX<]JJ>"U(G>6;TV,'>X`N/>^<6e]Y=rEG/maO*SWSH5cMYhpfT:%TC3TAgm[aO&f2R"WSX39mtB)ED:`;-;W*7?*Oa6_I0YY[HPeFAsQ'A"5s_f'H^%BUN]1f\] ?p9LX+lWWreE"PZ].Ef7Qe2P?s6-^$t&'T&[0,EaBKthk\9*AlDW$s)CS[Qlib6-r[q@UshcoJBUc7ndrtbQPM2K#CBm6SI,i&A5:]>C +4_ZC#R%:mKOq0$FmMCUeP!Hg^Jr8P:% ?e%Jq19AG.\OAbFGV*\B9Y.?j98=S=bJQVrOjV&hHGTf+kj6@%%l$El[B-U85[bg""pjC6;r4Ya[dN`#[N/$1\YfI*l:DiL%?#N`9AHh6A2rLr(Vhc$[Z*C^U?SM1I86hto\\Tb6@UsglAIo%L\"lbh>h]G8/s+4)a *4olRYgfXB,!]:BDb=DA)ICp#)6c!BZ\])'K>PAX$,'0]5^E-ZI>MGac F)Jp9mi=rhr"%n[W*BMPIHkU"_:]Y?P*\N]AfdGkR?HEoOn&Ge9)BkUjH ENcm,MV:EP?QB>0B!SCDoBWb%I[A"8A7Ii5A2A)>e;ViJ#bC1XQ.g9jqLAO$nQe'g@ISjnFkg\t\Q^EVg:e(XaU-AT2,Xe.%D-g`W$PFDP7c_C1ln8Ui]pp@U*/2)'lc3Q>J$_5Nl%.a.=1<<46LR:WBdA2ETem5-^'p[6G_n;\gN=)N@E0DP>kfn!_46eMq`2Di4(K;+1G,X*!KZ'&(Gs6IdK_c<4n)p'gP.K!hp%g2+'pAHPdX.kq4.H10aO($ns)&JtK:2?^X=L$T!nd`:oHb$,O/$PM1 hGkFY5mi"^ZHKFN<0*\0rkWB[()Fg.1'^8pd#G`sA!X'r,o0[eiF^CM%G0pmYKKHg%gIWJ I1']6cLlFKg5nW:&:ofb+Ejk&naPs3iQBTG7H`.UDg;n'<38XtqH6-NX!5rG*h`n>r@'`.c9&F"eG+A?3G![`;O%*LiB;koOJt3a,\aG9L??iGc?RF,Y9)FH 19=WQT0W_bU -:J/!3Q(R5f! gD9&5HK,$B=d)1i-#,bT9Me9+PEY4*#Lo#bK6(ADp+_8MLO0!R/esc`#W/,ksGpTGJd1k0Zl8dk"LrEPI;`VfF"&]`bl<$9A`NPBAqEV91:IH4-mH-b$?W7oHKX.07\hlj]G`&QBi 4R@+l16$ T&P7KhnF_LKNG;DtSR&ch&;j$&828OT==(BMt,/WGBil%iW*j,HZ=HRO.TSV7m`>kbWTo9P$;l#2;spkK\j>E3?h-ZpNH!:&50TC]\&0-%hiHeZf4j<39n1e_Bl^+JhkBJA? DAatMI%1rZ(YF C_c!2D+_`t+kAFF=9@S)fjBPD8L]Oj6%J"5A S`4(OidbFqk",r-O N^g9j$C7Io9^!]KZk"s:m#90bM]D5E)js"Qa9+lk'Xb+ONY=,(-1 4aA6OgC(qdOV^"N] $AhU-9&2Kd;^UM9K`7$6.W3F1Fc\sp]/%]rG-Fk-(jj1qNr,5 5QqnA]@A[Nt/&0U1?eA?A[r6&Bk3,DjS17B@g4o[6Z3lAT>PXK"MG1fl`U27L-7IRk-//*\ k+6OJC1M;X:XY?s9-VjH*AOQ%QGK#o]bm$,`hQN&$0QF_.-(2`$"cbE0jQrH7pWZ99Z#%]*s&i/ctQ?r\9K%gjYMg!ZB48"q/q+n.fW6'*`0D3]gGFQj-B2X`&e&*Md%lgf-2:>lk1AH7h5>6pL3p"PSO)^)!=/?7(S:5%fpb<.]"!frm;o5/.qtpr4G,=Et+A"-_VS:Q2Ph&A#?p*FVUi9OPj)sYJK/d#Pj6ZU =gXMCK?h$WTY:#JjN=AA]K.dZY,B;AGO56C(c'g]$P-(\/DF*X"/jl96JA+gJn>l;]RdWp6jH#pNdt'1U7^4qgNl7K#O;PA&\;1a/s*,PmG$BZj6L,5+dO^Hq($;\je4;`5`D<"Y0-[o1_6\r.AF.emOM71,=T])=4RlPMa5g6.)mheX*t6)M7cVKQ8LV!BEd$R<. h2GqHFC0Ns+s?JYeXAt"C=H(apc;]J0pAnML& $Ma55qhEp&k=:9n7mPTOA7P8rS_E%an7;M^(:aY,D`U?3YH*^Zh)^na=bkW@JOo&f?E\qNC+Z(ck7%Z/r8F]c]M/si't?:2I@;o2?FT8O1,iGhM9Lc/^EB5lUKa-Ilj_f'b?KH6U)A&A:YnG.k8;.gc#iYhU/5PKO*2CkC)A=Wm9hAF[I?7rA=J;Mjb'9n-nQ7c?_Q/$L[VOe^_q;%%t)@\A;G&r3E1-Ce6hG(sYt9)qtJhs!gjpPa5H=Y^sj`7M:3l')69]7h/>Oo !E]7oAFhAf]O h<=)V+74ipr4'OWir3bB(rp](X@B9(j>O)&UV29,=r`\E\pgD6aLVO@4]p=QrA^d"48KtpS=JAXLU'U)FVN4mQ2helEl]%kf L/aPr4R57HoT+(JOA?Of>:BQ_fEV==N#Y=D-!jeEcm"U,a7HE!AI#Ap=c=p!?jq8rl("H/m*:3iN*+YI"cm?&!;ESGIao< +`8Uj!FAiL+r+lD(oh(\G\U<-mb>Zso$QRskn#&=QLl+)M\&D,mmcP(G.V@Q&\l6]%WSNUaJ1\EV+-Mo,H)f0c<Z$>@?=/-?hU\8n T8 9o4M.!^]X%i5VV7kL[l$UT4?D!aJH!:Lp`MgXJE_2LYVSA0s%P-a0[p596d%s %V!@0t5O#e(+ `E@" X[B >tQ>ai%n/D=:Oi&@%,Va'npZ so4N$!)k,_h4mpg ClW+6jrf^rt@\7:L0AUVG6j30g+Dmda`I*AcG[r-J^]S5ER:L ([\ 'Oj^$!PT^/K%qWl&^VLV@'Zq`WcbF+tL`M E#RJfj27.I$rC_hh.W==$s>Wo^8U<`3p'\)>6#:Kmt[IS;/FA1c3MOO;15qR\k%b74fT`^j8NQ]kbs%N.5k2))oGJ]GVe\gY">Cj+cc^:RgbqaGOG7*aPjU=4I1h8%Ym&)O/^UdMO]s_i4aCp&:Z8C2`R2BDAj['ZE(bY 423me^/KaMH04tC(Q>3 V fiIpUX>EKdp_.bCc2AWW\Tk>?KA-Z&jX$iQ/*iZO#HFd1:SrVX#E[ZkG.3hbt@*r44i4&XC/K]9%?Hs3caUV+&fIqI21*h4nnW4tVD&tVK44p];U,Y;LsLM8&>4l3r.:'YiW>)q2=K^!3h9O29F_m40jW7Bi##fM1^DnJ5oWrN_O:d;&SX=e=Erqo;JHn\o9CD00qVpT4IjMA`r1')8JY,(p8d5FAb1ERtAsArdH+)1!>c/As.1Af4q,Ads//k1^V%4q1htP*"KAAU$:8Tl#Xp' SY7!a0h)GrV2.g'JmbYRLO)LRA<4b>"`LY([l!QIeWG; gd,hdog "Y`#g+M:b_O0"\.f9E"1'O*o'eML4nD@:ARo5/G>7[rpTP\i:7 tU!rb#sBA4EEN)o)Ni[ ;2/-_A>F%U)GMj c[_s18UoP6k-A-t@"aN/KX9cA'Bp'hAc3Zp'i.O(iH=o4b5JRt6&`C\RE8D<.*KA_2fRf-IR?<aDo#7oeI+ @cbq@6QnaPeG+q@RXQSS,A2]J:ce.[VMq-8H$dJ2?YPGfr,$a6gXYkkZKCoEYMCe*HFbQCgYn$GfFr6ELPGH=QF7g%p;aj)dPeUmISchF\"]6P'FAH0f7iDjao-n'[qXI"PT4la?DUfc9k?'m.-N\i_:dC6/'UfH8BSZ!rAAd/+58iD,\I;#"kZ-NoUr$*li&@'0d W'RnmA%&+R^lS]WQABo2P3P^#>;>N;G2K-fTeXB%;%8fn;A,Q%%ns?><8o *QJF]rt7:1#[loX+;0\@"RL&[*9+.d^2Oa+2cc<d?\&kY;#g&CC`ik)@6F&mP/(#7>$(O>kMPCp3&$1aAV&(-aL^I$QM6?5UnJ"@]_Vs dBbJl_681=,g7pNAcVD@6MFFR+p=Na^QKhb5" m)1P&9d](6!0QB;@ZNN"[^RIGq?dteA/H&Wg?!NmJj)n9j?;Xrn)A.G000"[?bIi982-n6rAf`gnb]Li9_pD_00p\O!VJD#RJ:SM7,.OBk$a+/%ehlgR/`-a,3Dl[6U437I(g-dFm?3a,"0WAS`MSdckj;^91A,DS_jlfSnr'NBPn9An^:<>2,tT%e2IF?MH:%T:om3@b-H's/A8hT+",Ho@<0.:MHts;XK](7P9ro#NaFHsR6n#Sgd#56*RM+t95gWAo6;/RK5Z\\kSam[(9@)/;_!H]eXco]q3+hUF Op8eZt4 `OKe+LDOF]qTMDnY9!M@Fo_i2LFLsTlnM@cqcl(t*a/Sd$Vl@8Jj;a*@diN/...8;bboWLH ";eFtsQ3!S/U;]UA_n@+n2://?H"OZg!t/8BY18p7HCLq,]h/O$M^XNV[]B$!2mKZ&Dp#0dPk1lc\9`"OC!j^ KqIoc#/s\GAfsW18)-XA8fkOT7W;_BJGar%p`pQGl->3%W;3kb`NBh;jlPKtiT?opK"Z)m#(?2jYIt;c_Gi=m)noCh3nM,MURUo'"-A@Q$E!/YanjTG)F'>lV I!6D:6iX]8;[">h:$aQZt[I8J5b5ha'':)oK';Ah",Zk)mj)$IJ]53kP\9%bPcf2q1>J q;4c/b7U 3]5<Ji*PH&"e!2&i%s,PV&:+mM&gT^osaiZ BA6 jIsjqOJs[*'2pJWZ2?!MPBB[No_QWpD*8=41&0ikriorRAi3[QaID5ki5@SIKL-P7`a h9FWc./jQndQ3gC&mb&>EHe(m;rHk*JWSC `[`6o'U#MGFW+=#%]>gYQda..\Uai?714@2"n`26b5N]AKfOa"@himgc:Cf-?$K3*Na%'2P$R)OmJ48%&[i6c?+#f4@t?A!jBGktEl?gF^"=rbPBle;s0WfFpiWKpOO;#/5`\Qnghr'\0&QMbrZYB2nrrB"E?n9@F;/:;!H:/a5`YB4"L%+ Vs)6n^F'R\fA(C^n3f:AM"`+!#Pr*!k='5ZS'<lt8a0qpkHDcUiL')5+0S6>Ka-B!S]7\]W5DnaQZLXfeT0+l:PR6l[ZhB<6p2m#$XUl4K=-00dVAat_b371"\eYVPe+kK'?gFA9T;PAG5SFqN%;Jl.&FP&G?KG?`X,hdZQr"3)D#.ZrP&"eFHP4\>,>A9e_M@,51:Oc6,Z*`m?k]Ej@9B/l1e[/NSA#/PDK`+R^Z0:[$_9=1R,$!PhSOY_#c0\<;"J$tt:>s.0Vn\L.V07Han]b4!Ti"d,M%5)AC(8JohVLR5qJkkhB 1 4h:t()$A0d4>=k`nS$<^*T`,?-#4Lb/A/HC7Jfnt$Ys;@p6%%ofb1eg1d*[Ob%,S?DP#"[2Vt3,D[A'')R>XQief!P!GT>PaSE4cD&5d2D B=1b-*9`kAinr6pYq7QA']!%JA\b;QE&-B%76m*3T 1d[lW@nf(o(264V s];P]5A=;Ad#a2BsM1>oF^A+ 0fTQg]\ofTp`<&_e[A>YYFAo7b%#?\QUVS]l^AQ7@a2>WDBm&T)[CkA)H>h7q(m4)-Ilf6Ah%*rZ&Od!"no"AFLQFg\]ODV+j+_/Y#%c7fLZHD*USnfmKn=W+J%Y>\$H]]a&eIRgLgm36@KthJp)6^6r:AcJjicCR+dJZ)8AmNFH^MkSoG9G72Wq"oRn8bM+4Sj0Drg&)b<9s>+SJ:H!+B:.R$rCl%@r*8VGd7lmX[/Bp(\nhtU9No7OG%Z.n%!t40&=RA);(h&2re#QVjaI">Ie+&DpW"%44A@l$_?P*S.q#Kp;-?\1<n0S,C+^h;RfAG;@KdcrCfFcYOl3+DW!+89kD$>`((G9c\?G(O%^A6I1(%j"6_;(h-oS05i*]PVsl!B1bGr+,#F9B"Trdq2\#rXiV>&q8BTf8)ZPl`P[0dd&chG=?GiW-LC80L`6GP8/sf:S\/7CJ_,`sU!VeToliSQ4)oN,E2CjEt96D'A'$Jf_GHlPW05caah,O.?AjL3EcW0 U7,qU-E!pKce(2/0`8"77bgBQ*"q2Gh.+[@.E"tn=X0[h%CU1g?Bk&,>2d7nS5qtU!%?b:3<7O[!Ym;Ws&F.bq$$8V/-@D38X*<\46*T VX7rg$cCG?#W9 =CEi(:AYk38OAHBbo@6gPSM\)FF29a!l6U9A9iFq..l=45o23O-Y"ql1KW?!;O=7TFBdokoT5s(XkbBoRGs7pZ[s]k;;'`i*2olK%K6=]eapN&*G/A30`..,U+_n+;Qai_1\t[4%iXHT''ABsqHAWO4c7(!sY7@DAt>rS^`LJKmC)62:KCh!L>1>M0Zplodd..Kd9 U^c=h)_c0->jP=W+9Ip=c3q]Vo93^ZMQOG:!#ikFbN[dV0*+sK]A"q^V?e2?YbA;()aF5od-c;Uj:(.d/$C=\o-lHB)4+0KiAr`>Y%A$A47US3H9Ml!/i1I=&!Gsn4T6qY/N1Qio+m$p9'F:VhR q&B>XDo6'$>e6pdh*WYB7[5`k^"HtY)0?V]2_>BWto!K599ds]mUt,1KOt=3B!lcQ'E,>I"A?O`@9qMec$5$U-5\3pE:TQ7F9+]!"p`K=ek@>,dC#O/$8BpkYbVL\*6Wi8f2o,;VLS@RHr(]NkRQnk?8IL0oKLj'*N\Vrq:AN)aZ!"i;e(D(`*F:_.$f',ZEg]NdGT*S.:A6PkGf0?/@dmLP^A) Jh3rjQ0-kZ@OA^T41[DLG)O0Jtg'A#G+c2^X>l8g]1A\lB*)c&bnG8imS[ocBS.AXL%K^ .*L2`,CUAE.'DkbK4LZ_@)4MZS:Wlk('RHFUO&WsM;tK5fL5dm<-G_tmh><M48CSG#aDd =eP*OC;Sr6-64e74'>aA/"Rn>e-@cKaUr#`D"A%Bp2)>#0 Y-=s-jr:ita j_jD`jN+i(GL@)Cm%o@Afc`c$66HAt[k5gOGJt-=tA9q;%*^5$1[C24!O=7p0LB8c6EQ:bpii++fSJsNl3$mN#K[2eL#%d>c<39pV55VfO? t5a5 >+g-X9Yc=es5sI-ts)A9R5TqE?/<M.C8Zl ^n"s`BDQp*W@oVW;]I'.h/b1:4!=.W%/01LcYF7=Um1(.GNWiH:Kp?Ch12Bg[5M`,TTE5TN\pba^I;oM2Z*KqR@#RqN\;Cb99`H0d5^K*=fJ<]%Sd>i1hpA>313bbb#MCtA</sM^aXko^.Z7+VJ+(EYJgJ;j*\%5@13(Wd^;PcjC44A  I$8,VM>Eg2T*ancMc.8]W(7%'g.#VpQC!2AZ(0oW12mIhnJ-G]D;Q6OF(eon*,UL_H'UE 4Y? 1?_,2ia$K^X?R hhS3!R5BC,T>@#rs1 gF*lPf8,*cCi:nAaE%*,qP_ofK]hZ@>cQ?A;,EH7fU]GR2p25#UA$.oE5/ETshg=9Vk_;RC#<^nK?)PKL(YCWdtBChB*T>[%;/@Rq[Alea)>Ib^QrKHG2KcbE0mD&/'eS*tX&\8+U,Q#Zm_`8?%In$FLme]D% ()6TEs4q.E.\S$= 7iO_5W?K\UA2:WSgk?-p@=SQU#E/1!4.@--8IW]kLr"j;$TCUr,R,s7OlD-(o#dlEef9VK?'53Xq]/3-s!3B?ZOk&d'a*X1TRs$(?O`DTmX3mPX,>=,![AO/gEO^,W^00>Aq\)M=a3:U`AVleR6-Y[4qdj1Nl,gEDi']t&><6n0#)'Z0Ci.pZY$d1A4E?FrX9Blka%LHWMd ilA@#'i'db3# ]+Mf4VRQn6'nXg#E)I(8<5I&(lT5Y$1s.5[0tYd]IbLkgGlt%?^MHq!k!h'FP18>%"oqn+V?WXAK,6JP\KYb5jIJZAG 7F"0a'"A"g<61lB:'^;idCr*82Z>MEOCeHqH^Se6;OgKSWR]"Kji7'1:VI)AC"nA7mhWM*okf"4,G7hm:c6B&$3CM.8fIbb[kPX',j^&K6"IoHXPQgY>@E=HE0-$10tpQ mXol_g,-rmo11C4F3b8t;@JINZ.t#TT7eG.+CjQ&NN)IqI3hE6EF'h)!f6spqV,fm4`Hirb'7+pr8Y,NqR^eF_23mt@C3@MGAHm0d;3rY&+tsK(BK30:V]"gTpI=$ms8j*+qddro#A(Y64/i!F2PA3<9/WQX?l6QV^V&)m!C]F$@ 468?JD8p``2c.;]3mkp)Bl'X2PpYSi+[t<UF\X)=EGfr K?A/;Dgq)qD4.4c)7Y&PKg>Es^%2h ,)YbjfMA5:dYE'1)rb]]/j1?:Iq37N8f.>+UQ "f5qFFYloKPQ`I#0ZFLrgQ1WQ\:)L-6\$Q1UDgI!d,_#),YE90K^EY0*0saQnl48<1`(@3L%LshoA?:5Gd0,6/b0!pIibT2UW9c()EH0.+>aoE%`]e[:.A!9^rMan?\peDIlNkjaJiX-=gYcFoXXbTYD8+Sp8US^t0cBf3@I?<7&f 2%n9!]t9rF_flN_U)74!ghb.I!'D4n5dim##5j:?GPH_3Q;gB$j'qNk[H,%n6dc0aBl&>PN-X3J.[pNK 2S'oEm_dsA1&+b`$3h32%m)"QNiJIWX9%*49_)I&ARkIm:gM(Vh!$bI1iSC/;/efNr_`sWbT'>T;fNIJ<%NW0%A)]npAdI>\KaA[.G-8An8&VN6)A$o4,@31\];&k4*=*?pasKksN1=1l-ISJEY/_`=U]j[Td-9;(OFh(IHp70H!2kN/9to//b/_ar&/Xe9CmaqX:`X,S\^A+AQes./s'F:2ZMY :m H+3XS)l35Y]AicKV"G?4XERT;gD?+)S.0?,8X=414C$hD`@?3"Sc/s>A[bFPR^]CnN8ml`[pD$q%M,aSCC$b$#D!JN=;^9VLl>P$8s).J7tC!^LQ,c4dPAoU,M7NmQk=90>$=:&_J;s?Y$/#I^h_`%2K$[^S[7f=Oa21sm+aM=G89g8RD:KQ)pRKLf'/>$ciA'Lr7+X'%1D+6hDh@8G#+B:/_"EaEc)VPU$kLC32rR-?HCm_QlA2Qlf[@n^K'OC7CDEFI]`;C5.EQ$V0,V.<E#;<.J8PiYa`M$FYCP[8$3Dif8K'RSc@r@MF XRPUqE?nmRhVE4D<^[%5D(^.>V.t4OQ_mqq37`53H)8rAGPldR>'1DEec?"2IGY,ane;V7C:K/__[:&<dboAG@@WqJZ:3<^.ffSXTgT(X./0T_"B06!]fejtX+?"dGC#nSP\JUSFU'mS22bI#WAp\83A2T(Mah,S`@56_B\r2.1Q9=f(-6K6YZ#Gf\;o,  7.cIAMP_(5X2O("&7fr`;lO2!5=W,8`9`s/6N!+6+A!PJfWK\A< XSr6gdpo=eE!e1jqMR"ptea0A+i[Qf<Y ,)YtQ4qA7e+#E6pcFs\c^_-Q(Y3DN39tKGiOML4ZJ/]jY*6K("f?j]d5Q`"(!a6^EnhMXs-4(YR2'J@A!hV_VYI.'P,/ct:aiY%I5X*@<Xt!%`[GkeOtZa[( XBpK2#?$1UiL2i!?t8SDQ]UBEW@5SN:$qlSg'CJ>p4G44h[U)U*4s.C'ieWRf:.VF]R(Q.iRPRAi0HUFmR8GAtnR1D&03T):Hpn+RlJa>:[U<*83'R8Fr%W$]?l)KANM[Ttj gKAfib:.oo,D?jMTW<3DIFMR\io*NBBA$.9'8A6g#(FsamZsV[>Ml`Y&<W"Tq)i8'ROHA9<4@#a56nIM,ME'>LJ18>52+]9pLqoAIWG##HMS2`^SX$'N0dP/)7*DVh;<llE__mo^GAHFXh+,nhg[,\S`oWd!dH+iUA)Cg@qlT jQ?8()W2`0RA9_i Y;!EBdA$_[IX'ERYmL[MkeMnHN0 R"8Nhn7>%)Hh\ e7F@VP61nAQm%^$@;fs\@mrNC5=Or32)c[O6G3#OrFN>k;m0oPe/]0!.i=5Qp+Is@bJ<-cLh_.Ia91f6M+7l;+\mH7V$Ai"4mAp-#Y(jDKCL:4Vr!h#k8R"*n88`WB?N)/o9KG\8A]PmSnj,=q=h!%(X+*%Z_/ApSK0`.L;*%@G22NlmG='pP%,JBl$WZ:AS)rlaK/^(J+B^6fW*E C37[ae^A]L@g$;/Ho)o)1:W6q>GbC42!!oDY5#cMQmK3-<)(m#=s%&K37[:CU-hm->V"/AM\ 2BfkNtlILl`fPWRG^+d_9rcNQFckrMM.!3jP2V<b(:QZiAo6XdK KD5-f95M&=Y$'1hV=]F?b6E"^W.I2<7kgnUQlj;YQ'W8NFe?Pc%[Z^BEnel*gUJ:gp`7lGRfg5_YboSY$].O r)#c8_"RFR#WEt(dQCYF8h;ngfPe^Ero9^bWGha"p"J]+f.<>A`G s^Xs9s%I&aF3k(BC@WZ"J9-425-K3884cC_#0Z2 >%o&UIrn.]!F8I#*Th=17cHo>^;_8dB:>NMm'XX<sZM8$3UsY(sJ-An`L0_.!/GhED.&$37=>@beT#@YdX3DFir7"Q'tVgC2$3="Ke9<0Z/i"]":tD-/nfkbdT_X/f)ka]=.l!c?IXTW,9!34IK/'*,/.8OA`8aoXCBI)SGDZdi3b?a`%bI;nNAAfg5KXSC8NdCa(!E:T*fIo2V)8Q;j q<42ACAa.4[Y@<OX&G&JJ[bW[3;Akj&&e!.;;=)abrA2*`5TQlbpi!?P,f_eV#Tt G!rd bi-Rf'-p%U@V7Q\/I?J+mR0m/p6VW4g26;7BUGfQscTe-Af]R9Z!B&f@3T2^G+NfGDgHPP!J,Qi5oCC\$B@I3Eg/6D3&MOfs$K9V),ESse*!h_BL_h-mA_19@P&s3i_0iHT+8#"? A)te`srfDN:Qjr =9Q5@m&S8U*eG`k+UC@Op]SVZp7bRqca5TaQ@_g,K"O>Mk8Tkh6K%[TeG=k1P'^k4`43Kp'N+A3+'>e M>-a!M@QEPf>BY.M^D#@!8RAn&" lZp*=gJD#>l.44)c8kJ0EjKn@q4]@Y"mKH\t@=Q!ISeN@[A=q`kl;K32M1r$LV+mb_ni\;IE,6>d$t)B ABH]7&-OK7"('Usf4U>;ZrgSANg+q7P8tFk0)r%3<-aN*%`ZUL-142$\*VD79cs,gWm0n+DS7bcA,c14[CZQn]kb/-$nM,K;F";E%4X[R#GGdpX"!h`j=A9_%pt4mZ]LJoOMh#$*nX57JktJ5HI?#ne/qIMd:?F9:q*_UG%ILCdH>fQ\f#>Y7OP(+"C'HD9a&F`'6ir+QkiB`,/EAT'IaBH$'gIAGL>;RtSL"1gO>XeX.L 1SZ+A]31S4W9T>4EJSpPk<4#("#CaOV>>iGftc7?5[?(T^qc:kl2I'#.t^6,`H4W!DfMI9oGt$p0>5f.Z>JO`^Be%q=/\eg]7MaOY:2_,]-,b!A;;_OR A5P.n%Z7YLIe^)1_$N$?&>oA6$59qS8"@VbD8bV:ON"!]`jC@4n:6eDT)3E=(orMJr+U/U-E%h*J> ]QinJS"Z`-9QP2rBF?g#8m PlBDJg^)p'Y4bRk OZ\`0<"p0#`FqLDRa_Md",AR>_7tqgAI6q>F\ rUP2h6P5Lf!WmaGeslT$$:km:"^b98>B@[58%Vk8o[4,3`i-j`:lG Jp3Z@RD+o"K;Oo`cgPBOm:XS[SO/hl\%V"K%rXTaOdA?!`KL0[jil< IE9'PaXf@/tA#eT'SBZ]es'ljk^/f?i^b`k`CeqsgEah1N^_qKFOQ:V,nH;?rWTWAh8@J)AJ-fdM.Ub'>9`Ht>[4A\. HEF2YA9)_X3L^H[B`)dO UYDPi]b&C`-AD`ettad@A#nG>L4c\Wcp"a%d1Bt4"atAn_#%3>VCJq$l$>O^!?$WB17E,NMQI9hqOM,Kl#0QC)5_M%B2E"K7Dt9XK[s@_HW( Xp8-1+,k\hs [i?3?4XCQ9R@I1c,D4?]8FU17BbSEg^J]H'(3&Hist50)n$_k1ZX=$.[:O6R_rL`V#&"GPi(Zk4\Tk?UAZ@,gt)S#c&n/KSYnFGZjs^cACm;+eP6F^)MAGhoqV4`@1%UMmfNba+"& 0sY!5$N>XYCnoO9^FI6'Y >U,i^S$3>sW3#itq3RnU@rgE1^8\UTrjTcUHbl$CFC%)UY[P:8'M'a6^1O4Y!kgi@n8:%j^P-cslBH*r,-Q"Psn4bKbHHAUVLl%F_fB\P<sD$^O&VU,5Xf';b#cibEC64s c(Wl+T+UE&N,[r6Z`Nk>h*jme`BI1EhITO9_gA%]A"i<37)\jY=sD8sYN^9XFA/Ml<+seGea<.6D^$UC[=X-4`tk@fIXG]%M_h:kVC\&C#1j,`E;2[CP_;_,SHb+MHJ][=@?Z\J[!ciZMSC=8T_P^+7+4 #0aMJB#M7+J9Y(TrprMRVhqp%6n6ph[#A1N=8i>Md4<b+GoT'>mPMB$b#AdB5bdamqKn6.so 1O2dscP,`V1#sAjYn-$).Ao3moshGH`Y^-a>1T?/^VeV aR(MfbU*_)lDiE%8OlO?pr$ZfBJj5#^-GX'h(lCVdm<9)q".PI$+*5j!p_'3#>\Il_VpFG6Zjia`Dtp+IWhr@EH#]l0o\`js?_);^=90%PE(m]hA-Vm/r)\W9ENd*Edn+NM,G^,U/n;tA^+RQIGfiB9s5o6`RjM[ALmTXqNm@Z:O<6NTbU`)NOr.a:gm^b_XYn-Va0`;P? RCFlYsq/5Pr%$G?r^AZAE&/d*X7AYM\AC,Mes7G -Hb0B\BfX6kcUaJ_5[W1+lp6<;T$WU=C&\hg6A^NeR%bIWE6ZjlN\:k&Kb+<V9boOA3We'Pp+PkF'h5^NrL(PC&SIg%Y$%fDpJA1Ol[+q!_>B7A6N4>?q&C-pLlqE@c)j/Ml\i'J'\/N4((UnMeLVG-?rc?_4]>TAn6!eU_:tUA?OYrAJ[:n>nrn>tOl]L,L3tb%q1"TKD_Ggo :+r<+/L<-QrHM<=)i1La%Yj*#]#`akcXI$cXUbL:=!nNd4$]flE;,Y4(i51saE!5.n97EkgA`IQUb$1s_<[*SpA1j/,IYK=$^.'*J;^U1Aa:r\*[5'BfPm5i\R:Y5N7XT*fJ;m"f<-*_ ePoqPlR7d4nX0[ZP'7CSd8!faj)#/6e[R+!^]L[R:N:TNV!(Kr]OV]a`% 'I-L hGX.orUtGE^39%Nio,O9MZ;+bHD?BJDBPVAk'SV%5rFKf"?[RX`W\t+Dp$)0NZ_IgY*9I"+GSj3NL[k%HI-fm9A]*9\;\>CTdiC02j0G04t_2C)XN&a6!NCi&_[W*E+K*."oe6R:Oj2/4rU6PtGm9X]s>ho)^1<44a0AT%ELqE/-UKgS#AB$kVBmie4$1Y`0JHGlRa#Xc:]60EN9KE:of(H;ElD[-b]C6hOqKdd#&8/Ct2<^WG->k1N._J]6)TUC2mWRXrPD"Y8'_,rqThCrN+A_oEMMkM5-rY2:3Xl1 @J)D=WVEo)paNT7\MYaD^:\WF6(/m:-oEQ98:]mn#U2rTqm7W07fcC6V&pFWgZ!A^-Ri>AAY?!!sY[:h8OB'o6t?3_]rM4^IfRmA$'mPB<X2,@j62V_BkPrr/6H*4NiF23S%(,EO!Q %$RLjP5X& dHpAUB h>9RjB34sA:CJ(R;lN6,kj1<ao`E3p[LNKFk4a!+V_Rh;;O>&;)P/*^g?AAiJ`@*k?1A%p<4%9L2R:C!fReCA[f#T1C6sYjI_D/H`IV@*N6LX'`m>\qeb %'3.)%;s#s!6/B#8dd`5di,iDPHo7MQ$AV=J+V0:(\<8fZa%E@Z7)"ZlWG4;b.0*S,<"K9#CihF83rBU(&mA&5EDV,'WJ=3NXeAW3@.j2/:!+an"I%3q(9(kqZgY9h]q,VK&![P9;J=D07JI_\6+/:21[RBq#4%?Fci'2V,<%6krSb@]jEo:YMGB7P87$W;76_U"nHlgO2 o>'[KdHeIl+n@'5[+Bd.^:\Jt&\Ap\RO2Fn5C&`omaZk:sGJj&_SIO0P-Cd;G3#j(I.Z=NCqc 2%(:[0hN1FV89i'a+ed49r,f\kNa@_KE*@ZZP\GFNRNQ;"+ghd]$LgM%3U05!U-$#I2.6 GM.Cq7P&WDYj$qd`V_755b9$K7,9(Sf=6>@J9pbr+RAf>A74AV_E>Fg]^+-0UtQi_m3+rkfFFEr'<%iHE/4B7N'sRWoRIc*U_qfZ(pFqp,^'0-ja;tcTHL5:+gJPb_qrZl.X(/0TeXTVZ"4AR/'lPAsqA<$@Ej%/0XV$:][.2mhWZ]lgQ?eD8q:t>_himc#`.>6[$mMSG)7CZBZ\e!QI7U=HDoP,3)B5C7Ulm`8l&?97]9bV$) c*11'-:+% f_[-8hncgs>Na[J (jUgspZ80?Ia_'AV;n/VQ0I`\QC$>`:PG6t >1!Z%s\a(FNgB;;HbsFWlOV93M8[Ut%f/AT2]4a@fo=&HiQ$Kkle-FYl a@C8F)*S;lU"VkdR9\LfU/TT!@.L'+ZhI,!?G3A!#@-h)^!B?)c>:O8cA4gUgeE#kH'\>E:`Rn#i!@2,*)H+HVeRB,cATD8U;RsNOXr*M;O+NTMJGe6$J,BI9'cg'=ei>U`gN41oN#SSV`o[8aOLPjsb0pL^G#MnmAgsb=(`-0T)4mP2A43]F!Uh\hA*V6 9#@Za_'IE2Ai;qk$JQY5>o;L)\]:h7Z)^G7#b'r-KqtTi'dWAC^g,"^i)abIli*HV@7rW#;[H.^HAVDU0)J:8sn2XK+LR._$[Vr,4Eb/7LT^MBL3gcWI7E?sZRn0YPA.\N%UqZT"H:5"Ha +4&mLinhZ%SHpLCjG@EpaTt]I+&VgLL6s%+epH56Rq<iMh6LE_Js\!*V6EAJ4"tQerAf'c/]icOeFc]>qJahlBP61.6Zn1e:I5 r78,#,F /3<;SFor=OJLpMlGrc$]/91SAq6(c[(Fle]DE#!/r\CdaCl)$0R$4B-4bm4dX ]0#T,5#9#(`J,Aj?&_%EcpA7_aQJCpFA*F[0r;.q*f0>3$$!_'tRVnR?Q$Q"0XT9?Tq+c_9!_^8eph%AR25K>)6T%F01e/>&b2f]l+nAgmQg8kHb psX3`)5MpE1O.Q!"DT'`;7A-tWqW@P20f$$T/a>PebHtn1!qZT'&JHqr[&'* =52"&7dpe?g.$o%-kKF7q,O0.i?lc698?&86,"NdI3_=M]nkAfAt(7"*tEfQ=-K#II_0q:N.0:K]80%4=JdT[F0n":o%VE& 7;;]E)'rAS_Nc-$P\NppVegCjTY>\lcF!%a:rq;9ndd'A:RY&IhG`p5>>Hj^/Wpn)7-f6$8A)=>0+* 7$4o63)&!i-YA,0;t\MkD(AgZah_<[k0o"0]af<(rDd%XfeBU#W/^QS!LTO[PV+8,jY_N*bApB[$!`-QWWA#H->hAJRlr$UQN(hAmmN\m!Y3R?nY'"`Rr4e))Ys@rQ6(FW9+m(8<6%1roR(^ERjQ>Aoab3a1MR=_]O/h4Irsl=W5+T3ZFSn`X0+r#O*iHD?bGj?I7m8IpjrFoa5J\97IJE66Ob[-4N_o,d-KP#PmqB;G=fXB8#]1AL7.HQoXm-[$A\\CQb)f*TfEH1Q()dJ?f&qZlmRo;a%-LnqtW3e&5PgT5d;Has=F2_VI@'FrHm,WN?2 *"=U `K'P$PchrWcdt L92Kj4;kTH=#?H"cf<@iiXjA_QN^rj4qLV";XPD9j:bV01]`34N1\%DX/Ff@#XBI/Lo#c QCoJ\IZ$g(1KG2#(:XDi8A.P"d,A_68DjmdT!hT<G[=Z0H@%j]'jQbkp"q)+)g_:[AYDW,K'LPY:rM4t>.V&m?$9OAM3$5kn+,%0o>W\pIXT`^5!6<K>k%@p]Ybdg-7nI"A9V]]2SWb!JA!k)D#W8R2B'ALHClX$++inHhl,8AXH!U j.7%W"Z6tNSf7STULk#,b=c2Y`\M8=j>!LA\i$qn8!`$El*4qXlSbfb3!aDY?2R%[1R5Ah"'$$j?8pp1qtA'Jl$%CW/KX#QcL%9a)['lmKB/(.BG]:TpH6$]M$P3\E,H=El.).V_g'G(SKG/>Z +7Sg  PKXjE]t+.WS^o8?G+9(9o@9@1c?LgS<$&?)tbb^'g(er+C2@fq_->mnAkE5cCn*<>AI/KAoGo>9TcH+h`Wd? FbbjTld6Hm+oYiT&XBq+Tb/Yf9BTIB^Ch`AZldmX'?0WT. @VSl&XcW:#(FW^.IAG(a&UF98DfaUc5>!o9$?$41o7OMdQN 'CCF=3n9,H-GV1:C2fre*/DfeAAgS<E.bQ^&4b7:#ChiO0/(Hq\S%DaH#T+7lYsIUS\"[Q60MRkTZpC29Uam&%?)2LniR"^$@&4Hta5=hQXj*M_EC.4DGJ0,V:>Cp#^OM0Us`WMg\KO4)#5VeCjJY-3Nn8Z+dM8HLr;&bU#`l<.J:+WdI9TALi7"Z.An&t-&SVX`XOY)D:7Cd+Ddfr!Y-0&jr9ie)OCg-)sqid!Q,>ghj*.<4]]ft=rY!g>i%M`] kX-bg;:*`c :*FpCB="6Cp?Ksn1E-$6*nP"]JM1==QSeI5@A"1AJ/Z_F%\AC')E3ZqSM3L2.IfClYbSGOb?aeeqJU!UH_2PI2IVoJ6q7pYVa71dJ%G/foptEZbhC#'i^4tPXI0= KDT Y-TRaHabpCCf="Bi`+t-V#dP>j"+FJN/KL',;Gpj3Q5Vfn6i?8El?H4p'?A"h)A'K%Sm^r%a7-\YgE9pLcSV!=?p%(7TIdC,UJ?]b+L0LJ3PEHeXZTr].8CR?b;,t4!C'>Z&UEGNT$PlIQW6DSsF;WeM2&o=mUA>cAhf-i$qW*KB I)9.1Ae%^ICbAe2h7.Z]$UQ!@G,pCLD1J>:A#U>hg/fathk5@GnFm"/:HW)V\+\*c)m2Jk8DoKPOBc7]fSih46G/\rq0&rm#,G3J;E-*rDh sS= *C%f.NATZooQ.modqS#(%dHm;?a4d&b!XWgOmKTf"q9I -2%%q,8R4,J#$5gBfZTYMm,tq2SA+ifSo/r[#P]T^7eX0(.?F6`%@`NXKL=PX\?XR7=GQRsCYK 0Q\S/ZOS`W`[9W)X7V_(iTHfR:`>AF:g>b LA3A@>8dj3,0ned.C9%JHBg&lDPd9#)n\@9&p)jY]=s!9 :qp)mJ3#7,;-Nm`e9lY@:m]"The#>be)i8Ahq]g 7#C_o&cdPH13j;Sp$)0sqL`Z.WA8[L%sSPF@E-(\S\9Y(fRCOm4p#A+/.-O(a11A$tQm_(R)NjCW(2f_' ofHL0$??.r'tB.`X]ZTY-740RoY&iN5STW5I Y>I!rPHtYX"Y/ ]m]QInX!&K`NQRU)A>OG5&En."WC4<;4;\=BB.gia@?>Y0'ASF+mY*2#Lb[9B#JZ%RhJ<>fc!Ae*daYAO6gYGjGl-!/h69M)#jlf86;rhHb)i)DV\@*_9T:__^KQ^l @<85s9 M6]?eA!#Cps.,Y$ e-f$32>G2bhqZA!B1LIA6@arX(5L&:e!eg0X=_bWcP-%",09!bEk^C&Y!irAW36XKqV6/MbI)Ak![%,TPZ/AKX0]*\WPq";OP*pa)Ki!,)$\1N-X$@M$b!8<;O`$8OZh_`N0mh_cs1/7&k3=["]tI-OGV.oYk Y2+.riBdRQ7k\d8GFpG/PVm.]tlq>RU!J_h'fVdeSAbW[^.iXN!f#;cO[m]U9NstB?Y`+Ab(IDE;'P.!Z\N@8!HZ>d>(@m"p(lS4/XIEKNZ5h:\YL>SWGK#]2OP.q;][.s$84/9FJeN')"(&q42g3SKpVUbifkn,mpIT- @XaW8j?_3AJT:Voh==X>+ ?1)iFM(aWV4]1_hI,\Slc#pWkThsicBRV[AhADB9KKPUJ`KL$eSSPC/['K8(hb?AE3^sJ7;;oEH6A8j$#1`AQXq]ps9,Ap08AYc/MO]IfN[.]7tD;U%6lh8;XH`s+'p4diRJ%oF_4b)cOH8 /J=sS"0kOl)4^H.]mP3:cCoJ8V1hl+)+2d7W Dt$0'FNfB&5PlW9$M]DJE_D:(;N(?$o&d,qGsnX ;1dOdm0c.Rl^Ct/GiDTs&^SYV.PW$"J@8 b,>I-<Gm&@`:[p6h-V:)e7A-96;h8:[364n4pA5C8I3WTj%5k)'[,&4>:#.aEXL8niGh;KrT F$=M/DjA'3s5/9@r1hqn@+HYf""RWe9Afnlh*\tg\T$X6dE9C#q[\0\:dFf4!-]NS4`VIJhs6-=6e2lT5cCT"24i5G$]2n^Bb$3$,R6:ZKjn@n.A;.MEscbH4 DdA?j8O`!mM#7p (Mb(4\qBrt!VG>>(BIRK#@Z:0AcaHk=6AL-/"R+&S!c-BagoA8,om0\!GWbeO<.R":,J>2aU0%PFdYd004$69J5;\tLU!5Ym$k)$!cm%OR%btd4g`bla;Q&(f`X3:4DeNTAmo=m*:p1]Al3O5H8,'4G6c-h3;7n>Fq/)Q'@lk!K[k0:eKGq8'^Hbjj*^%?XnWb)/soo."AmJq]dI[KZDV&75oA*F:"*VWY1d`DAUtYXFESlLQ:A9c_qNT^NYs.-:rZkgJ".PD:)-#CMDPjY3^/mi\s+r67s[c@V=;W6e*^PJO9`@2fPXRojZ9Z%1+:OLf?fGi)YF]!H %Bcbh!X*+F!)/)#Eg+Z;c*f^&2;tm2;slJSP2a+& \W;9)_LH`"+S$tAU MQ+dCr^ $1(AY!.b-2ce%n.dInA;#Vipko"dmU?'\qoV[ngS)K[\IhNC`)f:On)g3&qdb!?cQ&r,.UoSd%9KA8O!L([*H.!:j;cE7V65ae>>K)=('.65D3G;+]qYa4Nd;5l+PW ACE1@pAZ!9fj`ksP&cNdARrG dHjaQ5oVOYpEt>,V3SV /T)`t (A(e3UG*B:$*U%1qF'.Y&@4m;$i R!&GXLANqSP^N1$/D5SG9AP@nCAr=gHZ8G\FWrDbm\'IM:n4b!oXSa#UmqGQ(=UD*99GH#2FAcmitH0)]lAfKB;T<fbN'_q=TPt.AbP]s=6gRTsAZ#aJ&+`[3'.,nkmM(M)>S5Q$tR],lh]mC$AP;D@ULc0jXAAT>pBH_EDkoO7H2_oUJ!P@01V94VqMXTS"fUAS.Vq8W7*8jMn9>mJBQE0?C@1KW>E7_AGr\BQ+q/kpCe2B@)'1.3pE0P9NbKC$`5X^'*+[69n.gQDdk!6N`c(r5CV8O[#$Yh Ur$&Z?,6iif)l0lTtGi%Iq;+L3_U>Y#*78dKr,BH6An2gR5bcap^l)Y3!c&>n<VT:7o<)r>.ee4 aE5AcSdA>MPOSQK\#=r&1"0_S^@0*e--@bKC&1Nc"P;&2Z:GGifAL6]:t%t"Y$9O#GW]?-?>OCNKs A@-ekH0m`@*!+J>,/WJ9]kt5tQC6j+V'VG<.77h*g&)+G9nKA#5TAW\ti)&M3$k/7W?A%\=P*&&L]kY&rKk!kjTUl,N6R7-cPUHak5odkeHZH9A3V/]e/;fYF-<pP^Vka]?L%Wt!> 'JSsn/16VA/c,(-q T)"`=2JkBj^:aT8sTp_+2o%N:b%QTZ\gnq"t4D_1B<2AXOUM;O4*Ak@I\ENSP'eanE/Y^fL4TOAcV4an>(*-1fPMHG=)$j4j8tKb`59DFSA+QR?.;n<(j:3sr33Q-o]b5;j^l<-Ua&+5%1?7smY;jbUM/7"Zf70BdK@GnRNi%\2A+%S1J/`?(NH8JFjLeJ Z9$Mq986!Pn6H8E=Eg=k)e]>^Ad=?#rpK+J^5QQsb)oT1ch=rtJrj.c+XK;Mk_e_dc ^YG[aWPCZd!n,D+1F=_O\K:LU3"G'rFViOQO`B+PP`%XRnoQg9V:YCrJjl'rh5"HeFCLg:B.Ic7r:&F($UKC>8#C"lGT*p!A\3'_A*'.InVC1n8Z@F<O&B45YQ%bA*n<&r7.WlfF@>O;Iq7_7tWk:q")I#=4mK(56h45X,q,9s.lG#mPRAAfs2l/8MBX_na39RX1B$7LKc'&?bV/'g' k_D5I67WP!W/a'l%;ZWeAH"f7AQ;OA"^*oPXQ%;8;iU46BOD>lJO;8k,[Z1W`N'Bk^0Q_7P<#K%b*cpHlEFaJMNaHL>>J(p@9OVAOb8]Djdf+69iccX jG1Q9kqd*.,"lmC3"mYNY35[,2A=oIg#`S8OJ#be %49a81hN,bj1J-ZB9MYg,p*,1gKDe=>lr'+(fb:U#_eKBV(:H8\eY-Zs4bW5CLo:PZ]&V ]tV5`';2A@r:h;k(62p]F.ga5.r%EH)=f=AlBO-d;9*;n-=Ztn1@/-,7Nm%3t"^-?+sTCNYq)pZ[R#%BRe&5EM98USIRnH]R,Ij[aJ5#GcDL1P2'U%1U4B-0pLMZ:],^f*a)tYI6->6F]]rp*Fi! h2_=EaBn5D)(F?1amaLA4)UZ)\;;4B8F8PAa#XA\=$>RK>aPcH's.cHKk9o9Yc*7CO;(m<DreX]hQ>1f5^ZpkRf`5#?(],]V@j"JEi_U&+ec^F9L+o6S`$P;g':4%8ZIGG_$22bNQ589\KG%;CdqrRWd"f"GcNj&-$QNs2'2=j6AojYZakT>_KbC4HIT4.^o=ES8*5JZ1<(!\Fs8!r;!:!@U[/oA*I:AeFUE.UE$^[dbN6./B(o+&Khj";/-h7U]"6pb4W:3Gd^'+82&iV6L$oar/'MR?Wo,W"@YY&)#&_<%eETG(I??e'7cRH$>%H&b/BCF"pt+97)2YnSV3Mc#`m#smn^Y9jpKoO=e9j+fnJ+/V]Fq?:kpU(tq8hX\Zl2#ppK'X.Xa2UdC95c)8D?q!AQmHL.qh+?a.PN;ZHUmo&jm]dEnA] fin@9St "5i+L-4s,$sW Kt^;[K.q2QQO`?!m\?:*]-j;5\Te*TYd[R*#XE?R%JJRX*gELE/ZOMoP'"i-U[8We5H5qOj30C-lI1\#MAo36hPt.caONtgNM,:8aFnFomY<fHcg[Hl8P AV!IbYROa,4^dDX__$F5)S)b2e+73K [4#q_+mrX?'YC]N2RB0U(S&QQ hOgA,AZ0`qb3V'n35LNK?FZT]%o7_G4B)+dH!WFj;?`(OA0p<tr_D)-h+-XQ:Q9,UH[4R3M Xc7#T:Fe&#h<:H23V*WWo046t0IM*G9$@%ALWR2C?ADqS3e>4(g]IO/H0$Sc3nH@nd0n)lG;+$%`nilmb*S[gZE0_`Rm/T>RR%">8C$4 be`Y$@Bj$^Sdf4OY_N+C;K8]fi!4g3cF<58F-dat-XT:DkVSopo4.^ZhsjV/eX7AEPS2FVgB$'&Xh=VSM$Ik07PPW6ZO':)3Uf7)dOK8jh_f3?H(Jr=J.LgWnT1_eA=M1e,6f!4%<&&A2&DON;?=N_kWlt\Kag$9 26W#;7 crF(` K+M`V"PfX,K%Ul_d@0i!KWfX*OGp4i=EUbSAqBrLALs%[A.^,l0Al?QEaj(amk)]FBXCiYK--?0U(pfC?q!+_=@mSLkXrK'J*gge)^B-a6n'9Hs)75QM5+cQ_[B^[je,\&h0,L2:n3+V:eA6RKlQnAh^: #7oU(C74=K*?8a@iMN 6)?Y2imWkj)jL3t=2lo%-A%Gmm6AGXq_4!Ebb6`hLDF-N:dPU-j=o@5]'ibipCDlZg8,*CGk`A71c00>eW@`lpcN++U?e,n3\;Y#a($_>;^HrjD$XkV&[F,SB1n7gSqmnJZ[Id1g^sl*\E]lIB^ROG<^fcY4L[M^]n*O[R3GnNg9P/XAAM=16F,A^VM3/HLLO3#gZ!31(_R8kt:X2EhY\#6)+[`Q$B#C"A7-qpb/JiZ$eMFkn^MD ,TL4B?tXT&-c,/po271,` L:QjqT/q!K'EqA 6n#[#UY9n`TOWqC)=[A!8`QY#;#:fLP\"n+9hd&@S8&98>gA1=@,sIE$B1.F\m[c2-092XJD<`_R109#40(RH4j$j'(^%l%LaG[tiNdNZd*L1\p&tAXEZ$g?Z02SLek*3eor_IN&2ML+)kQAg3r8Y'\^UIW-h=C1`3]Rm:6]k..&0H*fa8l.nU@9a"kZS0BW6]KU9Y(_gF#p kT*6NY\(LoI+>=7e":1nOl4V"$!IZZY,B8hj6fhZ7>HA^rt'%q(_IeAAN#$#"8MFmA2qMckc cP)2Nn9;YF3LqeBr;(\kgkAfI0eR*@.h`&A+`ESKeNB"7q;S,6E/B'U'\'1FYW[5,sBM+KgV1A\l(q.oU7(!F0!T:g&.X(<$bD-DS]3Cr[2U?^/0_g%5=6=#cQt:]hj1O7-*[drWco:"b>R!sa"'8k_dU;QMV?:lSAcFDAaK\bO':MoAp_lAh`-" EqBL/@I)1Q -:'/=tR0A#;9N?(II?^7"Wr8-.@_*/KdAbk=Kb?6/5k /l5J:::)1cNJBbV/bC%Gf<"1r>kprV$Fat17n#07s,X$5"q5'M'%q%f6Y%r'\tr>+\UpOrS;&:N*0&?rVlQp*q:9LhNVteW"%&_0nP]CVWeWYb[mIOkkDfKdF9END]C>(/EUcC3'KtX3)- l^9"AmN>%a7htW0sKW>ko+-1p0A2NPU8ZpPV[sI'QOYe4+[F%aIY!jA `E?h[:=BrTgJ4p^1d7sAitnEHsfm)?\MJ1WA/Zim*4V-B3o'kMrct@h.>*OB-/7YG=)EW.tj!CpSYMa>CdEqFI@`1G#apQ/J4LV_VFO/PS]ZRV;s84(hSM.n8(`6LX.,jiGkF5,*UkI$H> /@ArY_7EOm)/2;6=EjTI&*#\e'#*2*>k.3T'0C*o0^#OHh[&"W6Eo2A]5GB6S,?"m$ER:Pi?aY4pH?Z; A,m!K+sF/-oB >-Xh?WQ'TI)L'mBJWWF>%mY!F&X8ZZ0)q2UfsSqZ[X:d0[4EWb!S7I(,FN3F)LdFX^3:`EhCO=U9>5.6\R;PF;)`^3M4EI/A b]Re\,*TD!C[T"iYIj^+l.tUG<0&ID.JdLFEF,lrZogh-JT-;a?2`HS7"eQ+Ng&icHUr[3kn'?nNUVD /b@7[cRe(U6BA?jmq>ToSn @6G03!ngRd&*ZKo'Ue,Ll)_2'- h1 98UTlo@LX@i7hgRUb\trHlfc\epd$Dd'=6=tm#:U]S;d(`ABONL L6q,6lVID;;TVbZb3oT?#!cjhA#S9'J =Iie<3KV%eXg9ST cf%hT!aZIG74l-^bP>18WA:NRE,1VQ>8n_d`II+&4Ume@SeS Q`+>dmTNhhU+8=+gc/Unj=\LBal9)>-cT7]Nh_,!'&2Oa;O_!p:NEnWnKsUke-I@`1=nB)N>[)qs_)>E2r3B@c%N0R7PVUEf['eeAnFZtesX'+o>$5Y<"i?6&_Fj*iY\Rr]5)>7/E\e?mp^dUAn]C3?#T'`oEe&3R5g7t[U21bj#^2t?>HAVAb)D]gf2B,esZ"shAWS=WN)5P.p+TZGN3\KAkAmHN2DbS[V@R1fS`Ti50@R0>UdFAK1)Zi*-J0D7j"/FE0RKgkB;0iln2Vh\<@,l5r]`W?D2+"Bt/6X 0L>3\066f+6tYoOA`?=e&r+4_C(F?pZZ_h]2V0&2bBhp(=3Q,]EGTePc&Co;lFKHts'mB>=OgZJ5rFRoEQ6$W?]j$BT@RHgO*82+a[@NRqTPYs:Ks+^NG+2"2jF(5!\ kq?M9_GhBC&']rj'Qj)AhgNs#OnOQBXPO!o0&=nZ!i%DX?:cOY,2Y8#2IALK1>:R^N+o6hfqpU f[O%m6lQ%_I0=>bgAG'%\7(4Tm+LtH]Q(f[KYjRnf`W0-B'*LL- s90UE*\Ks5< =BWFKc485lcUBk(R%gULHnT^KAPiWSR6 ?35O?dmV- ]mH45?&LV=EsoB]%)!*$'edIP"HG+V/A::SkJdA1k+@K%D:IB_ENml)0&r$NS`[IdK@Tg>Jq5]_0*/Q-KIb IWTFA!SDl%\-:M7ni6Aj9j[^!L?`ZS^T47j`e`*lc!hK=rb;UG! #CL$5c(3iTti:(pCpR34`];*shFF]-d>MAn59AF1a_E2>SbWX_0to6Q'":44aKk4,_OWN'WE+p9GES&eVmA!ZAWe;*qsL/ l"?l1kg2d9<5jgb5\#OmVf3WH4:$$ad*b>=G)U/n7dEeC([U<@`qL2iOVk(Dib2-K:K?Y*r+^A^,72qI)JQ>.VE SfW`"Qrg1`cJ!oAKC>O @CpG-A0t@M*]8=":inR=\NnGXpC1+]3lQO]i?5P-WsB0t^VOrZ8kQAhM+-/3'N7[h^&Rg#A%K\^9XV4Rl gZWEKgPEG;$^iRChYtWGPlp<8#\6OVm7h`lDL-V11E[4QN:,kH"\o(<)7`=*@tKW]66kb^#jiLt*/%]!)A1(Vt]%e;K0FREkVrC,XQJA'Foj:?I&Zb>^Z+4D4"A9)%`=J nAEL+q\'\F$kAP627_qJekh$gb:_FDj/*fM#1<(;qNmOX/:T&7B?EMGQ@QAs.O*o2ld' jcoHpC:/'!;`CX*#, 0M[`0HB[A5#]4&jDdoo' tf6e",o(9HXr,bVrfLCL0Aa.bjVFXVF5P>b%R(lpHU*'3XDQQWq-8MECG"t"'dj!OM[_N,FfE40OCHd6Z!'M&6f!PZ0t+@\2#)&%Pk45Vf#O#be?9I.6DkcS%rV/\^Te((c*l7+cDmMaFCFhGD$Lh\ID5;V0a7iRqdV)<],d-e>q<E[ (Zg7.D!\4EJ4[U(b@(AhmE`_OS9G&&pdj" q3PHR$me3_LRA`G[9poS)*7?L"2_qe3HXV^[%rTArKEAa:S-aOS](?hsJW_/7R\[+%;pe*kZC<@(q`<8!`&7#4.OoJfbpo3ig@50+m*eR53JRhqrU=H3GH@^KM2%<`pA;<7dUD]9FE$tYmlj:4&)lWpjoXje\L;nHsWBi%7Z8@%W2M>]WatN3e&Ya$P?d1_j+a6i$FGQe [Ho%f;j#Qt=QGoBobQN?lP1[f>fL:)H^SC9A[ ;\(Q=WAm6cp29%SZhY@(8TsDkq=l3_I,h(g?%q73K`h6-55Nigo3:!<3c4d]&(M/RC4(eIiBKW,oI1d4!(<;B >+HZ0)e.bs' II6_7LN#)q0a(AMn+>q59C$8oU0La]iI)[H9,gNXL4&:BUAfcT@[h'dlY4tBR90i9=:_bb?\QZ673eo0Ea?JZDAFnHn/UH6]C0 /t-;)e78-B$@6G%OBSL1a.\&FQb-+OUZWrW&1ecmcSTKW#ZdeT1+ApR'5DMSQ, 9Am& )+ e<2W.Wa?CO"X_l"lQ/Q<*[.hDltZ^6JjC[PiL2814O$?j/QC&AnOGmtW_ b]KA( 9LO*7FOICC/7dr)pPH!B?r[;`^d[\V2,^08jK/C[M3k,V78XZ@LoJf\HmZAko6>rTepb]iPgEQ!;4.c$ClmhP9 1T=6&0GBA*(Un49P<=BR:p2#p&bO!H74&n`98`_,VkA6]t dGYqeN"grDXBFk;-"dNOARN[5-%).(_NSa/RE::QKJnZG%f"PP=6#l'D'I48qT\;))GTV2K1E51o"_6-RH;:$cTB5"48AR<+U*>A7N?5J+iEFl=h2p+f6]h.fH!E0CtSO7t;SK_/h/-^ndjRX4$rfi7Onn#B$CE="L=nLG[]3HB=/ph65]@7dB7P#"MTBSV[P-60h'#NLG=klt'MR8q=d)fN])[O_`Ia-7BMX%eFAkcF6JT8MYV!)/cL3[cj3VnH$ &O"iJ_g2HosF.@ To@V7OK2"LsYYcAs5>M+d:Z1XW*e%Gm*K>tcI$W6Q:;KCW8U@LOlgU_)VE bAQRh6)apl,gr3^#@NbAij\=Sg_"teo$a WNJ s\q8+r@pKXeJ*sh/T'M=L+QaNK!gdrAe+n+FWDCZ"d73O&/!Sn/0.[9[> *,%SA'G#Dns-Q(RBA`aO7ehjH)t4Y>ad%^:]&QOX[M[-RS5W3846J>)6])AO>s&GdJcAMo[mJfU<>YkGoI%14nSCT:feac2KYL[-! Hm.Y7Q=:(&B9'$OVjb=d*e?S5Zdm'Ar!qIRLG soR`^Z:ee +eAt.Y.FKE>i*h$BGo)I4L)L;A(P!-]ofO(X1\m,kn4&;6HQO>TAD--L"8+>W$6m'Yod9bg_4 (a%XKa;;A)@t<"XXDf7j(g6/+W`o$%[@-c;ZRqq,9bkhLBa&X@(>sY^DS2fB`Aq]pm'8iB!RsL`MeG$atMf'^$hk"i[r`s^LS>(WP-?,oPj_BMIs_1gA$qsn?'oA1Z4Jf0BFg8n.[sf@=gm]33!6m8_IK6',"ZM[M>)ejl/M5S`7NlJr(^!dDiF[.n U%6S]nseSC8=_2>bcCgcoW!sAbgRfL!kgj%81")9\EUQiobP%Cd`[S%t/WV[A`T+_WFrsRlPS]gK0G?)-l)i*_X"4J,[Vl8mQb= 9Y(a^=%lViQp(feU]A`:-MU`^2tA#_mKUjSE*h,pKKl^n\bg5LBF6AiUAt tY,8kJ; B:*CQk]!fn4<&*&JQh^]rJ`k'j?PUQbR*dHaYWN`IqI5d'*L%2HmA?=HK>g73Ih#/Xke3&c^@O\rHG&A1&F!VPW^2'H.[9WD[;=#!Wk267l\ggd@B3(CnV"@!^C*Cm!@8dg6pIAiaVY`omHsisq:(]e_iW)(,.3 '_Y;bm&qQXO[_c2L*>=U)U@@V6QWjlsCA_(^TWdoAjC-6.^kp/8PVmW2pMq]*<[rB(-bHH34$OB\;86lq!,hgU*m&"",6e6`dNO<;S',0jLdrW/-I\P1IJV##$>:TEl=B"$WHA0]k*cVFE+#j,%ZID]KSV=&2S=<XD\h!tWF-.maP>L(qS-;P%%"9'*IqA5:E(-H-^IJo4-*9o]ogIIqd^G[U"P(ngM;AYL)a\+on0"$+A,iYLYIb]Ok8_fBRloV?h^>i?A;VM,5F5!O;mI)Dp(7"H4E+C8$M,K=ZHM3iaT?t;s*\4tZ*f-!dB\9UqF>siVD8lFn_eNf,5In:nD#h.;fF#M\P=*J,DKKM\,pq1^`=90Q!e=,@LU-4PFS(IJm/J$0mrDUEDlDZ/<>SUO"MSWAb 3ER:/YH*ab4%E-KC g>8dCgZT2$7/5Q?8)&MqjOj34>%m-^a8GG*P_fF?dA5rhNmWU`@XTe,O;S)EF%,0Aj@T#8(1A%1:!?bI?U_mGggnQe\\1 1cTr:Wbbg\b 4RGo#7Tm]\@0EaI]:G>4:2CR+IQdHmOsFBgo2;1g6@jt1pC'GAaa>/HM16?i(+/9=h'-[]OL4Q0&eTGc8GP:A'>O:1-$#.AdI0Bh9aALq^#XbS:^>me<*kQ*H&g\+oAO*#U;L=M;?#!"b[^K*?iL+1seV,e4]M?p3A(=L3ee/?D#p#)2ffq\lXn;"b N]1#GMBaGDTEk:[r(4ZF$j50M\K5W6NIMrpMI;E5X@I:nZH/sA8 3)#,l,1J`/8f/gJKP[h%Z5\"ir_WiH; Gi.-dF4UA+#(`EgB$!\CiV2nfHi8bde#CNHNg20q>KZh[O)2T2+'cUU'#L>iBnDJG]`*"i>:Ua<\bJcA,b&*i3Ct02M))Q$$3LAH90I7TA-$1SWpR3JmHQ<)ki([726n)#$LJV,] k[ZnXs")+P1EUfF--*kAWRgp(e%h^Asmq_EWK[CS,AN5U 'bgNLlUYn]A/FkZ]F9KU6OtVFV$>M*1!/q2pKO]8#:Q4'9BA@6#N/UWi@^,Bsq!R32;%Za_A-;;q+5&R4?8endVAd#"[O-?b$`E**Fk "Pl@d?3>T!taRl5"Q=GW"IE2?;81%s_b-n7jH!"VH[-Y8`^?[#8kBfN)oKgJ8?k8lA#0V]i'[dc'tcNEbaV9XT_85*(<5S_W!m^l;h`Z$`U;\rVKW:V8RA-ctGH7O9roE6;F0D*$C-(n&Do^tXcL3=$%@K3&An&/?/iFaHn6&7'X0!G0o5ng*#fHsl*_BQT`N$fgYGUC.Le]JG@NV!fAS0"WEGApT!R/^)#D]m`H'O*kPd?&kkAPrR\(3?X2lX1D'"*Q+,A!:&N_W,l!H_'PZIDVD:X%1j40E[>c#3l,j,.JdXlY&NsLrL!Xff8R;6#%K2R(p%O$rB")9tr3-FJd7EYgTS A(\!dgX4Vq_'_<0FJ%8V_0U>)jDSpRJU0K79LT2(C2*?NnnAIF9a\&AI['B$EkH,Tt8:JRd7bJ1BW6 imLcO27=Y)o%j4C/6;%[gAZ$k#`cWCil0[:sbU)Z9`f46@>X/\>MO)3kLnmtL^/4Q=^9a@N/n^D4sZi)R\]0\4Q9YE4VG,@d:V?\ jrTm)Ra).W^YAq]-=@8(kKhc7O_^CUdZ$3ZlC-ZAP0"s=^\Q7':=+X^r%*," OZQ M, l%oH2X7Z-1;/p,f%i!'Qg90ll9cE.]6)=J-71ClLUS*D?Phg.t,`^g6c`q#O/NtWP1dHAWYFIJL/;ZbrMd6Nl=UDrs:\9D?#YHFK\ BUhIJD#A`faf6"1X3g:bkS?4a 5dY`"A6Z]+jeU1QMhcQ6]@,e"3)oU<Ql59VhPq IO$3[=&)j] 6e!fY+9$Z;C)%p+csgdnAl;Ote]k !n9/`Wc`,9QV4F&Yq ?[pE_lG*nmem<mTPP'.2a2Q+6.BY0dmi-U$%.Jrt37@07jAjF/'6$!#taa;Z_f0[)2l"8L8Z(-+5*2s!PB9Z4K+dUcX@PA olt(IN]T3[r*q2O( gV,8 \5 pQAUq`ln#KObIiH$)Cm=\BaQ-[+WAEL@:j@A$niZoQp*\fOtI0/peWG0>OL?Z`B?s@i_?J9<$23sGI OA.(ZQ6hotT-KjOi4ai.T*27jrJ!jg$3WWE87=8\kBD`%53Pibf[jBAnKP)\XD*6Md-nrH Lk'o-Bmk6SO-l=d(Wj"Amp!VC ,iOF8IgAb7_0*XW3o`/eXiVN3q2k@p=+sSiPVs7$1hR4b@MA-'Oo_9\hcJV7AA#it^L&S$GV(m1FWq38)d\CY-Bq)\ZaHDdA%"5-IJ\=S(-)^BHEJm>Nt'fdfi-`6%+o(qa2o;j$$AN\K=I$'FEap4D6p8,#L-8%-oUFbgAWiG[nD.g5p<%0FM:ef*AtRh5jJE=N2'fciPam'd#\@*R>?2Kr3Yn'RA)($i%$,/eo_p!8^#<[%1Q\7p!i5eR9dr9jkE#NfPej$kW,&Ar3N;4ab-a-7a,qtrcArL^+7<6@aO_ph;C`j$TeL^UhfA-BjjQD>Xk]nEKF.?:ASU8\$A!@r+XLUlr?[a,@dfC_fN810! D!KYBtmVs5+#U"I0q_F^A2nfF0RE>t&P,`0V7._ajj^<>Q?tl^!#$O:tRlmHd!BejK]aqUCaJm0[Vjh/*iQ>D,-;S]XY$Pn2@3lh1(:AnX,,`4?'Z0 J)_` -Wr5?\r2PV_bA:h2HL'/?A1($g0?SG!"=:N+,8"hqI9VYfN4Y3?bS<;[p\3/qK:D80G$EUb]tgDU['[O)7Ht$c.7WT,dep*%&Ta_R,XT=n4G4M!/A.04d/>Y8'Z=Cm=,A'a!=bhRADYk9?sqics9TMQL_1?7:O6E:/^de,TXZ3A?enI)&@ir5U*9;HYV/nn$F"oJ#@a'%*,m6sHScVQFj/Hff/Nr ZP<'V6FaDYH4<8&i7ZTs/+FDH>2F,BP&BAM`9`$NTRCi7j*,a\S!>O?4rCV4]N1_$p>]E2eg aJ&sA^,T;n38Rj>U9,`mY@_kIsY[fbd%XmmD@p7A6^01L1XcG`&t+ISC\L^,7GYI>)'Z +t2.DPsGO!hae9L0Bt*U6D4g.edlmm;g(;=:h5:@d3k?@^!mnT%cjRpQPE8r8BA-70K6PS,#8mFp!^_lDl@kYfL#XtMEG]fe;d%%5:(>Q dF`cZ/\eA)^l.`3dPAi6(4VAf7jWV#6jfVD3.-7,$aT\ICYnB#et H#1SLfA?KNg6lPl`.0bdRp?Y!rl(JUm_?X)l>$/_!5]r.]f?M/B+HiL7Mf8P;A@iV:]'NX=K8]_^$, <4< qPK[gag.V7WHF@&ZKq01-"8g3E?]VK2ZLpmLgehF%SfQ"YM]W?FRJ4.V/G:jGpe\bjt^io$r<30]HJ"2n7H8Q\"o.=BsfZ\=+o)@B>S5.f]]Q'K4^bP3Tj0(q&)eP>

          6LjYG/,CVt3*DgB`+_q'9lK'-Tb+s)T27FJ[YR$Ot^!(W$beC?m[DgRN548N&LZ:/?sXs!F4]gFV*DnRMB`g8_X+a7qa^QAVgj.q0!rb/]OCp01ToFb%]qAHj,YTY2:PrfsO@?ajC$P(KShC T<[^'gO?!f#B]].HBS`3X#p"':.l^7m^,J1843Mah@-qe*)t0ZG2l3FI*f]EU8CldM29$WUD<2m-&'B;kGU\$gsib7(8d2@&-r b=Q1Uo^rGFmaO5?iK+A,A7">b#Z6GpJk-"*^VNlaY> qTlfc5K:mCT4t!Jk&1Y<*CU$'d5qL">s#F4@%W&+,[e&G(s3%Bdil_&+d=m#oR/j%1CBn,`;\:Xr-` &9a#/A`5`^e%V-iR4X+N;Tl?fAKpYV%kWL2P)'<tB?j2QS-4Hol\:8@&N[^?aG>eB=4P0)#T+B,Ll@Gr'XZ!^g7iF liLoAG#MX*kLKX:'A#.EP-b$ZDpdgQhP5A61n:&B r_=$g-4AR(IsV*9CbiWH7Gs+mA+o^sQ?4(p"B @?:B!'*kpj@'^:73Y[[P.WoRKeOm%066gH'6B558DqDXp6tOQSsD"c?6;"h,msOpSBYjLq(QAJZD;=Dgg@Nbl/ d_$0:fM==X2\=m"j][d/Z7K1[3aGS$p 0.6ED74l;g"3;7*C'c*7U8NpCZTr$^9FZ7AWf.EA<X==C-+F<:$oMa=k `=-7fS!_qfOJciIZE18f_e64JQU/lCF9Q`"1^qX=6iE)Pk@s=OPT) X&<$!i7Z%]alK'D Dl#VCl,h_c"I:^IPNUWi$dGM8@sSr@&%B'XcqA_@1a6eMZ,)ABFo< $hp]9!R_@1daHGd@)*KXpgHq2b6FV7>O1&aYi/!mVUmC1Ya`` ].M=JYJAX#q9F'k-#:.YAn!foVE7lb9AbBTX$LlFRR&Qj"%UdbQ(2CIQ"6W$NF4P\-e,<OsZa<.P#_aH&SXJd^G+rpNtIl-4#AFM1&m,Ja$GNfoh=e>CRGR;G72S1&rFhlAOQH#85[.Q0<_FNk+F\iUYK'Kg+,cYkkO!Ad6S\<9`n`*AL:MH*-NMo %1AQIYZB"lPft9$q.4K7$fiQfW@05*2M0Q,gaBYj4]Al#1EPUWAs)pd3/fM&;3C*le=YZF'sQ!pS7Tk1+hGA2b`A'cs*&&!#V2;*;Jd\7a@S/R$8mgLpcdf](QGWYAAF;O":QIe()+[::3&Xms,6G#7s04PXnp8T-Dor6bAZQ.i2VIC!BCm&,D5j!LJ?/+M*i_8t+s6:!pb^;qM#f:)k4&!rfLUQ/-GcDq9%?$qtNFe#4:"*"IQPBZc]61@(fT!7/.T7 -Vn $2>%%,jjIb,M$`L-82!q1&?%W0qpDCFWg@U18f*%::H%sRL#n/t.r!gg/?VeM"DHH6AI;+%a)h(ilYcP4B(lrq?$s3RpED3%\:o!((N)]]FrJrRO)"A)2i)t&LQh-l]WbUX=iP>l[Tf6MOoM7"f(:hfim0*@?Jio3=If%"H96(<8;7(M;/Zr!t?,=K"[aD:+6ak;,?&:;;me?f'7PGmT(B\`YmFqTaK7 :]4\Ap7$R:^?Xh0qGB$qQnjGaNR1]"Y9T4Z% T@pte3Q/??@4*p\^73Kr=s*FGJ5e!#/m33Arrl1]/1g6)jSIG:ah@9/aRR]To-!toL!hb0%I"1mJqi[H7@fT8+N:)"gCDr2\<AW`3q!)#6klf']q)P WODh:JMo!-AMX &s9ZA%:raO$)=,Sa[sBp*\`U.^^?J5nj3Z5Z*O>\Z)r([G.%e.QJ(DTm(TR(F\V^WqMk,^c$P=0^/noT/AncjC,c4>r5OrQOU#M6,e2U0YcW;*1$P"ZM/1Cbl0?dQ^\A6@3:Z+-^nph]2 2tc#>6&Z@6[*B7]fGA[cU&)Sk0UgUe.FFA,'Xd`6epPmXfSsT )-iT>MAi:\a5+gl/.pP@DE%'St*+r;51hk6,/4TCUejW %7e$D4pQKGFW"r=h=a8^s.hp!?.6lI_:h]fD:i5=@m"3>^XHa\R9KU?;Vs@_%3-3>$H4L">8ljV"O:4Wje3#D<b2:2(,`RX*qj_Bm_%sOoN/dqZ?,,N3`Y2NOt2.dW8U\?OLiMXHe R/m3QtI%f)qNU@U;sfUb*HQBKJXl?p*)lf[K"UWl@BeAHi/q=[hF-*`:JtCM)I7XD:,3%tZD(LV`d_>e@@>"LTS]ShI:!WRml\NG#cMosHE@t<1Z]"@JENC&=M7gW5t=D7Z'.KtN#r?fF/a[r-B20%J-,A&5A6N#K?;9k5Yg!:b=)Q,4jXh@>h$@g$GX"sH8]Wk$\qB"0*&3q,dE/a9g>*d^V8Rbrs&J[??YH"c9<@QAkj..T/nnaaPdQ ]s.-#&m/+,U0FA/lA[$O7;lW].`r;](S62JFttJS_!I')O4fZ\4AlMm:7d1'f@2ZE-O*Xjfho)O)/:*.aQeFAA,hiAFjV0mLH@tK5 '\F%m;g?AM]]&p%A7S&^ab7^5^%P^t?GKiYJ`"aBmcX7Z\Q_KN\oYJ%F[G'>Xre>-"9R\O\_J*Yh&0([Aq0OZ%c&RYCWJW[,.KEo;8/oUC2PRM6-\sAqF?TXll'2^$TlX2OdR*W7PX0$CmK:J\MD#C*O:^b!*+rm6/ 6HUi^hB8%AmmS=cPT>9e;EMLUrFY6rAL`Ni]UQetHfeE-9bo`Z>!]C;$k\mtSE!ndgq@2pL@ i`m`fk#OGRcTeUgCB.'b^>sm s:Ib(j`%Q#. 5T\IldJfhF^kdIAZ,*,;8dnT7Abkag,]"-nL$nb]JCWR9L$n85 [f3'd(WTmHGr>$XeM4p&fd+1bTqE_jfn% kMPkXk- (Q7V,m*VYdCEZQrda(r1>$A>;@a\/)=joY+?"$%AQs?J_0p4Q<Ihck5UXW>:([Wdq#;/>MKeH4kI@m30otpY[5jAI*4g'\f0qiJ5f6V-OmQ`B^LL@AIK$or:nOHa.N`;KEh*cQSNYD.8h9H%HAn#`=[Wk(?H)?[>6=LYJIbm"QDW-4c+ES6WKS^P.?Y^>1\O6Y44l5WdA;.=;(ZB";qm%i`^;mS?$6Crjg;;qR(Af\1ID\QE;cT^Bl:> `_ij_8>cK[Ut,)DhKX$NVGXl0RG`GKH+I/H'Mn#r?Y"67Pm+'3M7&FL\DFWN#qGIhK$N1>X\23%N#@ c4i$s,^>tNSrY&Oq@#N?*R%D$.!:QU^6B>pA^.Xd[i/Je+e+AKb>-=H(8jMiD2BWi%(72F>()`Te^1;b@]nKGrX1c!PjC"@q0f^\Ra;9r-CVIT2.XLQ\GK`/oQQZ<'WnA?@>P#*3INmY$R0N3-pAO"lRsDlts!8i0NAmC?lS"A>rdil+R?%WAg?/jT@L@@? ,3)P.J(*Ps6FHQ^lM<)J`B-K%Cr=fPLptLA'c?r.\Ji36@Tnmfb*"@gh_j*mN2EhM[]55neP1'#J[4fb!!j6eA!/jA]C]7]>mii%m=o/Y>,q^LSS9GUn$l@jn?`t98@ns`IbS:>mI^smC%qm&)ms:S1c?Laq4U:YlM[>bH.t7!14F d?pH[HPBtA%9E%7m]AK4-?q'r+eL b\ZZW%j@#BpRI#UhR:FNFBY,0 MX)UD.@V&bcVAB!`\Eq %Q74!Eg7O%CDk'-fK9/49\5_ bP*M6qTENeA[A5e[MDmk7Ncj,l]a&\T>WVPZ,>WJiK'_pS(i@HR":0-T0nI\pY_5f7\9]I(!&otDqY-MRSX+th4gU)pG0KRJ)V!VGpTDiU!:9MilXlsO9K?O.#Vt("0Rcq%UaAoM'l;E!a[Lko%C3qUa2/fgC%Ako9!#8Cs!X"!fOk*(.s12S9tn`,SFBF9#n%UVYKTo=+FR#@C"r`%rH1U*o.?Ee^YH `WRM-kSJg-80T8+$ofi&gJ.0SQbUcAm=pY63?SmfL.ZL:/rA RH`-&OtN:T$-4Iq@O.r$++jHcbd^kKr33*?KYbt,'e9\GBAJ2;sq-+]r$@St)O ,H_EFUaBX1MbN*f/1W\hjrDLK"R#ia?P(-an& <7g/@11^/Jf9%]6Pj[1)6o$i.Fc#q"5+gm-3HPQ9gbLp7FOlY[j12JE)[>Zl!Eo!F#.nSdm!s(;$VL2#W`P:.^L$0"c)/'G,H"H=08o_%^Q7J`4>Z17cX q9dWhZL:IFn5H@U,.-1;q%U)%cqFXQf^=[h5p*3C6_>OVcsm<$t#-(/g4o9 >U/T>>Le@?7D(P`R`Z)?+N`S+**I#1X5AA3IJEUa";l$>_G^4 G`\5ID8L$31/]a0V[qg+grWO*^sPAga>D6[hG,jX^W^:"!D'2WRQH+XA-AS+jOhS2nR@3b3ghn[,MH@sZQHis+d%A)=7$>IRVg+.r9.TT*ZSkmfMTg!':t7QUgk`b=(HD8ON?gf nOjj2^SPXoCV=HF_[P]cjPs,bH`r4]:2)7M[L*st%2Hlf&eq@ih+Fsop I(EV&oU.%";\0`@(;)V>2Oq3WQoh$F3:E6ai-spi^T$kjc+`rD!cWK($?kGN%?T(*]h?eO+T_E=)8B5ioL6W7<9)-r1cgW.XVf2Y3R[>+0]KiC8Bh>,C!$HAmQ1_8>2UTo._a[[qchmRnN2A^`BcgckQW]r(._m\g_gGt0C`e$GJ.r-^B"?75&4q*)2CE^$F!f.;M.]>LN7P]_(^:2DLhTWH,:)A7c2sJTbDF*e%K*OL]<9"O:tWeV%]V=h)>r3!]l"pb3;\&!Zk*iUn;"A&'Wnl!=ghSC608;A@;mj8!GgAUm&W./c$F+AkA1J-P*ma>Qoqbn\;2<1Hbp;/,V^(G'c%J!8WF76%+/='$FK)!Dt>Eg""2/4m"ok<#`,Y5pdE'$&>-K#1FnB@76/(D#(pp))6aN#*;)ro'7Eea6qGsg"6qln-An'9;TgLrhd;:d9#["e@<#'AY6PeE6DnRL+jL)A7jA.qGMNN)s,_\.6EjDZ?.W*.#S,9Nq-_Y+57LNA;qZrB+4"aOr4lAbLcEA:Md5qQ.QrTlnsYJ\TH';5^F\EZD`<$8sKonrr$J&2DZ@I%Ad:FF0I)g`13t,rgm.Y8nA[.T!+k;kjd.#Ps<2JCCb$ksm0732;Bp*XjA5F"2G-e3$rrAbc0sG0HbS$N)>L-Up?fbkQSjG9mr$f.,nZCYJ.o[S&YER?3 AV4&1-6#LKt7+C") \\@`B^Y:#i5gT0`(\E*Y!(.H%c9h1HkNC(>sV3XPgi$%.@YApoiOIm/=!4@,]9Y?p-5fN-f4@i.AIYK^QVgA0gI`W&*rI?X=Y?^/98'gIYnqVg[CkH>c-XL-/h]JSU_Wl^#C5I9GII;?YteE`t4M?f6'!T k]rUol25g1I^2k0/q6UXhV16b15[cqs]P=n];5plS6BZpITMN,$I4bm0aF'b:Tpmc^JL0/eg=Il\&:T 0JndFH$n%CUH6dCAa/+$SSGl?t/2YqPIooLf^_&/UtoL[WN/\,qn`TD\/k/-b$(!+2 TI[O@*1@h;scTFUIXHrN(+);jLZ9&oe'lo7eWcX8/ '6SQ3W4@bGC/N01^_Xh8b#Xi3rt^X1Co5OS]JrGQC!&V[bR\?++e@B:Kj:<\"#tDm*&?8bIY%;V1K,#E??rQEmr29fO!a1,hgIU)]U_6/X`6n)5rok"AXA`6,g;'p30]t$l!@.8M'XYZgAV4H%N\a1eG$Sg W!Q`WD!ga(r/tXFa3WA9mm5LMT"Xid&T.q.Q+VOrj#.(@.!hEYB*Ncq-et0bK+D1W_T2_Z-'r;d+df+7dNfC!To#[$RL3J[]\:3Ns+>?4J:Z4-if`L86=TD=M4ot8!7Q"N\+%\@`a5[0`DjbRiT/G2IkOpKZ`?)T8]a[ELKqFogA2P1ZGJd`(hA&A*':c8HM#3eE.sRcb#F&,r[B3$Q7lZ&IW%T[h;>R;qV04CHjhKr8/O8IAn;h>M:5(((d1J5?qAS']+."p[kK<n)a6A:t-08^X:TejmZp1E+%;Lg%lnDsAMt;)cqgRs.^1_W\YG>A:QH+1@H;\otrctFi96"EQF_m6E@W)S(oUA`pKfM@Y*o]Q3K5iCR.gec%4XOTf8e)<J+7=\<2Uo#IR!m::-% @%$;A:eqS)t( @RDj=GbAYn]%$H*;Ubhkm8eh\1fbKl4('*`05i1m"3%KGUS_G*0 _k,kTJ6X=?A\Y4Wdl]iTonCL:t)L.ptEB?Ab+:F?dRY[H=37M.JrRl"YAjj_T$dLtbc0Tkk4hRXTaAlFt/HcQ7HINZn;Qo?\P92q`si7W]WQtlC^`EN :akD;RZHn1-+WTX,h'0Z_s+<#2+_.4["s"tac_C-WhgA*gA4RGnO,2L&E8$Mf[mRiOj^!_Ec#cq_\TEH(>QsBk^J+A0rPl2=Q%1L+4j+TdUJ6)B!0IcqMfR&o`]Gsi@AgLV,-Kr-5l,*I9(==KW0CW-?Q"-WrnqM6"[%]NcPfP]nOkckft\Rj.?A;FbTC^MfgBhD- #;&rM$( ^b#)Y@;HJ#@2g@0pBj6PiOlX%A6A7R2hZPZk(8HfP+b1GB38&F=FO+%L+j +d:J#l\rl`nAbDEtdT/8@#s>l>f,t!.$L-XjP&Nf6Tqc h4eIsWcAEd:'E;:#6Js6sVS]eB9s)q`L,-1iNKq$F0[XXIE [#[mlZ5Rc06dfB>A:% nb[n;8kKDBN[HnaPpI;=+F*5n`Ttsr0^_&@ YOA:$[^t[#A=_QQ;VfHT=4Ir8\&" f#?QW>OiSEhrk @shHirk>9/berZoY>3bH*PtUN>nTp`Xs7[2hAJO[H,bbROhY:RFqsVN+WtV^Ai*Z_8P_D_j?f!4[X0GJk<6O&A5'/SCO;:P+1DDH;n2O1O AADT8l,d3-=Ar*V>*IFR6.jc8CN+]s*bZMR)d,iH#P33Bq1ABaQWr<>R*;-@jT><98-^5CnO>p8]-G))41BD$7M,-hCAc'.Gs_DRC!gk>HSIHHER,+0afJ#(%9jJ`@QF%L1V;GfpAM:`;<1@Of(UC$P@(2TSLo-g)M05)F&*b7Y9o5A(OP5R%WL8rJd9Wbc0L.enUZ1F&[;ac7"!K,,NW*5]>>,X[>%@Ei37q,ro5LRs$#eLU1j&YVO\@A%b^MK._QBm;4Z2.3X$U6RZ*eOA7$bPkMd37aQEma`YiOa*QU;G6KR3X*q1G0K-Q=m1Ok#lE/gI5$A+-of5>a4\^%)$)=4-stY;Cr/]T3AHqY*,W\_K5-U/'.I6@C_A$M%G<8FD X0-s%l.>p5c7/)89RL>$-P>gtP]!YoWh?LMM!Eqtg?a,o0mMrYkjrf8?\\N)A]k#5&@8-%)RlN-3-!R;P70oq_KlO;CAAP<3JOr^sV:24rt=(q= $oQ(1+l%AK55\P9?t;BKMV>5dFHb,iG#<>#X_DMQoEZ+H;WXd;G=0+ Ze&@M\A5C=B:r=1ULSDD]tHq$b2sYXAc#':I5 D"YR0=LWXee[s"f4O &-l4@8t^qL7l4UWlQ:5Opq%*_'b]j4Ik^_kH+K5(@Of_fhWAs`_D^2o]]=':KsmcPn99VoGCtCKP\73;K?l>O3gF-Ns`_O^l*e3h(FY=Ddt#M?Rhg^@`o>-OSSO&(G0Xa :Zk')4ATV0/&##cWpG(AWj ?*kd5sqG/9.H]e%GKb*bi'Yg>K2bEcb6;fR'j=Pg1rnSL<!.=h.H2QJl\M_qD,J6g^6>fT)a?@3pMXLprO>^Uo4`ba_"i#tt'CAP*NP'Xt6tan_SpOq/Hs/N3V/PR9Y.>h(#njXVjDNmDSLEJtA$\V@C[>fcWN>3(Y9/(\,]Vf; 2p(b@$72V; )\$s*HdfHp@j>DLD%N@gf?:_8[RU/O"Q[1jALA"[='/OAA)-i=@'636!el8[YdW/V(-d3>T;S2Oc\PR3QZ+7YGG6#d$ mS`#CnW9iANsQEoRP3ZU2q(@/AGF$8MWB:bObcRSOR'/;6iOD@iWh_M=/Q;fQ@^ P*ipN=7GDGqTC],@t(@%+1_LjGq"%HbLc9/IJ@Zl8sBP`Mc8C0\m5:s4Mj"gZ&Y3LhKI7+`m#(@r-R59\/I\$0$X!e p7W>""D(/k8OIt#3s;/0*7bYoik[F]4"6@,2'" WP@c5?l' J?J[TFE*d-oOSOTVGq:a%giE%Flg.bE626m-2i1h06BnFJULW#!20?:C(7D^9E0%hrZE&H^Ve4#j-W68M\.!SdPG<,UA;M)Q -$[7gT;j,N\08e"\,;`6X4<^2AAbe0HZ`Jl]\8tN1P]-HI7pV:Q6DD7$k(pQZY7#OP-G %3co4:Bj.A`A5_iJrljh"J><-ZK^Gm.b3[QcPripbVm/EU0Fj:Dq$D`/*hJ\*8F8)'&O>YHQn6MSkmMdT^gd-NqPt m=$6iY6M7;l!l4CB>Rq2N=O;YSUi&bA8>)R9A&KJJ,A\sBCm< "'#!!I[*Vm;a4Nh2^f10r!.p:LjdF77_rg@V*XU%!t+`#/elU\2\lk.@Uf>0tR8$?qQJ_:kWKJpe['.iiP'G/,Z-L8pFOqo`KHFDsWdbG0n5aiC?><Ha\cmVls(RBdo[KpER8%FWZ)gJ(4GKPZ7;6h\daAa?j$AA>`bVT_&"A+H\hW2"p!4E6CrV$*#N9.LL:5tM.KT#i;\bJdqR]B94)i0;I9)/;_5_SR"G4T/Uq?_3WmY*Yq%6K^dt:d59p`jeK A7Z^U=OOjHR2FeG0OT>S=mT-A#'Yc7s s,@_p"Cb#T>.jI/9:8;cS5=jsSXE5H?(.VlG3CVaNG(*CBam!?S5B-Oen)\\p>"\/!i)ka$m0i,8S6no/o-glcW&PAcA![7-A3DVSAA9js5H_.%CH=XT83\Yq^+er tWe,P:FIFHiE=1K&;&5+@jj&N!]%i\Fq0sD;9cR ZO0P$4:?VT.;hFi_??dcI"pDeF4U.(BS>`oqn]VA:TksLA\OW18p^FJhqX,/F&MDPFm1GfAd_sUVC2P DUC rMl@APAG9J8+r*(JjR;!7Ddh:nN#'BH7"Apd,iKd(&LW^Q*A'W5$=/H)Mn\2a'h]OXO["oUSI"$;c]YhdsU82dWk'L.ic o"Wk+<:X"N)e_DdrW1_OL0#ap []DiN\JjPe"lRaZM8r4+ag'7=*4tNbea=?;2HK)6%?tD982!sdEd*VDh,gqGpD=$j;q\mq]c=r@ .\Zo+Gj"FWL(@/4[T%TQ@=!b*! )TK$!Ih8)i&iP1HbDk!G@s5A;RAKR+JPgi\Y1jK1l&5^50S?LMPUI]rfD&^6>LAf5[7MmdRNp?/!:!`3@ @m=/9C3*c'&=Jlb8^?o:`YhO-5GrBbqW0S_*:D6G'AcGjrds#LI!^7&RT9A>"[=bOJN`4oW7f^p`S^J[<(iA^7.$q0Ad9s=6-AcK4r?h`EXp9(`g59GJjHSm%LIU+)O` +05ZHsoZN=h`'"FOc:T;@_7CPD-TWFg/7UUAQl^&,_)IAt(7^3g?X"1']/&b>FMD5p%bgqDHd'+a`\*88*$BeHJt K jm.: VL)cF_=R<IK^\8Pa-)mPR,n3bNE["S8>^<&hV'B <.p0\F'E;Ze?3+C/g@2-^LPA%-Wt%Mn?%PoB[r:=U48X49Tl7jDQ-WC!LC:%#5l[3b]>e0TDkC/Kqs->A2$7HgDU\Ob=*= a(%j89@-bhMa9GMka%/')S`S0@2kgA9MS!rtX65JBEmS?h7WqqkJToGc@S^qK7S0Mi.@^WI'Lf1NZ(%hA^))K*%mlBs7VE9M tNi@9SNk4F1ah3?<`WWX!^:b("rKN1`qT&[))Pa%h#?\O?s<IT_`'M'^tB9+grJ3'/<]d&Z]O.n1A WUBlaE-n-2TDK1h+)ig8g[K <]]R4(#9fM)C<]\HCZ1YdaJjX?+K2#mGha3>2#YYOVBE#jcI7CHR__T9Qd?/Gm5[tRf8tW8U'id fS@_5?".$I9)1Ve?9J/?hL:rHa>f<>qAn`Ug?i^R=2IOYq> Q-WJa_S&]S*=VhPS`-%pWptKBhe.?IMc/G3B/#m9lI?p8e>FFpt]bT6hP,(b6o6=''.p&rYZ]niT?L(JV.1*I#qm$qGU+@1a@cLdC+IF"Af(l1J6PA(O?[RbhZIp0IFooE-%j...DOF&]^l 7J;6pC2CJ,dd[#W1cA'0Xl!nH:a24**!%kF6\S[cp!PhCgTLWWPsr9lV.r_:HUD"PWti<@6R_W)LCkM<kp0cnA> `fcTl.;1+rhbXX5^=(Ke@^b')g,WcdX]c'j)@KIc\Ng'-G1@[:J%MJ0E<*&"f3MT*$fVTQ4=:5l#pAIm+ns-,:R(0q,.ibo*21jq`5Mn5"UXX_n/J<cg6c7j82V\$H1!mlYnj7M0AA[8X#)=UG+;Qm5G=`5g4*;j6q#q/hiOATs`oLIBa.p7][34AJe_r/q,N(CUMO4Seg%:(9s:FqBnHLm;Sp^HNf%fAs6/DL@GS,=F2<lY+b+4r."IEdri4J3-e$?ZCl-W c`+sdl8-'."@;dIr>l0H53.1=>IWA?Ac3_th=HtF?p-i^VFsC]c)4E!>+AQN@@\?IH*tN:NBt$^Ab=?jj;lm;Cl[>DV.MJjpeXd19lD4k28tCO)^Zm7kZ'bOjG-Jnd"A">-m;hHB@g)p8ZW.j4k^0/k7DRD=Yn0=-PD#]%5kU@eK.\H;H59XF[(hm]qV"R@"iOA1M"]MQR5, 'c2=Ph.2sbD+HmOZAp?_c]5mOg]OM;1:$_QkaS$csUnd/)e2iN4>IN9UAJ(J 0Md^]/dB3N8"^q.j'bfCjOSs-!rCKYUj#;_o$54D,Lq3H0MB?ZCI*C6.%P>ng>EW#9h("sMP8(B4l;!oe4)'&&,Vbd;P-%VH8&q:=/e_(4#4/:nNho\*6BbMqG6)56F>gpEgZK!nEWS,T?r>,ApAKD9E lr/1E_Tk5o#XUdGYft`5194^WV[Q@;jA)Za1NOQ-a"5;LZ'YB!6RfA#sZVIf(\6B\irp/KYVa[N*8m8O(MK9+JD=m;iF4VF@`7?mhKA>bdE50AVVJ6Xt_#pgZ7,U"B#=]*?mrF3MAYRfA"- N7ZDanqj(hK3T``#mfi,0 0tGA(LbPL0k0DWJ8XS82,b+*YF;#;_&6-&Q]tFMafcfC/\r_QIdc kd0.o#^clX.E=3'B]78%oRLUbCd8Cdit^GnMsE#pR:=qV0% skgZGnOK:scEd30<*f'dem[/$!B!jSRZah// SC29rRbrk"!A.i%[!Zlg:&O6%iWnM9 8^e)K$` .G-."W,QN2rnGm(V'LEF*IUT1pmH=iC$@jp!D@&C!nDr>5FOj^N!5%Q<(jF@5<1N7^scFZ"ZpkQ=UKL`QqZH&"6Cp'(Q,H8ooqZc.\WEl1 a<GHjI%;4#!Of%KUc\T2o ,))^fP#[OhPE$(3N.hBU(Op0'?$1*B7"I)R^IA\8_G<*j6h>UR`><5 Y^l,ld/f28MJXjV&$I&T>$9g c[K"d\mc7OV#Z*Y$M?`Q(QY\,_\/@r5H \McYaaR#CV=JK(A*.LI_aRAArY?AjK+R= Pn%t'3dX&ZJ-YA9p(q')@2F:GVe9V+7j.]pdMrT QF1V:$*`@.?atU6Yi;0+;oNA_'Va0A38-sf6#YZn_J3WIfF Fsh(TE64S5-=Z/L)#J7S.Hg_oYN_e--jU2oaK=peMh`Q[$D)dI5q3tA7VDD+,?iG=f*bs])J/8;qOam0mcO$FXp4jQqN!iMM'KIE:l+He=U[8o/9/sLtd[c3oJ%:Z5hVVZ"dO1$;idosNDg,(A'F!NfeY^O!akMYg*SM??f73PL6.lfHY`r_I]-`V;.\A9j8h0*Y73ZUQkqo!Io%i*+hO.G@,/d_%'FO9dP@^D"l&Qe*-[$!^=X)tKAH$:TAK4KQ"MFTAk818%GnKgdSG]J4p\8K2ZN".1om'PN+i5)lI1lhK8ik#m3jVY'W(+!%_n*W@.KUQ+Tq0-JE -7G#gd:ARilZh9/>]0,_:kTKm!F_oHrV8Y<*]D4'tSieR&AOkf_?J'/o:qPdReU)LmpB j?;In4k?[tAOi+DZ_7&<2GMK76BM`qMUc#1#^Xi%(H1J^OkS;a/^ANh8e.=-"J.f0\P$,h"s/,sW"Oser6QcaCK[D<^:pbTZB_$q;0FT//eqJj-%KFO37,%`6kg6B%`]M?"8cte0V\*W#&WL9:5a+,-(h8`;;D*I@:ZoS%9(oJoYfGoSgUJN,N15"(I/G?G$G.t#nspAmaV4KoAIEQbi-\4R?t>Aq6kVE>3X"XFVNn;<:;]r%'p_N[pjjeJ]^W :(&NdMqg"(!'F*PoO^!\f2q!S]\Thf+s;9AI_3-SA@k>p/[Ah'WtN7=#f-+k(+p5]e\^jQB6-rDWMAb,+K0d=WmR.><:Xsg(fR\tMOkh!5'L5@BsTsGMd4A+[ZSZIp%/$aPAAc*A>I"h?d:^? G)snhb2eNC[(J8=I-e.nb2lLLQ#TVNLli@WnK`PXVI]M[ki^r0Se4?W_&9M%)\]r/0lcJD[Rl4rI2qG(_]^1,`_RJ#YA&Y3JI,eHKKG@p2##LQX.89hjBo!t_,MC;;I!TWAp>!sjf.^,+sZ=Hr%N2o+cSk.9lg1d!]4#MX6(]ReFA=!%"gqCc-MW,8#C;c=th*btBtJap]K\^+lV?\>[;Ap8<&RsH8cH`#VS^J]?gIJ5lo'9Z,GC@f,AT(>^dS2StQ+mNQm0e`6\_:)?/Wr?,_^'ea6XtD2fY3$hTp?eTdaG<+,!fsOW1-^B^4:8d++a'ra]JQkMO9V#V2@U_YWLW0L)OSU is?CXFt'5KA:p3ZY/Og!=ImOhfIR4@Ebg3AAXGh-Xkr>!!?CbmA;M$=]<'C[W.i=B+s4"RG.)DcBm(Q7PB#I2MiaYs?\VeitrGO4@U"ZWW+>5V8/C#.hP(`P.9,&S,8[6IO?BUO.oU[*OAmm("Z=4_) RX>'AjKETf+?Jt`28%7n%dnU3bRc0=>PnWVZ0_j+/a5&kI$G_=Nk"nAPVWhe0PV*tIZD&*-^]gpV0E1P4A]i,DH8j*@-@=W9'B2DTA\Q23k$K./AVc':YSZ?%dQ9[d!i58q!6$qP*J-.i5JAj1[1J_`lK\6pIhQ`;pA0'"XDL0#0oV;N[mZ)e$qTtNRZb4AGH$S(J9=ACXY)jG%^ggr@%IsTQkk:ThT`@^qJ8[]qPj8$.lmTp,H<71TW@ASeAY:q.[0mZ5N,sA;VkN=6?j$E`[SPR 3n*:ND1c1-L1KU'-WPH6QA+/E_bph'83j;eG**giUl6ASo[]7m2[^T8G6jUUd@prbCrAOVlgIU[9_chGe;^X@ T.a:+&tptA0%5-p#@#$>r5T27#jKEjFHtS15pplmSM\mO`"FsN)d2jm9KKme *OTa="`gABf'/O=2@,e19XR&<8p:1L&U,(@DBYcCGOIeD7ajB<-fbp'\V>q7n>o8fBkERO\?Q4ie#pFb eSs)QTR[pd1`-YS=Jk/9Y**^`p#YPQENmk6UU-"]E'ZP?^,L5SlthTnc2_lKd_>imUpXBVDmRbd5r2-O?G8;6=,.$CRMUdZ9RVs'oPB *U9T*&Hkf^]Rn#VHLZqlh/JJ&Y`At `hPB&TR"an*#.J0E26`+CW=[s;^?%gebsV+[^`EUZ'aFMS!NjmBc cAG=VO+]+M[1rgR-?5lOMiXm^@0X1"7j_=A& Je2mMh_>M'mat?$)l[S'YjOsH]l ek+Ls5l8 cP,=`MW@m UoEYnV^MD/A>4mN=4?S/Jf3*>f%V)B@(;A$Bf^IkcLAq-T(f]i`7i6Xf:%=0U>X[+'(ac:l7o#[Pp;;`&D+CLq:U"/k<";m/K[E/L"23TMi(bf2L6A0'D3*B1 U.-]Z3FHJ/#@9'V5A;Tah)q8)4]JBp+%7>nmhS?e79@Iq/C*J_5r@9_ZdsVc5Y/k`BkgialL8::XP*%V[cg^&Aoje_/c[ms_4\N3`Xt^(KCneo>^ogjDh,=^/RP'-=q(!%[B54UpT,ic%K+RcrXP9sKD(0/m%>ZA:s==@cAdm`aT]JIC63Q0209[%MM;9:d.`tnKqFhg,3(YO4]4 =@&[?%6VWTA+K=A%`S/[jRA/rCA3#BBhAdn D8p'l/W+tiilb;=^'\GRM(8b"I.[?*VF,+%1"_#J8mL7EYJ#1T%Y3G?K^57Xmk(TQ/&Ajl6^mhsR0CB12Q@$(tBiE0YB)Uk;A@'tJYCab76t1Q9Ta*0f!AdV!5!3%;K!b<,N&mO%TdK 4bOOfn;m`I_/:nHcOq]Uc:3ljjJQop8strF,cY'Z?ME[`ps[+adMHJ2A:?)ffMG@OHf6*,W(kDNM:P&#"f=)e3h%4^]f=0T]1+bapD=A60M&l'b^4HU\la-I-j<`A_"/V#h6r)_Ti8b)KG.K>6ECdLQL;d`VeFI`8=)`Qh0ejFQjJckrf,><6bBmIUJ+rZ MAs)AJ'*[qSIC_e=K*1P0G.nW_A]c%)H*HR.-.g-oO7C N+Ie%aZ]_fDW]:S.9TZcXq3*ih*a)U6k)iqoXs\"*dp#U&eM%A6mVd2[bp&`r$'^UEi&jSsWU,OjYX4r9$AG*r^Db71Ul1M9m8g6+s) CaaTI`9#b)U1AOY3ALhtA#q\_+]PE2TiW'6aZD\HdkD)/Up.d++A%I^#fGKAW]>CtGt@A.Qj%UKZZHNnXer;a(&?Bq,]W*ot]P9e%iZ@]lXcdPU(h#TA7HGT.E8R(h;EB9JT15I]q)XtH'h[0IjLYE=/RFFlcVS)&GK"[Ag`+GcdI?tTD,_XG..XfWAl)gT)7dOFFs3jC#ctjk"2lpNM!Ui0$5H@ja;XZXDT\FMh-m ^D%AIc;N5A.j%o%"a>#'h:kjq-Al`V\]Ih H>:F1hd,tSoPac]sc\'j:4\Zfo<-%foa.F%XN@]ZYm+SIFi3f2)prdB/c$U1)["WitMkFS5N?=b.\XXf4D@[A\\jpg8iNkRCch?pB@R3$:G!X'O%-B!HRanglMWA#5eaF2;a 2TCs_>cEXqFAo7-<l$ ?4krlJ/q]K\Y)j_$AdU"3'P`AblRql9t06f8(bRC&*:[#E5c6cnNWAQgS7aSnn1X7rNM<c-tV+Hpd`MN$R!AL": =LdPZ[D5mg=%sD"TdL)m;AaQ7P_-9A2s[.'TnY'6"C6aFL!a"G][8>&Z0U1iOHNSG BShrT+_I.=P0:S]oA[]6&,W.`4_+#j5G7Qk+67og`SA8X5RB1)K9WG\go0C_ao<m$^:m[JAA4RiVWn_V`c/am _]F#-;K^ HV\QBI4UD()0+e>N-2sI8bQ*>P_NM#%ie,fA31lW[sYn)Z-r#>4lA[C@Spt9bG0YQt_;1$V%O\-Srhr6H?jM\GX"KX!CpVK,)Z)Sa/YB6&^i4TpU\FNZUgPQ#`l5jnK]-.A*l<](I1T)M mQ[TM\;AdEF-n'*f[o&=$SD`oD#*7Kg#R?0'N=FomX:N"m$rM H*_2X1o,RRolm1@Pe05A)X[3Asq<ig!'gbhLPd`1t_,eA^O9R] jl+a=jlE$g+k<"$lm]FUTi`RPZ?3BUU8A.F0lelo#drgnH2oJ -dd6*>n$r0RHNDAfC`JoA!e*.E]NQWh.O8CAM_Yk%s0aaP22;=30;9p`,liM"tl\@(q9K\<%V!ifKFoh0>QWs)RDAA=Ra\o]GE"3"T[2iC$PL_ M, TFR<0G%iR[j=4EJLZ:iHnSsAGCQF;-gd"'f^PI3s!WP[gbp\p2Kg],fl(NBF,k;l[bE'27W%cKWL(J,8RH^PLqi5d[&W%Y5iU.IH5\6PfP"-2htG-L#W8b^"J%'XB6nV:Yk7'bE`sp[^i"l@kZ@\*T0jnA4(]_pf=R^SYRG+EFQe[V&iW3OMp!VRghd)Je+^<VM5=f^)qNs3.KDRBCM#6gJL?:(e1@M\U.&R2AJtbdNO&9 [\-T"p$+PLQ$Bco QOiA;o;N'HA`eAV+654S[o4[>]AjcN/g'VJHS9Ltn7b7*kF5\\`rkP@ChHLh"]W8!;V8C)&^%qLE?Mq88IHbJ-eA$;+qOaB@4kCGY;O=d8\.oRU%s[]O?\D\0JO98 L`imB\!#rHo0]i+02k9"4#)5:% A&9Q:,;sDZk0[o(GVlI*T-W[-G#J+-@r!,AF3NG6OhUcK-hXd(##J85GUGZp0Zi"9_Pj4^e])>UC3I8T+Hol=BE ([Y24p[<]CUcnR-,G=hO3WH`WDo]5;`=EGi3^d7aj#G.r2kEP6S];>ab[<d%03jh2X1\'!2D'sl/*+oZ8;&\"VXrI);dL\(c?1; Qp]/?g?:.b8%J!N`31"B>Or&U"dHHk-+.`=27f%IT+#r:$0SfoeZ%p7[4RG!3GTUmO/JVKYm=5aC$WQ!X^@"9li>0s2qj)2G,AZ6%F&N#lHlaA (B5r5U5*TX\LJGd1!hOV`]YpD)_>[i*T,(*_oi*"b6a-am,)Y"nK:-T#Eq"-l>R9TSU310G8h?gm$[7DgXt4B2i7fB+IEWi`Hi<^lRseL7U>f@*+N_hAsH)J>f?[B$(-,E*58/44`l%/9]6c,Kj)TfCDaNAROGXnlUaN=WIt_!Y9b5@@?@57K-68'\0[`cnBG.YRD@coGCTG*&ChORm*2%a"<'0s7TKC!hp_`.A2Vi,d*)Zd Iq6QK^KSO9[n`[soc&tHMWD`s=K]1h ?BbJ?pH.n>A%CIWKNsboRXU"/p%Ma"iVi`mA V'R)b^e^Ge!iqH`dqTs@a6\7EA(lWKVHW^,,2o5@moD^Q4\GN9YPjq7K4e`AadDQL-R]3/b89]MJ9jf7*2#m>=*RW&Dg1`A)dAjA`^&]^,OV.iYWHliSEStGtBgt71qQY86*KcG453U//XH5:'^R0<[=9h(IsMdA)$%L(R'mAW5BRHkMP\5dm.:"J?0]+b+=Eta#\XFb9VpAZU6;?1S^VLWq$\!V=./:2\+lnHEC=.oMSj/E72a7[kE1ZM$ h;m1=lfT#32?VZoCDnK?EAA*MJ%MGB_l\<&/P:3%Me(rQ3N&'@,b@>KGk`4D^h)Fl$DmI>L:J>^1"MYHK.o^!_]!qj(Z[=!'3S._MeE1GdPrI#i^#jGq4"h\DZ,?i?jdXMcI\MtsT1:(PG8#?DM?Zse)Gi1OC1W:d`69"akP7!>:PcQc64aGhpcnC/A+d/nn@fQsG3D@9+i"GP?G9[f.3W!RACAqVrdn!k/VWJSfoh;f5C!H:a,M@n\7_]oT *>nDGh*r@N?2;9"6cV0-.e4](:FDEas<%>X fle&l=!C,q;6dNIU`;?C#[p9*d+'LN_aX;a.e2PGRkcVPFIk3X*q qM`"jRY?>#E]"-`YLK[C:QTa/,8p=1J7_rZl7XX-\rlM0;$HGfZSt;_Pd/DPlGJ+E*aaO!X['htANedI)<'j+s!KKh@q #VO!HT3m\SF$Bt36o@0tc-ZYFs?VnN2)D,?Nf^['h4m#0;OLSfOA/dcHiX#L8b4dnDs-nV_btDU6gJ+[C%Q!&9kL^.Xh?JrO7jiCTc^3d@;\$,t,+JQOjjf^FUj+*m+*A4]??RgFBWlA]bs/CcX49ejPb08lN]h)>=g_C9`9sY'g+e3;A7At.1j@>4gM^Tk0S]E=;r1Q*p)8ira/O:I+9/_QiRc.\R<,PDD_lGKK4ff**n2A@HK=&?4IUAk2-S-[E E`JepsjP*B-$@`KaMlrHo]6i-PBP]%i]$/FKR=$>-Nj9,m.RmT8H&h.Y5o,Y4)8.MPWLmnRC$A.D0pd>3C_sB(-p%7orENVmP6Q2kd*SPg?M+GB-RBH0'JU%NVt-qg%>-A-Xk'!V2sEXF*"<2[:htt#e L*[AMYK3B$ .lH-Pk85-mqpcW.2o$jlf9>%UCd%E2(O6)#kR1,1K6OPDV1[2$&)bJeFc/R@(2Vr5Ko==WmK80+s(4>Il.0SE XX= )-[W"=@BNT//C4EGCWVSGo5/iZKJ@$A2:5Z:02L1eR-1Fdh[ljahX"+-XaD&c2`=eod1g"_l_mIK,kVP!.1^7J3\YR%G0Qjr9N/]hgAdC3@bE$hb`$[A:f+Bp1rYU6TH0!KcnRN4( r9 ][nqNnS[brTD(`CEkeoLoKAZ-Bn227d-k/%$i?aU2kD`I!Cjg& 'H-/o"E'7bdaY1gL6bpAefnAqJabJZfnQ"^G@%SV)S.4 t>>rrdNp7f5?Rb@EmA6_q@(%OCd^_]SDsbgf+C488AFd%Kn@dmQ9D\8P9dW\^/+g-;_?fDr) qb#AY+T"R^]JkF-n8IP7o:;Q7W=4s&A8?IKrn0U9URPPf0Mj7^q'AL^<(D0:UsbP>HO>&N6@J1`s,&^j/Gi@^#i+YjnEf>G&!)dohal(\&Y^d\Z0_+LC$c6OFV>iPn9WCd`?eM:-Ahk[#"daffELAi^sAqbgKAf9q-+=^V#4:WJa#fI5rFrU'BM:a?b-&_-j&[T;,0KH,!:poUkAORn6L-U9VsCX9r<25r9g\hltAV79W%b'k2WC"'E6H*:EA A!V1`PnSba\kVrr'AVShRN[''U60+%2)kll<+f8+MefEDtmsXgB^;_O5A6cG5j8GpWVs#bGp(;;[oNB9tD,/D3[pcJ.@+@=n\F*l!CHa%KW@(&@0>=(W%mOj+"?og>4b;3Yl]ocT0Nr'C_o< P':8(\3.Lcs9NB8*WPk,3.[_29,Wpt `+h%:0\]?>$5s56aeiS;7;tHIgZ`5j_WONE,e`gJPR^88K+b VMQ jWI%]mc)3]1tOt5\/?;TM`=$D# d"#pfLjUn"Ns=:RX?gObQa2a[i2g&<^(jG.ZQ]>rJcqWpPjlA#EYif^<&.pAl\3=H05lr.=K'@dWb@AWZD .""MQ7dsXcE^g0t9(:TYUlHjY>DB6DgGP>'9[$](VBh&a 0t&@Uf1B9Bq4ef$]sPI'S'"=ef&b\/j'HAM"s1tPkh-^'GV4j"f5sAl%WCp[Y)9HJWC]@VNTf:o+'5_L5 =R[Y50##nJhCEX 4(!G#<9A?oi$pq`Pl&`lPWVAMrBDYaVam"L70VbSbACEAi-;]WP )>Rp4ep.3Ap&QF2Q[C!LI6WM4a*f)62!>29VZ6NG]7F)M'%H@Mjoq#H^+.XZtnV'Fp4H#Cp?055[?AK3LIt#_if_"9msn[+Z V##)Vq\/_>kM%I.,h=WA4[f+Ds:SVRAoHdn!o:CS;ejT"?@k-Qj*2!#eXpm>9RN&JS$Vn6kq%iOQ-g%Cof=`\A']IGVV%0O O7"qqeBtJ)Ula4Mm*86#QQ\TmkR/!J2G'?6e`)6RVq5%*ItWq)P:5pC#X!:K^# 3 E-"eF@s5X9=$AZgJ>>YfZ.iq_C1t^JgZ.4D0]^88G[gsRo+=^/8d3e/(lr ?n4_4EL&%VX Sr$$S]@@d3SfX:\!>FphR;%P$R;TX>\$q=%mafk\@Z(C]/UZnI9R"P%@0U^_pf`opkp8.>?ZE/c&FVqlGBdYsj*S!Dq^8!K1?%mR:g:PCNqagL8hS"T(l[ ^<\J&9ZN%Q!AtVKS;DDkbboAKT'nkBqa!Q90#LJR;..-te=aabVt@40KFBr8h/T`Zr"A-P\1`84Xq\fCl:USe'(eR>dblk.#l^YIH,*rbK4(Ws,:?Gp@d#W0_+.,2aiK5trRDn`KO(+4kemO.lJ?g^bOsWG%D^P5NP*$nf7kFG@%0W]MlP*3.$TO^l 9;i'p#OMAKdl/rKO+jU3F!JBFdg!qXAl,&sR<'o]*p7V[A\k[YNQDr@"oct>!h8eIH.QU5'6L]Vpe*-0XUhJ,5aAkK:6]UlBLMtm5--at 3PA/YT@^D9!E;%cUR(ec5*-SHVfBA]86_b$]gT@ FOG!kf!mUmpI5A\lH,^sN- \%?.W&ReT]TN*jJ;3!Z7GWRW'[\]=Sf%A\GK$6,s#'Hr_ME8DKc,HiE*H@0f*_TC(8^'qCZrbh#.`50hC]9A!oK-Ie?]f^gZD)'sC\JEmKPK]1&6U:A<A=HOlI)9?$ErSj8$\)6.14Xla@eN,lj5+Y;g@A,=V\l7$h&BI];RMK6(__^n\[Z6rLKo`oO\q-p/$q%AqSEB-X"A=:AlDR1lKCHVl.Cgn`4?5C2iS>&g)d"GQDg4PJ,1.ADoP36IMsso$*m!@4"Geh>QM@e]Xd-I"C)D=`:$5An$4sle" +\s/k".M#dG 3T/,,LipcSZYU%c_T&O_/HrO+U,IA.$a+=U GBt4BgpPB`!Fj6< &#:5M<??Qr .T[`"[Ag"O^2!9 DWIQp_/7B.t6+aA/W9DZ($JcYDAf+Ne@iLs\;P`/>C'e0o,0](Clf:Dfg@-F"`ig:*Fr%>HIQ#V/?,t5H4B<Qs^A[l%88+d<$'aMa5Cm.fD9:A=LAHbpA3^M%5=rcnMAA$pCANJ0qYil1jG,8IPA/4.,b/JX#nhUbM%Ynn6S1]*=`pO^q_dlCh7ledKj1HfCU8$"sA=<\K=qKAfEX5+*?liR$rUBh"W`p8m(**5--fCj?,18QS"?h5^iaMZZI'V_qC#JPCr.`&0Q=n8LmNemp1Z32eBO;EACRQWaIaj0(]8dalOb@!NV2!tkfsC?+)\'f783/-1Yn4lV7c*A2Al9*8:;(^JSd#W69%p$jqQKJs8L,fAaCLsOPT5=;+2Sq%VmEA<1h#6J-KpU$0A-aA: $a'NV]oQkk^(f?eAnQV&tVO&a9p)A2Vf.ata,FqU]$KsTf']49JId2t'R"j7jO^$A;?9:0HiEii(OrTP'Wc_G#2W[Z^L2AieEf%=k&&-a0f..E8?2gh7=S^-JY'KkHm;ABpb1&)@lZ!eQ*!QXs0.qnTHkkO/Vi?pGje3%^0`EVcan>G`Xi XZ>kheR`oFNGZ'#pRA4:^2)Y).tsO%g\YYK#n/sA2gO*?MZLNpFXVcY@R;S:X3;9hHgF"N_JDmYCE,=lPY+"&qkIgr@t!!d?I5bMd^Jg2 IVIA=FRRat.b16dEc7l-V\7^Om3 LQd0I,tsa@fG\sOMF%P-K56+\82XDJ445em!")a.*49s@>W6`j)>]E$[5h+b`-ji*Q! gCZ01k%VIBlCt']*a&1 MUSJ4H+AH(BYE&B$7JT/TLbqtY9%K,r)Bt>XRsk[l]^9G?4p&N2.5J)4#k''Mq(1/FnAeCZrKqWASh/Te^'+p>)O\4rL[hY)F-Y+X,,@"#J2m:a@\Wp-]VbfRRl^$tA\!)('E-KC*[K27;KbY#$*l")_lb'NtU:GX%n=[BX`.$6RN5[["/$pA^,H5/*/;WF/H.D'As+N+/6.YYhfjX-a1Cq&?6I48OVR*"tDZ=#p\&cDnbnP6Qe\tN6C_Wt2f@ATsR8]9[0#s*IUI>gA^be#nKI`4fl-]%0qXQ_VM1Q=bY1hn*,3UIBIMOF 3@QLV' )F>H>lfHZs[P[B#bRK_f&d-5_d)Lj\*Z\Q+aI#U)]D9TN'&!pG=<8KScpJ'WjU?^5&-EaU$aU5AK)E5eCIO[TKt[&WPomg8`m=S5j9lUKB$`i GK5+qcW/>$FKQ:_rTG6K,#%PWP qM4f'E^ r;<_\Ja4/2Bo%a:f>)Z`X?)]0.V-<-=fkPIe$tRoPdI1M;;d0&1W5T$^dWVn!CX&]b8@:_AbB1c_V+,_:NtkthMM6m#Lh/PR?VEqb&lrCXFC`O!6+`Ce^5Z$s83MeK2`Ho_.jo\25P7ghe3XQb.3bfF&+?#sGeBp,?"*KNh\1XUqdn>j?V*Jm87r%U+ZCAgeF>\(9SPU@GI<<,C_j$QjT>J3k +9`RcbX bL!&*U5Il$PjL&^W>:$=FcVZ'qg-8VGg17-o1"B:B@iI$$'h:F$5#We1rS,^onIE?S/@%_gc2oC_ AG-MnMZ b[i ,-#BG_Z/jh0;ebCkqCQef8UO"$M1cW O"Li;97/9?Z1bH8MaXEi;3aAC4-2dLtfU@_=>R:[Plg8NkJF<4,dXk\WOq)tSP=T^)b#G+18Emjt.eHFst,G`]Xa(GBJ=5;"/>;/=&* +'/3`Ag kI-[i*Z/T2#ZK'>7PaVO,kW[20(nU+(BqGB@AaZ<4:YdG6jUAXB0CVteK!7Tn0Ai&rq_J4>O>siC:?#FqO6n,NY\_;SElXKtLD7WQ+*/J_Q19*]D"H(nP4,IA)p(M\X`or6MdT?RU5d-Mg8ZU)FIn4Jn4A-AF[mQ`f.a`;j[AgZL>3$<:jcnWk/!+Jajgf<F!&Ap:Hl \PE$KX,Jd,bnNr<$>:;p3reF6!Y!$f`&68$COR <["a*O2dkf]hWRNjKkl2K/Ts+m=@TjE2%^/R8ST4?+*cSY`M-+`dNhd+Yn3d9GV_lTP/3#^LKM!h-j#0A-QJ98d8(DL]Zjm?',U=+O5e_$8E)ikIY\Fbc[PLVco8:NYq/dIE`bYm)0@7Y+[DtHrlTd[B?.TYG02neN7s=fF#HrcdSe#B'R\a(X%hKTUN>-Gl]VnX-i)cVVI4'TRSP-X3Y<7,K[KAqoOIWbhWD18$\*^h P]LL4s7*KdbJcX5HSOLjEJ:DY&SA,nZ]\\b&^r41nPIoQ(83k<:K^]oW940AVfHYIb`GW2,C.G9X*tPI;G+RrZ^c65Ar0lp3Ah8Pc2CAgZr=9DBe8X8JmT;7*%Hkb9tWg;Za)Lj(VUX.>9/XbC>GrRHqtJMLA,,Sc7X:<,SPAVF]iC?=7CX3(;Vq es8I8Yjb[(mkYc%"+j!hTkP_c+_K9"KLjHo_2)$^;:;G;B@`!$Q6(W0G Ajb%tsAI'YWIFM;gE2;05=$db5GT#s4i9)bp//Q*GT?EknHAdeND;ABONA]*fV&3'-.@ae oWH0dCS[?5DK!gqA-b)I7!6-&ND<'@i ``I/YqMqY-6d$QCGOR-IiDk93Mbrcrl4K9/mK*5MP>AQZ/m6_EEti,m"A3X [fY0f"(g'ZQgE+@-OBg]=U CN"=?1m5\=&h0C2G3t-a.Zs5i-PaF1;QnAAZHeio-9sq9\UJ6Gj =W^(rnNgok]mS>Fl3Nb##)6#&DVWKP=+U3CWfV ;?<?<+cZSpd-+3V6o"!j]p53_b3KQUP0G;72`'5_ipWF59>/k\S*EjnOe,Ep=WhR9ABBiWS-%?F.6NQq>n#6k<*H`8U^B88+:-<(^=T,5qAp.OW%i5ncXA'[#2@72_tArB3s?'6=^faQ[ak/XQ*bqmJQ`C6SLM'E8i^Cl`bp!c^f,_5=t)o;\G*0(U/"m:)1qC+JUdt02caN)oS(WtK$=pB/A%qC6:Y`Y4E[UK5KTG47mePiqFRacGX9,ps\M1sK%@r@S,9fV((ond[)ZL8@.PR_o+2U"J[IADF 3!5sF9>UJIpQn830RX2VfpQ@Nomt_h]R0#pa?lXDjhQ/ZqWjnC2T-5bNF 0E'L#-.t+bNE!:U_W/4Vr?Up<\Kj&/K.p@Zh%PAtdXJNA@F Yp4D55m\p]-[/G2PUo5>haQq/^^Yhl*Tn?Fad=jp,=Xrd_eN&0?8G`n%8X_Eq98n8O$hY=\M,[@n$b32JEBA(9=-AcX'H3BX3\Xs0U'9m\EVs[(4)&$9AkXc:(]HX.dL"Kq_mb^2O"nJ_A/EbFNXT9"pqsZ!FCDZ5sg%jm2fIf2A:_A23WTjS^?P5ei0iq)a/#:jV8C7-r;SP>M\c_coqI`W3ripm6No[M0W+jtcAZsPS+)BdFVh>#lZ7De 'ora7XVAS@cAC?CCs35JjCXb9'!AJ-D#2U;MO](q] ?jhTskl#V9O-gZL6!ad&b95Qs-UG5hNWd%a%C5B;Sq;;"A'P^0mJ]F`SfkP2aQ_-@BpC@TBV#DdfO7asSY'!De! ]IT$lSo-c;qS"Vle^I:k(Oc+Y4DD jQrFXATEUlm-3&3Za]Fg<05T&^!YLcL%<))1A&>1N.YT/D+):#!go-,+31P"MC;k0Y'p.<;CoJGo+a@4("!pX=?Y"$0E1Y"%UAZo2_]&KiNjH@*PKmTY@7I$_a)$1cP;OVU>I/$tG3RJ02Hq`X^c\_EMCX8Z4#q,'HF/B&KiY"IQ&p+$@:i )1)3/D"*m=2MHX\CX;mQ+]((C]`%$A*c.L+37:A!@A\66Fih9VRW5dQD?1'"t;fq3.lrYB@R>7Mc>mpp>g_DZ$Y P@VE)Kr.WAjScRpf:d+af_S39#79BfE00ct?DraP:=\l3hNQ9H9>3_Aq!lD^-ta3GZ\W;Aa7l&s`q1?"F\JOpAR&XW!QR\(AB[ X(t34Rf;1X6_%d4-20)=!4!TO8I.&#nl/#.P\CAYeHJr'c$b5EJio^a:e%m4tqZ$3H?%5r)E$$5q98rtU2-QbqXsLmFA`q7AjqOIK&X19N#beR,]q1>^?(Y*8rMhthFT1qsjsTCGFJ6BPpJCVZlWC>hpKt ljt#+1DDZGV@eci,19LnK]j1sA!g>f9G>&rDQVA7m#Y8a6;1q8f:3Gk(VAc8gKXh"f.YXb0(H4mc%#?sCOh#jX!/Qa^c]5@*NsC0.;WIMJ2l W/h2FWr'Vq),Jqd:Zi$:!eDaC'k;qG$1>?Fiq_hSJd."BEJFU!QIQ4TMd%A"5rD-*WAmR_BF;866s-s&Ns'D)fQKWrp%9Vq27(fZrjKA;3"NWDl_]WD+_Ji?lY"D%LRZD*7m+:(0UqS`3WA:;AG=rKUii]qJH[$+Cm2c;?te5#YeIjm@V@(E$U0XQ^-Tq/*V*@hniBiK$M&"3T1]hV3""q@-^7d+D! Ai5D;=k_t]Coa&&4UesRq(3!S5XQB"j`0B`VIhBt&O9q+YUUn1f'1GdoKk"H$&[A:bst\+V%FX1,,]m>k%b!ZY!]mk6Aq0aKQfmbA?`-"@&_si2ig^KnJA2i4)5RR.m[1C?IlAj6X cQl5)OGp`SE>4&=%)ofQ;O9.0r=.pcm)HY*AMC86%"g`2_Ac2n\?AbA^p]!,HKj>g5scI[8cL<f/$?!+5iQVL'_^D6WMXg6fE\ImXTjY2pN.aH-Q0A=/SNO'$F6%#B/;AgcWY%cP?14a`l=2BoFZk<`2R# 9snT;^9-*N3BG"rq q#R;K<`"eb+`<"ie:@sA:89MVQ8N4>2 9\UKt':KMRV7!>j*Hs++aWcJOOSg5'QcFV%E7"_I`k^G:Rj"rH.42PQ1fF00L`f#pJsroLXFr._M2]-J] ]gPaAi#BA7M8iB1e5P-FSl4j!GTk'*U3PnPZ)lQrQ\Z:EUS:9i3G87PB. GMM?=jr]=D4BWeWWtd.Zp$1AbeSIAr-+-GJDZr)g: k4EOKl8g?EMYqAmK0U&N7ogmHC!A,]kGG<>!qThP`+3n7Htdn9$#*WKPDe"Z@7?MH$6AiiS[RMsq+$2f-3:U7N"X"(1I?\="i]1(-JmY%Z/4%)^AMdk/n%=`%Nom@Nd13#(YD`(k0FJrFiI:a.F4#N]U2WcD@rkT!G:^k3t4DC'Rm8C]L`ND$q]WYe[5$m[4H(%CBe7.;,t+ArTW!=lTKmjn!i=_4#BdX(ds1#1Gok3GC;DcO5WF:7@BT7[Cqgo> B04p'1LQYEYR50PSsAE@1hi(*fjocJ@L),e>[3AC:_ )0G))l6p?05M\n178XlA#h^lpG)>\]DS^_D&mULnqgJJ:2^$AVa_lIFh^dkAPo[gt?C'B+H>,1`_gboi-M* 5 30GeG$5B*s:l:O(ZBeUt!.o#'^86\%Vjdb!0tQj5Y,IJ"(qUD(Apj-s3[2I]fM41Wj/#c@?HrT+J=/WlpU\>GUj]so=jIqEV5BA13AD"d#8hl[#^2siAb'[&!F_(fRH&%h@NAm3,>XE4&O4>f6IP\6%nTrb De@EYF,/Wbs3%@p@E$YHQE&Y`Y_D)g2@'/$4]p/Q#N)$XnatM:<:HrPg6&F7doN,Nen+bHtE4lJN&QT9fl^P>W3j&Y&Q!kra_M9[192YW>R`!U^!AS^62KE;=[AVrPK:i^_9] A)mU%SMngF]GZ D-Y+5S@HbHp'X^@*/V@QcU*>iA1dgK e<""`R^YY^):rZ!#9#=ApYQo.EkJ4.*EXcjqmS*:kQD6gYdi$.HBnsCni^5rq+SY\0hC=:t:UH,Ns9+V&k,Wt$DpSF!3HfAM^fI+-A*"9!=G^+hL9R@4XRG3S21VGfZ5a c!(:r+c7iel3(ZAIbQR>L1BsVnn3L :/Blg))[-&h`&IR6YGFCXBKV&G0)@AGTW7QY'$XC0/U<(W&*1R'&Ynk*A8Gnl]3j20ReM1';6T_BK*9h@bB k83;"nq%n]FqqBQp'?QD4>6oSb[4dm.:+@YRTFMABYW3eI.@<D@,'o##hVAP?B*kMl@cY+AshCHMM4UClWn#O4tpgtU1a*"5 cJ_Zt8E9640;C9AkBabe.0nZ%VYBYF8;kl`9^^`aF7Hg''q#]bcXKV#_@pj:)Pla@+ +!6A*no]^?$V8($RlJc]jXWj6]=9M61r*f;btbBT*(N5Fl<[ON+'4#X'hsGeGWpML5&6XAIGWjsRs]B]8'IU#-m$7i-RQ2HA)MqNU?/b_KnsYSD7=8>[d.)*SQs^K/"+n1Qe2B`R/+oK/3Yb@C.1O,>kG9d%=D8A2'aG6Ln-P7nrtoBE_;t$aA#OSj/#dJc=[X9D#^-#i1:\rjR3A*5aZC"2"bQ$otgkEkES\MoU%*H'/i;T:`f(n8:\;"NGRgBQA<.Z@,7a3R=;gZA9MAV6!KOH:=tKWJn)fdoSC=ttJ*N,B5E'_L1?Wdl-M]bGpf@J6'[gRU,Y#edf=T[($O:22\4Mo(Zn1E85:6lg4+"%K3`PtR9*R$tlCJ7FJ,bcbd^T_N/nA!7*QO\0t7JPSrlf:-Tn=q`S7WXG1;7d!N7a5<_6Ul`M_eTE0eZbfb0%E2])7@P3hIDkf\S>#i$Z*[p5>s@ZV9\q=n_O/Y)G;*^S>?/NXM"t$M@t'am*M92] \VEX]^G_XTfDKL4\tA\Ls)J;%:1E%A@8d>&[Am,:Ke\'8kZ$=(+K[s)R]rj2X'!ID"#VO.>Zh?L"0o-=pY^!=BRMA5g#ZK8-/:ab3:mo/F6tL-jb-N)At;%VA["R. _o/Wb#;5C_(NbF1F"G4N(oh`^$18bA8aL`8[>38W#c6t/dcEkQUoZ0+S;LS;G]a\>"QKCsKT4pG6dTVg@kPTZ6F$&*/p[c+n,XeFd6YiaE 'a'n;C@t".Bt*Z?Tb8A`2sErW0CXD:rQ&B?]Ys)+`St-2ikC#DD5$!LORR*jHj^^eWiQV9GF*EYnr.:RT<+^oe^,DR XQbpF\JalQlP2%"%Q9U(?XX&ER:`cSLl9-%78O7Ol3BJ")P![X?J?))$2T+395?;[A5/<4kqm<(tKhPGf*D.O2$-J4t2p%5OFiQ8Y^1#b,5gNYWsb"e/t[`JqnF(*D+5aD2!_"bGEcQe1V+>BARj*J:t*MR3.\WiSNg8BP53,knAVNm3:pD)pAh.JmTnC$A1pZ_$9VOs^[n26PgFb5g2 WWr1^#5TJ)F,2=R%KSp2J!)?Q_b$s9/?lNTAr4kb:/Zq'/%o%K>Kt1$=L5Nroj9_[3;.;+ld=j/a0kq.LE!Nfn?[EN!1@:GsOElhN0=qVR=ik0I<"r/m^ZVk]3.Ee_3;aACWCV<;0thiq]hCj\^3/eC*8Y^$RKh7^lBMQR40A/7P8Ap>4P).gUKPe2XD,f7pAV:aL^d,Un`am8iJ"+o;p7<(VIN"&q#g's^eQ1lj<G?q597IW]g4! F=<7I5A[,H@5GlLT"4dslHt[^Bl=0fT\3sY Bs",^K.Tdcj1H#Mfb\@cb33pkjI<'\dAk(se592g-ja-6Qj^(PgBUL"iSGhm/-rs1eaG2meF%8i7K0besQKi_?L@54>k&LhTHR!F<92ZQDZg0"GKS&9^eE]$7-fad7aLC=2]h.4IT'`XR(_s&#NEptr_h5^>5[2Ff@O[gNZ?\Pe5k/AO?MlfOmHL&jk`ei$r9hArAXg."tEV1+1F^e6WeTS`MjTM4;/SpUt,0&O+V'41Mr%%ZI^t#gk]<]Q[Epr$VD^00[rP5lA'OdjbU;R1FO&*#)e _"N/8KCEOi)QAWFl;47_k<[$PA0RR c)HAB52JL<.+TLp,!2sJ;,UGVk&L#ii!4V\mibWR3Kr6hp5;e0>]d.XHrKMg2*#IWT@6#f$JR>W6U#BnqeJC.iTePg9A?TE>cfs1Ip_N#L$s`X9aJN\Y^,2CTllW%8#r@MdsB^@7&MEfCMpFW0Ze#2!:S0Xm< +S]6lCPk9L%AFM$<.l:V5hF+eXAt]i>%)C8:VA&QY]q]Wg[;@G21#mO*5"3ACRjDO24Iq6pf8e,L_JWU )8_'+&O[Li'IJ#<&(IUnHnhP=7q)kf`2lX4m;fFq0!>)p9k+]a2 c*:'^,>BWlUD^W-63A_O&[X]Zkp\da)r !WRk#[j2H)N^4Ss>k3lVpgiLM&iSe\L4Tt"oO>s=Np)UqfAY/>LPQ[r0L=?5lMWFS03H,XM2J, VN,%O5&2@msR\m<(%sDJDPAT,`BL%sk@a9.sq7*]A;n5iHY^?&ail;J?0**s.^'C].*sAKEn4[D\Qg.gSg>jXFfX!%6AhFBt@mM<^8jOr#Ni6#U:icok"'d!r>k(=E*5sQkX?^<^-4R)X:!a%RCGU83k"P*:eNCCBfLjtA],k&+;oKc D+`slC\c.m8?LVsKJ*2Jc@%FC9Ql1*o%>!2hFqnKD0cUh/Ap(_4a!AYA(gf6?;L0"H0R#AM(Lr6%q@A#qfDo8CaZppKbk:H,UJepP'L" V2pLY@eNG`;m!OQIE!^?RABSLA_pb.FbkNoA%m_'F+;^&AfA@m]<*J?*!$NPKr-=Ze%kRU\gkn^gDsB0_?mk`QFsHcpJt3n;A`.0.5)5Y8NttXQ;]LW G7 b_3,XhdYA0Ak1Go[1j0K!-rC7X+1o;;U<UF+c]GFkWifp/XqsRTQI5PeL_1`b2]?(gs4b2PIBj8H$Yf?mq1fBcB3W8^#d90a2jCkkW&].9Dpt*)&3`=L_`i0UsGc8JEBe[HKqWJ?da9A)*hm%Mg!ajr[tm_V\/PK"A)4?>*9iOWE,C*tkLVZ^U-olaeOWM?hkQ2mFLlOfV5Zqt16o&,C;<p\4sI.a3-1n%"O%;]?@&&Kkb'do] r,Who/hQU<`Jt ^N0?d)pHl2h+,,m3o7\4k/3]4f78Y(=N"JRm0V1U``6Y&rBfgfp?'FG!bIFZ"_GefA#O.b>(LlZbfmbX N0q/c[@WlhTsEsWG&2CO=@@EFWdL0sAsk99o## L;[f4-*IE>7;%X+:A@F(=-U6o>nQ<#./LV7FPb1q!6aROsa[[\@I_F:/<2(7^TAL&8@Zo0ZcR.YO<+'cniABAE'>O:"iq<j/-P-VV8+7JALk;f>^=5NB-'3375YdeL hRCPe7UQXLT*bcA[13a"@.TWjViKS^rVT.L.`-o iS$!Mq?+K,Q1Y %%94)m#8g*i QMdVkn5X*1=`$&8jNs?/isc=b,*SAmYT/^MWA]"@SM(*Je7G;7QtkMfCo416#Pl:.*NkfSc]T5J;)!ff0m&q]`7,nC`bMbpUn\)o7=LTfP-c%mTPhm:?*![U*"5((V?8,FC"$3JL]7n`.>D$AjCl?Y/E%%C,+s7\Ee&Ch]^ m-tmoYADoQX6Vj>df&lXVCc?cSBbdCXEVaI-2;72PVG b$RB*iBT]\O!)tOH&fTbp&LMY bAB$3,m$SO;@Y>&>"SqE=%gLQKq@9A<%'_f6r-9V]`eC,9`!"6cEn:@e*W%tI Oh?Y[j9Hj#"t@.#K5tC<rGR=lk;8)rk]BpIS(8MCRU1c<=oq%&ra-'kPVc(PdFK5,ES"@(_I*)8\"M7q^EeWflUAVCDN\M'MJsTZi+kXPX)43T$.aW)-s<:#o8*Hq0MD1=8B23Sj:>J]qVVVN #A0/A#CMrgb2'slW>-"Wr4Dog[$-j]eo"P=Q-cEVCE.4_/'QR8rT+8=8T2h,A@'N/\NL8[.2K0T\;OS A?(AS&o2:S_TK+b`G:bm:e$N)[G=# ,@;\KF:R$&`D];41=E9aA)c b[Ks+K9l,3r>lZ%LBs`(AciUpF;A*$"^Nt-i,F6d22+Qmrk9@s 37'LPk3-dHad;Efkq$nJnleeLA$YIASX_A2)bq15M'1l@W@=7Y&`bqfWO,.6p/pj2^8/=C._bId'"Td*Slpmo9JY\@Fj7L"(YN!jAON2CAtF`:rDtL9b3JQ7\ZmWZ1LnD9bi,liT0(e HY);_0Re%r1=X(>fl\9`[Pb_.O)3TeSDF`+h@nQfA#3SZa@__C#65Gc]$6J2R(sBFAj)A+VL/"LGY5Par[F^bo!m=sbTY-&aa^;LeRCD=*JNrF0H[p0U1*U@TL=2]O.?iK6,$T<`@/;Gme^Wd$\nN_/b8Ra]pZFeq#g,t?D-V]M5$II3(^b.17rU:(%_I!:.j3M1oooLBP2SW#(V 3I$9CVNU4mdl1JpP&oq>,`mJJiIf5e@\H8i@IcP@8hk3]O,\;43*k4?'q=12)$A6>0DB:7B_el#XZ!U.5C ;/?r:qM]QbO3I&gA%#.RncpfG@UGTU#M) /SH+"r;Z(mJ+M?i]*CcU#dkn"J<4510Z.$YcW=Gs#0N:7"?0X9(C$7,ZITf$-1<(YV)i/8it@m;42Hs1b1JZnMC[t!4YHU] @*!q^3l;bhQ<F&4^(,TTgn]IP:Oo9.=?>sQGolboCh0L3oO\a%,eHENt Qc&R24M$j0Q;C?b^=I5=A.ZA>_j^GY]Ds/D"E(jRf@p%dkE13&O8AY;^Or,!?IYUH%F5k_oCpY#A"FUWrD*R9Gb8iJOi'HAKZ/2:RYhToX!qIIp+`N\Y2K@ e,_3i;9f.LMmEO.Pg\6b$tjF5[sQkd,3XHK&HqVJJZ'tUcnK\gikacet-hQlH&pPAD5TM[ehBh;)LL1[#-O.e@-*DWq?7aeI2;LG%UF;_QL*osn[`TKs^EqZ8oaE'#:p23P7h>HBHd`#R;9&tS(& qKeFHh<$4'tG!TdG[L*-';>+RKU J$aNR2O=E3I'B__9B_\BFolMh"6O\4rPq$f[mXa5'3Tj4I!5t!D1L4dF'rbiUdtFj!(*fhh`L27$# PA-YsF*:&o+7%AoK!"T^<,Jrp"WIr8BAB\mEBeg,&GUT"$k!0(Etj:T=J8W%G"1YGqYD9]P&nkg2-887t@d^XhEJGPa3RAeiAi9,Pqobp+Xi<0)h)BgrOI&YW=R(J^;;_HiX_f]aY_=8@ZQ4-&AKh*RjZB`rL"'rMnZf';Lr+M/E='=$VCmB)O@o6T/I\!Ut]RVCEM>o99`ZHXp]81FIsqa_9ab:+Z5-MK2ob:"c16C [p.IfG",\GPUBAA1JROjW.c,UpK,Dn`'@co6AQfr*G?TN6kgCX^dI]>Tb/H!IUWA`nU@Neb05D0$HQS_I`'Y4!dTl-&:p,+CX^MMj\W@1TC05 icp/=Ce*YVqS+ZHb)Xr*U[2(oN.=CVI[H"!;diAT_Fi!M)L&G1p_lR0NFYj.aB@@_X`sB YX*J9.9'r-`6C%ijb `F]Z6nAL1X/nUas1A%b<C]75JGGe,q",DDncIIX/AM2=,rC6YCZ>M@Ah3Bj]d@ ;"8DcC%orqsAT7)h9\QA=i4A+Ka)6sG,SY6X6qh)h$&*kLL^#&;ei!;()!dVO;>19A\iZajHd;Ihk)I?$orOYU:scq3Tr@<+&$E53g#k@;5WISMGOicsOOq_6n1D_Op4F:7l#&EhbpQO(r6r8aJlJL' d**Nrr/\bfhpI`Q_>q/-3M)!8b<seDU $<4 []6";L]3Og $D5SeY[d/Fam*c1e9g]qA:Yd<>+ZZSF[Y?: d6ri::(sr%,.L,8L;9O'A5cq`KI!$9b0O7A"\:Nc@3LYA"eK3UgBJ/$\j%OI_/D9<;2m.DUr`q4#eleY"&UL!AI:=8'g__)"r#:VN3D1#Y82mEA+Ubb-\g,AaIN&>?POXk#(94`fIfA%eQG!(A(;Z2`mFGs]c\qmY:nXY6#k5"<7bO]>5A?(m?^3PQ^C<>Yd;WUFRs8@D\C9l+ GS9RC/+R2VWe!Q3*X5=_sj!3PDC=A-?"SM_`CG#^.j-E'R:7:MVMW(TL>lO?l=M*4rgI>:052*0b%m[dOD"f AI.3n.MjLTn8K:aDTH@mTqP'qQ.HaB=?6L?b!ma5:"A=3tY5C)VRF'GIdIEa3JCfKWnQQB&^e7BUcZ>Q7?WIP.2dP)Q#T^gd0&AS-0L<&@4\LB6pcW "VsjB@0LPLMr 7qm]ga1--#P3;Wf4FVM;l]I)[Vk_^:IiW+KG>(,SZr8_%Apa0>SUBhAW>VY^3\JA\$$3;RfIph*9P\MbY9llP22N1%o^Y3oU2D#k)*W DCN&1$Y"@TSp+`4c7 ]t0mh(IG"/AXZ,D?i?_-%l.I#g(^#Z3%g'RmB4Us-T`G]:Xo'rE5ZDGl5@,]3crC8_:^HQF6h>'d&!%3['k9O&gFO)r7SEe=_]=6Oe;DaK:XZ%VNm$o%'>;M>q5qH8@DFFXFU^t@O8DQP-J*'"Fj+N4Ur5[?7h6).#+C[:J6I39>Di2CF+] Po"7*"Ih";gA/nhPJ>EP_9"?e*m3*UUAT##9i7eS%T[/m$%Ab, S^!^X+DI!tf?cN9@!t*L[2NWOZPRfc=Ao E$AH=\("8?oe15>dT!B]T<ro+:pAF1`'aH;XMr*$U;)p%9P 'Hkj?04I]Sl;j&$(,S3IC8,\($%XND-+i IPY]DU7s`@PBo?d-bfZ")mOi#$b2J.A3A]Pk<c;`eYeeN7\kR4>RtQRo Fb6G4YJcKB2-i^Nn^t7)dTOdC:/WlkR1IoW)GF^*:=YFA>tV94KRfkYnFApkbb^qLqkc`7 K5m4"$[\RIIYJ-Ys&Qd;P&RmL;fs#2=V1LQtJ[K10n+DYg&ig eYsEbt4EjPP@FsaUjs+^[<i4)Kh$2fe(`b%GqZr_+lgQ>idEMS+7'V)&=nn_m1%=G6ZLP8XTP'rNo>%[Qb4/4seF[&XSB\EVi%!S^SrtiD:ARnB?3As,%L@_OFhm"@:'/=N*A*OMESS2@M1VpaXTd_ISUSkUO@ERQE`SaJm%V0BX$#WAd9Q>_#-]SV'[:N_,_W4/BeP(<,PA+A#lQc+RF![]Xs#_A1Y3Dl_A3,kXp@OXT(i'M>m: +#b9+IMkJ?!94+p`q0Gbrae#sVoTXtlbmSFt(^3P,?jpp#&H/f#9T8m]UJKYT"N?,36RDGgl(5i#j]% # XE>6l$5^?0&kKs&9h#P-G?$q1NMUXc"Y[Re1,K%2RI3D q8?7J6lbG(>jT??)E/F8%MmcChF3Ie1M*d21#"p0Kn0:Hp?8/XRF! $T%-<0f8c&+DV[ZCV#+;a\c'<+^"e`A8+9!<03(F">XTr0,hl-+pZlKA(9a\pCQt:QtMjYYman]4nI]-kD@`kOVZX3o_`Jp#@\q+hJ58LT_8El&d8%.%=o(,!f&"Kca$Q),D<F>BJ)_FNob(/BD5Jp36H;.R-.(fE(^HXHeUbJkN>X(Rb-<o!=P5l,68d'GSP.OGs3O$VL5?a)]XS.5"j!CX'=A2*O.K(3Oe^AU3Q?9Ft0Llm1Q;%"4HM; i,@h':b0Xo/icY,ZV1"W B .c2gXih(2%D(Lapp>V!k1Lth&XdW-Afg$@0'@[bcA52+=at?gA;4W#354d(Un]l`=+^_'P+$pA/4&STiO&>t5#`HJs4V%DTF@j/.6Z&U>'*[da%>TkjrnN3\L.PS>_g#)Gk&fXrqGUJBo+7"oS?U5UeE<n6NGTUJJ3`1O:JKBdYL+oC _`^>'@A;Jo`;r9Tc#)Lep\scM8$--A2C(K?SZlXU0E1M00AJY+?XnhSE7WU?L l!S98_XBA3$ddc"!rtUcTDOe9i;hk1R+`k(?a@K1lmZk5:eSAo*Q&n>Xq`<`I/sg*Lg"=Q_VO0=pgqX1+C^rO-.V& :>rMD^#Mc@-!f--t:KR+ 3mC%[4&nS5!sC`E_W,]A?,5CDSA]i)k0pj`_ne@Fi9GJt6q-d]jJ-jh4PhR(KbmDgL9p:KakJZ8C"?iso4%Ar\5[!Um,i)lgXB6Xl-*U8V.Nm<%7Esb_`?*7tTMqhjqTGh0.3[%6+@dC8W+h(WlR2;27:a6_O$5k3gQ_o(bh*IE0H#E).4b>9bm<%NEI?N#&GDtP6&N>cV3.C"_:O.=!23?!?3LHd5m> NRA)lO3c/d+\1A[QB`C\2U+57OpQEqSc&]@0AX!d,\l: H sm<"j5'(d"[gHX0Y"O#`$hU0mOkh01NWt90&rAen9)NA.io5lq#do>peBfp<>A1BeiI])fe!\R)]1\"OC?0Fc0k 409tn!#qQe&N@*E[FLpPR3HoY,PS,%8A9_iD@Znc! Kp*gIhA*nI"`>;Tsr;g[R`1cmt6"Fj/Pd#gLr!=8XR\:Amg \")eFXG <]JL +Jg@`MOD7a9Xe)C0oZPBE4ikP.QT;AD=3#d^t3sn1il3qM)!2>\c$\12;!jkUftXecD"IYgtr#2tR*Apj$rRT:*-nUY5]T6o*fFNMq#I :.G\ah3sq#`7mT[;2tW;U(Ps(ohs8?SStj13fULZHM2&-[9#/q V\fifI8dq+Bj:NCjEpYa\g<1ef3>cBJ\%8aklFb4V<-A3CW/+L#C(9r+XoaMar ,C:t>6r[KYT3XC#5Sr1oVW=q'/@58a@qD!/X)AA_LrB?Z^V?j=WD)1%eD7=o9)Wti:`O3"]r+>KjIK/K+3+ki11&ciJ4+p>`lA#]p[int1`QTg1/K"d:CmhYG,h&@F3#>h2dZ$kYPIT#Bmq6m4f,seO5R)Xf1Fiq$Dk[kHP74lN>^mapAnWrCiSb4HsUYAYr++\**e-%UVjtfP1S7$K)Y6 0 &;OPXKY]L6Npc>SRHd`?n#A4O3[:tCR4*!;&DQ5c0`lL!])^HsDUJ #&ZO1bXbe1$:q;/Cf:bH57oUE]H%iJ6H8^em60DEeAX6WjXhV0_MiJ]tdAaH<oh,]j+P"R^e0]sJ$AWa?XnK]hGCsYgk,ht]_7])nX2*,+?3eSeA0L^.OUq6&F^[IdF%I#ofm;/J^W#N6N,7(>o-k8\6FSN(a K(6?T($;dRT0Po5\MJOXqg^pVOI[.W<8\3Nb(s9g_-P](("A_3$Ra;b_tSYLb W3RKP!_JV9],P.q!O9>?Z0d^53"Fi+J=bf/0RFnPa]'f"iY-g\QK+ir!K?H&MK6K'Tm:[>+j7P?/>mZ[s9(/$=sU,q787+2bY U#h8<,qnUc6tt3nJ[d372 (WA&*936B1%+9m_]j8m2-Z4OOHppbR-GXQq!s?HhI:JB/4,AO1+b+CtmAAS.In[)=AkLOMbmcD ZP%sqqHrj]F*BeAaso=.5F#BQm7[`h'3l\3Y6&!S2j+pX"]Ma8M; X``jhK(5<%Xm_(DbU^I@1m6qGk0`2hXH5T4Yaa/#m`+cI4UiGc#^Sdf .">A+&!A:gW_MVb-TC/S"c^r;9bbHc6TEtWemNqNn8bbDs9=pGi7A(SoT2d&=Fmo6W!o'haZL>GG`9+DebsocV9q_T_g03?Kl-&'WqE%>sn`4>cA?_@-`p64Z.rVFfH>t:)d#Pe7B>oK&Z1]D^A"A%2`kh#>_[&o/HXjhH2LOC$fW$I1(.?r@VIH2sgDa4o4XM(1VTm4^!Ra6`AD6T;U9d@$;tNR:]4k^ 5l359gf'b"AA&9)^.r!>hA?)]]bW5F>U&Si$ss'7_3,6[`]Acck9AC8Ca\OL3bb@fdQ=VS(G=ieci2BBb_jFq)9L8>o0J)DAL4<]VG'E\a!lI1aEaG-$(3`N 2VrDrQm+!>t_O-X`Ze2 $mI9WQ2T+U;\1P;aAgAHl^Jn.;-@TX2C.T2J\R9A*--2kjc_X&sk8r;^'$AoDON5=bbk6?1,0rpa#+R&?pGAl8f@_])G@lF#N=_ 7cLY[8JYO'k%d[XS$ LdF@lE4Sk%A_AZbP^7lZb62k3p0?XR$q74j`Pgc\Bkdt!3CODA5Et&8@!:A&Z7B4d3q2'ZH.EhAGt;rWYYo_e">WQ#417ATk%'Ro,pS5;`5'&E'\XK>2o&B??IHl,4Uf>95a)qR5F9;Z _AS e-cWA!;?Qc,UiT?iHdY)5rQgD*:"-:* /l./Q%&^b)_`h@37IGR*P)V0Wj0.RIS+t _UMJW)d^S[snLfAocTL(GIB6ts4tr3%Sr6^S&P8:npYaAlVC>n*D``6F)`7-pdG+L:e_e7MnrfSJntJ GQISBRm996%%X?c<l?G1T'A@'Ih!1hp9U*[Rm,Y<@l.:'.i#`S0,nW6hKGn'\):IB#Na@$,5JA,VP5DnErnN_\>tKSm0);?L&`D0E`[;\Rc-9c\ihT/;*9\j'(V"-T@#>lgS$0]^Aj04nKC$<9/D(2K\od'XbO(J5F9PR6=BGFp#3l[p"n30&NEQUe(OkEiJ8%)BAPiK]L"6eM7Q)VO)FE\bYk;*,R %,K$,^#O2eX7#dEKk>]5(Z_p\B_Al`f1HMokqnGU)L8&AWEbl"?495+.`>IO;o0$d32g=b%W=n[>9Bn$iaB=Lr[gP3ZU6;htm_J^EpNtWp;;9cXO56Rro-'13)&C?tq_CX[g'QtQ8fHeQiarjm3ha^q>L@Fd`A'Vc$i!FiSXKDh=*Z4(d6,`.+K>Kq`Np%`.4TZ*d-BAI#/q[Ns+(g(]0s:X,A08)o7ALtHHCOOL&@NqhmikX 8,>=;]!MCea7RC'0sHWnW'L,7E7'+o$A%t2Ff$$a(pZoc5_76#cs76&,b$n,XO;@M"5VRUld*"q7D+s6.kBY]VbTIQAB3PePkO9gIKTSVnZB&0m,AA^?_QRkk*\;:;UiS'6`N:;2.H85:h2ptSR`V24@ H g&F)&@T]A!Z3EdA\L$rnd &D9TN"hCrMls<r^MSD"7SKAN0D#NPe1n<<;e/%fhZHOrV"gLe$1j8Cckl=Ei0\#tpYJ?*pIXc7W,j7r-25<+K`7qh$,Q?DGdpNA7A+PhUiJ'Y9Lnad?8r^;^;t6Did,l4\5%jH[;fPN(0.ReEQfRcidVVY^lX]F:71LYqL;A`m$M*t5(]c5d'A8%"7%!r'mtFDUj.+g&S].*+?7^DXAL[s+/;f-'#&sk&Z*"b\pcchVBdi*7k-Xf\+"-#A-AlbL,NfbcUf6">]^*PmcEOGU4SKjp,1&(]?/.rqk%Jr:UQl3H!X iHpMOr4)0ZB"-0jMqA!>21F/h@%_X$&)Ze_R?_AE$YP6o`,\6&L@tnB#Ja$n,YOF1;e2AZ6;>r9+&IWK5N<3Y'5 GrJcp)ZK>r`TXr%8QWs_m80GnWE[L%geqW7P_6XIq!-'(imGMnKg,ZOUf='#d0[b#&LF%'kK@`;/edX)=pGqsjOnGG:467Vl&r4] SJ%sI%/VQX#K363QfJ,*YGK(1hHf@G4'lTTTL9>>[T%'I3>rAG-:r=GnFE41HgIo=&PT[^BWH]M-!;W=)Ad!.MUs@p#[:>lmd9&^8 ,T_iP9"Tj1ItmHC;-Ib'[r,l?RRV2$V-j[#;h:HK*P8?l+h,$#=t$D,%-Xo)t2#)RZr:>T[i(jlBc)E+>iPIP+6h<Xe\\5FDAX`8@]aGHjX[Uq2k`tb<DZQl3Za%Q39bpPI'RT?O[M(/UAdRsOEqF6A=6#&_G?aeNHYItHQ"Sat2R+jpA`,RB#H9'WVA(45m#,FAR9&*7TK-I$+UgGmA+R9 PC%^hcZpYmO4f%aQe^"a)DC 3@cb"p,>k74KWWML4*3Lq/#6[bn&_GsnLPMI-+cl>[mNdb"nl-$W']\'KaLPNA ml]t^WNOt\W3aS\7]"D5./8lS'5g+Q+hlZ&mm;OK;f"@%s]qkT1n$T6AHtX0FM^en7eIdsKZ<60;(:X88gEg1W@9f&[Y#j!;R_\7K">Y"35C0IXdi0O/$/jm(!l+nmON8=2T8fe&Tpf@YYJi;BrB9Oq&5gDl'j@9F4>/"5J0/Wg;ApWb::fBpp[B'MCUCsKnn#7Uhtp7BqAtS!9f(@Tc\>pYD& Cl&ZY*:5mWKZ3jDVXPZ2( U5KbP]\)#qAK-^NjVd.b#'qk>#F.Gt?ZK@rVt9FgG3mQ;iHIe&m57(h5G9i/8n`:G&HpfXLD:\g:RXg`P)X\k\V-`Bp8Q/[UP0OBCCMHY$i"X61b>q.Y^-7K8ENOXTF%A92nmd>72e FEo(JD?ZNYM80>_iD+1.R^H;pK=AAqLFXnDD>'@oV5,tZ6rpcpAh_F-$A(ljbg-bS>N#i5 j%dT6I_[?_$`a-*)tAjP Pf$e]ak1";1#G/\k)%+c[/3P7\[qQ:\cAE+4M>^;lACMfV$_d hcesHeX`,E7a$_?sIZho7V&49_)a<JT* s9EW8"P_\!"QD)_0\bjUYH!80P)l6:'isq!t4c(Fi6Q>>X9]mhD""gYjf[9K1caC:Va$SPl_KLHR1jo?Snk[R-l$`'aWrA@_Iio^_b!2ZsP^Vg_6Pr`8@>BdRtLp2_G\#iSoJiI^jAj3bm[=T"@Si FfG?o&r(?"gb>% =(jheYkR(BWC_H^Ki=1q-aZ=g*h:Ls! =EMTN[-n2 [MC9*d$s2tn'@0fr%KBG"6k784fZ Dg%OTX0PpR7Kb O5..q`kZ]CmirOg6$*Es#<5VXV,Sd1X*$*oo.&ak3N+g80Uje[H0$l+\1I]*lRi)6=h?T9FOHk+>)JT#a))fl Gd#/"!24O6G:6@PDQm/?4k_n7%[!Ei2Ap@VXmP_Agm9?=F:7WeW $NF\3C0%aI>G.ZNDQLQASrn(hjfH,.Z(kp@:&jI^.?T2rLol<;8o[P5tS#U9%6Z0UJ!dqs?(d7Lnm<'K%_)m6n^,IY;-j'OTCZS`A*j_^b-G'56kcZ'IGa^kNJF6#.=X4Y/VFIG[19(A`"`KjoTcQHfL9Q^0jkRNZK5I>'&YR#g"6.(A3nU?OIcnd+QL[&jN!<!g'`LOUoTWPO3/W^R^`#a]'En5)=N,?D;TmBitXdG0OG!JD=5;HkkOY>AVN];igf.:E*>tRBO:S[*mYjhPCJC)8Qg2$s+0AKeBd4(s1eZ3WD#_bVo'6m.)\&c-?V+f9=&A_j4L?9ZQ:-c'pW74U%r.m#DEH8f6F7H1BLDqa+eIq_cj&T]dr DLjep+oNt93$T10 GXAaL(Dsb(hT&(:FTX,OtVO\9I4#2%boc,0Gh5p(f]'bU$L1[0ZBkF#?ogBjUm2oQH]pTinSN":cD_FaEkA7_M3\*:Q)^WUREFZde1APMp`McO8pe^:-^Y&H9QR,#+n_JO&0Np+9re11>)YM]fYAIkCACaA\3-7fKIFfY7Xp[s\oM)f&*+p)pFXkpjGUalhQsV6iCn2iOBU"?19Ns7.m-_kh<-qI8OlU3m<\r;tM=]]b,/.]'%Lm*Qg1%jGlE4AfWh5TR,:nCU3ob!)XMF@^2%sJdi,@/Am2Pqgsa,nZm;*'%^XK3e9R!96eVbt'2GkO+s,%\F1Vcg^W"s`NR8eM$?&'MA?]^Kj<@nS75,jA-V,`;=V:=p*@L>_Th2>&7TI=,.m;XE3142Z#0$m$8&(!7EC%J<>+$t#-;-"1EVJAW,`AkjOtXb:;IaS#q)lDk6J_DZaJ-P-7?]MO1XrqU4ad)G.lD%aH4m[:`_Tg`5^=Dj_nNSfQ446ffRCc=9#Y.j%AtJ4l:+H2oK`*5;d9mAIl_J5LX$S99sY#TA-=nB*G^m3/#T^"sLOb4Lg6(nGa_'L '7$i;bdDq'j@j5ME_s1BPYWDn!j2Z+MtB8*Q_V#ofZ7Z$?K\)g2Nrm@-6S@C=^tSl)`T$bm2"p3jj8a^UlME$JD1#.XNRk/$,A^g-\nj5@>&!-mhJ*XYNKHps?' jG[*S"lgP$H"CGQT m"hkHk@U)N?"dVp!I(]]0$0;kc:)Fr2DsMXGZLWUFT.s&U@fk4$L5F*j':N&X(DQc.P]p*0ai)'5=^6r4,)%Wi]`O9,L`mPj,pJH)_S*IoN%X\[X'A+RoetZ*q4b<^;2I85HAbh%l5kgAJ8)+,bA1nL!H:8&F';1!V(6D'O;KDE&PhM8oRQViRNV4%Vb@Ab]qpP:Q^i6iqW%/'m&kBK:dd=j58ITNR+CRgI(g1.69cq'B+'+0Y[5[ti=]$0Pe9=7H>s$oZ,6,^iNoNJtg8,SkCjpYOPlSoZ3oP^KF-s1ME@)n?U*KtaWCpCSAFK?C*CGmr4;hCMd3]bLI2%]m*4'aPg%K5He #TLa@#%"_!KItS"4:;9lZEoTOSI6['*(_I^@qFf0+Kc=f3E.`(0hiK&C!jq/-@HQrk&8T*Y4\S!%q"-1H(_:-\nR?O=jKMFfFin0LqO9#prAm#%HHt[4jXK.XFEH?G;""Q0O\5>;jWL;5@c6E;`61Ne?G'T+Xp"-n7pF=#N=@@ri<G^jf oU\UK05 3*>kG,/Ze-3hB==Zs@:OY\AVX=_Y.UotK-X8H;Hk'\U3+dg?Y.W$_Cb=KUbm=j(AYc\CZ%82=JWY53$D2p_qITtj/.1M+:SGC/b'RJF67h7X=gEREg2[Z[9LRM$fRZ2RL4"r!`AYn+jVpPT kPZBHSJUq?AL!fBo`\ ToH1XVtBL0(r50hV['=UCt7Fr%@&e2K^5md;r30nn^'BL?Ra^ZWf&Bo#Xa@_FFUics@m[;tt)P!43p`hR\@O:eYqdAjmY-K7';gQ6Fqp/rKqYn]BsMO.-UaA$)#=-b:di#ZnVaSG:)*]AF]]q3L/0nGU"]2E]MLh-gp4s'QhQ0;oq3WOtNCi:ZQBf,_,"3Q;T&] XFgE'rg*;?MD3`*=N-7$#%nj9sUC%XN%,h#CA71ZAk>q%mKB0mO2n.I]h-1I#+!Y)n,R:rdpBbZ[BHlAV!q2cs+@PSb""Yskj.A81 A.rqFgiB6gJpSc.V3N\Nb&jJYI<(+%QZa7dATpLH'H:F^3FS;YdGY25_U PeoQbr<>J<+Sh(`$P=kcM"0nV\O#%lEcGnrN_=X<pG_^5Rfk@p2UPaY%&Q4>n?XBT13k=qq).!E4BsZ2"pqrGU\;l1r:re`W>b'.nrZL2I_&S3A4OnVW6V\E%14qSG]FQHi?&2);SqGFPZ)q%bn!Os(*`5C^(*>0`8f5.D*9CFf8,C3mMpmdn=5E!X+9Kp8'HHc [%Llr?t-,*RX59hS4_I7gl;;k;%qG4bKscD+RO#go605<^JCZM5pBcdA,oJd'75+Olr=aUe`l>[rL!36J" Boio2$`)Kl-=Mgge*+@Cssq1n:7KE(pZ,2$dY.AK[ D9qAKrjo; ZeU:Xd+q/-KAI&1WaUhsJA4i)R17&_1LViJ!EDpiILQn^sp*1"$s(^+^&]57\5A9G,rI_$&qFSKBff/)WBe!+6ka[k*YaKYG<0RLEA,t:_"g.Y5A5LdTWl"/_UisPLQ:O'Y8-_`.4&gHYIj!1#PfbL7M]g:=hT@M>6%1-t,!2*nXtltI8#X#<)T.L857G*F7JjXq3:n$5q(Ad(8>7J#H=4si+]U5\AAE2PP/h*!cEG?JM0:8_5aC1o1.cI,h'd8B%6BH:E<2"]rrfbOEZ+=q4t$@iU2hF1[AmRg@>t=r);Z 3+Hbd4PcHV*i@Nk_EMD3?Ct0P?d<#A:5W_!F+MG"&kK]4j]-Xd Q31oql;?O7Qa9t@bNSe6A%)hRO12E@VNcsSf407#@?#92KeEU2=b oes)XZnaDg[eh)3PG(*G>DB/:^GsR^-)WK<&BA1K*2i8gd6L"nn2 ,8Z4O5[B22Q0p"r=T .]Mr6AeC[qY?5W)d,72#0:\d]T4LM-2d1)>79[4qAVkE/Z^aSB%hq7@UL)iN!Q1=(-U+2WIBqO_RU\L$rBJ(q9oH53n9kBB5lr[D1*/fie8Q?LB\M^0dIih3Z*^J?)Z11k@,sa:p59]G""sB#2Q;LX@?Y%NBt?t8?p5FZWl_S(g[!U`oD,=A^_]3?8n'FeY(>,kqnsFAN)9nE>;YpIm+#\0lD/:mU0jDZ0+Q8BD+G'oAMtV%EC>FNl6Tn,714bS2_f`X!lJK0JikF#nqYP8DSi&d0+,%+CVq+V4pOd>Se5meYchh2-f4Uksj'3R[m43qh!'/.Z^3j]B$#CJZqjWb+XLUM&-a`^0)b>g2lFt3Ml%Z$g"D(i#H]4FbD E9G+BtjS?8[1ojO:";nU1s';M]F[8DTpiNP7iaPnr(/&1t,EW!f Ige-AD?U8EUET:3YB= &,E@JT;%7^rdl"-1A-@YLU%?sXNo?r8m,A[-H/2nS6#jEPYnV%?8s[ZEKI#;th?Gg`=[r!O=(PIh,TBX(g_14V[jS*oaF=I$]1sbg[.L^U^;gh(YWfco8K*Yo_1m:Y<9XcMf`cd>4B5_)2tP$jja#:\4!Q&4b7GY`NoO5)l:-NSdZ!odhsA<0YX:T`=U,f\%TD&t:"m`> M!V92(Df#!`WYAoBl/A#NLH"XGVXhdmrjc+[)dJ*dXK,\IGLEm)lgX-\MejV&!G=Y:j-ck52qU]f:?rkh:i7?2;1Q-l21cr[\o+JQb/1L2)t5^A(K(9BMK8ZALi4=<=tND"j]nXAgtA(i`T%!"+;A)nFJFVQU)$Mi`Z:1]_AA[aVB@XD>;h9_6WE(l2Gt>I:nBrLcj(nb@GM"7=g=S T\M 6Sqi_o/_)cOr]O:QDt@qk`:jA4tO^+:j#MPV<1kV^;k:)$;)_?,mGqe*AY8#Ago.k. #OY5g:>?g`$qSg+7\>3k:ak*qmj; gdGUiig&5U,BYiB?$QXWArV4Kj*DB,%W\1*9ES^lg^=HB>8qa4%Pol\nnS8*!r`%4Nsqr15g[*Sp[--kpIAq&^Nb91"\Tp_iT^&m='FeOUT&X*ni*rD\0P%LKUetBDK3A0^^EX08qjg+O2Wrc-@U"`M"3R291mG[$7G ;>pnbijT)6F(,$e?88$sX>=(P;!]7e(ht0^MgQ``%7KjDdCmVbV1SLTeWg7PE0g[:e0Q+,4VPfHg+k78Hm^0UO:Ea$>AV\hB0c\#Y3NZiA$i(hPh>PN@s_bKW!W_El%bNg^sA<)b*p66]'!R*Q9(K4'&YfSUHY>`J$0X.Q.m'j _%.LSMKF2 hcael/5(B=mNh&#@7pb'ZLR[41U60[S2L\Fn@eRM_2X+hGYM^-7[G-^h.^4m_d=(m]5DYm[g 9)kF0/=]Dog=hA`@.A!0&'kK'#l.2,T^qBde&[Wq2F.bl@[(-?d-,l>[][34(NmM8*/l,m/fjif[+b'7gn#A!8+H)tiOIfY-VqEbFZ_*d+(Gi3n^cWGP9"I$gpO)Tn\@m848(OA=mL'MLD+#aS^eo.mA0cDK@Ug5O`ig%s&b(t*&?T"O3RE;'g33#cEE.Q>B7Dl"&`\[DF;(RL8R9@%l'e4s$(;7Q3(Wo@Dg 1?GW>,B#9f(48d;E3nkY::p%B?E]4rUIIl/S>_Jm)dkbsPX]I1iedL@/lhDr+!)O_):A4=cK\S.U:*t%V?A3hk!"i-Cgl=KA6Xo:/DJ##(3"Nm(Dh+j>tg;ORJ.t'W;1=k.C5W1sm^T?g%slq,RG37+!"TtcTI$U3UA+B+=O8'F`?mh^5=beG\9,e^69I]@(&%moD-N!12*d]<.7Glqa!*ddYLqWLO5j#$QbW0oJP7XXJCRG,iXOM9&\=[HQ"L_I)^,EpN$[A@0&VdqbX`E[`UiCN%PZABVibPN)U&/l+h_E%h'%!t^k?NKmL9?1i^nB\OT?-_+,`*X4'OH8h%\#],cmg1Mr?M3elTGrA&po0n.XNh9Fk*>h$[(Ol cr-K S,)2mYCtm$HqMh,d(3$Q-Er+=6S\YWS'2tE(6">0]g3D.9*7t O!rO1C-g:JTq5Fa/>MoASLgTj9FA%b*%I\Cj1.jgkX?3n:,#WmA;@EUAEa&bJ$?=5(D.[*4F2ReSk8pq#oOWCW-k$1ks=hN q& (PUA[]iq(elgSlXbZS"I%$iOcin8,_h<*!@@N\raX+JL 0Ln1GTjgIj)d,8ZU#A\<84AiW'@s%#FZ">/ #JaU0hgBgGB0!Qc_RR&rQQh*7 UR3Z9@k-(lDP)XnsEoXt"An-;LA:*4KrF*13/-n;Q&[\U&X'&e97jkU',IY7AoppX5nKZ#s2JS_na@R6ZF2m6pE+%-"$6mt.t5\/:rcnO1B%KC@ r4sr`p0'RoCQ=lfNam6;^?dLp.'3SX;-pZJ?b,kdd;V 1#KB8WX4`Yd?ta$5CGBdo1" P+tR< ^oq-F=0-.J7Kj6)nmq9H>5(BWBc)jG%qIn*INl`TI/np<d'%:lf__o"[jOsqiWUa"1hK+"bA7`"/*+/6%?F$n,^rGfc?.&c\iFICkTtQeBgiR?_9g/G9:N$lKMdnpil^^p==U5)5?7BRiM0l?b78K"H]c%)GF^dR<4\tM"qfhWcKHcJHPH[i7a!>hUP<4<@19*b(^]?:KTZ+P?\/GE`[QMki%nfAV?A6l+(g(t$O`\-2pXCkcU 4p]AY;-+khk6PoZ>lUDbnGJm2``G<h@p$t+39jh;9h+?^4%B=VJ7^'I(_B0^ok/>K!iIe:rE"5UGl1c-;O@Z)ctM#Lft\65Yh<@c#js.!]J"c)jQn\GBaetQ[0WIGn$P(Y6;&:*QW38ffW4DA.Ah?;#-mJ)gi1YT@!fA?7`]Cq>[87HL)rgZ0hYj\<Nm$;h7A)M#PS?$Iq!oSjVCqpaS#WIi(J5=A^c*mX)/#S=%UI-LG!pl -(!pWW2#XiqffEASLdN,(Y*]FR36OZ[EIcY<q%S\?dC-]"I.,bf+rdB)RmB%9I7q8>/q+_t$%+.E7=XB`.PGg7hs7NiZm2`p)PM'D]*e"Y]@-a/7+)DAH[KJ%1?rGgE-G^B1EKj&'CE>-?`mdXs#"\b,P3LmFqOP^d7C:d,4OT2ZpAfBt*^]h"+Q/:8e.3AeW_9;4.fDW@]!!^!tIss`*le='i?_4.F=/L'N3(B[d$aQkA%4%+SF4Jr!AHRTWkLNlr+)_H',e:6sEWnF1YqAiDGt?(5Kgo?&aP/t"ZkJgf6CJ)&ER&^44_dnjZ"> @`1L<3f,*t5Us(Pb>bKLBA[*n:H5MA ;V='WQ@[iBiPFaWcj"C\=/RnlUoJ-HCTgEt>F,l.*f92ArUma2 3m5oT4%N^BS$=$_KW/pP;bL6E1lDUPM6$F8OOcI7I?.d>*E35",<tIg/JU%C/T!sWa4:;ohiZ0,mXUjpC9@b?TJpJO>9\>4R4>^8i=/H@%_*iXi!@Rf\akh(dl+#rsRJG]H)B5"+QEC[1ci,I8f`(QY+>Ws..DmH+/BDV@9PTTA5!?nKhVgAF?['JprQQEC4^@16rgRqELddHHoSl $:X3HCrr Sgi!AOG#TNg&*?r^o*Ms@< Ooi]j28T)^C=II-tdag0=:oQn&>)E-d;+mVrWM*mH1d%m@Jk<*'F$I@KJ>.:25Yh73gOQ!2?:O?2a=/(G#)\X#_rg35abm8rBj8K&OF7$QKH0YCp[D*ROI8F^$\"e[:rFN2J;W0a"-Zqa?;(Z1CU5;OdaHIULE$`^O^m=A5t &Q'\"0U#i\(EL,j)oGOKmU^b>\Td=.mn=9\EcLH`N9&jWAcsOE2!HEkag7:LefbK;MkAA_!h?iAWBN^Di_6R[>0n@[ FHg<_A_-&l:HNP!A_j $"]s`Q'*7dRl'd%F\B&P.%Q?L>q)\]B+ce )qT\KRgNNHQ#o!-e"X/S=(I2bDE3)FV&4:fKY:?&9;nS!RALA>q^\FBY'-4[>lQ,?]#3/8F3.8;J/FG>$0,mJ3dJ&hi$,n]iE5P?Il*"mr3FQ Po-=<)id_X)e/ZF!)qCA:#0Hlh9)R0L$P1O3s(O5XjCK +$QRLM&Lf#\D[tJhQ0g2%.Et.1EhW-I$@8PA7ElQFTX4 @Z+$[0ER'AX.T0A&m[J%F=lqa,sP]_2,KG6J;AN,EpcbjNpAM`HP,F2W%@,X(/9s7A1.haE4Z#FV(Ut ;DHrtNPr;p_V(@9<`YlTF2\`U9Q_82c#!(]T;r0&= kat71d";K$:+LnaWq))=ON$KV:rIda\(@Anf_Z/I:>&-k:i$jn-^O4!j#NfEsGh[#"Vq%5 qn3s3+)b(^.Xd07Qd$dL61bR(%V$D!sAcrh"JG'FK&r,d%[thtZ1Q&MgV 5Aa2n6jV+Mp"?& "i8h+dmKbo@<'k.trdH3P('@$-kJJrI7^.*$"Xl'Z/C#eQ_7@8dEmsQ\L<(8lqhf8OlRSni=T$@'FgGqBD=Xo"m^O8bJANBdn2$78Kd)Tmn.Gm.]f'S4-XCO >b i@K#>bL!a gme-G(e%-kbhB*SGXF(&bkF4M5[B 2ksLC[]j=BIm_C^n5oMk7>mXr><^?YRqJ-88)nH.lYeBA(TlT.Xsf%bM&i[iAqhD2nk#JkbTS.Bm tnE:?h, HONoE?+(+t'q29[5Gg7D*0"EgODHeaD'[O#SDbpNbO%h#Z6&7*0AW3*9%gZMk8C,_#4R*V5Z!5Aa``/PAcpnIc7)q3NakD44nF6.r\P(rB!`cQ#$>PE6rn,Q'jq2Z$.t@clQH/q)K@IjIV?Aa%+.qQ^o`6+`NT-Ac./4;LQ!"HJ&@)]4kS-dVEthjcMWCM[?Uj2l5`!(la4LYpAt120S[F,$+i]MY0q[j!bOcpABT<*A"Ge#%>>">l>J!E=#_#pd73b\J&81(+-=b0;ofqW#DAeENO26b=Bte<=Q:LbC/W4L'NOJi*]kC(<1A<.ne;_k2K'(KA!CN5IYW'_f>XmZ3J5E+YHf>66pe(+W%MeTFtGO2C^kjd;c[td7:f"JErc^WWW9P8X"EGNb`\P!3@kc`]ThN AYGM_6jlqXqj8RaH`BpnJFO2G;^ _A$Q0Ol#6 m4hSdOQJMfg_"j>o5Z$7gnSf%i:A=s5P`M/6*>oZ72@;0\\O\NI!bo0IG`/1l0FW/<@lnX6#\BVl'nb\s.l4/KP60orniFN!MnRO^2`l'KZHHne*0:lA(Ha<*Lq3,M'>&fo5';oqXZl.tbHU-`O(sJrsD\3KA^,LhM!:=YmKqDRCN^&^:L_#H2SUS+n0[(\SE?qGOYE\CV[7UEIkjR)bPsA=$%P:0jo%B67\S>F'D*Y(onLJi''3pJpDW^$Pd4\e='d[lCfj5m"ncOQ;FIGS+"*#kB#*.@ tW\Z&!rZ/116]lhp23o,2?=qpc"]3#8>$/QXtslaYR2e^A%NGOS6?^h"1-9AS%H[/tUH9NF)0cKjLAl?WT85G:_\%28?)cM#J)@i0ajWF8h#f!%9d68&O2;LHS`G5&8hUra(Edco^\Af_fNcgaoXaLH)b Y9DI[]_8B`=F*8"H&*)hD;]5O!DI?]VPR+`VE/.L[QFc._d!kJD;5.;pG^`7\?O(tsh$nn62%X>5h2j B1*\can[?.t5>:OElXG]o]BE2ni.m4GkL,#AM5(=5h'o5P9n sZJ))QU/]T!3ngkVGW2:Y\\=A2A]VQ'$-g]taXA8jY6@8c"He4j4ai [b*5G^>bRXBCo!^f!8c54&.I R!a`b C(<=.`Lhssq:nHF4m8`5BU>Wf(Fq/AnO:BgHbAXd4S@TKWFscj3@(8DA fCt3Ap7Af=]JYGcIC$k[#,%/jE+X8 f7<$!kZpZ'sT53W@@oTiKOi*9Rsr1Y-JI;>BOIqY]S34A:*s-hhkQaL3UCsK7eGVcodIqGB`P6\(M$9>q$OYtD-_`,lF84SFOAWdEcsW8p1fn6\UUoi(3iXNt[M-7'ZDh*ij_rhO3dr_V*E/3[iGGl:G%9 DdO%+[L):QVF%E9oo6_+j_o=@hg9c;nGt;7pWCA5OSEb)beNGrl7Go*:Ab9/La (Vc,CHTp -ed\QeI-L%^$'Vp]YT"Ce[HsM3"7?T#e,8Gj". e06qYPms`_'mp:AIgealhh1Z7$o5sD[o+^XjmC5-kaX]kGZC,0Lo3S!dg56eJ$*G#U+k=. <3Y149a=1@ _Q8R!DPMU^/Z-WKoDM0@!E5@Ja+&)`I]-H$3-@*_tMdI7;A!Do'78BOZ#9RXOGj0Hhq[#^m4&75kF tr&mo6OD,#G (Db4"\e0hJfAj!I#aecb4UEfl>.a9tA'T&O5X]j]I=ia3HB0158N'.%h"6j6Ip/g,nke$",.('-%UQYjCQ'etA(]lGP!Cr0aFO1GBX\F2;Yn?j ?DK"]kVYLb%\1XZab0n:7\mt1sHdf.pUOS_)#B+lat?3L:.T."\JbMJ,EPN^2 6d+31P,TJ:\TMRa6)*]lT6iG=B/W9l1)MmQP+oBH&&"Qcq4Ak+f$jphpbGUc\f[UZ@RXh7[G?O0eGJ AC=[ot6X5ls!ST!+^:`01dKna?8=_V0s#Lro4'bgM52UR1)!ACO4Vf>4'R:r=K-=6Y^j"RFjjL_R ij?@tpa(EQ%n5.B&bCY]];Qr4P;LHZSm2b)M?:0rb!f/C457tRmAq1Sg\=GtkG;saf9Ag[AS*qF:FYp7$rm;;ksPf3Re9egW>eLT_V4L(a<\LAGjmkD1(so:)mCI\4QYXoXN9d_8R>+@& tGbj*f,FC>+F`'\Ep`J1Wcj*3N8#nm;c1=qIi9*#HMbtdkJ!q4Q+k?VIQ(NW&nU]DEA&8pMTVq@6Orq;NQ[h6q=)?AEoHTEcQN?DYD%F8N=7F75UsA=^DL(* Y:odI+^'3"c`OK.;G`c[8;?c2[9bUmA37!/EEfNIQB*A"1#Y"3_._Y/'Ug&C_`&5V'')6[t.4n\<b+X-a[rH8Ci^:E5a3b XkAjD]&HWWVS-8/.pNM/n+-AMj6=1P>+>[qn #=A66c3'"a?_'R\QjPd\-f?c 1ga%M`^3;c+4RUe+8J]Qc^c,Ea6qR:1N_@#i+BgPD^QC4$@[7'<8Xi8^F\gEH7_,mHW?ef.$QcN6:C/?-W:]`RDCKN`d8GV@@R*k=Eh Pj1@94h%n4D#mA8Rt0O<(l7;R4(sg)EZH?!/(iS@WX`.fro5+$Bg07]NU^+S7&3Jik'IOK_ZfeGma;rK#$ZF-iPa5+d2LMWJR504_EW'/!&[&so,'GJ]NJLb2kEp'S87"_VCmXsKc8&pDg399c8Zcqo+(^9VV\-4QE'79ir/;2eI#HTb3i8nXX9po&?=i+75Cg$d8QYB"qAB0RUGUdZjq)EC)99>ednIT+rG2P5>/"l<$^#62@X.OP0<\l&tK2fqSko[-G5+WXG/4i,lt3m7j*gp-Fqg,2;DQAA17Qs\*:UZgH@MD$7.Yg+jAnA,_E$[ZrA(SbGGRn$P[ Pn[$Ak]Kf1tm&e"7\3ZgYWh+Dp4r<`'ha;]^34 ^PTd8$Fd[_r#L*tL2S(O/TG34Te\7Kh%WSk`CocYt@2tI&0YIVoa@#:@iq#5"gL79n$[Y7Esp?b-3Z+QjrVJ1iB&m5p[nZO&j\7BHo@k(,;`>b@A]b)Y:*C*%g/ab=IG/^&W`7eG?"X>\"D':(p2`D>QANkSke_V6MeJ3X4&gB,fes+mGORj3NApg34f0\+L:%JPm\PA=;Gbh^D\;[RM9rV/!pB$qNAA9sno2"bCM\QRA.MZc4&Q`?^OVQ 9'DLP-S,'U3la.pjBK1\g5Z)i>)S33M& T52iAlVo0`A76jFEimi&aafI7>pOU8]_SroKVeW. ,lM]!(:Zf1=V2%@/"ZPF:XF8TXDtAC'&rc%9T':;oLIa<&P(D$MF8KDsKMAGig]UmRaIbOnP?9.Yid]s6::3`e4[H*l0Eg)\At:J#o38<4!>Jb2/QQNE*^9An:I%-bm,)Ar'i?0,So/k-G)S_(M)sh>TqJH:_2T9n^P\A>g)[Q:`L 9X4[k.#X424]_oHPg.faGtb,"!s8\ PqGBae+V9R42d9qQ$#GC?>fTUd8KG!VIAiV$MWr$aMAf>,e<2jfgkB=i@\;CD$Oro^2B=FN M^o+ n8@07?E!`ebB^@BWN1?IR];O_f(sPdLnd]6n;5"7?n>2I[N2L?69OH.>.iZq6&`;^iTaCK !?Ai@S.1%n(A2\$;/fJ!6P0[YL8XT0@:Q:i]C*9E[-S,t=Jqchq:UW[AKFq%A6I1R(F0,'DT3UZe5PbG*?FHaRoBd[MNja0sN@4@X2_T_Sd.^> 8Z]A(dD>(5K54HM5@h"CK:`F/4='/0+bgQKc >Vq]Ff.HK*Xm`Lg+`L7mk%1"32so5Nq2j6W8d%.QnNZP`t5eV, U3Jln$]5^5]^O4lT8@SgbpS"F)7'p?SYAjBSR Q`opb$BV`:"3bt>WM%_CT'(Ap3P>i_ C$rbf47bdK760,a3\&EdC_]d?:\Na$)_5XF;B:_ENnF&Ltd"XEF[&0JfAsID)k!?*21!rI&:Cp?/tkUh>:&:C6KAFqCRQe3h;nNtD$kAqj>4kJ#s@L'YCp-mRRZ[R^p^Z,BUq=6=`9+!)&5AoJEg*rWK]nnb@)'"/S)CsYO-X@5?dq.MF[PWEU5pt5F[]W[M#rZ\Isa%#;KeQ=4t[r%K)mh6b1o04L]N8jlEB-*F8gn5o$TcJ>T#%;1Q',oiXOQIi0Z_lm,Dh]&0e6+I3Qeb9O[YEX)VB*K\_1_t'N;nNc*$I_7'0l-_if0pYIRimXPt?ZGZIs<\>Vl4t]F!X4E&(rEEV<I'1!+9: S$Mg:/*p^'SN,W4_'-mm+F9b[pEa$Di1&jU/,n&I:H`\6"=!Fit"f+W^Z%s:b3-2D5,]aeD5%[a.=F50nZb^Rn$>o6Wp[Ei^=+r*q)(lWCFrUk 40p(TP#ATs//KMZLGDmD3G9nF]A>_E+*bfHq<nB]hO$KUAYS6%B-I:_]CN1PPN );>A.A_-X')92nDI?cj^nTCXE+J]Jo\"$=Q`l-,.blk58Q3N<$X?RQdA5B6=B8pEDR6:KH,ppA=jJa+K@n6^bn$'$O/)Y>J?c$$I-d,#3j^]j80Wt41MWs\?WJE,;COD?4ms,oD.sIRQ9a\!i8t961pg^r4kF)6VXh%&Hl9b)q6K;`hc#H8^n2 )AkTmRhAMi3I"RWbVkaFcN=+%5FYH[*>XUn0/b8XsF!+f^5/0ZfClKWRFbo)M5tjDPecUD2m=''7eSmM/[mLm!r[f?JmZcrkg!Lh[1dUfN?dA@)F.J-9M)3$.Y20n8Zg`3!(UGd(MW(!#5ZTk2.M"2cSaNAOAUktY' nW2%P$'I>U\FeZ [N"$%gr1Uh=[6AGTHBICP3:\*l#_Y0k"Z+i)W#8i_:O a9$IBpl>:i(VYHQb=`r"6 _fW:gmJ[^6*`E921NAIAZO^#7'9Vb?oI&.\S7c%#^#opo9IXehk=\0$T0,G%e9#82k=g$S&G%6N#^S@rDA!+rrf1"bRe%AL (FOT^tDX"( `1?C:Ip4sIW(W%[>5Jh\UWaBn>X."Kn[=A.c7#a"C)<:kfN" 9JLLN_S@aRHtdj<[DVF"f*9?)do<>pD;1kP>]0Vi..`S`,5.>9fq^pL]A0`k3Vs6,]857=RYbq@!UHV7#9\,F6f[O8Rh5,X8b!*h[.&6o?BmZ#9/Z)=[Ff"EK@J`p.i7?7s%BA+n6$I\-VL0agqa7[42#t)+a`/-F(Rs,.6$+6As/EQAETU`7_`*NQJaYlW38t<[FGQ,\S2*q!7mZ]E3a2[gBgS.p=`(O20#3ZfCMTjW);J;1_>6$@ZdU &m[HUg>Q<tgQ_!)k_QE`[%.ZUB9]k>^^db"&rlbj?KDiifhg/ZZ_APqgXga](?jl%0\"OeGm?l*& ",ptA&]q;N[%KIrr&p_YC/BpJt>aANfsB" <=<80jfO3+pc`%iQ[G?YO6eP+]>d?nq"5,^/b+ZacXQa#(/!&"bCEbSqpD'3WPdblq$F-AJi5)2(B3>5`jF[9LDU@hh6=q_?L`R9H3&:TSj,hfhNA*J&%d2[eWol4`ZW^)Y0^!M8UM)Fcq<;610>oIQ6/7GKALd+o.:$:3kqk)Mot^Ne0654ciIqn%h+O@\$V9D+tt.B pB!1fVL;MUGE`s;(<\*ZK3'.?WPO;jH9K[/G&>P$8Z#-&E_i1Q(^(>e+;[-g0PD&.AIlFo?\RFs!T*Z?#W7aB/.+4oOgQd@].*bW:=T.qJ3\j#%5^!N^a `[!tV*dojYTeUId.kI>%?8Q&5Gp#IL'^Tsct/5E\imT>p*oJL KO#5Dr>1.1mRS2eKJ_rZ2_cS+c>rs;kE3a<[K3[T*-%R^`@*W1eL9&_&l#=3NW`+Y^]KVcg]ZqYG,l2Z,j.7,[02J^J]!oeoG-5:U23"5Od,da430\ZNXIHd.rJ*;jUt9d>(t*L^GPkX]ce Ya#NC7c#MGa)!7cN)j5LF%&X0?D@Jn%*/A"NAV$G#mI-+mj)#/^ecY`^!WKfRk[)Krjj1ARmUip]/P#qG4I9H!<]*fVBJ)k*dr3,gI*\'M_bb4C8`ip<-G_ngYq,YmqEj,$oYIi\#NF(>ZsEZ"JWrfdhTGDVP6tSH?`Z";]:gMo_QQYXA7I4Qg?Z#tE>?_t)*t](SE;r;J8cS3EP7.@3p'VJWPL,fHsD%eim[CThlG&SH>eTd-BUo]MC?D=gptat:;":Q(X;YG*5rU7ZHN&[9[!)eRGqnV#8A44nOnh(0Q#+G))c-nQl1Wm/]t4bfpO&A(p)H_8@!A_!rP+0#(8NNa\53QCFI!Irc\#NmmKX;AX:haa'Xl)haG'N+(A@hWfd'QR(Xql,mX!#OA.-?k&Zl)HK5Lmf6&Kp!!dS[fh:rabYhCSl#c#B'F4ZZ-UZ\$5XJDf_X74K]nr>T+"jem!+*`s[Pq'$C$oc'/r=h,'6!O*=3.1m3.SPF4D]jS(X0#&@ZCo)[GG_?`oddGD 7s/7[bL2 fN#KQ:7i:B5(2q$;s=n#^1"c$,5G^6$`V!H?!I%/M.t5n;;?%rph(p0YP/[heg5E,:o3toP@=.OPOPUSnd%RH=7k[O&Pl6c&kYdi^%Yj?"FEl-A>?0isP3KJ*=k$--I5Rr:EOJWo>1bA:n#($pV_7VoIs)GR2[p>C2C\p5A0X]o J?QjNBb$qIeSQL=@62^#QhfA*aYA%f'$XRl5l9gh_G,LRb7a7O1Zg_;r&A$tA\PK&B8sASCYObeOA=(FACKH3!`[DHfpf1\JQnEb_aOk@UbO%?'3-WfSV?b)DIcVD^I;eAU#9`ZH(rp!i.rf0tKF[aO9<,A8#or;^g50XfIG5;t:3<)i"gG9)7CQ5;7MLf>)nr9EY@kSD!Uis*c0/^Y[aIYBlKoX#sQTP4p2+]$ZA1;ZmF%b.aUTSi<"*+@A?G.\6d:EX2%=1PfD'oeF!UtZ^KJ"3JnSh]"s^8M4* ARL^S+oi.Z5-$j`6]%?H"gr;YNAr)-rNT!E6MgGkVN>8`9e#$ c#/`"FR02ME,e2)ber_C8^$#USH:EaV )pi;h=oT aW";R&&9B Q]P@K:!1(A&"G?]L4_c-j3lFVCCqRJo*<$3$!R56l<^*C;)1GBl.">LC2QnRi"AU.,%2o;E9>F.TW4rCOfo/.iH_\Fk'T9b3bR=T06("Y=C>A%7JNc(`.G":j!GCto[aZnDR2LTk1C/,A$%Qna7/lFEjJ-dHFf6c3`2OQkYBi"9m"YZf+,Y%.&o*;H<*=r0- UT^ gp^c8J,5cgsUKleXTH^l?kDPC1 =*l,qpe@n>0enhaI!4A?OR6jb.ja:/ qrO(T;_9iTMME!F/]rOD0`%V.]BpcQfk]Po:)0kN;)d%.W>GCY/gjb,#Ce7'mCOW2FKb3Ea4ZJei%:a@^T`p>D9Q(;I?U;F7(Q!eV.$(O>l_q#olXJ!=B3m_N;0QB4^pjrmRp-4.#=#)Xm382Yi&8jA[-a!(S2Mi6VZ+>Q lFe ^h6P)_N+0nsbb9Yk7R+FI(WZE8\nN-.eT;105'(^QCe_E$J4e\/8ThAI:CU`R'&>HPL/pt(n"Qd\A.5G3r_>th%lS_^sk6H].jfmTNpsJ=",8$"TStbUY#&8Gc-q,Xh4]h.p4YZZ@>hm8^_tZ[@AK_h$Xn>47//PMT@Y!EO=m49=?CO_;(2+nS`3AgXf&][c_"$N&BUpnj+SFhTQ1aCXsZt&WFpNl66A&2V-Qt(&&""=IfljF@"'&]Peg$ik5L%TKo)_^7m=H37bb2(pOX-APf_IlRmiAE#c8*Z4MI.bJ1:``C@pSH):W8CdoSE#mbo9G5c5"b!VC9IZ\6GqgGtAAlS#S#U6"kE@+$`P3YC$n>J52S5t5P\*Vt=Woj.->>WOg`d8:iidhR\F`Th[l?;m<,OAag'DY_DmXi-asq^VA6RW=lpHj*"3;J_dN:(AZ>CBgWC&2tqrf]/*jl%:Y&MtK@?>\Saf.>:cmp(-\n9K>#5DCA$!_+k4kJN'Th]3Qq!dU2Wd!=QlT&n@^eBd#$`/rgc1`IYFjP1KAh7!RG2-%I\t"ECc`n6t5`sCgjHk/rMA5])U\7hMGh<(UAc0RP1M*VaqH9A;2XY.s^s8-KeAH#ipk+5@U*DF4`#+h"*,>3`6[cWB?cGR-TehldI1#E^88TCKd\m7&IQ=?!Tb;DM_$RI/&8;Sc%m: V4o;3[48$>5d0R\Wem;+US0E)+`G<2=]Zb*L$`W0[^dN^N1jQAWEcA$)L1sM 4YIaGB>9,e+4m4C1_[g5[s-S_5#L2f-ZkCFE@J"l?s1(&*":A-X'Ki@B*Z?AFdY5jlk5OaT,I^aTQd^V]iH2P9GY":ph=P4oLi-)3P&[LS3"cA.85a Vfbl5VA`#[(UDKh[fn8+MkV&B?]`6D3o#JZLa9Sfh0kp%Z6>$MMN.!ARk$Q3og AXd"CNCM)&)669T76A'*lB&A".N#Y0gsJ A3sc #/cL"&a[dC;S9$.C8R\[Tg`Rk)nmt @AD6>sk5+6-8V=]F"Y5`Z-^L>(2Q0_ pcig6GKqho0/5dZG>6.U__ S6,!L) sp8eYZ;F`K7GK-]ViPKqkIrhM.AT%3H%eH 'mqa4bh>\.3P)Cis(/;W<%LVXeQlQ5lO'31IB_&Ue0`<AdoC&s#KA;A*1oGdKf268licsVtcpU,5<#jnr*O`Yl_fTAaMrlPDU ;d JH4g1]Hqan Y*"qWsiA[0&h+6EY .D]4&<d$ t5-T:-@/Y6!A]7;@_#k-%]A`VO`h1gDR A!i>e#eCRCSsC8Yg?gRP9rhdg:@g.H!X2Ab RNKBsQ=>mde.t3)7&m#DbLG]qkm1Gr_tAc["br-7-,3#r];%W$ 3m>>K%JgT;,!@t`IH?]R9]CEq*k)At7Q9<@nKbX[8m!:OB)BWP#<_AAO89sON[g=LMBk3](F]A8\RYt[VmMs#,iQ[)eC6JA8r""")gW?Jq#5!AJf7nAa)R,3e2Q?cA`nFp"M^)kO[))qS6lq#%<8%%,N7A`#Lk= >kAaE``=S,r"EQN\3JMMR)bF/8!Wf.O%A'MqIg>EC$s`6%: >3]pHd[`hZ ,,j#dH1>OWPkL6'^HNb).YhY16B5&s:!k_,"&%A:!ZRpNfHVTO3q<\QNAt](F%K,B03a,MYh`k^jreYh&?NCqF_H8\99 tWpjJJZQVqS?p.!-:NrIC7*[7g`dqa.M[W6i#8`I80ie6GGY+FWfAp6Oep^\=#=B#.rA8:X/=d` rP)t43i,s^bKkPBS4G?_Z]Vhb=HA)+7E0M ^V,&^`c'M&kS(r6b#ft(F*@rYg5Zb%4.gih[+,r '_V)d07/8(d7Algo)GEhW>.g#jhJ\`C\Z,Hn7k(41`o:. `9 pHBRGA0q/%<_+43_2)lB9gjFH+OLjVa&:GrqR"$_'m0/GYKA`FPio<Z-#+1qf1/2YLSUW.:L<+ti7k^j(tVY131(Yf !Vm.&^rl"=OR-`hA-jlogkW]M.k?UD-2KlH`fk"Zh,@sOG30,e]#k\4a)47S:%)lhNd2-Olmb,r)hWDW^pq6t3](2('jj8V0oDRe)-r/[mfAHol)'>"R/5U"5;5lW>1RDc5TB7`gR<(%jmgVCl+.dLpmsb-t I^&@.lA(99NA=eL'j[ZS5iQ7(27&-JjCTlHt&<4r;OorA+Qr/1-3=jc'g.*$`Ap>3)O'_M"h6Q2?ghgsPrJXRbA8T._&_)04!0k`ls3/]AH)Iq>s&aGK7fU55GEQLD$J9'W3'.`i2=]F7q)8etEl!B+M5_Yo1bN-B6$79"0KM]CsnY6;cqeiHNdO.9J"BI[;MCo>R!rDX7T;*9[_ \s&=*p7e7>4L'L>knbW(n9K 45(T_G[$_4k3Y^8Yof)550FJ9,^6 #AXiQ/tekn]OA3Q_IG\;nbP^-@!EQP6n!h]`-AV*6Z8kUQ!g&dL"\@C&EP cN/>OB#AdfA["=OW]s::[WLCfiRqa(9;ldB[REY^Ep#//28eMZ4<W%Df*q*D5AM*-*Bc"9?fN67EQT%'6ZfDBlE[KP.^V3ljM3A%=?,>+/-P83Mik2hsGoB.a 4dne AeO7i-mqXo g"LQb)4!G_ [e">4Rg[Yi('P*Km3K\_=1(4IinfR:<Y6adAG eir?6UOAd'Be_bM6""?H;QAN]Y6leN`6TX(I3f$::F/ra@fAjpA63Yc %2\3rJS8b;qsC@]c)UT'd!A:Ak!'\i*P1 25WDDb'D)b^:so`E4l=?8F"lpb2nAp+\eDT21''$m\&l#h\g+%"R0lr8lfk=94PLDH.IoSBf,;]#nK"3kb?Z6RY\s],LZi_"Sd@NAI_$GHNBECT-grSAOcL@WX1,'FDeT2XL8OK;d-,L)lP,3\ngKVG[Riea`tK2rist,D&OfRZFD#p9]8CqpYIPq*n)pUEMW- FEpiW;_(< <6To3Jb?RdV(@1j?r.$#2^>U)#AT]+t?=FcB/aO1h',8peaN!_qE'CM;aLTPF(pF"b'`kk[*G@%bJNKU)=]#?FpeV#28^Ffb,1+mY6<8J4+=$M'!7 =_"1PP12";)Zt*MT!V#B7coB0lRHT]rLXEY+3t"-oq%`gV)1IEs7F?Y,67h%8@6,[H"ihY9+5:sHTNc/qo-esI"_nrmHUZ7Y$!Gi*k[.TFrKaagJ#.ZYc`IZDb@S;$R`T([%\otr(7'-!-8_P/?#1qX4e<^==3L3codji\,sAA\)"NR^]KX38CDA_ZRk9g/*Rgd'dIU'T:UREr*9C]bR^"e)&Y6nC(fr]"=0?QX:6ldPb8)\o\Hm7b`:k_PNBYO(itiV"o./S.s\Q0g(!@%qKX:32LDk^S(t:MBCXA6NN1AsNU7_-)@(He/,ltg[<=IUe6,KP$1APhQDl*O&lpe@2At-@SYUb0%WYt6-,Hg!)>DV3BDO:9I()T/t. dja7JL;Zl3@ )K7@*esQl?.:8Mq"YW@DisKkf@T:jA+<\AaFYJm>1d%;m:('"A0aP`C?>D7 eN>JIfTEIAS1Q@B4kRn\/`4JId3a&'^,\n0XGE*Zonfp$1?rO3LT3Xol:O`46kib+<\F,ilohHRS1?ElmM(#eNE(!'Ip;L3O"t'lr[VhZQkcDO\5*,0d]1PD/( mf bcoCVi2chgQ^I%J1Qa3I+[#k&b;Rd?PUo$Nj_:*[`pPNtob%3Xt!Vm],\`G<"[AAYl0n$k>dQ[o-SNbQ'ZU,<-T" Y8Zp15qL@=Ao[NY2M;rAJYMn)X8p;c7o6*ilL(`mXG:aH3KO oh1=t_*QZ8?L6Mrs^+U9h%O:b^WlA9QiiRi'nZipZ._VbMVI$4rBg(R5pG!DD$bn=2:!*HVUHE(4!TDZO(A$*knR\hoWjk8Gojroa..Sb]Md;t>Ri49_f%8q6(p0i1+7//+5P0Y+lso[="9V?)#\'mBrihJ9`0NG[*'KjpP(*Q9ofL^e3h*kb,B5YJ'M$#^P>&Y135]ci3aD"d&9P,"%5"_YUXpO"F83JU))9PJk=?tp(f0.AO7SO$K>B4AIa8IqNl'OYbY"jA;[7n%Gag_9W+egY.f8(k.h)q%LB@G$:#C1FA2XM0>TkgG$kF5[gPD#m&`je4[-'8PrCC"VL!)sf;7E5Kbh)r,&kJHlgEAS\-`bqlN]0Ya#ka2*Mi;K+@EArBZUIp.E>NBh(j`U<+-ntk>t-QmF`Y,jA*I__nA._k/S"U[ql^[Ctc>e=Rs:/oE7/i(6A8^c[i6'\tlQ.q[#DoBe[ZHk$ Vf1W5e?g2f\6bK*SSYEZboDaLqNrBB8nX(sIU+*Ca+!K:&/f1_`Ym9rMWU.e,r/gpt;_4Pb!\tIW"m)f=T>UrS2+ErcW=!#LbbR3h<Cb(`3n(fOSX2!jTA!i9\K1K)AV]12k!!Hn2@8FoqfBK0)5kisTAbMb:P"^HogtX\4q!OeF^!G,c;boDYB/7$#cXUV,+0W*GjL[3o\#(:a?H'BqipVm1-sDj$=d>niPS#J>3i61;qWL.aVmT!a_qA:%LZNW7(]=F^p^D$$cELa&_e:AACH0D/b'BMaat?hrA+9tsc)66"5OsRr(ckAUFL=TgA_4Da")KA0@)1gp#c1d.P4-n*ng*.XG1f.=\-;(f]\s"sE#sfSX!gY,?]sAjAOs^V_&b4c^?i=?iDjp7p%^[O+jC$Nb@l9CstnbkrQAb?'tRRE!KJ?+TtQ26[&eU3KW(L7`L)O>8E-)GN4H6/X;Pg7A7j,$]&[?KLq1* o[o'mI\iP_m?ECe=AMh)Vd%?os1eQ9#>+Gn8$L%dAkV=N_+Cb2/C9h0j$)i@]VCNeZ;d^A,Q7:Z.?]#DV6q1SsmMT$pqN""p#`5HjbIH2^((E*dOp\UFAZVKkd2S?FM=n&[nHMJ]S2*aA%WFE7(e"tQ!0T()5T]?F[RQ\R?S[Ms8*-G[fP!_J<6MbE&cY=$;1src9GdkKiJ+ZlR3m?M(;Fe:<_D`.;I HI !25$:BS-I<^1SPj)!NEmJccU1`0 >o-S!b7hZc+C(.=k(LI66g-"WP>Kpn^p`EY)T^HB?nA[UW[HMD6&,qcNb;($:gJmLcLa;mR17pA0,I1lBj;sB4U>?t>'_sA 2<7&`HACF9IMJ?HlSCGbng-J[$dG+&ntD26WAINnS$ A]_Eo&;AJdci;W?kUBK JbHDU2=G5Ef#hnf1aTo\AsqX0nBCH'iF)sX*->7G?;;FSkT%]^U\is?>BNWMXGh\in!Ld=b0g6OS,41jpN93[OQa,1.*kNNVYc`IMI?gX_3YZ;ZfF@+o>a^JZn+W6P;UN0U<.WdE4)=s.m6_%4fQD&t9@Q)9>F"O)3*oS An?632I[`68Gm$rdPAKMtHb:dU)R2DX#mmVB3GYt71=dDX.D,kLOnNd"EC9mP%S9Ln0IA&)MMa C@1.a+:"J)A=>LimCYW(1t+9,4h\./VSQHRJt7f4UJFn:HY7bef%/5=-n=;=Ek$o[Q( .:-a,fQG5TE'dntYs7hClXj!)CQ20gEE,3B4^hFrCOL$;id=;lml.kg-]dX0[ZiJ?mZISK"L#H=4T^osPQU(P/T.AA/Nq=oh4%n:m#mKM!D;QsN+1?+E^>iC(5$9-K?;J%^E3m.UIL6WZ>i[bY-sDtO+6_BDXm1tZ@%c<`&b,g 5XVjH+AdPTWB"+sp#^=hX^'NnQ;o;<7-c_>l]%:O@&2ei68IoJO0+h#Sh"'0C)^1=-qb>C)SQm?)ac!5DHA\c4sNW@KQO]c_FBO^B>5B('FV0`?C36-&h=ap6 ;KHkY'28PtoM00:m_!:h5AK8<^)O@&27VPRr>s5L6CFB9ZssE(ZfTdeGPI$T;hX#ksB(D8OY[:7_8oD;` ld8QA#ON4+:oi(Q75g]Uh#'YfDJSR "nVWiP$q'>(R[-=Z8T#WI0rWo&k;0<$\9F]B8O5!baW)45APX0PTd4ST^J[F5moRCC0InB)/t7Qcq'tWL%5tX!]Q)E`fN38\8$hGDg5AA:)e9cU;qGf2AG'2Wfqk!!j.SV2EYn6a'_Ors;=[F^6D5B+M&9Oa3J>E-DAMA#[q4::0jp[l)h,:3Y*IVcb/"pqV(EjehdV:&\X&]'f@ffj4P;)'W Cf;_2-C0Ps_tJ$@*ZeV6)LfY[a2U.m6'VL YFAG-)?-D<`8!bYab.GE&AiTj?*V(hAsHaqNHUN&3_M%(Z3.@NB;%gfi0.aH,XVl8UTlG6gAlcZsgYM\7ZoEb+</?@ekqFW(OB+m&g8AR1BB`NdPmTd8FD?!9*NHZFQ(*Hq5kc,/oJ efAmpWGYtP+QHa#LqN ;bGdUOep`3&Q*:NafN6@+-q)%l=Bh(AjZjaIsF!32;'aP31I';WtBo"_DEk<#?$54O4mOH6YhRTp\oUZ=JTEfDo9*H@I+/A`/H$)PL+EVM 3R4nR1^jOc!_^?`>8KBMT*]QFP4_r9a&M-A/MM%9&Vqm58C;IJPMR&!nXR,\6'D'mFfh(TN+.q#$=k>T?5t9H?$nYX:@=DEFLVkgA:'jM,?dGG!AIKHp"$0!KA%2%!d;(#\TG>ULXZ]'24H?Kq-hK%Ee]18#S$nTE*Q$m;[-:@7GI]r3$#bNg26YaDRCdb1H&G[]@f@&!#%]7o&J:RpN"J:Pt5M:2;Af00/b"F.7!?_r6gHYI-&&l*42`PqXHAO&cK1S q-A.dej%g2r_N6UPcZAj'/Q)iMYQoWA!63at](rR8BrAmc@5 g>XK5U;H8nY)jn;jRV$p.%cAZoJdZb0.U:dba+h,[E\Hhc6PF(h]l*!O-%"kg9[A3pWJT(CXae412[=6,Ahng7YjQ<>VoYsY>;?.56aQBtL,B+c(9:4]43_H(T--b#jp38=3k]5PJZc>mN81oF\,V))#F!FO8pMD:$BI,H2C\n1(U[r.G,2."jbEj4"h*G'5CQg"*o-_,o9Yq1"=MFqm;enNo)2me[s@t.b1,006:h*-7kAL!,dmGB%p3.[dh=meVN/,;r/n^Are4-1`MV4rN$"q,n-M0s[K#J=@/X9JFr0/(gle^TC=,-22CM71id:$F"'M4hWk9mU<\GM13iO&/+F'>'p;UlE'M$X)i2^')8V']\)W8i1h'=]!;D4sMj$7fO0=[r/O;G&@%:E]DJaKDVX0b;LB>1H7\r0+C':R5aq1k_kUef.BhFW40Y1^AN!bM][3j6#88q33ddAoQ5NEQ]ZZ<5A=(/cN(5@UZ&7aZos:0 pdrGQKe+o!!c !I8N0Tq7N*p/S;Hpcp6*<9ZEG+V%;SWHk%eQ7hU908p$nboO:5E'(Gn'BG4)&E/6C?OMF?ZW`(lq7QCfPF89#`\SE-q2]N2nstM`&iN_ '`f6Mq6&8p+*TI/I.!kM2c)Ibp+iC6Ll\!iB+2gP/7b)?rM]IHA0AXAo4"3Vqjr6K>D&\7N]`j92l9[Fol\B:l;QBr17S4dP,X=_US %]LJT$;ap1=F"U%O3,AH@YfgaHMP1RJX(P]JX_A@E85Z9A-MQ7Q4tR_htI@LRLoONhYCn1kpqIj*Zf:>@iD*9p5Ag_-7ea#&Xo,![+3nY>#c&fAjY8qiEjKl"2fC"HU2k5Z?(VE]lc2o&$N].k9o?*/;TZao'g+`[E/gpCbgp+2[B8nDGdtiqU1t)HBNMn4Q'j;b<4k,.V?XIQbon()B8)jnL$)s.JGUo><)]=+#Ha=+dLlZQ[<$Hg/@PD7fAi).d5*Z_F^jk\K`7&9#>W3V'1lE;N!`N-<0-H+R50#A_GJVdB3>@g^XX`4iI3 KU\6*/:BNo^U-YAlY0L`(BS;EY/rHeA^m[]t7^[dMT!-70VfUgS5`W$mH"OL'h5pO2640 nVA[6'rDE6sDJ5;U?[52?Y03-h$jT#6K23$;7pDLR\8g?SNojB!VLtchs`MR-75n.`SZKf? ?+4lTFJ;jE6*$mG4'$K>BSZf/=5c/IK&&Y`MARfqg/E ?[3n+fd&NKKe-HkFVch+[3ojgg?4H [5<=>]Pl 4?Q9Y\4gsUq.AGsHP3G(#^]6nILm;9dR)I\sH2dM3UVKE7l2aTN)7:iKG!$PB>`Er)j7kP:HW[0=Ad@p_(52`>AXOcgkr0aM=UR7!KFs8Q@06JF(.0sSM-*#Q-&+Qp$q=JX3X?O`EC4eAtJ7fP^DFRR>4MT/jnZLqnWafK\VL\!Fcl&j,?;aO@WCJ49e>mJ=]d]hD]qml#mDsM4t'Kj9j@@jWp:kmmoSU=7Vm"A74oA+SAe^JX,K&H_7:^"i^->gKdi-UZSs+Ghl32NZe5$7:^Q7WaiW[8Pr61_KI-e,r ?%4n iag8!+,Jt.A*:COLpr_HK$;_ga[H3E+('^")O6n]N@#:;dl?]09dbH4g^pS60c^9!>RF$PioDhJJb14(oF\AbC&2$JlC(;9g>DniH(`tN'>5aqA#3[mT\9(F&!J5L3?F.RU6M9;'=q eV&>Y1%d]5e9?ZE&7D;>B*-QJSr"O*WF\S=c(qe8#N4FJ!7lCIpn69-3B;W^+6l4&K>;^U-R\@b13VigD%Y.a/c[N?d+4-TRjI,k`m.LfE##>#lt27lgCeL_>(Z\W]$a0Oj-f+t5/rnJc+dj@d4d!H(a3DK9lq7 .mUI$^/HTDL[GncYFbZ& R60(<C7NZV@sA$5>hmHPd5FT5$[BA9A"!n[;#) (n3#5oC#q%f+)65O =tR3\(*dIjm5\)WO)Qn+6,D9'P]A9OO-V^f7Sm:__ $=L7SgZ ./&`hE )#T,R$mE"Io"_VLU4`qjO)fQK=2fS,2!MMY?9]=;1Osa^T rQ.OA]NZ/<@MWrQ4)".Z- o1,XjZK\3EB75DCpL^pl8aiUeI9p1EcH16ZQ(^V>NiA</,$R\&J9m 8I'qh4l>OBKadMKOl*#9nhBa`?_:+I]1@ssK`%AH&JhK>(L03mPfr# J534:BkK8 ^QD"=&),c0%-^WY1ZmWg8Fn422;M+I0UZEA<@-U'&A/`2D=Ni88)t\+F+`l569P/Z`7R.k=ei2;CLTo:'jGb;"SaLdBqBHm=d;O!5Aj MCsU(AKW7US]9e"_9bg,s:??4VZ1-6HirJD"67_)%Fh7MAN\S\BDSbY3rmWT3k39I0329e<2o;0`:W:4RMdp;mN)AC+>@=chL?8+XU6t3`iI<O'jjBo:,RC5pMQOFpY)9c06hS%@<"`N_`>e2hL:Y9)!NU)97V@U(tRck@5i+L,r+iA`9@A=MF%1crm%2(YLX&.ZR6IIFZ$tjZlZm3l&1/[.B6Yl8Ug7V5m$;/ >EB4\>MOL<0%&@d21bOK@_XNFh;H[J^hQN[?9b8(QG7AeG0NmSAE"LC>?P!M_IV@2$WOJt,O#0D1BAF3j80&)Rfn)EbYX'ke4dER48p*VRiW"3'8#]Yc#%bU0bo1)M/n$r\QF13hkF^sh;4KC*^[QoPi]MpQNQJBZqm=Oah2=GJJI^$HcK\d%_e7f$6=mP\;_QtEX/_J-+F'^%4Y%:n06T]R]^Chsh)Y'i_mBZ^ib6^A%aP\sFa[MNb@GCXC/S]<'jB"jG/)^&@@_ADT^bht;?=t":ZOi9b1lJQ':NR@gU%VA0ROb^[Z5 #Qk5%cldRbrb6$j$C7.r8p<Na0r)^4pWN09k)jZ79g*:W"R[\8PGqd2;e]t5M8=)46^I).[CQtVofl@>?.q"pm=Xc" YLPr[:]nh TK-qka^LA5Q=%ktd?W/cK!old>\C1bUIL3LeNoFO7.j+*Al6'MShW0ENADFe7MZM)1['2tK#;aID%gH9oZ6BI:VUATCX2K%(N$=i]]^KJ$tWQMj<="YQc-fMEJo<,rnQd!0LO;CdnqdL1Wc] .n@Ni2psT5BK38n@h'%PW,XRq^gH#A=k7t;4Op\]S,e1+mNgj(:9 IEO0$T&X1G^-CU/RoW_O,F(6rN<6J?SB#GY%;c=B;Glb>mm*&XI@!(]!7>sT7&m_iqo/#QNDkj\p8VTmK@$H;(9CWojQ9@ejK;`nfgOoYbH>E'MQ7MT$;nG7Z'9)^WflKHU@:Y4O;5I\FLUb5t7e:gkN"q(EOdOrehq&r!ROY3j>U;iTK,p1sJ7s1?4jN2-dnArgtpW0D+eC<>efRa_Kh?:aZ8$K1@ABgL_n,kgQ:\n*%tW;#CZ1'c)Bks@W;'5P:hg,iJSFcD$P);k=6mh#A:c/DSOpG9./#iTg57o7rU]Nt,2KN4rW/'!gVA"KgN8U]_irJQUP)7`oU9_NqSfZ2`dhX,ctR6T,gS,S^78>W6hiGW%!rJEdqX)#jsk)6(^M#cAp%@d%o]4dgqLK]5d@jg&pt.dr)`$#$WECm[Pp 4Q #0f]At_hMl('aJCsA2S/M3jiG.a1d@c22R-WIb3DX&S^pK*qs-(.TbG^_/E/F'_=p;U\Ji-hkMS0:O4.&i'a+9MObIlfMF?\Qd=#A$pq;N+bh6j>5;Qh>$5 N!dT&XSAbADW4T)`/;j,t%IK=GA\SP??R/f9!'E%$7mK\tcioalVe2g_FeSCE)qLAstRl;mOLhksfHc>@d&\h&FsjdS/n\d@aDA_PdU-_%fV>3++RG=qc>T:(0&_G+9U;MXYUK\AO?H+s3D!R$OV]mYT#dE#g_RWkM"q(I\AB81n7S%M!VB,O\6)l9[Cl$ F["h6ARRBHh/At4ah]s<"b?4;fL[9GKmc75:A2r\0'CSjY\ ?f@o]pWN)Lo::Y,-#+jtJ`NA7`[8Mkt5T5hqeAf:tkTP[K_,GE%5A'jM>h3J@h%WG5oVsbDHOr5V9V+Kq?iY7-:EQ)8fAS<\s3WlBPJO7O]$o@#L@.bC&hDoW<#!.8j.<deSSBIlfMlFMSV$)=XP]6_r([V2O\ddm C27IL+'0ifqoH"?/,Ji$R`$!_tN4=Z\^BU&!(PKnsrC8W$*hPSh!JZ?:j5e%A/YVOL?[po`CD(-at 4c#FcK-NZ'E.V7+pq,(3OrT$8%E>e37o57[BeTJDYASSD!^;%ob5K)46%67J"l.We*2nFE_+Q[#2o]h7@AKg6QCZO@rFNT=M=,"'fF2inBMKam-B85$AT6$0ARI,"ndV*_nl7"/@ATWWGg:k39m(>t.AWg&?f"3>/Rp/ahL3dtB `2/$5?1bYrhmJLfcMKte`@/n ;s\PnT/el`laD&EK"5+(3,l*jjPWJe(E7Ikt9cJ0%Fc@mm4c3s^AaaV6B,<-O/m`>G+(.&:#aZ#9-4LM," NefR'XeH@nc1AJ?![jD]Ct+iFl[%%TUY_'I:%<*,/&hC@cWUg-2(9>91LXW^WRb6Z1Mpp$-:l[ DQi0AoqIoO`]b[G"Vn:+jA;%kO0-<5Bag=g_$P\tZ\Ufl!4Cii ;QkA\1%*dY(s(sSHDMq=oX*gK?G>A!kST(H.)`!NNb&A>'kY/-)&n'UKd',g+4$qNIQOCHPYBJ7!80Lrt;"M=>5X5G$;DHMNYQrdj!jJjQt1Y!DI?Bq)ZRZH>nCk\c44PAC4^5PLIc\g.285(6$?(c/!0j8:NCC0RiF*k?AT^qQatHh0"d(C1H4W8P>>B:\"^Ui?A\d(YB mOnh*JlA 'VqmWe\0q4-=QqaMbKSI45>A,Z>_#qfRJ#[:c^r\S2+6le^O/TCPFI>HZ8=/G-548sSdom(J?C3[$25 @:Oh<;JJA6)#$H'B+`06\Pr)o%;\`#+FA@:D7CMl8."5'AU5Y0UCNL](BA2b`2 $pHjf\&jS4<0!`nLbYrA eMZnU`,o#Q.[: )3-IZ>^(MUp29?DC.a!)r7#h^d,;D1-coAB:U;=))#Ng!GP/>"]q>9M(1`FW0a#Wr$7"cB$>#E 'eDCTt]3.FS0roi2q]J'B(JtbZp-es2]((SleEpVd4,B@X`=n,LT_b+/I;b?K )<6CS7;lA/*qA"_;J:1O=mrAgeP&JekLD(Z$ffEi5O(E79KWOfd]SG@7@\\NM$^nV_B/US&U7s"kM%G'"K!&?gb:%Kb82?&'"*Dt^bXt>k9E'h,Bl94+.Ns=el@F/FC\1-sA37Aa&<4p,BO5>LLD/c2N@01M\pDte )*nCBEAN]bo):3V r8BdgCl Jq6TUiF[>CJND$=UnJftI5^ApC))lfM#&RX*lFnJ'h5c@/WQ14=GCl'6o=;No2"C"JI/TgW7SViQ/(cjX>M[@.K8?RN([-2HrgS4B.@A^?AP2??N`")AN+U<@;BRAOX5=9<)\F/B!sid \]R4qV(INR$/o\*\m(_8eC3ki.QkkFlPkVSK2?HWAXqMY5*L<Q+V:HU=/[P#l*TEt!fUf5..0q/;ANor()L]\1ZR9YZ!^qaJt4dWt$AoGk?B/@jn?;1LDiLXq:qX8Ip`ciQ>87TOE`ko<3Dr-QBPV >cE<1T([B4^_CgZ,4LZf!bt)t9iVR(1kWXpj3-rrq(aG_SZM&O=-2QU37V@gQn@Sn,/!HqiO-gccspXsa1$%e, ?Vf'5=@/e_,ItO*U2`3mYcqB^eZ+#Adk'>A;.&2osb[=ZEO@^U#:ifJ<;GgZB^o!>D5Gc^/Hq9XH$KVb=A?c%DI294lh+]p[^cDj?&J/CH>p>,l/_1E#i?-YZ-)._(QrZnSc5?KekMbBPs;]SmRbJ=(P-?I!AedL*C@,$dqDm%P&*/*( g*qmb%q!nn8.hs\;nt!UUlXRVsAQAE*#qaO#Y%E)r"LKQNJ@dW"EfX)+\Xf=5.TH3/>dJ?9W tU9s#&CHsFT =c`3DHLNJLkA1cJ"D>aQJh%Z+I=h^rE>d1VW7'aH]]JG6I0YGaA\I4_.$q\b$R:pKB;n)m>%K/0l9LG^(bW1$qiQ\NbYONAA%c. ;:PFQ++0-E5P^s=7^MP8$)rr47`":&$='>ihiFb/>A^7^3UO39<>#]l6N[%B8M$t2jP@%RBeVOYO0l]pOnrFAN&oO:7o Ts,gtoYh7:\1!Bh9)!XOeCHYE%9C8pB10HZh'L-a0$c3AS=r^a67gCNkVht<`c_]f>R4ZAitLW!L;og%CIJ*^T9RsA,q1:c#X`UI`K>kJdN]*A"qD#1.Ua/!FE7e?JEj EGALbU2cdRpPf&=$do/?2),R]p 2D(HtnNsNp-J+k0V;gb6l2;k$e5o:JBCXFf.S)SHs:C/![2kk ,cjJ Kr2,Qt@$$t:-qhO"bnT3e>GFo`K+PbNMO;Rh:fKEF b^T7a@'oJ+a>"^V2Zk)@J`@N^pmAq%QWQN+!+M+bt90mtZE0 `g%qYf,qqqpKg+tr6`aA;Of*\RbV#Frr=&+-pqWsEFAZ/&ToT/sW&kO_7Lt4FL-UA:phLq#DbcirKJ;:J!iUhKdJk`Iq?!8S=dGd(kA8d;klrp4J+:88cXMP*\1)m=,E9k=hd6*I*90X90`?JA1dXAYfX!D16fdaBiI2gA'(;n"cBp4P\XCih-r#GAN3R<%V0<q2I2WtQn8%:*V2D!F@KPQf[A1`^V*qr7U(D%1C0t hd!_.2J4'jr-]MrGV+bo'"EoM:^a3rR^#fm*eQ'T$gA/d'Jp>5c)Ad)p-E(Kqk78CE#O'\:KZ.$GT^d*>)K3MQq&G=R]"2OGEqP%;BH#9<f.r!D^/1tj[ik8tIpRlXq@#7H8R3rJB;AKNR;68#k&"1O)^$.PB0(p]pN$R2i1>-%+i4*lhab2R3M5=b(`WeqJPG@;KkT,dQe)M*WF>&D_N*ib@0E#,[WS(Ne3YPtT -;'m-BQ,jbp'eo[pBjAF>f#h2b+qRd>%^++bN`P]?CNq2Ks$^/XnGO3@G&rEp\_&AX7XH,7!gr@**7'BiS)pERcqFmntb5'[=Z"c/#p:(E@_eZC:p?kPH=o:1p@3)J$\A]q'*C]G*9fa`jeSZgj2laCfVS/+Rgf9=%S_KB[8,l[@`lR"B[o4mBA-dY!UM%Q2c=13AZZ[6fc1["[9g\"=Uq5Dl@d4n^K:'982?V909L0= Y\5AlX1V6$1m'%]"ERYJPnT)Gl#/Fc<]k`/U.[4;cR[b)j#q4q0Qpc=c$eAr-5V+n8(\DNtiJhPis3:@<.F:[`KrKL8W\i,[1].b((pCjbj%LDh0?H$2Z*)J+*Lc`jQZI`Na.k>`PhQHNn2A=OJ@cppcMK00LPg"L@-WWZ5KE#s_ldV&Mtf)3DBA%!#?1I@"`-^E^=!X]4AVDEQT#%;70kd_4V"dKX!j^/UfH'O@[*IHC(b]AZ$ZhLM/X!0/Q]Hj*V%k0mI(Y8$XOn\.qIn5/e)B"I]#/Da6V\'O]QkN_G)[I=8'Y(Z_.RqXB/)[MIAq#n& +nm qtG6g<`OU\iKY/dQE6D5kNJV[rJ=8[(S8T$Ig4eIP_Ff),`&Lp!cC phI)oG57]I6PZ7ciGAcfh87BP]!`AMF;<5TcIYXOemL8En[ag"!hb]T(1\M&7[4C]n<>X,.(bE"Z=([5+>& rentPm#3'4/>U[ mc^#Z6rV*\t$LgGp3$:*IG-1.25FGebgA4U&coE".Ab+j-&ZR+E*e!p)qS>1]'bT-)RC+6/A&ZKX'T\CV2Qr3`E]]iQn[h5&5Ma$"*M*)bf"rb 1=p'I[c>VGXD4BO&O<7Y;W=qbng1bNU[-"<38PdXNhN941Oe,:'opR3b^,0YF\\+f07p3"0lXp,tKtrIL.0e^*.pf'00aE$R#8W]O?4=0QB3LUr?mkX7B(m;)co6E'"<1lQtfQ@5mR0YR*`FFYID+'S0K,Z(nal4ssG[7IS%s^48pi2B,8 (A)KiNFLc6m=&O)5j2 ld*[8=I!/f h4\G#i>h?@8P#VEE76!^E)V!l$DeRMMriK1&8NgVG;f,X^bfZ8;N4$nqP]C^A\%?AmO '$aWQLR^Va,+Zq/p@aiWi?>N[Z"2S+^e]cMRH;7DWNFR1OOaj4sQ^l*]XC`tZV8T>FWeS8N`'`ZmSGbb2eSFN!\>bDh=Mg:S!ks4EOLh&T0[*TN_`kpiT1=?:k_k;Q0I]3Nl])gbh8Qe[+!k4U1g]>XHKo9tgI1bb V:/`FVt5e&D/pg:(d.@+Ti`LPWE+W&/"YVOO`C4kk nOkoUl jY0"< %J9d,%lsY,a]+`A!Qd$WR\n:0DE(XF nG9G?GMXFO9&eBQcA$Ma3]LQ5RBX""7_De@DAoZQNAZJegBWjA36hDcEt.OXm8d*gd_-#0fc(:9*/ N2F9AGikh9'/sc_ISAj:h"s3Lk_'a=a`^3(<`BbZOk["B^_Z[[/,eq4;LT:oHXk;r5;lA( n@cjgaLC2[i)rKZ;OI:EhCnER4k#)1Yoa,+EQ$i6)dSr%2Ba.i3: Z6SA($a!gl$/nC6>X0EE_a72CE`nHL"`ZGU_5SWAA?W! (WXtM9Wj$I8P'8dij.S0aU*$(MBK HLH6'U[tq#JP7->J=na1WgXIWFkjdW;1Y/sUn#bTMqen^`7bA>(^c[!Kn[f7p8AYb(N2%5\FG-L0^5"qMVFfaV;sBVm9oiEHgj8H#OYoUjZMNTL]MqdZ!s]cpa;;lN)0USZ0k+_G!MnioBE=e0hs3r-CTIilr>3q]9?JfI)sNDPA#dp;\3rFdLnA@Vlgp74%r7>Cgf\N4eLYHU?3*\67rK]pP cW23D84fAQO=2,.p#g4RL\<&QdV ^;qPsYans`GF=XZhl-GE%EW5^K=(+(V=OtTqc&:bh48P[RUX/.YKGC]^DA<><6b=Gh2Dq04>^*V370c+O5F&r,CEhV5fK)nMfG)Sr8`i/9K-7fO=b@T+\J+7EJ@6klM`Q4^Yf+e^kXIrNXAGn;/:SJYhcqAr=0shWAs',%1sM.3OZQcJeJI`fO4RV]9g$#h">h=C.AR^)4e&Q&K5,iZ-B(t$:NFV#FF8tY^GHO5n1q#PIMZ_0JrgF[%\I7R\CK5A:-rc-P6fFm:TGqbU_rjs$q+O(I4So>0[ApW!qQ5IQnZ5GHgr=EL-H20@6Bk(AV$0UUF_#f9(6#g":j!Vsn&pX)b477Sif2mg^V1$*D#_.DY@_CmmU-8`$i1,h6^8U.(EtH9<m]5og)eJ!bbP[b!QGEpJkP@:bmPkCONM-(-`U]cXU]gC"%Mj,@f%/]*q*9;UYd9!)=Ne'4Z7rtB]b9pj"dpVkMkA4d>@k<(tQjjl"\gQa7PArYdrTe6r=Fe=T9cYL&@LU6=r5r]hD:o42!1ARde,?dMrkU;`BbNYcA"=KM)hRQ`r\hoQOAA37TNtXr^(6q9@=N9)j6I!8CJJl!pg-_M;tMdSa2sD)B&*c8t/dY0;+=;j)*-03I1n 2I7F1jpOc(ocb%%L/XUj\s$EE2[!<;]8k#])^N+AlXfNZ6/jO^Z2^!R,"s'd:k<[[^ig6Z6W<#(\l5m0+^GHLN:tD`4,k,D:V*HTp8)O_K7DO[>f!AM&]rN'< MOn)D"o@mK?jmgi%FltcD*0.@,-H(e6!!F<5Oa!Q)A4OHKi=2=NDBR6@jDrV&Wj.p`!VSUb0Gh8*Zjh-X[3(Gg3Nl0:'`YMLhApqnB0#aJC$$_67?8k]:lA:+pqsqs/Mm4jBpTGGsKA8RH@k$)kJI<+c^HbkSX0%Q6i%m;?7J(<X\V\G.lX)qP]=#7?7HPMQA>D&q+P0N@9)JKEX!8dCA0b"8TbCZ-4C%L?#,4$UAo`9IPt"K`Sf`b$7?,ne4fS';ok_3l4HIS+7H,JV(5[NqX4TO0KdO_&'"*ZKDtK30&f;;*"3p#]t1@ZYl82b^sjLL,;P)$tJC='b,pm1Cm1CoL1(]URj,HA?_J9;VST47LXYmIq.O^,!54Q4RIsp6QWdbW9CZ0g-5J;Z1i^4bRIk96r.nI.jUBUtc^I![At*:&UE(KjS(/ Jd]I,aAkEn]?QaL!&MV:b0tVF\$_(fq__Uo3W'>*p+6%E,[*>T5hJR^FkJ*$#43+VhrK&&p"?K%S'r";pKQ_1qb8JL_:#Np5>I_Oh%>m3;' $kA]i&P3A)7WUXm*#ZnF7kU 1WcU4+/c,^ -0gAri,BK K=cYV*G9sXa#/#<iK-Y]`m` ^jW GtqIn+LA4/bkSW.9MZ)ZRbNBKV_LN\>$DohPie]e3?rjWX GP.8#A2O5-\7"C,KPlP5Y&U2[KlMQo25q.3EZ/#]X2UYU:gAI"E4Yd2`IY%O<$ptj+Y5]LR'G?P^mRdRd'qh/>A?Dch4Ys!%UG'FYh>6K5g'Wo]c.oGTbGS-?^eAW\3VOP=+T)_WecM?5/9/6e//Jf,$7((V@0/%O_k?8A&H!C(gZA$\lIS=bt.=ZY@%!*`3#1(<:>NNP_$?-H;O/FPOsqr#q?B!C3%4*:JXFlF#cLCIjr`AG:B!d'B:ai=HEr&4cICiI=dGf.F'X;M6n5/S8'LkO6,6SRf"?UQJ 8,8[=tiC(UO]J/AYl0_?+#]rgkV$$.dI 7HGbO;WJ8I^^/ZW:jj+m+ZRir%>jmWXkmbC"Z$[TT\)Y[%)L_O+>NLsS-^\Kr>eStgZ#G A:R:mQ9l024Xb[V]M'lGW-%sjY%:s+b?o?Oqid&TFsJ@HLOL+=1SP31P hSX@eR@61(H7f\W"`mdPf:JlLE\%sVboqP4m\Nq-1j^;jA3521f9X,Aj8 h61c=0G480E30bdNHdj&m!Dp.4OQXj#aaF!H!=VO5-2R)NsdM]o;)bs d/2NC8_'%hG"68'4CP22i5 ID*8>Kok0XF^'mPq6em/"*-0SQU`KfTbIF."oVADl9.i?JbIjp!>4;qd>\/mJ%tM9S^(IBK8CF!'a:/*2^=R&TVHG1AoIgh$;4MMC.sTZ18b@_Zo#F^a'lH%VkRFeh2WYgs>2'$]7o 4)V)"jRBN-OqbfGi5`bUbEG^cc4TB*.I,M<9sX"\hpBYZHZU&@Mp`(t:oi*W:4eUk:j=1q ,E77#5=+>#V]iiI`,A,]$+;aTN]qO^elX5gd1_cZJ&FRjfe50o5YP2'/3.:tN)GPGsWD^3FHn<Po<9t.kFBFP/9mJBM`>qf7Y)jBEs,'lX0J\@FpCNkj$?;b53k3K,1&Op =ktW98o6go'DlS/q$]6qIlD'XPAPmF+52*KkbNsoh;Et'l?WA^MS,cWZp(t5!bSfAhfY-_Q]XtfE,'-9JKs'SPbdC1h*.2MmDb#CcO5ZK4qR hc$;0*<<]G<3F)bo 'As'2@+[.Oi&<\UAp2/fMeA.>A6/$Z"R/ENAd47X+n*=b4Q+FRK00@a(!! leYn1B)b%]n7>`@,nF9q4>7"BE9fLGLt1!X3%,!\R5KBn;AUtn2@2m,"#sBAj`+n(HN2KR7c2Q/&9'N ^XS:_/A'igE2AjG,k@@A^R,I/t:L?DO'U2Prl1NJqr_k&80fZcK>Og<s-&1HYFbg8i:+=@8TC6GL^"HdhZa@D$#-BtK;.,Vo(!keiM:(oDc,3m`!eK8`/jha2Z&Ch5ohpX1bFM8KJ(4*T_*g;DQ#N/SH*GBlsjtIsQ(*>'6c3$J];t3h6CH,g2P/MT7r?t,TKRN9\;OM3RbVC0bhSX_6F5R-M# Tg!EoD%SYW*1Qb)JLI/!MfTZ5""s:8Fmr0*Tp7P$FXqJ#%`#=_Hi91XEeFU(m9+m2hA%ZW4E[?l`=:QW"mdF>Ps03m<9`7jB""<4<6$-`bCsKjMAMPCG2W BC?^;O17GSDg1l'"Pmojqq0\C^,I_\).2+#%I?.kI##'n*@PSh /o:lPp2Z4b7o0EQ'c7%>Xme8V0/+A[A-_n\L\l)=Lt!%c70O[C(7qZ&Xk_@jh'DphP/i7p^g2br/7boPXRH[Eo?l];bY6T&LrD@4Zb mjUf9>\b\PdtDQ :AG\H91r>R(6g6qAb$7DXRdjt&#mdFFjNoXE&]0FU;,LKf.2lK`7In."M0#RCDI4:C;p):5PNIKrL3?oqj=BUQ3;4 AVCAC&1nibS^kES7a0kLA50\3((0f?85.QdN-/k:in<)tFMAkQnN#Aid/G'-+((:Pf*)lh20R&gpeI7U\Yl2k#r3OD%VKs\#i>oggj6J8"N-QlI4:t=+raJWD%Fj [k"AM^O5frFf[K$SI?eH2b,*H<YJZnt5(@Ir6VDUKnPh:9lsHAn C4]AD&Q`"lqil1BAIW+FfiQ[K]K="X'dM&Nb)L*R!A?Yq1C'gS(Y0#U'52,4&f5$">_FN4iT_2W5`Dk;&ib\_qM+VUPX*#<Ftd(f`XXa]BO';.a61BGK(DaU7XWs^d* f)=8R\0C01IdA(>_o:LX2c1!mBV<4l/QA=!gg5c!dX"1f/cJ1P((2,_LkH?hi77HZ0I=A:fO?4 ;$FnW3F6sg?Oof1g'GCA$&]Y)..5U76;%d!Qn+-kp0BTl'km"!0[bL%2]?d_Br;oa(Z>qta.#5A& 7P;BhDR&rW^c(N?H$ZG&eE-b0]m"^:$D&m5aAeh=a_.]970#lT,`a5A]BVThe@Uk)_8 ZpR+H-.YTY3;1>![%_HdMoDPG"s;(hh?NRqHZt"eroGFR9`2OY#VA1#2g>Fn`]<sQ]!,Mh1Z'3Gofp(K(sF(?BUJCHa)%'=L?7gb07T-&X:'n"3`8jh8kaK,]9IG6\/(`5fS$U%Y(qmE"h Vi40&3B5$.\'V/S^Mh$\P#,Z%43m%R()7^iP$oVJV[p@6-t)n&\87=]I^1L\7Xm$T9cp,j7KZNa<98DU:iHc [F!naeI4_E3A15X=K/?&%%JQWN=Hd/_DN];2 a2d0B4+h6($ 2kUAp^im/nP ZYNj/+7+E>\t@9r<sP'k&JX9 h2^2QD0/;go?MKAsS(<&3AQ7?MN=Y(hX9#bLReJ6M*/8L>="H34g#/NK>Ad1 \CmZ'F^F6E`PKDjC)efPUQ&-XD]o?Eo%(9,N3NA#Z[P\rhcrL<84n RsP^.b+KZHk#;\'XYg'knHL3 gJ#doTCiI%XZ@alWl]r/9b_7@0q/TIMA%=L2AbG,3a)lo?H(]!$t&k?)a?b;gpK@tF:H)I5+29Z@Fa8^58D%0DO%(5564 (&RH(!OdYt9-C=.ZJMsfhMR%ZFUc(Y\\5P!gcVp^+5)\]*)N .1<"i-71jr$AY7p7"9T),c)=`S)N*B6:L0U*aW-HDXfsXVf&a<(l/tsMn`;`[l=;f&rbgcDP19ZEZA`M6]Dis-MCIcAO6c+p_Cjkirb!a@hLMC@MqCs2O`]B#rob8S>_U5OXA3pr&39^o:+e9hi 'I3"4N@\J7Xa=lJE3f( #c!T]m0R%].V"YU.*=4nA:rY`)W`4sGkr.ZjqmcYC0gq\QpDs/%Qp5h1>ZaEk$iG4ddArO`raj:VV 0a9Co?8!$SI/:Y'1@hY75]?Ff'^? QFb4lTA.f$Yl90*85i)JDM)1n "UeV\ZcL6WMYrcW7"8A=OK YqMAG+\;q"$Q$C'>(S56?>3A2UgAC#$.EH]?mL2VM;j1kO[A__NaH)etB4AY.nDt0PlpQqVNA`@O>JJG]5joI]sKc[gAJ3GibCf`aceB6$AQO@=hcmn[:%9WVS$?\24 o>I^]qF01Sc18 KGW9[F]`I"A$rA]$6Q?OnpSHiaO5_q'XZfnP:UNHje<=W9eXhr+2qdXobd8)-FRk2OK?\GHPXt\?Wk`3n?d%5iZZ.fCG#MDi_2N&OObPNm(' SW:B8jX`%fFdY+_'f#)B?:*J8sbf$D8f.?<&Hh-37eQOA$E [(Z6"/H`*"%I??Gn<X&q5,@D!$gSMs/ :*&%b7,-&<;A"Bs3CMP]<&$r=Mrl^`$Gg"Pm/521-C>ldl[&$aZ-6gmUAESdC"t`86-WGc'm0cgT?0g.!InTDh,_;?C7!-SC-B f9t$\^.0oSHA94BgE+A2)Ca^"&sN4aY-`fF_N`'8''4mTaq[2kH70 i+EJh<,N:0<@Z`dsBKA/E:$];\j-9O5#`\Y6.'F4+AAI*L >.+Aa"smg1e-;U%U)M/>o^#f3*la>+ E/j!4FcZM(9RbWR0'hE\*-A68[F_G?dIbeH!+cS<,-m6L^8Ffa)]!9>E;kkaW%rds,W+a6mDnhJ2E?DU'f0OBb[Oo&>"-\P2'Rc!Ls I0cE'nArkdfYsfo_`.74[rF` Hi:9a(?&:SprMXm4Z#nC>I4SZ3Zoq3E3207!e`N7pL]?ALII%EcE)UcAsE.W2Hp;H9f.6+, ghLDk,_;h T&AP("mHq/_[9kfk(L0+c_kI+X[b[n.99_:>$f.%.56=4%s9A%%'/"LZ^Q)EZe,i%eJmpGE?Ys+0$FUa@=fjAQl!/Q.CH2_%2AX^<_Y:3SJ]rcrXA$dP).gd([HQlTq=]p7/]!LO9*@=ca0/Z3@0FIMFf_siXZa@9.G&^+ C Fsf!VNRTJV4"sdYt1e`A8fG#/1shHkP&:Bo8g,r^['#Tg?tFsP%J''$2>C)+>P`r)'DP&/J95^P fLEpi4=G3)34qS:,XGEEiEqS$Qj^Zdh7D/7C"8KP&(1=We3^kEtL4TbtU?mk;.VSrCA$8d\08>K*hJib__TmH4e!?G5SN_49jl!&VAO^s"^ PQKL%5)aA [@#,S0O&p]=6,mKq=J,mAB.<#*(_eS ii#NK#p\H>Co*SBDXiV`"%;o^=4VaGiDdCsB$H@\[ FiZ.iALhM>=p0R8UoC&CRV_OUDI5@4>iJ,%'G=Skgt#hMR6H)Ka=91GU[ao9UJH0Ym]S:ZY!d,-1$1"ae].!Ao&h-`/L"ej3YYI.Ge(Qce.Gn*QrSaX7WtSP`PKoVMA;KN3/?YreI$!KB'/mi/ h^$W2`BjDB@9p_JIrqFTq22\`WQH:;")70d"di`KBZOp"<:%U6/-@@T@:KiYlANXit!UJGtk(.t]$C#o+k;:WA&DgiP+TR1r[W2n=KD.9,<_F>i6`85t/+(]s:7J?78q*>>7Q' (Gta[p"f`;AAsNQntj[<HcSFF"iT%Z,P]j/G4lXD3O,ABJ\L3N%PT8_[='i+QhC8A \.X9$Krtr0WPSG`"p8 tU'AJ#e([Gq21Or[em.EB,"-r'+:\t:ZmBb*&( kpA!:63RTsJLbATN`//D$WXRI7,UIpoJ+jDc`<1tVGpW$Pcr#OHRPs6hbZSTU=mkPVLAhL]>@*^q:UJ,G"`'&/)?BB3]4c1p%P,_% +/?^@oPQ1?7o+ppq"@$J+cK4!GY">?J1'-1fA_lNn/[rmG1,_j4oq62Y?^9Q11P0E5'0'3J+tnBlP^]e"0kN3Ekc1WonI9-qsMs@b-.'/AACX:FY190e GgVY!hZ+ Aa7V`Z_k0E865">AW=1Dk^,,nadpT?l,%$1UUUqnh51&M:W,(UFc8Knc0ULMJ`f8h]Pb>T*i_Y$RHG5hsO 7bb gM/A5A'5 5,*;5S82DX%QmA5fgNi/1&P;q]dsNU41[#D2D^Z:M&[;0>b\:7jR*e* _H;m;@09TTsFcjAt-$H?DmP*]l<i`33Lth-ObZ#[_K:E1oBKA\U%ZRW/$HD3JrZ$M-%5!t<7.Z0]pM.75r+4gI;5rS?sXMr`\0Dms:P]2@-S@b7hF\ N\EOW*Djph-em`ak,Re(UkHPWM1`S@_8=pfcP8ZF.\sl9LfGbh6r!*fU Y@Hf?VDaNQ=><7L_aC4oAT*BE50p%_nI),^WUrm>77Ah65?7lQMn<"4@nc]oi3t-A5qp*BD@e'&XCij9#C.FZ6\dt?YRb+^2EJtNkB#o$)'-j*T;Y!\55BHQ"*"fMtP2[jgYr:N!ncG>:B^p=+AK+8_oOY8Gd/%R9]$3`o'aKE34?h>E9q%iIQM-+L46?T]4U7`fUoR!'Wekf._+*ED9<%CIS:^tD+/dd>0^3NWop?Inj>Nj[%&qpVWQ<<'dAhmO\pAECmd2l&?2 mDI:dVSc!3[Z`'!%dlD@8pAKZ8!mkb^^kWP[l.[7\C)Ut\hHaj,H;QPBdpohH]fdK?O.A,EX'5g-6 ZS?]! 3rTg@NE1_r9>p K>[;D9OjYkX&b1g4#fGP? @VHt"HUY@2Iso4nIZM6TA]&Uc]!nEHLj2[@dUd"(f(l!VOgneeni],`S)L:dL!&h2`!,$F,=5MZA4(5*0m%#/'iQY 7D&mN=2VB,19(_Rq]Df+Y!\=HGTK:1J?rkOLae^5`JbE9dah/X,k\]:A2h.Gginn.j+Mb>EXl)Xsb[NNF"Bltp.U=0mq?THM0*nHSblADA&aHj#s#Tf13Jt4@!6NKoK(d5.TLh)9Zneh4)7i=N;Ns?BA5kc"=Hc7gUeX 9spSSBdPO(,JX%a]"Z_fAJ!:"Ds9frG$$lIrib./&@O%f(/`P6E`3T@e?Tgo]rbc*+5IM:H8"GN"j"Ti#37eB@"h44>+B"gCU)eXFRsTHp[V/&a QO:W<^A$_:tU[/0"2>T,YTRNY Sn_@0#m\3"cqBtQXY'?Ial2BW6nhIA\cUc=c B^!d^W9^_-2_/qD&1#nst7C-&W03D>ah.%AU2(Je.AB.e#GZFFZRP_GPM#E dNaY 0VP1D8d.hL-%'UnXRtLI@YE"@q"QSJ5*.1Z&LKison[,3VDs[^MEaS]Sn[35_.]M@DNso)?sOc94@$QJ&533m.$k%T[B?%5:!;D95dCAt"f8(M/,$_8@4Ng[TBACtPE600l;0IMBA`e;JD.6+d_!,C7X[3Ap5S+JkPT-T>@p*HfGgC8G8l$Gt&;j qFHG47U5rP;'A(8RiEp@-"gq85#djA?-M8U8l`BjW*7"o#3'\$dI"Da38TRHP=P=b^Wq0LaaA]%K'8YkcHJZ0>RVokpZ#)k4 $Ta( E*Tc`dt_L%h2PhE.5Al1Qj%)HdAUd@.S4R8'+U'p172,a1$&m'*N+8iMb:A&]JN+-=Ad,"N$NbM?d9GjD's27\E<@s&bG1?me7&qFJjE?g)-^fUf(SoF1K_\W!jN@`lf3h*-Ud%8Ua!AkXGOL%U]+4Ol'!5J)M_!`X0/T1,N^(.SC77FpSiE_rZ^N*g5Ul:XIks/gDdZs70+kKtZ/sdg(l6mE"akc.1'.6) OI%Xoka[%<;iI!q<$n0[X\X)sJ>:.4trHQF,< =UMci)!lr1H'8bAc_m\8W7C0[fP`^sZU0W?$$.%XAB5G<%JTq#0L7OC#F"3Lb#eC?XB6:[2%PM;S+e6!8p[lA*QK7Ci6E)FZNRk'42FmIK"7$A NL!DG0!ih`'L'-@jH*PF0+^e$4336K>LoV!'YRt+!IpKM5o7&]JRKrL qaLj\W`;_NT >)t?;[?')A\^oa518(VaT5ifW7i2_DFA=.XE-R%Y+TWiZAQ_**DS@<6]AtYN3qs=;"t+ni@$pS;*K)6BAta'lcX6kMF2Z:H:].7)+*EOFhSH4S;R7:QU`N>c.S9B*o6^F01lSo\/NX3nd:7>9Nn0! 1Jm7c8X$<5`jQ9,r;qNsognA[a*D2sp5:JlS@D QI+phUn!m(;kKD,2k+b`Wh\M3+1TY(, mAs;!2;NTN.U^ /L2%D^'L[QT2Q[;4OJqK]Ck7E[o2IM7CXBLW*m1?#s$* H"MR[3R:[/.gC\[T!`2h0oWM]*&K)&Z,Kh(JB1&.eHq!N[M[AA$"Ee"IC1\:j7:DPn/h):XZM\OPG)o],.9]NghLT$DA#5Cl+I# V%t[!l9GmT;)8AOiFEXoL^(2'AVZMN#>0;9L?,JF(gifpJ_*pOHQ3o0:dC>aAU=kJnrVq_:;m5r9BJ5Y)df/`3nlE-6e:^i!!7@!b&&cK24pdA]mdr(%hi@YfJD1YJZ(Ddrj08G:J$iR%o\o@4aVPjB0h59$ek;]W)hK1B1-(^=.gD^<1Hgl8LmF9M*e:B5`Zf9!)IH%8(l +VXME\Bb>IRe8JEQ) XNm9A8j5.Doi^+%c&l;N$LXq4]U/fkm$0$;r.q7aX3)I\b[`RhVg\&@]Q.n/>g 70`Ugc7pRQ*LplB&QOro5!!g@8HMZB7@,8RtoC01JED6o5:l_/e'Q(7hal>EiWOh)`KnQh+h?5r912!?'r5'b+(Y,[Q'#='!H\( _`CBR/d;`6AUDN:%d)@n`Ag[,#mPGYWrZ]7?(NRG'Cl9$oCS@^WW8fL#po4`[U7&;&#MQ4l9T.Pr902kA!LQCkkb39/GjZkTm)8VkLZHmj5%UJ#G2ngHtb([`WTN$Q+33HbF]qfKqUmRZ3H$m9l6*G06>+h g^`NWdnW*Cg4kkkteOf*aOTRrN-:\e#%2m^87^1[J9T\#&ASQI9[O6gha2]jqa Id?:@^8]ANc>@*G&.(W!%J0?U\FJIrV&_CKVR))Gs@H=0I4f]-MhcM';9"l;L>dm-)P9fUJU@G*`SE?AVGn>AkA >Ce`Q_-Y`I@AZtkJq!oD\aIZ5H(X;g<O5U]Z\hpOjksfb aKpH>9K2fds^;SA%_J"Eo*"F+F41H,KleCP717"L69Z%5(Ah*j%:q?HH.maa@to2VqoQIm!5CoXk&"Akk>%/['&bP\X']n-A.)q$1OA_9C4AqpW%f`U-PrC< M %6DqGB\_bYLtdAd)L$+4'd+6K/.:ANU.5nk<5$9fSM+,PIESS]a'Fn"=*qg5PO-=bCW7EhL6/1.=hgF.JkE_GPMLs7/2WhW#ZYGLY\Y 'UTr;M7Z[\e:JIEAEjr nisP*ZAD%%X5bLSMC`_0Vg>hbD]l@8Wj,;CX(K&3XT%tFR<>F)'q*#R[bcS7Rke'E>_6IV[g83]4@QT,&,. ^7K>nL=N'[,Ka`2s4gerT?c1>+%+T9E6_""$NjT-]_A:C,\O!N)oLJN+cIh>7M9P;I8f7L:FJ`h[$88Z#".tae"1(Kk12CWL:mUi@[/R^6[Fl?`m89[Q'7MIKRtbVtq?jZOWADLb)5LfY9NDQlo[I'jbtm>1#s;n'F)J\B&X$T!9sH@4@gBL"KZZ3lpNV*pm%E,i]i5PQY]K[8M8A02L]4.P_8!6oBbT1e4U9s+LmG9BX1a1SoTJ!RArs-M+4oHkM kmbd?dm^IE$`>fCid0I^j_FA6VAr11+Grl$h=>6ptU>V.D$-Go<;AF@[>3j)B^`8scNE>>Mn-B>,d"H6>3]6_[`pbI Tli@StiR;]&^BmL(.O&ll 7T:H4n21BRe?`b,Y9@G=BC`3%/f8^#S]K,AJ]Cd>%tA?@JhO+3jjb6mg.[lFKH_N54JI^7n+.R9()PAAj',,kea\.,*heik"i@KE_Wd,=KmhG]")2:_[JOp,G[C]tGs-d=!_7L_pb\'kZf$1I'2"0NlS5XXH\hW0+tL6tIa8gWqDQa6SWil*jk4V31KfU#h!L-(2kYC=6RZSMKj.M&W44@Wikh*,8+A/k=b8h5/*O^Ei T.X=b?\bmFe4p =Y\%/5Ad:(39>AWP#ASmINmgl"gP8&^icBi;B?3,qR,UdC*COaV^0r9^j'J/g1'^k gr`W+8\reRBgta9P,Tao#^njl!.aR"nT:YQMp[+;sLi9m?"h, J.7VpH.?LB&'75J%9JoR&iS@9[rK=UldXCCraQCD_O("f>ahCTF/-Pq,e*QC7HO%sAF9-@XEV5QAft?fZ+]j6If9?D/*Xq,>H]8qjGaZ,4coEai+qPAnrsoL5!OCPl#OQ2Qj9SNTT5r=@-ghrL#+Z?)f9Cn\^+VT4['%"0Apm \ajn%s;She/E2cGUe6S7HifFtC\C'f$Drqhgn6BknpXP`&%lOi=t-aD\j.X/SAW)7AIZG&UWi_(%A! I9pLp8hgsS>;Q;rV5oG9dLDI1=[E9K19`__]/68q4[nWZ+J3Y0X Xop\8bDX.*#el,[HVfpa#`@JL-`dp)[Tk#.:sZG[J>9P$:LU$DZ--9Sk;"PMja,,b+r*i@qMY*07mWpi@@c*@ G'%setr`Oo i$*<)K6UY/`X\3./4W,cg])P.^>ENU4ZbY,p08=b9KW;06emM0r2D]rk7*eq>]UYAQC)68bl4>opCE\@Cia?Yjh'DNB5e!*%JLf=/:.eGj+P4?DC_Om=IFNsJ`Q,R`E9*te+:d6sR8O$k?=rhKA_+]7Z]$]6aNKc[mmE,:FtHn"Z[SU`r.E6a;'n` .6L1QO(!JhXaMIO@+Qsq)'+DD-5?B4d$!Oqb!;,%/c=+I5tW,Oj<^a?%TD:r%f_9U]1t5js[JC>f&O_cV"rIgiJs^,mD?g(;(_GAV)i\M)[#kW''Ur!O*kP57AnnHY7[47,R[&9SbcXW*BVr;=mr8+_U,nUr0I_r^@ br^=pAgHqka3BEOph67]1U#"j3567IZTC*`oGdO21Q3l/V:m7$KdVE;bV28[Z#G.F^&cISNhZ82.emT>oY/^rs.//X=<$%]BB"528)tTn4ETK _5C_IZm;"&."APR@,;=JGk6"o.[?<%Tq4S+9WO,Y:aB#0JLjW0#Sm(\nr`o/sP3Ql%&%j&<>doic^smX8+27 '4\1M h_0q6)99eo^tAm^GH!C'QF`e5r:ns#*bFm7-:1 ](B`E2trob<6e`^FeI\XUA9kMIt0'M5)T_IoX5pN`2C*E#\2AcR-Nsd+ pqo5=;0JsKDQh+'kN'%;"o%:ChHIN$R(KD5)A7Jc[eHBs'!C1>3m(-fGVYj$ZiX/Q7HArA'Mn;8r.W]i6m8/f,>4>XB@MJ!Io(o'T8A@s(?h`KbIGDOkMW_XCee:lL;\#@1I:YO8,p&dMm]#h,*B[o;-E%qUt_O00%l[_BkDt,Wkl8g\6@:S#a302_O>dZ>*>8)Sat@-\/Z)ds3.t6]-a:eLO/0_0tPT-Yen9(*eGfRT@F")SfYnV,$?L>%q,A7NT=/k'oh.kI9f.4kQK S(%_X%`:"%g0/]-iEm&[U\ARk8N+U3bl4(Z]G$9_d'hbSoK#bYreD-cQ"]W1T26F@^WsI QV,cpI.<WPTPiGi0/^_H5W^PSetF:UY-Q4GMPIg:1N-Ol;P#iQo3i4CE.]eYi!b.HPqP8?8rqMK&)%ltAtt7I[2Rc,.F3()Il`)9B[FH0NMiF"imOiBAAQm??^25+I6r6eonS@9&nM5t#5HMGTm&V?EMn(#^6B(X%X_4*o&["iSmAC77R7$h<(k9T(XHbMA7/&C:WHXsLIsj:_JJ*Pjpe$sh@tIp:F*]"#H8KFR=QiEorEFC2VZhO'(\4^C9qNQh,rjGm8[JAmGAC0V@=G;mMLn%Va\ZK>niK0tYo9E7\)kK\U<#6(oX1Ngcf?Mo;dB`lpDI9fVs2>#Hf>LXnq7PtYp[8>:NaCgFI+Z@#As?kokS9%.00\jN"UP+F9*5dQ:ph\)b]Lr*Z:E)bkl q8k1L3mKlc\70&ZNfp7Xq&3]dNg@[T3&/p,id;XI54:&`jOVh]U"Gd4Y"gq5)\n4f!TN!A#lCG:4NV< ,%p`b<-4q\dt^n8b&lpgM+dc/HXAsPgFABAakW!5h38tHVne0prOK@GV+Dh;.A1#;WF5Pb &)A`Has6C#0[TASJW&\8JYpDTHK3_DE1RTlPjRrcm;G&I88C2CrFY'Lf;8c&sr&pBrTSsN-&LTj%\-ct[k^\Ro8JPP% J;Pg]p&8C7`CRLg:cd+T=L*p9VD+'[R$EPM"iniN=s(57WT0eU$K:l,;rATGAKKE39d=`!N-VEA&5[b!MH?;.kKP"XrkJKa-\kZ[SLD5VO,Z+J_lNp@2\HE6^^NO%l%+D0^c9>j6D<\'V;;6[8hd4)2r@\">!pAjXRrKW_:hPT*039!&)D^slWa8AVt35M?6^?8)XTqI*9O9$SGsX!cbr@t!.FSnIGf"_TA(FO)_DGr?Cm"*'hhOkF)C2fiNoDP8YCIkA!l0gOG8bCXsn.F'3=9#(A#r@K@Uq51k=@_,Qmf4;^p7XqnGH=0h#]p](HJ?Xj[>r>?U-4ZH_iR3c;LenPcIF/4\*.ORidj\:Amc]oJ.XFN-<es"F#Q3IA9>aNP")GnN[r.A9qFK;Uc;f<$%X>U+eU]\#pj=Z hqWM:MTq$/&N;eS&<8TLd:&Ab*r$I`^Tjo9Vr=O)->.eWoX67"jKGNfFA%?q-'EK=8g'_3k:PMOEKE66cTU99+#(D PREH#Xer)2ZO_:4H:'/d Hp!I)nqOrglfos*[lJ#rR&]ShTa)$W;ZKenVk`)S[8@?B*'3dHLh$9&h*XmqI]Vk#@AZ"RV8n(tC#LlbRUJ?(hjnf)ZtlUY[ sgHsHKC%1nREJFq+@D.nb4aA!9pS?c$#$-DA*6GQ568LTrtQOT79!lk2d FPo5@"s!WY7q`=s1(Q^S90M#2I/3pHgkr=3IlK% 1r\_'N\1cEU!;668C"1-W-JJErl:VNKbji+2SUDcdH0\3kh>c26a1h#6$8AV3dCAk<5EbS1Z 4`1CE7a7ELnOsLFXTVF9S =N$7b4;a&,7cUY2hr*P]nX06GrASL`<\03eZ*[lG`_k`i);at3041D"Q$`9L]YVZ)Im)IX<\62,DmYMR\HS"t?]o1:NBtH=[:>b#K&Y,$Qa /sl][0 &?pbqX>nU?)1#?jkC0)^$T;OIEGAQ6RT>Z2+')DgKA232na)2586_o1=A>?mBk.9\J@isKbA6//kpEdDbA]pCoK$f!%#?`e;Y-;d[<`&+=XS\&VAoaFZWlAJ#N\)4E=0tMCMKXk$6 Qd<#5@rNCh%7bQeAke(c)Vi0bEG/"8`maPqA!RC6D1 ZH8ME@A_[flBH_CGObF\AAL];j_@Wkf?hM25%P6&fg3/0&ZQYE4(ABStJ'qKG&=YQ"A=esLca`BO5b\!,Cs%U5WTM@Xe@59in0#Wnl2CGU/f(I.nnh8d9nL:.ha],dL%!O&(;Nq5MR]rN:/Z;ga-Rd_JjKB)*`_4T'2AY=IC:d./8@WSU1) [8s3E[W#gm#Y]g4;[r>XD`LY)lAF4[TCgf$-_4' 9MH"I=N+!+g4q:;4m9WI.n/0dm?!6mW,,C==\O0^I"PPLZq2b^J$q?gQG-16IWAdHt5a>4J/_ls R#6\J5$X]o%<%'"3 `A*]=0>+@dhpC!UWb>_+;@E;ka\a h9Y9M"7Z_IET>)L k$dbAaL9]AM>As=oO(Pc-D5@p#<'NM[JQqZT[P=BLtscn*t6C+EYZ_fh0QSCk$LI0(a&`:jtpm6^%=L?8?]\F"P"C](I*(^fSr'$[gatV&o:&k?m^:PMi.f?//`>jOF%`N/ 7-7N>d(R5l"q8=D^C0(-M&tddJCYL:UdMj:pZPmi$_;/0cb7H/1?AlmR(S62#F"e,&CpSQO[m9[-,&dal@DWZ.7+H!;etAsatJpZg,i*okI,S;8Ef`rj$F-N\'%=DM\;$jk (Wg7!2531OQ;Sj$^j^m0jU%(l]j-e$RGirG"po^71[Ie9h+(OLAU9a D4e/HbsAne.d%SN;;goAQ1_`SV 'N*3#kBs 'TfNp`_JsMp$VYrcpIG9C+pV7[j4d,5N^\EK.q1ff!AU9AQ$44B8T6Hg=T-E%"VjgbM%dq d@13`UgbS?#6I$pdl=Qb"p1;A-Q]0Ro]bA "k&5G(8>0`#6)JtrC;_hdrU@CBBrb'%$C=ohkmZ0Q[\1a4A'8l)nA&o0#<TM1aXEGm9.%BqO^dP(H&?q%?'FKQ&Y0g];8,Y-5c"f<1V.t(%#H:;ek!imGA"`(k8+.ak^_CUl(T(eZ@^;sf0!saTpj)5peDp?ZE8?S>n'=3!iZCh-<:f'ZOb0;C&mAF\[7(f7=KfAhpjlM7RT)%=jrK%C&I8J2&E8,+c"mag3"re'""-#rrA?O _0G;KM2gQo`HheqqRGAmAm7"I3r2WYc'eeioojXT"V!hZ3`D\Etrgo-O,VaX8UU_#7GiCgsXV%-PK1(JSm7R'&eN$kQ "#kUArkU4lS_VQ;rVsiQ &@A`csf1E`*+EjNC59F[V\'o0$#Rhbs)><^/Q^/bqL3Z3k. [Umki)clEnQN\. s]S+8ZF0?MBlAqgC\[o7F(1WQ CkHB@F>BU2f2Z>AZ694KkP4q;tkSKaoF\RJcB(+-92"7=6Q_*$'[h>e9W-2,'"E#:D .TqXm'"HeM?]3-jc*(T *QET<^]bb3m-P Y#-\Ql'WL\X5r: H_BjbLsb9a4N"Eb/Em)"hc2XLIKrp.QIXGDL.n*X5A6:Iob=-6k;SAQ_N'>e#C\G?BtOAd%r'H8aX7%5C.5iR.`,Ng0CEKL6_:=UQ7F])d6r(Vo,^O6[I. IJC(Z$kS-sBWMT(mRG*::NS0$Oo!1O<e!7hE:R9hJY6IE?as"^YBI#/Cp'9YGW`V*c>`IO,&)k%lQeG4&oQ*2\aPM8]Fka(/AH508dooZB@\\I\5;iGUNH^;S]NpcJZ>j!EF>NGe<i!2Fr&"T\cMiC@K-h2\g^pTTPl%X3Q#2%t7H/cBGACb/q%>rU>On@+&d"5;;Lt2A=N;$S67l*ZT@Q%7A&t&c[&04&C]e3M;+!:k&ZpA`B!oT$CJ:IJ@Zd>ki/!2_-9/'mki_alD bhQB,nUVA#7dW^8EB8?R[o.T(A5E-?80 DSoTFEi04?%h1h$HL$L-L=nTrHlLAj;q^A;lL1E\XL'p/B5/@9orORMon>Gmd+6B8_r='+MABWfsqL:ipbmcc[lY!A#^f;AS\(\;inAR$^FTn<6%'P3dckS&]nV/q-mpOIgF-6\kriesO&TM;B9hX.[d[>qbd-J[Bmfbd_/j(OVKX83N8Df"4JX^:CH`\fT4,')p$T#0XGfAqY`i]/rm7"PNQ[e6J1OD#LH$QYMMqH1%QL.[tW $etq=r$F=YA^L>DNj4Y.?_C?+2WppMb^:j!.=gl1/:?pBa6#tZltcS)R58;MR09A#p!Rm%RDaTT^"o@-C@*%<;)q%/4.W)nB7^SrWMB3l>$3`UfoUkbgRW>FGK$M7c:gV6G4cWcj(+&BXnc]6Tp+QP%.RW^'-d3Pq! U%l'j26D41c H*(gS3NiQIsa]$Ion p8H3nr*>A^qpl.W[6)\-o+RU]Ydn%s.ON3@Ws`O1*qj/B5AVF4W/-1!ib\(B9@a^gIpW;e96\E*d0'bmpb]\1)22,D(jn1X?ZEglE[U[9;%D^n7Ad_P7)iAXj@tOFI[@4=>>%[g87r8T3+Pt<)4)5Hh>ODI>'?5@APJcV&bXH*AY`#L<4`0ef;N?aC1 P*76q!4M&T3T-/A$njY]p"KSCla\=(UAaWKAi@>iViK+" `]F-EJk2b&_:6OZo9rJ^!tWW/OFNCN<3lF ES=MTpc<kpe1G32)[*p`'At?J> S-AnSDq0'Qf2,.)r5q!MQd03c8g=VCR:)CEe[2HVNg*7p'+Bp3^i#3HjDQ(7i#!!XSAmt 4P-K;,!k9iJ ijHq4k]LZ %KNOA+kAN/^X1fJ"2I,0#<1mlMX59[XUg7ZEm,$GRW\L%LW>Go/qCES.A-0D/fBHd3R("7&n5[Vi;&q)4Rt)js+YEJg^0 &\V9A"KD&8r6t-@=$>! (2aNc:5+I02R3qS9Y n/FBP%$;&T8Tc]_X6p7(;*D)m5<#b Noia*7V>Wha)9/Z2i VW;S"8h=LsYpW;%_.iM3=#g`L][H1rEKIPHVV->?):`8!*Kr2Tl?hq!LQ;\4=rAfL*Aa"RgH1_lR&S?F5HAjP&T0PIg4XLAYRAh [a1Q+lkSA [("*1BWR+$W+i&G9q1][oPdi\' V_1[kqL0K3ID 3h.MCX@V<8Q3PDP4K@=]ob7A)cI*6YOkn\"R=o2@2rXaZ=h&&8SLr'2?8ht `2Ygj?Td,lsoe`b9c8hMpQX&,:o=A``PAX_W;(+4)UmgC.k%k1`?HfBg(.l4%r2 b;s)4q=/kU07;*Z!qJ/3_n$j9"=@p<([2LfI7M`##'[*meTIHG%AZCXWg\6SUo]>aLFk'&#RA5n:oZ,2raU7dIE)l/eo6S<6^EL+tZ*dQ^@m.nr6F`-;sX'@'hOcoT +D)Sgg(\5B/7%-ckN^1gB77WogW&+=4:f"d."r)paXl3>HBFX6XEGjLJ3*ChXJS)k.IXhHZXITitshjDD;mSU43qBRH!,MK$AD-&H 2A"H?q!dj^rZ9= \TYg;[G`SU/@>A`0n;(a@Z/2O>^1=5);qCFnM*3EnN-rSQC ;"+$BK: ?ZjaHJ,FCq>R@cBhXG6\Nf?Yt^99f!pI2e]S1*\p)78"LIY;AY+f5%hU`s:heEq;At/0?^2n\V&=pP5/n`KPVO9UFmNTgdZ[ZgVA`\ILfOfA/$\DXq>@QZ/1AC:73)shS_[o;&%iW<;^2M3=hU'@TOmK>A#)OW`#A:N^@bWOpi@[3st>adqdQF>5]CsdIlI;JrleEc;"dtUI.iPA6A:eTAs$G^oKcUJ?+ct4idA+(`C$H%M?G42c*h(3Fa\7j^#U9(`34N8R1b2qJ_dr6dhKdU62W2L%];]8MN@ipji.6s*fh[Ji@bJ3Agpt_cIBU89Tt('!t)B'J`3/,W?NaYSr92X9t.n=3A.djBQ3Sa0p:@8/oqFPYh(*P42s" 8@:1D\>nE*sn`/"^ATJS3W/?atV?Bo&P8@m1 HK;AS7+K,*FEm#4X9_oqJjXkHg=S^#8RWRp1`!j)k*PY. MmlA&1\r@*t$//AKr8F!R^.bqmse14(AF&Z:Q=o*LSj:>FpFn(erd;IsnaOKAmTMH)9G8G@YFp*(#nh95M.@?iX9,lK"]%r><p<^' T01#ekmY?7leqSFN_a? jA4B'I.VB_K:)P4#;b4#CR*A`cT9q%CUV[_(NYU7LJ%ciL(4P=DW\G]/7)=M31E=Q=._hI1+(Y#4e;EAK9!6qbZX7 9P9YY8q7a\#PeKlAWO5Z5A(1/@r1?J@FA:X5[0+j9I9,#)>26ScaPBl_T8G$RAk4^b*K[F\k653JaN1Snf^lBG1o=[$7<``l1jAI2TsIl-;#.16D%>E(C^t65)0Xm0(CkpN9F'Sg]VPQ`j/D3?$G+?L;)$[Sg$(^80m<].TF&C+h8%[-,ojf;GN8 qWYRg/CPL$qj7b?7h-D24*G1mC?c;"Bq trOD*aHJ+8:4M1'8AA,r2*fK!%&P)[.nQ'af=`W6/0:h9!9W06U2&YW*=m/K2@ANJl&KPS"e:=S$)sYC< _8E*4`=d\]NMLW!R*=5H!@g4rV7F)AtX0!^U CFP4e-:b?0AOmp2+UQh[PYK2H;@\cmW*!QfTraE2BFWQ]\M1jBphT6>_?#8A]'A./9'.[%o8W_KcWtoF:*>W,6PKR`P=$N#*b*R.0.F*gIQhgV`)j3mcLZDpnLK_*&=@)>B'.9sP4DQV%dnb]>=.f+bMq)#kHHUJ^dC7"RiAL@QDLj#r%A#QV)`5.6esha9J7*>-[C#:&N(>\tCV*aB[]$XQ3S@tE<$%^Njd>#n9>.K.0A\j@pEbP:FBAt9qap*"GM$]=Q7 7?kR7l6,)fXV;^^GfoFNL GVS.ni#P\@Me] <&>H5o4(B!g9pUY5o%[o7dnYtg[PlctW`5`T.RprS0CD2m?*/a.?+sHk0BpAtr84RE``9iK"^$i=aMg_e79AMf_p1qGGjY,=@>E+E%5Ft PLFgKN$;bA)XYFNdg[1DPlckss5mfe"A>Sp@R`mL%KDnZ/=HU@ZA&a,N"cA?KOY*(W &UZ+f]Wd6R`;q)bgnJ(m>9D/c"!6(ki;AlB8UGY-?0m6l`l[q@J;.`RF!^^psAIHXr)CMPbDRNJ\dFA`oVG1l&\-?I5QpAQTF+RhF'!#=F\bOh.MsUKUKr;2:Arg'(Snl$W078sP:kPhTiUGL[0Q!I$/!+)1i!@5+/hs9@El2XkddQ&JoX4f]cB>Q9#EfY':^D.I&Mtl.cAR@75]Q\]PbSlsX"G/Z6$NUe.$Q)+gGpF:I2iJ@O1HHEgA,d=ZZ:-jLe0U4QjDtN:pK.CV:d&_^:U(,EGZPF5rA73&L8V\ t E! Vr6\J;*\[NNE8QqA\(m1dQ[6VHT.\?PWq.O:l>"WAm+H^AdIs a_H\2FS*tLBZj=*oi7+Jf!T##@ 'gR\Rgh(GL0^)a\?aZ*53&&t!Z9_h)CCT"]^?XB+>/ZD>e,==9_YQOYZ@=4C%J)n5"t<7mA+s;l\?K%e@pCjq)Y5(QCt>[&L4m3kb&5/7'Kmq^pWUME.pNKcB Rn#b5Ti='Fr;c64M!@Hb:Y/O(=0T]K?8JnVf %(:H<59Vl&6o#ijl&r9SQl(#?Srmt'#?co"JSWBT"7)PanS%Z_=4aSf.:1-Oq>266R>OclW]*4h9_A,j/^V PDEN2e7cnnNn6Wb6qb4E-RXK/DC_nkW5roNrb0k/T_mjK:8)P@[ i^-:L]_?JE.S^im:89(g2?a8F\->fZ\\YqY$79i>p8l."H/EmBP=QL9JX[jB1N@,c,bg0f#=/nPLaQA0'a,oX)C0Q1TQLSYs/$;aGm 7mC&<o!2/ph`YH;ek;#pT7J+RO19@k7D0Xk4K4.sVX_aA3FZfX3(9Pko:q%PY.H:8@^G&pL__G5^![#d?bcRl-kQq+3WtiAr"EMiTTUB@Te@YkR`1W(TfAf8a?dP+aBj:A7C-eKSFcY?KOrl$U==9e:i"gA(?XBcK`Mo,)igG6btA:%C$6shNsn7=[`83AOth^RM*W%*oZ(I)WKae@:K-"Jno\#OaH!"gYq*Z^d@97OX4'%AN+lQWgEd*K,\=L,iV]!AY'o!ba+PXQiaViLAW P@Q$n!V9n;].sM$^o<.[mlHAcK?b*=XcROiNF]eVD9Yb*&iq&TWnlFgb e%1e1+-@ gN*Sb/1q;IZ%mDJM0r>Yo]i\ZA!%:8UF>@CDT-e&t[',Ag5#0GJhM''L'f7tli1A(rPBYUhe5U@\%!;3OdHa%qO4V>!B059/Z.c4-8GCm+=q0A]b;41rQ9W229`FprnZN1o!#.$^#eAp5R(*1K;/\i(I0<_ISZ>.?\^Wekbs]eZERn@5"3)OD=QBrN[krVmA]00HjR(j=.=3.#G&jDT%*%[0QUAh7RGV1=O>a"T/KV)b&B<%JOM?!dkEf-q^/d0Mq-Jnar7HsTWVeZ3j)ONakRK_FJN)[YTUQdsC/$^Elt/blPLHhiW81hWX?19KVeeB()c(piE0CY*HaZ ,dpSJoWHnrkW)BtO<pa?s;M9K`E+1]$-W.s7pCC(&AL Kp$dpX`/Y0@RZ5B[;1Cm"U%*D?.!__E<[s=$XbZhT2iVH@[a4JRDt@*XAh]eXArr4pj?YM2555jKLI`2:&A^ad)s,#0K4mXTpU..-@*FDU@TX.N7>%(h:JBFtYkr!KEG>Gh5KstO#)H7Da@7j!erQ`_6qs3 $8T6D1gP!5H5\`nP-_TCk8CKoDJLNX5-jbnhU`g5:gTf>g#"\QUk=VoSJ4d@NMV)ZYmbP &"rDGK Q7roi.+^XkhrP\VX!m(:-,lEY*bd3B#1$*UY&ans$GBc*:E3=&mZM419#E/mettA@+'=grDQJLY^]GP42R;c?JZ5;;LCnD0a)nRYoftWdk4_c(5#A?M;*D.!O[lT\Mn(2A.$F-H&+P/rg&TXCZILAc9YjBXA'28IZ'!!F6A__mBA?D2CX1:H?hQ^54O\Ba;=F=?rYPk3)4.^c^=OV]b3??]lU%$!*g`YkAa!GRG+UQtS8=)A!Y2='d:;#Fp8B-X3sl'qg+iW.EDU5n3[1"]1\<^4W"oJiE@Ma*CdFJL9`K%-4 'lV:5'G`mj)[]bgA3W)e"3ls`aP%05SDcXSM]d$;-mOc/?H)NV/#j-bl0YG2K?_c(N\5AtW^7mP?b)3;!!$P8\2BRsML.(/,.9t+?d>2(BZCk4AnR?AG*Qfd=c9GAEfXIp9(a3T8Wbg&+A_MN]'p$EeTXB0_4LUB5YiXOsMigM*SY2?Z9+&=gHlk\i7*-M'TP!e,!nb]0i21r6EY@/c,*np&P`( Y4ntisD 'R4DV.h7e'=gchIDed:U?bR9=NO,s\3mm[#O+:8+6?hRRS@*VAL,UH\Y`"DaZcgTFqX<"UYE7F^DrG?A 2l3dZ<46f9*"WB"Cd]$&VAo!JK0=YnoF0QN*ATZ\$16RY(qg]2F5&\,(29'(H'8q!)V_'pI1l(R'm444.QZC,@;7AJmP.< QnYbCkEC]$2,%OIM)'snFB^4T%&X8RMOS+8Z\?J/'8/N\2Gb/<20A1\V0IN$(O.MDh]MhK+,NAN'$KKfUXb(L/A3EWKOk$Af7;ms"Jrs%)H#VL>#^90!42jF?(+btekZPD-_>RH/q[hY%eNS;MAMkAM3[E<2M*6C)HQ>3+I(I^hkgE*;Ai-e7-U53bDR.E?0#f2f4(gm"m%B[2J!3MPZ\DXn33RoBN=>op\XBU(.:g^)g@'<>Qc#9e?Z[55L]jnW_^Z5U/:+@/`c9s\K`)6OZ[go(agP,i+Vpbid'A:N5]Q8q%V@!+/*V%Utd_R?MU1e+;@:*GA/\DQjcO8H])p:4A^,i[:\<-1tj0VXI$->% /5m(OC&";77"BmI[^.8C%_;)AS6+m,;j^hKG0`Nenf!@%oT [Gnf.n'Q1WQ,SMVp\'rI-M!tHce>(+B67J`NiFJi7SP1>j>$)&T#)tF_b;p[ecN,Y?RN!$F!/_>;(>:;GVT\dJU#nO-qXhI],t$V1aD[/]-[2B1%l0i\E$fDCmGK?hnG^p?K_H)\#UCZ)O$C_&JDX$F/_o6UJ%'qg%#r,`1jE)lDL^B;TnsO A'mk5pi/1Mjmc!AET;Cot?F3[1J"-(i*X%eRGp$.nKfVJ=A?h)4B1W&b6=8P."oo,?VWWIo-Y,DZ&DL7]laAWLW)$sI5\NQ5<.eJZ?5(h.L97rDJa4bb&AsH</gZ[5rZ\mWKlQ%R#6rcAbsfH1"Zf322_3l4(cT?q;dB;DrfsK\mtfJ12.^c!hlcFJZY7qY\S$OtHXpPIk^!Q%=5iSD?h@%)<Te#Ad-R%\^Ahe\oF@*'f0 n-\5R:,lm/n5_]iji%d$;!]W06#\Bo@D:o LPPEM@d&JW\n**q&Y:R&E3b0>Aep ]PP*9f"q8-]Y$hA+/bfbe5b-p!"H(6C^P&k&sipE\-"cb],a[B.kh^ ,"A=/]B[)6L7'9B#LjOR ST/]7ID`Y6/n]D^j+[A@V.&UXVnS7.J0Pt)<-[tZqCi#sC2PJ*68,ngP?: D3P<!*)9ta/$=.'q^dIRP.*ec*2/^YdC&JB3Db^e>=g[lEAA"1G5p1`7nr@sDgt8AP7:\dFYSgB\e##sM)kQW=tmI?A)qqFKfGn\F>5cIs 3qM0\fC]KJL?A$.((ij8>";_a2[=Npr[H",#s(=I!a&*)TY]bt8L&bhPq2TK7kGdQQml<[*i]jF9o7$]gK=dd ;>jU%4:(^nqQc/c[>T]iS9sXK_UH+UqrL!lQdM&_S7gr/tbFA^P2"#f[kYh.^Z(U(al5m@TL#Et$`(LO57%Q c^t1&\4dR1F lqANA+o)'@/IetJrJb%b/WR-$8N$A=d38K3[is;Y.#7=Xt)cQA:lX&.&;cdq!si125Nr#GW'f!"@jX#oNts9+25Fa5[jt0VNpBVE27/@4IPk->VGdg$ZOI`c? TP)OFJ8`%nhE@=SflQsXQr!T(@5hPA<AF;mVb@m6<2LKDedE(o@r&F>#F?,,\Xb0c"]!A31L(/7fUf4N!Z,&O7n4YhpK['K>FVE1R+oT'4)YR^,=FMNCUIa_hS=8''%VofLdgT,Ik*DggSD7*X0:C!'`PY]qfrU+76Xl"P?sZKmLAgn*LrcV^#mF=1'LN<6+[.@qTT0;0#N"FIV,F<_s=^`nF$tm"1h.-Q4Ri0*OI2,iJg05>*X"!i#_ctf)lV"?kn=1*0(p_]SU[%U4J2q,LAA,b-h q;BFRs6)kBgp'L/4EAU/kf2+KP_o";?t =44MWelLiom7@UfkO:N"k\Z2,=AhrY$s]'7&A&A;_I8Xc)dMP`-*Db9&U8>YeL<4#-d\eFCM3;YM1;A)8\LL9q1G[fCd*(MUSZk"/LTs42#&YaFl1BFQ*-/)a>>@2X-(;ndjcTGT d`o(p8ESY&Edi;q9?#:qG'"AbAW2$aK/;.UjRU0-@Ih:[$n!c2I?n'^IFArki5)Dc2,'XQTO+5r5L(^N^PP $OQ',ET!pp5dLO-E1kJO9a2=g02OV?Z9DV@a+fASkLjo)aF"JNjgGZ3p^8g5^N:58?,)JK#Zn&4-eGrHXU2Z9OPj]p5$+/Z$-Q3=[Hib%jL6\6L3^G(sAZ;/;$!9MIe!sVY*c-)c9hX ^B8!`V0=CY5XW>FmA>3X+M2KiWJl#nRL/]<<=WG3Y=t;_j2hS?_12 X7O6lAq.%n)&@bbm-%g,e->2ipK49HW VD%@c6'SE/81mAL6?\Z0ig9"l(%-&bA@NPapRAeBosJ*H;eSBq5eNfa7KI\_`FAe?f<*aRKKmm4Y8\mY.E?a\AnRK-'nCM6R4_rZ&7@U".:pJcl[+SNVAp0QVkA.c_<3!+/-KpW#1#gPoTm$-AVaQbMm)+` #cY^(s1(\d3-pG[bQTS#X2e>jSN*6$6& :ZR87O>&7=1C,7q9_`l-f]fln ^b`^CQ^QI5%nAH8=j'Z5MW&BMi(Osr$*22[[js_:%J9Y7FH9^/$>%%L(e:gQR:f0;s24gOi&J%5[[39bQ&f/%CO",Y'QZ>>&g7=ag=@q&9Q*Dfp:7-"6hJ<"7dXNpIT1d;]"s8SV6l?9Ra7b=heU^<4Ackg^FQAVhiU;YdUIB&V_m2#B$/c.`Cf*AK[!*0Q@fBJ#X)cZpt$=pY:_&bJN<mo[hZpDtn>Xf@&01[g+j_Y1bBqBk6tDRZX/\\lmQ&n0E:"@BrsAD#`8MX5d-;EU:ODs.Mkbf m:\"08hIRg^6C=kItD;WM$8[PMNbMJ)K'3#sbH6s>QSlh5o1Z367dNDXCRM4I)N>)SFn!:'E^GN0A@6-6,sETk?Ak8=rA$L_@39h]X%-5JAf,3eeCXHWgo^3VQCD mVqd!Hl\O$15c8dQfHVSnDCSr'0nDAS:Y/Em?DMWqc.hQ2Y*;WAK&CH7F'gWTSho?DTQOj2_!#LEBP=NA,>KX5&>o;_PTQRO>\Y@0gCnerAWa!6D^+KF+YL.Z'b\-"6(F?g\OE;Fs0kDr"1qVA_PHSWXO&;Y+:2mhcGaHsS/G_Z:!'ChZ7I^Z<+:?0.^-@IS@1@? ]: !"$s7!SE?(KJa*CJMmdD,1rRKD5O.6t:j6IddI-! UfW#H33O'YM]hLQY#JT;=5WH@V!nO@BSd-nSJ:8&k"0'S$Qt[-K3,m! RX'daCqMS-dfPHCBe\fEKRoF%ICJQ`NcG'M/SIfQns,7=>U[_4iF(LO(UgQt4h844%[s<n!gW2_aP!mj4\1G"6fA:3./>Y!:&bP/+NL8:4c6+_-F +J_-[E[sV_J^Na&RTj._ 6at+M)2&DF98d.e;]b@4%KA9;F";Ag-"t8>l(-(54VB$\=lFO4[5tqc-,QtinJ*5]D#i14`&C@oSP9n,ma]*SXn3`;)fF6GA(Q_fl"K#gd$T&_Akelq#%h7kO2qN*YPY*o_8'2gXSmE,Y7K?"$7(KF[.C5imgT%87;WI^Tnct1@N\C!+qIT&a!0U"[)).N>,K-rhQ%p`W'RM<.JY@RHepUbb;?-3(a'r\;"hk^d[7Hb-95b(/M/f4"so2f--WAPQ7-C<+!?B0SrE$eb.)m/-`A8+-j44d6]U"\QQdq`^if0mrDqa`P b0B/8cni((k(oTd>Z[]d8k\Glfo25A)^[)Z1pE&^5dN4HG^($FB4BFg%TK1^Y(:,M+>4os9N=d[AJ)qZ!o[J9$F:6/G2f[o[3D?+N@O4:U29OLK,acrJ:B..A%N[o=n3%!U5jleoIPD8Dc)SoT! r^B'a4=+%lp2%(*r"]ATCh^+\[KM@7 h7*9-S(fc_eaUK\AA`U+9P;DQ1HPb@Wc$NX%gOgQ:g2dR>0,e$g;\Y%D.BT_jso>FpDAFI$9I?FUMS1?$iI5enW`ICBJSP^Jmm)pjnB3.%s?-MH[t$612MJ_B'"R X\$aV".J!sEp`q<'>[nbZAbbm$Fl49A?LS%Fd%g;[ggO;FQ-i0B+(CS/-?g*Jm%1PH)gOR?4Q\IogY-JXn8S^Qf0AWZt=HjmS[)Y'CjWrSUA%1&4>o`GA$gUU\LS[kB+,r`/cA-J.KWbjd4]X-*$g P\Al'q-d3q-AfbA@+_7k>AtIJlL$$M4qo21\SQFLo1_V[B;tT>!$^feIPTK)/)V>EYiEJOi`_) ?c7Bk1)XJX#PtR#eAP&T-j2i6.=4tsZm\Ht9XAI+;M@Zj>lh6aA*P^9Ymg(-nB==-!A!JrP@Ujn,c[r*(jRfkdp?C`Ka'\tCX"c-]eWnE2]?!>E.353qKs7+!n 6#@GFonM(-?c#7/U `%=RF:Mq*<"(TX%6m'N##4BN`FCU]KA'IAZIS6Yl^M@.Ac9lM&j+B^nBPM_F8&U9A>4A1\,?]Dm"HjZQoeBS+g@P*r(0$h-(o%_)tF-^\Zaq[G!a!2*+kZEg1FIUQoQ'Is@!O-q6,RDW&L*cfTJMr;Oj@K-m4'q.h.&*g>6UZ=(NAE6(&A`Zt6_.a"'B,/4g6Hfhln\_$VK<9b%sD6DS1ik7n?VoNl2"AkNMRJ(srj,ggIqTJD7qinH'Dr"1T?,?%hclAMI"nj1["LM3$H.A[]_V;R5U&`:]b&6Y#jVf)[s2<3^EFT@'1k[m.sAA^O_^LFL59`KL#`c@_.37hW^3D!7q-d+sH]H"PKBbEGaao'4X0VO*q_]DiJ#ETa`/.\VTG:6;/hY=Wa!&dS'jIhi#gQg53R29DWgDB2mM!@0YmiXSUjT D!&gnKpPXUESfKN#bk#]%`T&M!DV5H#\6\@D`s#Yflk3&2%qXLo/kH-T2+lB3B0d&IsS7IA^oG>>h%GSF V]s/^>I\V7Whb<_U5;P;9SW;iK^'9MkJbf-b>'I^DY% 6/p1lqe$rmpi%@9QBQLOCh9Wa$ABDN&:17**U,7=]j`42D]FA(X='_`0=&J..5R6qj#'X=_SNl&n<0UYriB=h[1YL>bUtqiOrXhb)B t= cb@@148"gmJ<%kTK QA(T9]RnQM5*,[3K/00#\qa(\$r7 pID+>)5j.mCf[oOPbk *Hq]Un-2Neb**1fRf$19k]UK#)%#/icFAV62!V2K=>\f3(@^SAhR6rO9i`c?MtkINO)W)6m9r(H2'PB gFG4,I[Yp0;d1!BqB[S;'L+& pVd.dlcQ*bXk:70KQ;WC< <O4 0[T,\M0h3dL;rW*\m-A%C,B=p:F/QK'WOG47'$)1C*`/I.tc7*``C7q#;%Tf+P&?gn jN,t22cViK-s22LlGpZsFE.Sa;f\QVM!`piM`[X/BOn;b]@p1I3\*D<B#Fof/F:/4Jp5X`4!Ab`/ ra4j:RFrQjYq`!8AA!a;<G*is+]e:%)$;VJEFEEB.A^piDC\,Im^#IfeW(68F8jA%+/Q>s/BgLP1DB$OV`lJ`REf[-Z?cGs;A?ec2WMM)E5QT;A10:]\WaUT)s%-iC%7nSb6>=Qf#!q7Fjj+#Gs X$k(m9qAm;M_4/:AsX$Q_V!L5@1`aisf--I,&;AC[7`2P4,RNPD45@N?C`k!ZR_YRgfWtIfA*6Vok#S+>E@>19/TQVImrkno550EkE"V)c9'Ak:=[$#_,JiSFUg'rJZMD3D'fQUcZsQ+*q/MbR]JtbAA;O?Qf.X,4.#q(WnbNEd7K_@]eeqZ MCJIP0Qjl<5XA#+c(53G+)42KD1'>-#71FPlOpT:)L=gpA>nio"mCS/C>c^t@An]C_m?Kg$/\&fJ3U>TtJCaDf&!+O"S(\&i!0'Og;Tm1Z7t@"jbk[D[oI1qsV4"i@3Rcq&doS$0o-1+U*T:MB!>$E8qA:,s4*UFg]8P*P17W2"*NZWk6$'s2@ `bOp,s1C5>h0fC!gX`X@Q>># BH'>bB$BF%'kd/j/8KKIm7W_`R4Xa49b7+Fqb4O.qc)A`iVW&6%S!,6IE K4o@(lpLEUX96o=SU#cE:J1HKn5VFb3T-kJh!!eI.b-Mfke/EhEm7T0U7h+q7K`Q*]D0X6o$H Y8:Zi`Wsi*VFDtgRdiPY,A<:_M_`^h,YZNG%YhF:_I7*LF3`R.<-.0(o?; F2,A>sW*Ci][t3-=hpVaAQY?Vc`R@$2cY;'8+[,kc"r;fiQI(6[_GF@TU!Qi4NI*?=0/s$VR<_YZIdI.=9@]gakFqn4@on=`"Z"`/G!59#%^lhAi&:c-"Y1oN:dk;isr'Y7FC0`hEAoh6,2` Q-K*``XNoAc(gpA!A=[nB- r/\R;P`(=7j:UB/(W\F!L8+]h/#]*;tW<dP/ai#piqZ0sXqT_(LOb*8.=QQcln\CWLL&)aA)fGi=Q^DN$B 'Z/_^r$O$kW&dU39I"'[E`)$-X$\9 CI04eEc*'n(Pf>C&*A/Z0Y,Vgksst7)T^Rfi9=38]od>kZ\$]h*9cUU,DMlqhdQJ"?h^/;m:@:%ho@6ZU3'gmrAhEq^D2;"=8[O(h>Zm^,jO18*&>tSt4UreJ, +Fk<,;A1Jld[J(W2D"41o[jBL-P_Sg+RI)S6jX1.<>B rd.TsO%nj)X6l3Qd8@W.`WN6F^j+tJg]pdf4=?q@,eZg0&*-ALgS"qb*St>4bhsJcZWA2!A2X"Qb`'Sr@-MVjYLo."C@K*VCFI 7kT1*A_HBA^M1i\j@.^b`NQU\o/c?'Cs6%hCQcD08#J.2$B;aQm nism8,ZKpAgh%.6-UU;le#=CURN+:R,$5oPeg7<.1(okE@\UHV0`\e @4Lto7<1I-jC=PU*/0rX*jjAO>U=7q*/-4\lWG>#KjftF@`/SB_cJ1h9L"as=]ZQ'0N&0Kf`>Okq:oXe*]j'hn;[[dsd*q`5kH8_TkB_4-ESEqgMU7d02[s#OebDd8tBH+jo*MQ s)F$.-UKfl"9+f@4'bd0XsbR^=`NJ*#`.;^E,ftp;/6#AA1(VM\E9m>*4tY pe9V\+Odq+V4VZtYmNShEfd9s<a[$C`3tN%HWU?,p<CPL_@WU#Tnl/nd^ DaR"cW`HAHPW" 0#][5A)`'LTC\)%4Kq"\2p`O,;(n5TVe.JjAtWtt%VBs^<`ZV(m@9W:hSJT#%IA,j5O+pA7Nac7B ]b+__q9>JnP3Kd4,?'R$;$a!;PEoDHOL\GO3R\Z%*^0-7g_cpbSYgI=U%&?Z2JN*"c8+/g4n,MUeG.ACAd41bI%"%1=A->InkNKHVX'AU%LP^@0n4J=Z+:RtgP;#C4#r5!]4kXAh/rtSRk/tah0h#qq6*UTRW)`?9;_&agZ@<J"L(d9&%$&W:rIWCD;q&OH7<8@nC9:@:E[7U/&#.SKi/)1Hp#1CV$[!O:(Gceg60Y!a);BjF:gbLWW3,65%1qEJ Hj;+0)$rN q'#g# UOcf@p,^WAsoi&Y4o(ID6&l5%sAjAq-+,"`JUV/B5HY070!'F3kNWTSb[A9!gNFG9%3-\^*Ieh#e9'_2]DnEg3<:&TeN#WSF'0,llsE+^C,,1'6\LCg/F/68aJrSHjY[BI1'&/`Z08'0YJP9&<=m,jYFBl N'JJ+=t>UYMrtFFj53\c.Ane6QQY,%FtlTt[: _>\P`WVoMnO]E"ne- BL>nM?r_L(.7P,$l <'oV0+_+h.-Yl5hLP_tRUMYJ]#`/5@aW[0;rZ(\DmXN.XR@N&jW8_RL",/`s"4V-[l.VF&DW1%c.<-5p:fY$"bCl3CNM[-9Ji^tngOUdo9WODbYcd)3@r3#hHR'3/K&/DLA\LNkD dM:XDU`=)S3tKgZeTSt^?@Ye&1];%b;NI4qde#_^Q+mSk"caS%p.NAIU/6/Rqq9J/?X_e/^W6"Osj&3QAcf,A)+s$NA7=h2I*O PT7!jOd/(5RU[j/[J+P`2XM2JK+q_f$bGlJVM*B9C@IWNoD-!>Vf$ClFqj;J5\@PX i8T!PLA@M69mfY+$Hj&GV36ko?,P1XL#o#5N]+.>Z&k])W2JOC-,Fe,@o>@H+/];/0kkj+aTqAHmYBfDiW_:I!JApEq<`,oCX2DI3I8ls4ZX/CmRi+_LMX4)`/b+Egj3W<&Yb)-,mq:[$).fYR\230Q6N9J7pJs#g"EQ\:O-#lp)@e`NpB[LHo$_JbNJpt&-5..ct@gm_6)]A8qRtA-P1b7-r3X, V<^OHNB!VLciffttgVP`1XLDJ!Us5H?daa?nspLARhrasnA:iF[PYI4g]5E]6X3EUe5-3AQsMm.*[J#*El(M:SIf])\A@hJ6?U &*Q+sJmVC sE[ n5!WVkb!?+n"Ab00Z8gnQ?i=FC2B%gg5qi;k#Cg>8"2o*6YpO_5p7D4g/c6ESf&'Ao/TpH>WhrpA8U5tO-g#>t?SAgG/-h9<lAL54>gYZ9sAX\Gsc0m$lG^/%%H(gY+E#!.iN6BnR`Sh8;7.-ndY8j2jrnC92f6GmAq""UXsE8-(s+n_3rN&04pj]'"8#TV-W/etb3T;$q=%>Wf1S^CEZVr7q6HV21L`<pg-f\0`ifI`/fmVe6Bl!F!#'UcL 9A`Ltp$=bS7kn3*8cc<+3t6cr@^Rok=*17%(KJ; $0WRPg$7#h'--o22?aWnC29!YPe:b$mhLU\XU0&mp4UM=Wqrs^htO1\>aCI6X99s_9C_09XU>4?E<(Di:\Rr&n*^]DWsZAI[iXr1Nr?j;gfRdO654c*'/k-D-K'k^/)NTL5n!63.>(&`hrYB'/-2c4lkKq]G YijUHe@% bSaa!gbLLK,NANVFKeKsmA^pb0qWgWt6K2iFSc&h..4+l)q.%)F$C!Jg6*ofZt$h'"\Y''*`SRa.ct)R$ P2JRs0'eos&9V5Gh"&eaT&?HG.ZUBDEH*gD&TZQKTY07"i]t1'rY8SCMZK5f`A5pF-n`b)U&J=p8?^>+&SG'sn#.X(=Aqm^6S)KD@8mqG/(5]^Z4LG[kML3$>>rUX7]Tr,kA.s`RNDea#oA)8Vc)F;NL:JSMt_`9FMlVLi[MLLAU;Bhg4qXW6SB-6S+]!pkG&/IZE4.J&p\=b/Z6EN9*!Sd Q,S t3mfRlZ:$Cs6d9f j;BU&&\?Uks_bSLr<Qg6XoeaXK?M(U-TeeB@oFNK_ Y S]tnmL?\SgkPL CKVOdIkl40HVapSC& h8le+Ob"7 J@#(E>.`P`IO(gGW1$&)m,j8)]FGtht?s_B93RKA0!^?f4_G!tET9hS6Q0/33RC$l'-FfdHs)RAH17:IsPSD3Y+L8\e-)W\d`qWrkkoidqt[A6PhNX?Hc,kh!,?,0i#TJAdmoaok['CQ[(*J`8=@FQjRT@NC31hk""_>[IhkY3E/635,_J"A`H_8GP=<.%rl'dpY/(`9Cp&Q=>(t<$fm<6:/a!O ^Y,%1&0 ghC&!F0'A5dqn/LW?7ehD5?>^Q=)ZB]0&lUPjW3B^2S1D&%,c%m*f^ @NT>Be<9O0No`VlQOVYlRV+=.sA_&ll/5n,@@m+RDkB(0Oo-E6$VLZX5kAmnr.I+?h"Yte6A'Ia"8,(=LJWQ_b-#UC%m1I)6AS6$rJ1G$>Y(C;;A77A!C/B2X!Y1$L?Y;go.JT2WpG3O/al,H/Y4TP7\ 5Yf'A&^;(5d"kSGmmD/!7(C<la8B!L#:b!_UHm9,qcc9"DYAQ't=$jhcAQA3"[&tF3\rs;<"hiXI3I(#CMFk0&^73Y9E!aU:m*27;!4AS`,X`K9JgWoa?N>1?a9Tq/!BmS%(+n8iJ#P[C.9\h6>1$O"5mZ?=L>UU7+r7A)g?g;)Dkcf`Acq+bUWt;aeqJe&YNT&U-^MUctE8=P@"M0Fs IZQiji)(!)3I%2:)k&Mef.MfPP2-b!\287:Q O43G%D^9T1e$/B6-_8JZ[ 'JKt&MM9+?&d Bb8IX-'tSaYlD8.=hl*Rck:+T!Y77.9I ib2EtT'^>A1YnIIF(A?QPAL-]4,jJb'g^f@[NRVO\bU)jTfRmX+m0+B+^O)+FDi*4IYq@m:#be*i"F^8N8^f^TJ!?W7$Ho"65r8@s12=X ZgBnWj^XhnL5i],M(#oFKs,YE"=Q<(2.s:0632=M_;Dbeb1Ka3K:I#NQZ)92HD1?O%e]Q"/0iWXY&Q8,7!HJnNs3tY6-($@L%^Hh8EHL(s)tlpa_t;+lW,]"sR;6(AX 08Jb3_VEBs'i%$k."rbc]Y(J"CnC[ES"Z?)`pQH&)P^T#V^J3Uf%:B^:1PbkacUf)p-T8Sc]AF2:j0W:b61-]N1khkK;^T-GD,1Lj`G\S93cH;?;df]meBX"@Q61BW?;N\>HJr@b6Uo`e/FJ+=>Gda\7lQF`2D@pQ\rUg:_M)WfrR-*a(:?\:BnTFNmO3)_*741ZFb9?L\VNWbUQ\ iNOY<'=m[!K4<:N&933(!kAQO+0ZMh>:<^.!BL-^LXM:sPMhE >K<& P$$UKZ3-Er`ZUO'Oc010APmiXmC$YYLmqDOB:&JJGr0p_h`U^2!Zi$O$+qqr:X2QU7>g-j$rBtt$:=st_ST#WiWG]Bh(m#U?86]Ll=[#M)r'K>Y(Yd;*Z@OPnc0O6WBIAWqE%ChqLXP"4XRI6g>d%Oh2c3Sl@FcA+]9TN!1)5Z_4qNR!JW\(*OHor2E9Z YF#ZW3%GOHbker*[$1[)V/l'oNts%P3Yq0hbc_\G:!%42PVKSTEXk)ZL,`sRD1Z>Ht]ioAri/5?oa:%rO%/f\+lI(de*J(!W[Y:,fF+3`T2I12"[ceY`4V&'#Gtn\ H8MPfCF"l*d1/4iHnaFoJHR7tG9rPtsji[AL: pY?'VlW;I"31P ;SQsd6<_88#Vt?#0q-gZ?CY%]D]nan26_$07m[/5'm?0>)^EI@q>a N:g^9DMY!#g%)ZmtXr[T6"[]WH&g#Ds0tq9;WH9RAra!0qPA#0^AM#s_&OM0Arr/Ng0Ym*A"MY`+GmNeHKVI#Bk4& Q:oG-<J@=KXRgr0=A3A^P4BnL>oWQe9t+QN#GW57cYNorf(ETGA(T4P(^CIF;\0s"r.T3QQ$Qn1.mk6a,$m"[6d@91Qrt%s!4.c7(nq[n'"*c0A^I!JoZ^BlUrAA;li[E-fC-F_chc>/IW,/VqFPOM*1+)(f=tmCBeJ`CBc1jAZ<'E"!pa%_Ig`80;/4H ;$'Z%9eJb[?W5NaPtG9T"tfC<=HRJhdRT2GRK5rE#9*>)5kJ8KD,8ap Ap="lA*c##gWa4A-c`if_oLc$L387$c)*TNVJ`'\L?Ok8lsV!A\?;?]46HkkRh,L>aV?"A2I$N60>K.06:4XZDh=6MGRheK(^]]EIID7ocQXN4B5HL4q;QS\>6qp,A3"G"GJCo"Te>5ihQ3`3r<(ctdP&!s)3ET*8&ib:1Ak08U0G`?7rg-AAN7&"lc,r?-6@%T-If4`m`/1Nq>m-Uq\hr\tl=hM:DH@YrM+n`(Qo$h9[[!6AsA7(JCm4J"-D0Lh^=$_OpM##ZRb5-&>iT-,l](anU0gdZA-=&-ag<7)glW=ftg_kRNQ043b%AI=r\!Ab6T&I!QCGQiX+[ADl:?%J,AOm#HF5Y6>/6Ls(U?lmlXW\Di?C6[a-[%$.Gl$&]9#d:#)rk`6Q`HEQ/ZR!dQr_K?;7/]>l*VAf;6-2O"#mFDfes+.%=CPbXX"0s.=C]Zhq%-r$GDC1]fO('PM*K>qB.H?9h8T0pZ.l<9EPlClV&_C:lPmZ*P+Q0\;c]4WdZ%==5Lm/BXMVTH_-d`::Ol*7q1c]A*NNWKM=-/>O@H$a1c@r.=0@;M*FRARei!@a:#O9GAAO%Kds&>ddJLcVT?IT$-AKATC8^MBRmm(GW\SX/WOIPH?1imPf(^!U&2A=(nXd&^(]XQ"AB. =KtFE$A,-8/Rkj^7>cYE,f?Je-AF"l,CA,jS>l`Z?&00JV$_X6262,/n*m+enS@*k1IUG-1f'C9QR2lG,\NcdHf^*N$JZB_#m"4`Sl cpW/6,)5nI;j48=jiE%4X_PFnH:EK"QRW?HZt-L6C#?V6ng iia$VRY>/X,1)C6*aU-mO;Yp"`Kb\oI>?9.0_E3bM8F)%3T:=T 98'L^C2M,'t],;*2d=(AJ?AA7LL>)+cp^F+5)^?Z \@b.#E=m%WTs!3?5A+Il_aA)*(1H>]nC( [o9'5b5%Bc!k.I-(?Ed/Gn8:sl-(Z\LA irQ+LAqelk@EJ!C`:":bpGCT-%Wism20#Nkm0lX@fM1*XR.Xeh4pHSHn=0HUL Vf1_r._85CGRJZhi=Kf=:a7(_(=ARSeai-bX "*&9TZORq.62:6DcMOFA(=NN37F]q1Xd)W(^L<Hp!"DQAgg_XTqP/(0CoEDhR+@Wnc"@2Wtod;\/moOnlSqf`VCehK]cI4%5&=`MN558%B=0E.s&G>5mj<,CZP$KDAr_[0kb7b4K"i#>= "[46g0F/0pPWVpNXUHgOfiV@&b=r* %s2?([p*jG7&re>C\qtb^_Y.Y\KT7GS0@m<0E6766[?_(c)H7JSqT67AQd3&0lUp4.`jiQ'41[,CQe2LU*.,in47K(`d/$C#"qCDHs4?L)rb4,H!]Tn7Wj<;j(f`rI90'$HQL231/4fq3A"cCd]Ob-HH"9`t?89AhYoDV#<\4DWdo0;9PT+9ba;E&.5&(s,,TFOGO."Aq\gn3-r\5#a& FAVPE(-fOUcJ$;*JZmD\b1fZR:'2'dS;fkfEh7B-kqL;FDp#s+[T'tpAb+cMk\819^86`6@'@k'mm!Ci3J1%T; p1TgG1mlKRe:C>H@N&lpR>_2'RG-7')C 35)H0R\88.5lFP0EhdH_FRPRRA/U*7op6c@HrKbo(_6InOgZOL(I"d12 .7';]bcB=PA1\tD^J7q oo$"`"=AW7o5M#PclL?%Y>9P+/+4I^[k<,08C\`o!=?MQdHI]SQm$SGZ%r7LWGZ_]Nm[G1Qi9,Q`Y!bUF5o);(q5rdohKafk-/)pi-Z/i#E/1Fpn&3fXEAl2$gAo%!9@*RDtW/")#H&jF!o$4HZQd(k#bT5]1qaY55B5NX*qAkh;^JAdlUt]tG.%AK6)=G>T0Q[Ld+$M;-U5mE8jc7%!QUiNae55V"1LMVqO%C001oeA9\UGglJ2QP>,]j[F?3bV&_X?N>$ mZY<\Af06H.HP"t\*a8!Vck8PR2io0\9!?[!>#]lZh*i/l(2m3%ZkF513FWEET;5f@?OhF&t6AKbYOn>H2g,$[\F7Do9-]dI!#!!=3MO*])A2L`Ii5)hV]*\n6;L4IDPgo.Rtthd<>HN<$:7@K9:!=\/0t'$CPsc(lF?jXTm*gA_5+X[X)d@EOnQjd8f'+ho-P7 Bo&02Fo>BaU<5jFKWrmm*3=9:M)U6MtbAX9_;cq$8eWP+YZ-VsB7_ZNntt;!HY5o0%NUq"7Kq]D`r<!6"W7$Y2P>Pf"%!@7Bj?nK.t6L%(H(:r eJ@A&)sjLF"OI/f!h#rS%lPRV:i3fhld]%\*;C9PTAJs_+F+! Srnq]BHjI4h;6AA&,7&j];Bdl;]X]Z[;H+.IC.537HVN.ZM1WFfK^o4aZ4#f:.Cp!rK"n+Q8q_@+99&AEILR4EF1*kV#Zi17-M`+#B-%C(I\ 8D`9EkPjJ:t@\;LAc(P6#%em7NMI9HhmZ,]@[#lH.W%&ejsADRKVa!B1o%!RXJa)%98 arX7!r3!f($ZgAp%d:$9;8%Xd$1.a&kZEKbqS1 *TPbtBYQ\fY!Ct\- bBAt'And8N/Z3elFBm*J/J5:qY)A,o@&`f,q\Pp.fCZf\E5JB>&\`2H\1TP4Jj*&IZF`7"h7MgNVV)(Jg[2HC_O)ipS8L[^'K!lp3re'pN*E"$M!GG]_f-Zh!]jMotT(32."?4;=o*"&Kks9sBRc98c=gGCGoP_=EA0R&B4;qAQ>95+4L]mP>%,$(6=@G-GO'* F@l>I-q-RqFB>?8@7<4Hb;(R3Jo[Za_dIN$=I'W*r-/.Rb&.WK*lnL`iVrlYa(GNh62Gt#Z4L^L(o>pkCn"oNI6sF\%0U[tLrdpq,l&NWt4giAdE&08K:ar6nBh&kH+>,5O:EQij+M_[@g5tM%TFAo#^naVFUEX `cEs/Fo-D5i(WNQL:4`WQ/&#LR%%>t 8).'fUYtMl?QI/3KE")l:.7)J0)Rr4p$Ui/?rV_Ui%YfeV9i=lGNb-I$HmR>q3(kdPB`LZf"&*%+"X*O@>nim?@nj+Bdd\a@i7tne0:hfH7WIJ75M*)?FUtYk?GXY/I"GR]gl/th[Liff+Q=hc.U&p]r<7Yrl07:T=\:(A1pltB8%dS#//>7%e;K_""NbN($:BP-i.aC*T?AmY-NM"_oDFrY3-pkL!EkM=ZFes&KC\/+:b?iA-KHX"AESPrS(*A>F'X)+=s/`!pPje] \"(EF'Gc&QT]n`9CM8W?4kraj?*iYB,0[FTt"3#@X(.\VHE;20 m#_da\(c$]3@CS?*s<ld9Dj^AW"k0$htA"BDK`f,/B.Wp=1W)LaA'Okjs)U-m L[n3V@[<%e3-gC!Z)+_f8i9p.'p3 #/940)^4&P1SB#.66iPVn:T7c+/rtgOA-CaV$%8jEc$ 23QX9j<9lC[Y_VJp'1?l"577%U>>(HO?qmi\^\HFeU:R$Ik:^*C@d?Jet.3@`=Ws::id[qSspkk6He;"kGSOpl__Dn@"!&9$IEUQtUM !i:X'G\LDpeEs:h1g4PJ]GmO@d:lkc^t3(D2WFM/l_9L5Z4#,/` F^&1:bXk9C_0jM!bdcd.j.1?s8O9i!Wg_P8=W13AMS+"MEf9j-'Q)^,o$hnsl@)d#e>l&+Qjh%hO=X_ZrARVQlT3N4Y![N`7,h_VXkEnnP`nTt\!\7!R:QTEK+'fSo%)kD0:#ZWe=*FO3Sic]i`F[W1)aY9kRIaS`@1_H<`hA9.#+.W^`V)Yqq2Hn7f:.2;a PZJEKRJAjQUqDYU.`Rm4*LX$Z >r[!R2Y*.ROnXYk?+]JJ`H/K6(G+(l0n/)tHFN%$P,R5_S]B?(AZMH OPbCX$*)T6"YjcMQI^B+; %:@\&+A$KTVB `M+)<@TZ;7$jggJ@b]V*[.jp3;I)$" L**>X+KHgQ*N&PDG6C[Ccs"MN-gl;jPbg)fdR+^_Ds7'`UeMn1,@a9`A:SG]UO]rCqXtQ_C j>AaHtKV,$-cN@D[O`?-A,nU1#!1Zd!R7nb@ZG6+6P''^ZhCNet:lR";8&l=3=6m'p9lA7m=Ht&g,?H"A`ah=qK\O]Kn=US6cJBAt?5Ti)Q8!K.MeNKn`nAU_Dh)=Zo_,R:>sQ+]O+tX&b*Op5*N__mkJdO*-+#n%3pn7?E 0A/pS`V9:VCi+*40;nXU[WBG]t=O2aDBU9(fLUH`AK(TYD( 9JJ/[#Cbm19n'3H,b(Ob:rprqVFfQt; )b&@WZ(tgah#SAJo+W%?6gh6k+*20T;Dh,,XpS36`4"6DX-nB$7lNq&X;b N,f)T?9lbGVFFL$B%9ofD5\5o)CtthNA]CWLAn67h.VS\Qp[7++]s/iZc,ZBJoA1j,C,A#NIBr6&!H>d;F37(A59@btq5./1?S;.F*94=?6@PCIln`M1AaBoge7C18K%JS0m8_D;ZQ?W*4l`1Qa^ [[[^SG U%ZMXP:.4>FpGV('i@fZ`bD8S34<Q';J(")%BkV-jk2c?RljcE$Z"!FlS/( b&k+e+o(3](Mj=jl#is4A&R*Wda-UVGdA;NpS/NCB=3Z_m-+fs2s1C17;qf*]k:*EYe-5)oAS=%"g*_\pXGSAb&doD0.f\SUjKO?13_1+9X[\=KbSM!0B0C 5PtgN( m?%;gP7rG"-Y8,aqtBXne5"_7!*0i/hG&jNV7V5FEGY3TW=L$^O2flhW?7.T1["^Ef+fk=&h!JSi9J_+t226p>8K:`[l^[&%AOI)oI1AIE0A@2mNr*MKAP)W$>l-,.s$614h&b:hW@eWaO+qS7/`)EZk=P)@UtjI)6G^4DiWRB[GpK)=:&YY @ElO5-P+%BV\8;_H=0QV*En\TG%_YM@@7,c@%[3TDLVNi33!2i3-p4UP.$i-653qrVn0&A0F(n5tPm0o.l/SWe%<(9$pSDml_9JgoY)\SQn6:b_>TY&5/9_BmY->iD!@n(W!0\2kS!928^B  Jd%jKS?l+S% GiB$Bk(N74jEcJeHF_ssI[&E3T\R)NE0iqRk^c9>t H3MKKH0FU73U(MU&V\IW\F"A%5";[ri=#A`oPY$=Vo=/%il;!A\*D8_dHL%6S)Kk2IIXBBY]3s9F)H!&$ahAOhS1?18SY.b@WX,.\SJEfbI!78Xg!U5(=N<)iYWOJRQAEIi%s!#CN_[/ 0#aO\7@2jepFrO\^ToBUKf@74VT_rg6/_:kZ2R?,si Ks9_oZFd:A/@\^r'@k^mr'6$KICk,F$;@P]1H[fZrfpWFbg*,f7[Ln$4m.+(;3i:]/A 8#P&fU/\ZI*\O@Y)ai64fi"#_G<@4N2>TDlRMe-o$A&a=l9JWtY:;*5*L.>'rID!qop(R=f0SD*S"0j7Sh!@M@HWkOBb+QHbL["*.#eq3,j;Ri8sGq:#6JRj)Z4?m(WtCZ@DHo>W$<(=mS7*dI :.f$X51B9U`"d'QCCr7s1E_,GfqS)N4Q](>[:4m14*k/'oW&g")9i>F=mZ3YL=">B$=T1O=M4Y@AdaI7\)23KEcM%-B5cQ'$lp]g\1LLm4Do'I[[+[.KSY(hj,[=A'QAHtZGI)iSB8.O-pDH:K6Nqg_AY,aaeWo;9&.Z6!lSP8$WY?%Ucf*l,m=.J>X1(+=ro)$hWSRY<[R*ESAO@kYE,+ZE=B12;UBgB[r.`HektD.RXZfAd=6tMIr0mkAgXrBbm]%hJ$Ia>?]p]>.5>a;8!ZLoc-eC(KB?3(+^o^to+Pgt:LT4Y(A 70sos!rHMEpW@T [=`SA-,jTCB`(HbKgY(!]S=OiPMRDP_kLd_V\?s`^* a,OXlt>i+6Le`,t'^_t[@1,q:dqPA855MEc4&m65\1j3n.+_J0-V 1jej!PM4LYrW],HA]3GAtLF*c%NpR#eAK7W@.CD08 .K-4QeTlr2A\R#P6:t;npdCXPmE;=M)H.Ao2ki.Gk^X7OS?jRr9I4D cg7U]'e69-f-Gj'2(h*.js:I%FpTdhnfDI MNLcQk7B+XY\AQWZ.M;&N)l^W9g*g1)O>cIh(t]l=:g.8MNR[^^HpbAEKhN_VK>=/C]'e@TKAiigaOjofP"UTKJ4?g)N,ro=C:q:<=Sfg4pO#BtfCrk^4*<$M_OI6>\V)"m[8?)=9K.!nH_\@,[J\l&$o4ZS+W_32GH\QKWpRSPo\9ST>,*YIQXj54\O<K@R9ocIYA#a@n!X8+IUq'Dg>aWT+KqQg#rCIpL%:/^A/Zk0!&QMFDtt7ceOoco(0Z9$o:1EV,bq!hT7QjUBK@FRVXA)b#FAG<;c[Ad_&R41&&P<CcTR'taj]EF(fCsFb'/$Of?@1M$!(.'m:Kb`RAXh[X9IHp/ ZG35b.TZjN*!hb(6F+/qUs'@A04ik-#?=YWgjc'Y$)47J*>">oU5nkr'tNTC&bnc,nG*!W5[`8sfC;aF+tTG8t9>1jIf@nOAaEr]DU$chWZ61 )fB4In+i<.]^0af-pJ/C8RlP(ZA`\mP;T4h"c[VMr1X1%fmdpk)4BF9#i&*WbY+A OG;2"V'LML,qI>V4P@U6H\%$lg+D>=B(I?-Q+-$Z&+#mL8f UffC2&RTX"hk7eYXi,55tjFO41th)'T*cSD/\YDiRmJ&4lQD]rrF88apB\qZ[Bs!OX64<PGR$adA:GTfT70q[W*X^<0:S_aiHQsq2%tT3]HYs%IYU'm7Ke\Jiasl258g>L*9lPXApK`SIA49YYMr/D;%*1]8G1j:A#o*MP?N.+=4n=(fW2KLhMD)CQ000_A%XAa^n?a1!ts1sg/V7Cp-:6[fI(YQp*i6AJtf\):mj+)`"[G=P9FVQJ\H"LDYi/<\I#aKdnn3,$eeltPj#iEJYG\(R[*.s&U!KcS).Vm^tr;gA$kc\P\?=+AhU2%V<_Cj/KS0sZ4^QR]pVSZD\:is+:-GUH8i4HIJj7B:tT63-B_m9K>ChXigVt\MN@BUmBDig5A)4?;TjAPpW>6Ab(jdh'\!lF&IH,AN!Wbq E&=ZeNW6:ci%"_Krid<\`No2Vq^]KG>RW'C63MXS1o$(jWI/J>Xp5=N4Ns2S4d33ifOM1!A$&@4VU$1&#-btCrgF""Ge^MR@TD6)Almk!ZgqKC8OgppkZJHl6ZL tR#n,31n]$i-)AO4)LKM?bVV`b[*A.k^R8 9>/ZV+pP(XNi),k(\X F2)T9;*?$9K"-l^#K``8m<@Rd'\LCGqshA9FJs[2Nqiik))Ek.M fgWa[":])lE ^igSa+'4FQ8?O*(DBWH\?8L1qXY(h?k,=i*/=_]l$%d$*cW+5KP87`6RF#c,1r'K6Sg2=&74Yd@7,b`4"95bD(e'UY)YR#kX )A*9.q0sl,j)R^(O'5kP7!jMprGFM*!r5A]BJ'&pkPdeO@Q[B++1KEPLJ0`1MbqoS!GgCZ]-)aDiol)cq@5bkCAn*@8 s-JT!R*mo7PX'&]\A&Cm)F8!1+a!rpK6#dO8;0:gC$?XEb6N.WQTK;cS%KF0*mraSTAP-E[aSVO@7>5$1E##aD5&,aIZTkUE%#9W]C.5@=8(/KHW/t.iDZ]QQ5I=ErFf)HqLV_J)#X&FbIh*QJT[A_Os-/#f!Qgb\!KArLj!UGN#9gl&k3*X3/g;:n`dY-!Y&#RZG8Klc+PSQmQ:e\BMCgJHQ\Oi!jVO!-6g@A3rmb\pVq*B0@5r*ktX\BAdl-L,@@GjBGS7AO^.!jU%icc-^+@!!nTN/E#9)1"m86qQJ$)i2^"e>4*h'&'=kETF-3I(=5c7,bqY5Mc5c,'R!n0hr87*phBM:%t(44jM(!F04pg"-R]DIn@"d`'A4##B;X9d`,R1S%n boGUpSY!4helQV8#69MQRj.(fRJi<;'oIhK&Va@g*eo/k^3O+9tOA)V>;gZ*M!CGYoA^Mek(+p0M7AY9ZY:sS)&7Q+(h+t.NRqX %`1)dh4q$.Ib7s ]SGKn[Q0h]mm+G3IUS@/bq$C%<#2#k9scGN*V$/6gL!Tf@.FF//.r5gBY?9D[#mGbQ+paH4rlVGsXXBqJ-E.ZKeP0AKQX(mPh?W_l.X\I@UKb"rHrQ3n*5nk3L_jA&4`@SkL/4f&,UYsrA1\JU75X `<2QeJ(4,(s*SYAO5<-tNh>V:F^p135lAmDd"#FA2_U@raXOmOqjT&=IdAoa"88UD_5e*=7Yib-q=ier1/b>(\b_?%D)kh(A;A,9Y8ob.WQbi'S@QsRf`%C@%F]qsbq-e&il3-&s/`riH3;+8M7>amMpJXI/XoHAkPKpXJU71$-'?>eo:XbD^N>1J]NBq:Xj9aW8L4"+\f8[r(Nk3AB2Ca3:9M>>(>r3ZP%S7K:Jh5'_)JiQn"2_ff6>#0K/hh2,*,dUbS(UhFeRsr"ZO^p*qM'BW9p8 (/EOjJqM<[pbme&L`2XT/b&$ 4R[GI8.6ReDO#/HEA.2Md]DH0<_YqiF;]mFEX?12oq,NnE5qIV7mM, k+a*)D3SQY9*9!Q?=g[m!mTe:jmq&jAQeCad4Wo^c34ttXHq8Bf&_*11a90K"$Ti7V-LCJ$_\XHOUe9';=>pfk5TFBpgJ.\<BA1RhL6Y7^tP6=3EAG=JlK\e<Mj^a6c-[d=VG/#L-djIrjB._(/KosS>`)$rV#[kDp@M@%)Z`2MQp&=kq-T*-T!`.D7*e*_BM:oA$`O?/,$FB>,^7Rb<`>?QNp0&P?HH\6e\ZW"+]M.N3GfLPSJ,&$UHZQoT3qk<7r'RJD9oFYcY%X*LdK5l\M=VVG%Cd`1V;0AV:/@.GP@&;pMo/%70[36V@UbeR/bqp(aA;/8, h3cYKhm8-!X>`Ak@.=KF/Kn*Lr9A2HBMb+Ma5=6GlaJJ7D)VNsYn>kS+[1W!rF-2=/LV(7ee-LM%)b]Xf@?MknFlJ?6LAbX.H7toG'U*ZhALkX>'`/Z:O7Asj29LgT0&V!+/ABRn=aEK+qI\,oU0sMsfo0e\[YXY]+Spbn67HIJOfCgJR3<43tZC1KnJr=f4fr:.#KRfZ(M=;!k;@HT :/iZ_H.HTPn2VkAnn)s4A1'Y]1iV5#,mI=m`^(4@+(`^%-ia"oh<N:@Nttel]\]Oma*LdIdFt+O6aV/t7MJ0c&8Q%M`attI'R0ij3hasMh]VJj?"Hiq'GR4MWn5aOt-K+DWJ\!\mn[?LXWA?MRs9 ][%Q7+=ZfN>6!%g[_/D&;8!':E1NKG&4))ARR-Ar6=)@Q &&)>/f/=SLQ_#,efRaiKj:*4G.8Lc*>*BkJi#bXoHQr&^=aXB0\-m;?\^F_AF?r5oA\EI`X23a=8RZR3LqN#m,VE5+C,"Lhs*mrmFKG^(4ffII==VkpJ"f)T*qO_ja9,\J"-Qt$"AClXSUTAc/t[-dR/?&fV0E3r-D% ]M;SGmMo>h[H`iA%a@.N\D+eh@*-`Ap##HP&$bIY!-Cm14pK7X@T)^%b'bF7M`F;)Lh!SN9FTG*dY_rT\pK;8A#6lINMYs+JGn9Q`?-oKWN.YfE g^?#n@ZFI8"a9:sc5$tKmD8o-;CRJ92+Y[3cAWNS:Jf9/T1#Y=F-64BiIRiQB3qCbIUXX=p=DA*/j=nrPcOsf`Ja18I7R=_(g5mABgVD3Y&*>JKP')OWdVkC-fRrPcX0KMt2 C`Fol[nRllZriSWs']A=LX<3RPV`?cBfY#-A:#F?Y[$Y$5.@2sW7T?L`$;QH$$VgYkr4B_"eSC[a36dC[ cT%*a(C%<%:X/_R6Fq;YBAgd 9)lUFXg$PtnA,"EQrAq;:Ss+tA"tF3VA^7$\]/!*]2+8/ ,0ES-1??Wq[>_$`;2kf8^lt-fZ>h[#5G>j(BNG.'Xqk]?n$cLOOLhU2F?W%MOLM%JsHp8GJ$VO=3h3P/*fp1)hl]iP"32CFGM@_$,G!`KHh#d0L"5EeSn hj'.3Y06q`#_%Z[%7PZoZ;YgN)b^@&'Ym_,_l_q"#)gK(#6U`k7W,ie/W_)a/Q;r6bl-:@2c]KGGY5WW iKLZe)WWjm 0:;Nm[dF/$%U"f:DoeGgRmY-Lf:tf:a!7_>G!lAB663CedhibAW+PYF-,_"26:NRO@:B8;>dBk?Ej(%NHQ_2:p"5aR#<:N6+]b3J4$31\a`B-,B+)M\0Ramq(XMV>jNKA=Kp%lXbN+E;#EbCHsaX00jg.iAXL:q?\L#1UFRm_%K]h,C%9mo^h*Q,14#^+Z@m8]FqVtFL\BH.m$t8SqGpc?nHLlMJ=@.SCkXhjE5-lqg= BI9Rq8PSf;LmfJTa>jBUaQ,p\,7V]"4jf@dT+,T(r^B#)gk3*FR;'*mq5!2)@N0AK/.`^1tp_p^VZ1,\O3"S]qO9eNQRo`L.eG?/f7Dl.2nZYpd aW8o03SA%ZDLNP3G8*1<6:*hVoJ=TrVa&!t(I+DoLW6h0tkmAnehjg+>UJV ]JTBnm ;hN^l+)S.CG:\j[em6m>;TK5Y%;p=>H.8ZedEk=BN?\\DOG)PP.S-!lT@#&HB9)FOII[CO(e0&JLLJ7V=d(Lr:=dm]p3"SL;'*_O)"6V897cWP$s>Q*I\G*JHZY6/9c[/.!:31'mibAEiEkRa_%]d+?)bna.,ZIf)cfcChc;gFc.e'[)6.eV#/itVK+:Lr0HC3$Z4*oLk%0mYLj3#DU\4qWqNBsNS'_B9d-*09U9),e'>bYi?#&dAl\X(7?0%eRQ:V*hDeI84n"X1a/N,ITr5/N,S2"3Pm,k5]s5gf7WU`NkNrdFd(7P:,)(nPD=jH8c4ksI/<.WUfE=_OF7Up4H>qic<.r05nsEoeXfgB2$ ]MVSj5Hj=GsCs"\hA1>c:9Uj?%[Y=<N6*`QE*L9M4K'k@j!eYC/KDs5AbA/-ATEn5F*tG:KEVSKsbc%TMC"tV]j!LA[8EG*-i^TYY),3hZ1tlKbf\(Y/o66iNjIW-_g."piGg0kT7IlVDo1e$ai'iJ 1k$Z%gJ 3n(ZmD1X]IZYZgHj_"hP-a)N5FCL9c@s[j-9SF-RAeDU)eL0oNT.\nXZpe$,ZHH-:ch:.6:P"cL(09m#L9&g_F)F`kLBfC+n&`MaONb\L8&'XOjW&A5V!9FqPYk1:i9*J@1/=4jA^TCVaLePTrY]2IlGI?SXRiA\0loHkLs?`O\8&?<>3!?SM3AmB)W>oRDU$[2k`7_>Y,a,+C.e":sEb&fTD0EA5.XdX2#ZTM>$X93b37.*$+YrFTorc85839WA[A:7?4>X`VIN3`<5!ZH\h^4pFA^JAln:8Q'HFG`jnAnCRf`8WHPF]]$k[B#1;LHW?)W5IS4@C=O$4E"]4!Cl2GpA ^Cm/tJ *?`6pLMkVdd.iMlo#[/<l\b=JZN$S]G]#Ee&/pd.#16olAklO:s,1e+9d2;SA 'j@VP3BEFcAUh_9Y&Y!cnMsh3>af]Jc#Jn^tn?BefEJ]jMMkWIh`]sha.f+e< 80^_)6 `G0=YPUDm_Efb*\&*S?Op6kBI;Ae!C)-(DFT>2iQk2tOftCQ!M8V(>S=@$RNZ*n=ANm2B1kN#I)PC\G;\aEHjW#XrRo">"YFD(`pU5tf)_T^8SLUZqU#.2C6`#EpJtZ^KL\.(n/&-0WWO&mr`1RAF"&LtQ=`i?5opDmm`Aahli-r,H*1(32^Lc>n<,]]-^]0GRn$l5j_N#hr4;*.e6P?-$+Sm%PU>9as`Ls1-JINC"eFPC%5sATQF#,s`I;SRFCN@:- C?R)b:tX\:iVpK<`0FR`].7k:KmlBjI[,Kq"@QGa*QK.mkd$CnOp$5WW@GqDZnJ>p'E4,/j[_hX"1@)O=A>`-Qb1Re+b'!': $kUB`bgrrJ`&"9V7e/)i,(:I:7j5gh \,&I5>&h/^C0PctX-3s'VAdCB6sO(F."4:OL50H3+o("=n.AU13=OsE-Y$8a0jSp+!3OS0Kn%TY1VjAGI2EcnJ/f,9?RRWUhd^AHAcq=%NF"c_O6\5>lK<IKE"!6G[/=OP!)K]mIYCL_T*U;BmBtV3[1j%_t"OI"c@`#Ib2mim6e*#KG t3Xpsq\MlB>L45A?.jr0B.]XRc(?7?6MB0P1VWEc1n!'/N!75,.=!D>92_FPLHmPDB"qrJ'BK978B3g.6(Nh/-#\"SsokOb>DcfJ^eEa &.ccAH2_bdA"")'I)7Y$3o%@l]RPrAogDj;60"LXpE/VtkjV[%4rYh0NAs\a'_0/Uc(iVb_i%?>[GTP\5@9%iiiB6r91qf0At[t$D-_:5^M_7g?M_ZQX][6OMK8"S,Um8@S[Z3M&;ZYT)N&_LA.=c PAl5A@(\5jB(8O!t% c$s?+Ga?,JjP.,#B_DI8,PPjK+!e"^dqNKdd[jHL'\/_eaPifs[2CiG^nm:.gjV`&qak@BJ0SRVSQhtQQ2[A]?]k)o`lln\^4I>6*SfJ#tc-'aqt7+?h-.Xsn!B*AKV25a'NH,j&YQ[?)@PK8L'PZDPtK>n)+F6^Nnj,ZrfpjWg:H+_*>/6K_]a?#mn^dAa:8tDLa3hi2_bZ@rk?g9%a^s&eW_#k!9Sr(mM0CQ2Ot`qnBfR2Pm`8hq6"g#E9XNF)th%(IH=^FM'bso!)n7Jg3o?\6mQ#jlI0GU5G+#DmC(V;7@(^gs(t\mJ*V&\V\@Ed[b2[[>N^;#SIWj#Af-cF!m,=1Hh$R=VSclKEqnom[0,QV-s%K#!g9G;4o@c^?;D,jRFHaaCUh-L -4\6TX)`\IB4:4(+Adeh9CQf=t0(tO>n;C@Nh__?Fo&Z8]TO:hMf_+B D8?+=PA*bE<M'6@Y!^eS:G`apd(:5)Q>[JP1=Hjn aYs>SRl"ITj4qL)ILm$i\f^Kmg)atqED,]34Mt+IAA,%Y ignFm3&[4rbl6#c9+aW9/R+HSXkAA'.Ij2>1(OJWF24H(SBY^;V1%&Ora?U#(mr]de`@&QJ&(^Zl"9%N"`t_[]E98>c?sGjo#;nd*,kW=>r_Ddt!Q,Q25FgH72eL*fW2f7E+[hihR;bqmDooi9`jiLm)PM-(A:i=D2%P/MB)k@'dTBLX@:EKK4`A0"A)`1LmBr U$ql2)AtCmUsDiAVAWb8""#kV=b65,&CX!H(Da7sdd-<=hHHo03,OLCcC6* \?(_T)47RfWfPYc_eZ&%1lj"0W/?.=J?M%orZT5?9C;#*N S*4l6*R_70:fP>"mlEA-#DPXVdfF>A5JJ*\Lk&!.@CNtQLn74,gN_NK=h'I`RAc'Kt7^AslCRjMGc'j+[,W6$LbUJ0@GLd3FK)]81&P8b]DT;@^7??c:NA]8ptTrR&,/eX)I]MK&'q%TcPe(TaV-er!'3j.iXGAmdG3$GZ&G$')>/AhbOtm2T@hNq\\sfps -L248n$^ALP]ho[@1/.ZZq3IWG!*2WXPs%[S-$**YGC?($A-;.G-NOa>B&)A0_.`Cr'QlM_=>GA(Q%Crtn_6Oi+pj*iq@eX_As'nS U[LJtt4p3Dn6FHIY(1I%D4\>r78crA)E4aD#\hU!][mh3)ME5bCo(OlVLEU35q (fjKUlBq^qCn[%N"WAV_8Tb-EA3IM]4S'-5\phTYY3SFsCn'( F<TWXKhQ&!Q,Nj*!o"],M5_YfG6*EHcZ=P(SiAY%1CZmnIfeA;Fb(hIdH3WA#$?mHK@OFcrF<.pBUQC46T2'?qr5`>l<(cLB=XG#rVjK5P"b9%bJee_/_AL>D_Oa;XZs\ JFHRP"n+.#AY^.$a1p'j+;3@Ho4^)W(C<;J+PfKr'DW(qKn/L^lB@X`8[9\.$#i^,)RCE).`gMXC?p_jh`.d5$Vb4^h\b;Q5LY&&7"BKkn ]$^-`+S9M'=!f:Vh643P-OraoJQnn*@AE3n3%kcMt"dh'CRBK',l@6`?Z)M7_1*3gg)].:Vad("+gft$T3aW]q+3o(d/WcSW:_B2#e@n&mq7N7W09],V[Hio8!6OZ%nP=LjAl"]h1@&T`8XDF-3F,%MD=.Y[j8#Wj6>=8;2nLO`93V8HiB3GYjW4CBdeI<)W(SZ8cm;SCGgC`ZK!$)Z\CM>W!Na/:VK`MA[-YdoS->HZ5Nm+^R[W^NrOI-(c)J6HCC7e'M=-DaNcPf]4r;rTdl\0[>6"\1)kHV,IoaP2\F!PJ2jL1G-4Y?)ML"a:G^^/EkX`>)@_#r$TZJg6;A7YWf+rJ5hec<&FJ@?3%;]GGmB9DmInjAY@^AE24MZ2Sb#(:!ke1J3mU0'q;AM8XHLgrj3<&Z-]l!M%2A5.af>ZRh!qLr)MJn>>0bbDLRR<[hq$8oi'2h.blNaY .N'L/'h[&3*\Onjl/LUoMjA= FQj<2l4[>JGsCM:`Q:#[QL9/U9V>LZrfl%=9OAtLg3.'eLrH75.:Nm,i>Bd7 3n<2-q8p=?`FM"Em6g_ngd*WND4PtcgT)ecQe%d1"8A_(qPr*iW9N#="aBd8N3bKONV* -p[^^h`/C$Oc[b':)#W3>rBBtQ<;giCQ?/kSK'j.gMK8i>6`c^h$6rX>,2t#^r$6Ai)Z8q^=8tr]BdP!WAb*5=[J]Fl $c#Q*JPX\^PnSB8BBSZQ2aTH5qT;:\$en7K737i'C.14gE\/ FK$.`6Ps>k@6+l0G^7fAmgEb\siM4rVF?]2X=Y'(4]O)jBFdVQ#ER0=.BZ,scQ \;l`>Sc3Sej^,YRk+ka%l,eRoANq5+E*$=edWYdJo<#j,8]YIK+t/&6<5.WW2& 6J$i4l[gj.^R&KtPq:+\:AR:cpX4M30_fl77Q*j 196-t9i>PfNLh$/#&+-:tIq__jbj@fj@:.>e?Ysd?=WF`Nf:mSM.0he25-Gbb3s< &Df :$OJ9X%gMm"=`p,(otl8II&M(kn$3M!UI(M\Y'/Cmrl$@AE9 _;cip2JS_e4plaNP)S(9;76Mj]deeSaT.[2b+ZJ1A<oh_/t!XWI\Ac0#@_m^aT6Ng@0Vl3AscN,ib65]4QoCLg58d)g<O87SsN_-eUS6#nccYZrIdO(&&qJQ=J!T^2;9)d+0WXp@E9/n188"eMrV4`Dt06]dY`pX;hE)!PlT(CAa+.MNF3C@CCG<71rkh;PN]Co0VcY%biWbOt]tLB"__IU:L 0? 'CS5ZlWbAlG#$"Y[7rZs=4UiCPKiHQO[ai`Ocl-/R@a?FSFaEJ>%>:qhrPK7O!qS;#EI\,Z(A.nl>r:LY2N47la4e]obrh@0k->>sTFQ6L6T*$AKBJ43DHNtij?HMh r#d.WLOCC"@LPX`-_q1Y3bUHA0<\K^k0nS0O,?f[lM'Y(tBM$2A4Hq-F!3X+,X\"MH?M/6G *NTRg\T[ol5"V+(T@tf=a5'g1(iDWr?9b^D12@6PX1a!C3B.M%PmMNXI:1k9NegL(#9D,T]c;ZhqWj;:[CVs-nflL+A\:7L:1Wk=1e+%4`J9go(4ap9h(trBJaP+3!]LJA-e-lWMp42AfV",>7(5$M58/_UAs'9m$:,J@Uc8jefpVg@PNXiF/b^bV+],1];Um31DAqk"nE"OR)VR/^nN `giO%X 2ZX/S`&rr5\6Wo7ZN3^!SN'nq+P!$7S]H`.(&gAs!?V[6:GptG1Z(Der*Rb]1^D--jX(gPGZ4Le<C&.N2/no ZMP*IcX_A^rOeOC$To5YKg"%r/+-%h%iQ>^0Xl$\dX@I` ]T2h$kFhcQsb/VjV<rF]D$!-Q9BWfQt6V&g s^O,."(KI4h+ARfselg[`Z;WIeV=A1c-jfNF$s6$/3\ek;Jb PHk-X9WpV/"JMT1r4/iV%]"UDg7%f/k#N\!ioc2M;CN1:4!@+XY4d`K*&/Cdjh)KO5@YDm?8l3*2 cnSV2KYg+-S,?NEAF'7o8gE]iVnYNXG9mPb]g [j]1(>!(l1]j5`7E)D.th\X 8?G/dOP.)@)GRSn(EW,,<JAl,,"PthC@,(Ttl3]S+2e&%>.j:)0#[1*kD$]!+[SA8T@jt/^iA,AE@YQ*a/[BPH+HQ5 FSG*S:,BiW@H_MdBK76.<-k75-AR.;6"PD(%0INhS7ePls57q;J1`.aK-E 7_W.mK"[VZlAEPkb7kI45ibQA5LonVs7Ds2_!&;r%G"(!o'FPDT)NAbg/.R7FR[ll.f]#!1eC<@YqiCf1q9YsRA5@`^%EfYcdCjA!Y,6 IK=VOm&sLmA1kkC6eC!*0&e+L"^)pdKQgXAaXk3$mnG(43KDI$Y-pD+h>oC9F`RITFR!D'oX)=OE^eO1IOQ>%Q[5QY9O#ETf!\dc;Z85KXhpALN#4g*.Y q`O5I#XUh*AUb]`R-+TP[@Y+bm6n,N?5`#-hoDn']>A[]Ar?[r6tAA*1;9q/EVV<3*>Br_)kk#n2HP9j.8#c+B8\38($=M+';<6e4SL4"1Nd&.O4eVkT@;8;fMXBrj%bWCr[Qcj110"pWRckp^>qnB.X*cm`S27'f]\0 "l";j(Ah.CA +$R%%6.lk3BPTK;T'aKeY28eQg;2%:bi;5EjP^PlDUZEDQ9 Y%s/'AO?s&+4=&ddn24D&0Z$D>%W#[>&-nAgX;78`-5hj?^GktMm%W=,>KjVV3/a;ik.[@=BoF\+fHtBd3Vc'Rrpm&+PN+sR31AAj@kf*mp[IieK9OqS\=1NgFG5d?/G4`Da&k#!dr3n7jM[NQC>jk8g!5Ie__3"7)/Brqmk1tFUhXKi&q5[9UPdt];$tiMWa'l8mNDZ?Z(SDUH\7N4$F5Wejo]_^J7AngphnD)O7Kk:$;jKVE1\aCRL5aJDW%agA*les"Vk3$0pq?dLfi#2*'S97(Zg5PW*?8m5rjkAhhjd9hk(AS\mB(K?i#AYS)?P[9(bj:jEG' 272%!"*r;tD>"X$/i0A?NJfp`n?dIA9>nb\1TOhZ:2@l1Td?M>H#Q*)>1$@nb[7XhGZKln*7K%,Jb@i4Xl#,_sURb_Q=eU1P()+Xo_N&ON(koKO45`8 3pH_-30HH@K3bSIi7UW*9/%F'SE7I?]<0rmcA43mj*O#s-U$ZeU;pTV[lYbr]$O11l;_(*.D/A-H9)*XrX;7'c[XNmXb+YIgk9[hQHlU]_t'k&V.;qh9+N %A:A*VSRQ\:VL9 I4L.ofoGWqA\90>\-IASNB= 8?W7Ef#hT$s-#@rZH2\ESG2tgon`oM&+9OgEU[T^/B`Kp.lDr(G #r"bOdgjCf?PDPZg.s+5%Gt7lPo"A=L%0cfi`NE)U/&J3^02@-kI\=f0radj/R/4242%X$&pj1`kbhm\F]M2?dnK(T+n'>D75ZC\OI0Ocl0[`2:#: Zd#bWXG[IRSRtj6!r&L/DhcLQ5dl!4n](httJ507Zt)b\=gn2!giPZ0KiI*c8`dpG^`N -6"dl&L2[%\G/gOPPQTp6->6#-SpLM^ aqAR#"])_*BgmV!n7:VU%9`j83E$F[K>JBe )I&4hD"DPo)^nML_nKQem!rJDojCaO7hTLZSUFl=^"al.;AiZ#2;j"ICgk!>#E(7p/%Laonf9;qrK!7&+KeKI[`><'8ml`a=<]TBt>!8Tl#(.JAs*i?NWLL>)'sSpV>2qp0FUhOg'm/@8ojW'&pf-\/hYo#-A83*gclkEZ5/3XSRd`Ae\+7d7fN!8GO(e4\qA&4'N pUR]rnlZn&oWCCiG5q1o_"_@3XMb\IWf$Y"b^G%^,rGY.7/1&&mF0<+cf3jW-WbIS ?'-"B6iS.SL,OrS!+"cGX_DQ\V5[6^7bZEeVP`C#W@;XaC^ oK3gF]9iUS<,:J;r1&U)Af(,LV;`ikl(b+0@#YY2s)%`2Mc#ksHWVjk$t2iM[`Z$%t<PbTEZG@kX4e>4iH*!AlRrpVHE5&)/S:sJ[>U)jXMq)4HmT#o0f;Z*@&%-LB([#m3";cEA"jh"_'#Mqn1,q'Lds ZL`b'A2JOoL+5.aH1i5l$H4+ ;*Nhk*gEl(PA^a;ggATU[8!3$C;JLU2ne9)p<$NV&Ma>W"Ak2rDf28\.($7DnUOGr-n?$K32WYa[Zb^N6%$,I>[>0mN+rn[A#Ph.>M0e@A50.g(%eU-bL\.bSU&imF1^AeY@GC<8qj?Wc"+rls,o%,QLdCk&In%PQnaTG_g!)t@O.7Ak!od5-r-9=<$Y?:5MAW\eD(8R4MK:WP?V6P_OUPoYnCW9@#/>DKr%2q5PPP:?)8L#>.n^C#`C*2k=)Y'\?2A!IDVWa"cHij2C(g#ht8S;9<]Hm@.`$]q#0":;oDCZ^%-ofcAQJp8"eGZg61bW^-U&:t0!9N[caoZ>Ib%,2$.:$;o61TtgB$mUmT:m/K^k/sX\R9[5=fk;#E9+NfC,Q;R3LoOgoDW02QOIOQ`M/TZWXX%7\dLI&fk\n2-;A0>3Ua>+&BpV&LeF8_?QUk7er `+MKIMqT7hh5H%Y'!2ahrI!-XC!aDWd gbdb-a7+"+&<$\s54nDJ`k8n"A(SP19r$mM1ArGA\mD&8UK#o0S(@4ph^[IX]@I"Jgr[gse66b5[AEG@Fa61jSLcCk,F7sF+e%\UV[_0`l)S$a<2WGsA2C+dg8lec]'^3l89Dcj8@C#$Il88b'H99feK%a/Ee>Q)%rOWf3kbth,3V??N$H,J>$lPUiA/gD+#!cJ=a4]ae!aD&.fL0e67s+g_?D*&aU=P.n;4EM]Y/8f4qPVAA^7ML>7IA&>*T =LP:VB"Q$m_q7U[X5!@4Y!pe(UF.Z#YU"K[[2GA5N:a7f%B]N$$OPD_(t@MD3<s$]A"8K<1ff]MZsD(e1`'A0S?[/eK;"(.j9c<09/58p$5YbeP_LS:1'K5K\Is(9jT/;.3"NtA^"WG>r_UEa#*E=Y%f(@GAtqfV@d\:0]ZN;B?JG;-C*0(-OcqnDQT?AS1Zf[Uk4s\>`08cJ?h:*,$Yp$#M'A^jq'DfmVA=QJqbo''r<&f:&`*+I6m/,`Lie:5lgK1S+e',SAUZ0>2LOB;_%H?/?Mt`MlQQ.5[ga>tPdD]&&a\8Al-Yn5B]QNaN!dkJ*!`Rr-;%WZ5V_FgbX$"AMbL&CSYRhS*_WA0qZGn8UYIil:!.[7XsdcNLYm!=@kfg\onU)FT^[(GmW6@lm7=2rGD3.FO2b]+b'l+VAo.]c/sHE%LKr;l@+A9,BP&p##seO-I"RUJ-d4]fhX'4B.LAI+,eclYrVadm#aeQF00\^MU3R4eUj-hr)jTX-F(SZ3AI@=k8bkn"]>&.(Ce"fT\50#OAk`RedN!JqpGEaG)Dr@a*<]3`.#k/56P;lZoeQqt%olh:,_O"37pZX[B$Af`>r/&DL@B\1tso-;2.frdR/[@Aql@D95JQP0+jc#FsrA!814#c!ON2<$bjejUOZ*9FO\=4k_[[oG1L)GVVE.:4)P'^r(JHkV5HAj+`Z2,AHjJmnhRLK$=<;=]V^EV-J@4XHc=>@tYL<d6 XEC.sm(lp0UAp;2 ,OZjbJmC4TWLA#5,Q4$[.[-nXI_/Mk=0RZR5Y*?`4,267N`Ja'a)9CA:p67de'Va4ZTs5*:_g>P(^gn8T;ELls#Y0qZn%%KZ?"4EYX8Q&>cl1]5` V/rMX1?PcbEN=+mf?_mOgpAEB;MQSk^\1(J])oAdGL,F'KB5iR'(:#i<&f[r-9Md\E(#2h%Cg^_:6ISQ+(Hk;fa7A(60^Mp2(Fl7`^283p."Y.bd3CMbK,b#/sXc6Oh:pKC;VS(UI<2T9A%t[*T8V'_AJ)m/P- #+1i#90\;(!)e<3j$pL2L"#oi^9L@)j,^>si;LXOB3p;tW1UHlHo)&GEQMN]_A^DN2=$;M3q7%\\=0V0?FGd269qJSih>/acd9njGn-Q-Y:n%>For#\7'o@Df0Be._`)j[#ah"PD:-+&k0,onnBgH;U.qN6/jVT(.U5Rp),hC7$_b]rT1<d3r%W"L8!M.3=`52(1DtP-X%`dSHZgI*1p8@eXK^DdYgWOt59-DED+56A))BU]mU:n.>E"-b;caM=YaZA=VB.k4EQU9qH@5R-K<!k6qT"V\j9SeiEY#"bBoA;HIUof: B%ACMn&fPsCpBhqa68)6>>eimVRI&,)q(F:AaE^4gGOjb4XtUpotYh7:DCk<`G,d8\WDn@pnDW=%j6"#PU[&?1*9R 1nINUf&LE5*tk]L=q(`+Pp'A^QFg"Ff,!UpgX?9_FhQN9 WGn%"6/TXB0i=@P.]qGlBhG-TV.Y,&/gU7AG2#t6+ZDM<Hf?r4/`#5hM9U]EaeVqRm'0@aA!_4XWM3-i=4X7I>*e#4)N@Am"8O)!YZT??m@,\CS3g$3!2_V)SoXh3ptCNXA'BS?a+Icp$S0Fp,+:rO%TP;KW'f2Lh3ap0ngKVc[JIMRsXf LT#n>6G39k9dj,4V89ccR<&bCnr$Jft*ALJ+Kd>,Em4p940ItR[1Lg,A:(WA$d.Z)PrBJiTPn;kB>7(/=D[Wee5:T;n:2CfWM`"T#nW2X+_09\pr;KR0j]R;s)9F>k[oK;c&.'J<%,Atfb4a+8?#U%M7RpAT$7:!ir$YDY2$5lL,Gk>#JSbEA,ZgeQ[BEg""FFc.)5Gdm17UAV1@?E'No2ETDfp!(@>0=.Bf/o% lS(b[:Ji4-9RRiQD8IT.!bVtCSh\c\Rs7147GpTR*0g"o`D6 3;iHc\Qh8ojSW9*Tg'.RU@3]ai]O3Dsj-a@_0TZ_9Q?*<EcLfr>poA90%g3mkH+->"sD,^TWp;W`-3pP??NI%QjO?lVqq3-h(.W Pm`/[`3F.'4.6/:@%b4lqtnL\86s8@QLZ\On14Op:jRkH0q52s..Pk,<0%gq"2%jdS>(RAVi:=7N?deR`1G"N9D 0`c] 30^+mBmYHW(,o/:*g,VfP/?t`[:i1pd]g___+t6IH=JNUI>e8SCpa:g;OR:eECAj`6'8nlo@s53e\WB8j*DF4C) Jd`K#IPBX?#N2@#8OK*EjZT oMhTfLjt_TqAno*3`1T'.d/ R.kffa6E9i @=3k=F&h/D/n5Z,c tZ63f$=ma!%BOq]1%n's^k'ZmsGE4*:Q@7/JTY]iA&\KU1q<$bk9N9j06e]F&m\207TRX[4%d4g!3,sU`cXAY9$de]E@Q!C%q8P281s_d7d(bpA.*`1in,f^pnIElntTT`1kJop*<<2^r?G5Y1dP5BBYQZ!btf3G#1oP'EY%N+'MU2q82,SQo6j,oU?.D9? rZIdf_AB(VUO!M*_7$,5QTTX@(AY7IcNcT>-U\r!$.rRF2!d$=MBkBQ*(A`Om5)LJ:. 1*c6YAI/f4o&%OCp33UWk ,#k15.:I!@]mT^-<;'_ANt)H0)!FSjpBV;7[;I1/D">_4.!p3V\CL=@slelia8UIF Ra]t^X=mFrQH.Z,kVnk`iFl?mB^;aL,6DA_HZ6A9(9n0sZ<!2/@jT#d1GRR;tkP>a(q)[`!!Q9,OOd*Ua[>\5kXh,0Qa^j`Qn_Dc,&A\BF Z\]7M77#*e<X[tbhG&Zc\*j*O,ETQ<=$P_qL)ssU6k^mf])>'a>HGXk"=rbL4gF:E5cQFIS.0PWfh^/cMi4DZtk3;f;:]-QKmP##oD>`;KilN>6f&\?Yd-QmLoZs*7[A&UE1h*KCl02W)R#/c>>E!8TiNCY[NLh_aXo M_.7E9g9o]PCS`/)Vs4P9;fXR'3!XTO8*"LI37$RbVf8qYC]Dqp%BdUNX]RO;=OGd:\icQ)i )XP#,C3( 6_S9ksX7Ar[760bhT/R:r`Y-.\cr,Q1A9/38#YJe%L!rlC4mO;KCPMm2@p>C aQe(;9LdA.M .N\*A3,Xkk3p>HU,'f>J(m+&eRi`,.10dWkf#rJUAW!Mf$-6O""@g f1[Sm@@]d[nmR#hENkFb_J^QQBo@g+@2:e0Z2A:^^C5io&\?;+nC#RYC?-I*e[Pk3iA^\P]AB'q5)_ _C0h7r^mbr(VpO^>?0K(ATS5Rah[k j%@Z`[!Nb J3jAkf_S(\>jb-bYke>_@]4A#QW(M='_pm3FVqkBG1Yem83gB!E\XfR*!19aXN.P&@`V$b^+6PV/Ql1@Z(>`dhXh48@JClL=aFea=?dfo?V532QCAKYXbUlg8;_Ubm,!j+OSg?MJEMMX/M%[(\WdK :)ibP?LHj5)ai.pRQ"dt<=mA#E-`t7C5]DOVN!!mlLfC\\9&oj%AX]@1M"BB*bm\ >L.sAJpoI]m"IOMoRRmgD,Rh/k>_KT.m"8``%f`:2\bn1]!!B9Me5\@,?8]59]rrR>GeEJi$knYBNcJ7Ht4&TWEg-[end5AZi>8"WI!LEFTjp#e&jOIJtQh'%c^g14TmCH ^"`A1]Y*JU1JU>TU<#Lb4)lVVo1Lf%mJkS.g>VD1MTjo)-P&g^iL5YI8Li,n_!;3F3/e.\I<@;C3E"BIW:X\<%ULnr#W33Zq]KRYjGXCoU\mK!l.B7 7,/!_XK/jQ4qebJ/F9jh8IU.8hJ8V>]B$6_8NFc-bWtA`f.f,66;1o"QkD`1<# 2@HcgshmE,p&cm!Q_n'oWB'RlMl<9"DBtC;"D[P1:b^8gc!%-e(=?T2'_ZoiqWiA9&:57Y"PXrTU_'!UAfYA]H21M(lR57/e=AO'9SEUFG 5_^"^k>IhTkL<7Gq/gaFldm\F=.* (PA;n,QE/q@N9^$Vsedg+ar;;&AK\V'!7>1#:_E??M\l",@4da:][-dr!I6.'lrarP!TA06=8*k-Am%osAr;G]9MdLjSj1>ThQ^Q.8JGN-YT;3=C*a9>#[B5NnablrMirPbjlD65!$Of:@[I25EWGM[X \nsIXF=qc`Z-\]^Vq2kSX=G;$5@LQ1>9_4*"4Vi"QmAkDm_ST*7;drHQ3if`J7ng5ne`%8aL4,f:Q5GS`LRcp7Z(4XVd^Iko=$]@V/ta'o -9hdlF@Tn]%86a p$R7Z.7bWcpgT,87=ZQHX:KN"6a^*0A/ibL"U%:E$&= )bjRo.+g`%JtkiVXN(o 52Q]K,XJ8JLf=T=$'B1;JI^5*Al'A$$!*PB/%b/5s[M=77C3BWb?Y\hb$ceQ[pm+\:IL`Zc1MT3\a_o_T5603tl?dg?pr6&\8QkeVih6QD%-3,oT!$bc1[+] 2I"dh+QA1jrB>79Ud78"mnif$jMJ5qH>lr`ck 6[fmh?%2%9F8eCPJ/T7<0P%kP DFG!V4.N9IG"&-T%p,5PLA6PTA5`_6Ibc4lb9)#eLH("Q=jOq),ZD$.'55&rl;`54' ]&%5W0HV[_/=WQs7b3>7[I $j;SDo&!c-=P@cQ].GPN3D7coM=Q!#SZP09*d,7:WjsF9[6<k!N-/?QAfK<&.1$<-dO30G6tV_h5T(45a"Hgbse"TXr:W1XDcnUp"f*R],61TVIHW+0L$YUS[h1A=c".(D:^eM@^\&UI30.aURP?P72(17NmiVi)LGWON0BU\45;oaHcUOhhrT;T17Qcg6O@H(#4r`C65*m0R4Z1WpeM:nEjHZ)sennKseA;)h@)a0f1@91A:r8Re_p[CJ9[o8f>^2kLA=3"kN4Kc0al_W+MeIk"MhrUT>X":0tOfo"U[A?h"AWa8Hd9Cn_>ULQY"fj>[:]EBAQB-9YW4\nbKj:aNm9(Dpbc[jiVb".Y,A^,F@".G=iF6"$G R0[;L547[.g(A+I`+8!]d=$4IY< .b4K3&+0-H7eWgKL^34^bQ]*I:eC%qFtmrF11[jIQo-QPG>_XTraYIT#+T#bc]D,Y[nf7-l.d9JO%jq+=Zd91c]3/N%r-H=A)T;SMRde\KaV`lXS184CL.7LW4S+<^*2hA`PBFIUVXm3Ngfn;jCjt+VCOF(04T()pTfY*n]S^c0"!O5<Am+_b)*8*p[QDj:;/d+WeQYf^5b3^$CnK5MFBV'Q00JlLm_>d-6F/M9d.p+V1_AMJS>1(PWBZXG`hQCQ1]\7MS'im!Y$N\B%cJ*("f^Qn-XHj)$ehjA?TmM!rLA7c9N**Oq> DK5Rm@[jes$PclOsE9EmDG:)5[0Ct`5_,Y/,/dbc\:ZG4K&0DbM.<]d`YWcPqbnQFYb]cC#\JL:^n\'s6A^GJVA*.8.k)Q##HI+&P*AldtSe%O=5V-U+`&SDbB8iKa4"'1MA7*>/BA&m=W%U5"U!$M]l+mm93_Bs.&%VqA9%>UL'?l1CH'\#5D';FF?ia-pi2A$P=Eq+R[$\3c&%![H60R^2+/Dq8m6^rk.0`YeU.X@2LM_j-.ZN%An&EHGc4qO5/ZqXLU4OgKnr0AH8YDn*Q"o&YQhsEY'^KI&d@sCZqq%#UE?tNA,9_E8laO%Se\R8LW?HA:JA&qsFB2_HI]k?'4$-@-GrNisQ>$gaAALde9n?Qt+&L%1R)4)^Tar\fW(Z9f@%D,=K).sVO^W"WVP[X/-M.aN'.hQfO,N 7o"2`5Qfg3RLhkNjW#,qWaM@:\_=OGg]fSKrh=[\B=9C(t>DDr(geZF_l`,'&"*Ifp?N)cmT,6bOTRCr=A6,s]1sB3n,5PpRDC@m,,'jEo&:=@%Mdg:<^p=d:`8a<_D=bD`f/,([?%n2e\YK]"D*5Zc@\`3lnF5jLjKcG'A4RJI>J#(':t<rG9Z%&_FF[fj'q>LlO\$/L=/>\0^B&W+RG.iIhaJ8rJH5 sI9-$*o=@LKY0@c\8oVO9_OZK]eDqm]7!9";e9iTo0^XZb% 8gIpesVHaLrgR?`B\!40b:@j'Io>8&$fKts7%c\>8WkhB$/@It$:oAlR40A2&b(4"/d5+/'-k H4f=2UZi/QWjF QBX<"/ Cfa7:JNN&<E4a-`b=;^^G\'BTG8R)oCOc_@H,IIG<&3hMr'*(<a.&DhY5U(Qi&j[D]>qPeg<QN/o,!FJW@-0ZHG>5?cBiMK$l>D;mCQSJC? dYN:Q8rhGa4&9A>dtLGUkiYAL(N5C-/,NE;^lq#%c-GWh[A+f;20+i*BZ:+9=BrO),&(L`N^s!@e:WDD#fWY8i_^dYReFT4? _"9hh>)k,oE["p-)2b_j:)o$TRU3_4X@Tf-E2`1$&i[Ar)*s'-AZdQU9V(^_mW0sT1V*/W[m75A(_4jOjRAc+\Y9i%fH7$4DoZNO3r#^=`s;6(1-Hf#\'@&R-TGYKTNG-gn&"(jWpA_,a2`tFkM=aAPAt7)Xh\]g9P&S*qiO=+b&*Wh`OL[(g3CU3!d@."+<%?DN#5^YXg,^b+%b=@sA'-i"TZc6l0flWAGJF#pL':>)`_(baUeiis+5q4"s!VaH+X4I@e_8>^OnTMMEaJ7Aa4SY42kjoR _d66kF6iHA%eK&s',ib[G:>2 70/dLeZJhlsLba%R+9f1/XosAdmAZWbC[\g#_c.cJ0VA6gAB:o(`2>O*$NO_E7^1Eh!in[dM!Y8r>j@dtFcqZ"la>,d]49+e!Tf_J&A[QUCr,c;?HO%ji7g_9J)$6kd)ai-P[^C?Wm)M^ \K,RVU1)iZP9lmC2(Hod:#@$9cj6+-X3r)Sr9`97JWA::m;rl[9J*2XLE#F0U*IB$P]+\Fn>[%cWjdk._ tc1"2eWIR9#K9Y^5&%jZ$L,LB_K+19gB:AWdR!g%9?e>W/Emc26++H.\6F<':j#P9_kH_KGT88=4TmVGm[[N_)C5>;O3+>i=1F1UAE# \"J07pp!oq8d..g(((deH1[)^[,= ((s_9p*%(M_^7 l"rJT?l6n:iU*dgfaM r#e-_*+ADo%N`>Abj9'"FoLZ#db$&7Y_U^?4*SS>dG;K#O's7lFWA=6qH'rC:0aeXFB<^K(DV i%3)I*JAX3NNL jgeG7Q[XHVTa4\2OA@*5B[AIF26I]:,Bla4,I*ecIY.I9Z?8*)k`=#]88N;rHN\R_9414grVceT'LM[6IF]qaa;:NHd@W!`EAX-D5Z?gU5?bZ_TLR!llZkUaiB?iD8cjVZX9B^'(/OVNm0I_0&6NS0OD;;bK;',UX-GlB'gpj-n[fKaEn>sUb05NM^$HNR-<3V((RDpGKA-PdUA]s<)lV@r&7(n$A>M;D`0LM\ekE\Qjd.';qdO7 9KC6g`Y[N`.$1`raN?o;qR'r Vm@_'JF59($l21"`=A[Y%\(GAG\qIf5 )N'C%">WGA,Q>!-#RTW/?XRB:_n)^(RWBA]r^GF$U@A=oI''fAZ+RY;!EOV6E#sr<iH44G+hZ;`hR_Nj.CWM(Ns+_$a $-mrSr5nt;(0Y)fI)S4GEjX=`Y0n$B(q%%cb1 An;1nAi&-3\#Aa3jU!N`!4"^IqAU)[p$Us9q&"WLp:@Pe:Q?cLY(:Q\Hf"-V9?>akg=f$,Dcj&7AM5s-t3`N#Al<:"UVLG+c&,\k>ejl_qK?j6`&Or=Vd"%Np"b7q$8Od1:;*dfnp[^UJ[,6t)YsVkC@aU$>]3S/LKp<#40TGfNP*+8K*NUl!!]piG]O4A5#HQ@mE2<rXNH"K[jE*5g^(5R9!Pi?L3N[:3AWOUkH@(%kZr7EMbnRn395W/B57o7d*pN`iHQ hWbkC$j%ge:%dT#6LcPK81jRcAd[%s_$c+q>8hO)l.bbY&l%>Z^c6i>\Cr.GY^eU/rq2C"mai_W?,@ JTTS*lHpL.DD.\BBEe<:*W1db#%+*,Ql6?+X=M_nb7%,%lh[Q,['nTHTgdT7j?*ls;GT;;"%7+bnB>EK43GV(j"DQQs l<0A,/o (+G71o"@McZ%>0c'Uc.]PXt\>X@kjXWqP,,,V`^l*L&6(d\<*cc4L),GbBo.TmE6/@7OA^/^gA;!pPs`Wjk!RGG2\nG7aa>C\W@o64tKl7SMAX>k&L,0V19b.YK_:P[DGZEPLHX-/`*-n\AO'CjV+&Sr/!>)8r>&diAJN)I0aWj4m=&&&=Q^Wp#pU_-3Y13Q/g#"EQMpBS_1YP&9\ABL6Z6d)f#arHa!Hj?*X+W0:'WWOGV/1All"Qa"Xk\Oc UC>\AqRtCVbD)X<+9pXrR&`"Q<.0-M.Q'c(XYRF0^%>#TN-V1g>Gik I@1.R.4@"HA;hWF@Kh+X4kt$8*&N`;m7UefMH)W6p]ap'J)fQ;)<`BCa@iqjGCDNlQ&-A@^+H)q0CEYsfBs^9+$b!A?ifH`4e`5YcN4WR$q?i;hOgQTJZ%^tZ^3bV>;+FGPDO;Vd^"l,TA/^&.UI-A]979L&'/4bQ&Y==om?pZAVf8;@A(B.FUY4Ao3rcKMJi8&V6pjTW9 1L-$M^@?Xo=Efmp,!#2B0 iT?%d\^Zeej-I+,Etdlo;GeXtq5Ei;N+QHKEa>:p70G6Ah0t$DC[:IgmKiSg7/3hl#Vp0B[;2dKL'SW%pG1PVQ>U_N)0^D[ALc/QTOaA])brkR5&Kk)K8WAUkhpSEj5nB]MLc#(T9Je#LOR$=gn>EdiskF\p `roU>)7C<G$L2gPH`rmc-AE$3=D]UZ@:UQ`q`=sO)18I9L!pDZ&nNoiOftb^1l(KBi9k#Ek`SmF&_d0(@t$Ybj^jnnXCVAOft4TD_s\%K_IcT'C","lpJjjtl7fGG1;J*@]BZUl54j6VFW=+QjTO[1ne*GO@RsX=j4F /^nFZWSPS=VE=RJ[?V$21hQYLS[c<1)jMEQSj3p;s)_?D_+s9I!jokC8[3Npbd+kW fo)kBat,qpW_YspA_A!fE/7g@YVTODlV?f+9LKMVI mW-7Ueks6oe4AF4]Qe6I6W!J8M+?IGr$&/r@EA,d4-hU$]bU-bAapk6/*_ 9k(1)<,P']K-_?KtcGg>rm/YDhjO!3lpL,t*D4j"Z63)kB1_A17LJ+B?#(?9*:q=X)VQc\pR,o:J7O"gRi#Dk18$\Mr!:"m*_dh9,8g0YIX`Zd0XjB!S+-Pft(n.?'kD%%`K>'",Oircg1L^\+iJE]!QEf$J5l&_nGWLGI8[B:k\qpJV1N3(/'/HRLb3G57Hfn25*[:*\E`^< ,rr/oRh ##dl`7>i5"= K&;;2-8gsF"=(*FkCoFTd=_,7\^R]SKoRlkF8]sLMXG%Y[+im6_^`7fLgk;lC-)BpohMn0?p"6`ebR\'h"%UqBC:?A0-YHU%[^K.=pPMhB2K'q'oYgfnhsdH3:(LTqpV6;'q9pBsQR?X9^6W:F<5IQW#Sih2J=D"( A0CT9W_nKmV2,EH0$JWV*6D\s?!:8`4$)Q_366,!c(ga+Jd;lpk5gIE\k+&f]o"^m-R)A(M#8%rj"NWKf"NcE$%l"!;&lkQ nB!cpgJ5hBh@Be7go+o8fd= ZelUGrT)o@.,EQ8Z>@=elER?'\DEN'iJrTYV*7&EQXk2kLI`CJDZ^,!dK!U1o1 N=*qq8[>t"sJn9 r].E0b*>+S'Y`s;hpAZTDZHX+.DA6^0L;cA=B!12p#P=Nk8V@[7e7"9+YFsD[$F/TKo=>C8K<[,T$JZYs(k+cK?ZXgNtQ/H*9'h9@f%Ih>G%/U]V]VYXE_^o1h=a:lkC4Pb.L^eA4CXn>st4+jakA@NS4O#gD1V?5kOHNC heP&X6<>2UkP5J0Z&J?/[8ZElsB@[TMI^N3-85UZ /mUYZfSjGL]0@si:nj6;9;I)C20)BO?W;F$!G?<Y.:s%e5Ze3=7b8I#TbITfnK8nOrLs;*(GqG8P"HX(67Q&0I?8`DD;N9k<_(r0p#=P:FV^W,#& [H!tVq#g)rbj69M[;_aQiSN%r0.Q]$jAiIU7Eb\PEJK[(:CHjkg!U'>\?b #k`'>t"C-C'+YJ`@#Y 61KEb K?Z)5FsC>IIfH+RpL2>W"Q$JZg/2Bk;%Hs6(#a,_S%9qQ6_\;N_Dh"BGrOGN049+fbDSANG=*P"RoDQk91S'nQCIBeng42;,>&GA**j?edh,:>Aq\]5q)c[$E?('Wd-Z:TC5DS$BO PTUELG`jLS7_N> bGiU 76%\QC)5FQSdDf\D>T#"^"9J] n/$aA^8n#t$a]%-fW_j#%fH:JTF0=l3?oHUVZIpJoHlnM:ponE:,;">)l:Hnhg:@bUq's#DbK`L(,MU$,N+% r@@4W?cc[I,_)daC_?T"tSQd9^%`N__pZC:O[gWgdhG'b\^0ltg'O"koJB)J-V!iI3(1fjq7H;BrMlc0Vc"YKo(C/Wco2YTaU?s:YE2rFqB81/df5\W3[#]'0IYYp/8qQ0[_*tN!3KeAI5-4`d'G=&Z)hpqPfLVJUG_>>>-AeHW&9Mmt,l1T^hPoML&N@T[[deLkgBa^pGoh3rE66BW"?%K))Nn2X*=5FA_6^bT2hnC7/H%cMkZ-&MV'0JFf#_HRNV* .@j6eU`&l2"W=R)_EE0h[-,="/m2='J2>KF[Nk['@K_,\%BHY4]P"STZ@-Aea<&'BE;]t8No8RVf',M@34\/G<3jI`A(T0"@b,Fc0;,AfqSb0=o:a"I*5`'>ep4#4D&nQ6\=Lloe5Qn-ed&$4W.KN"!i03QP9DW+:smc2_$gO*T2MV6;';sd-06W:'ne-fpapE'j1,f2ieqam>mJVD0Km\24 _\ApdeB&@gq4%fJ3oq`.&tiR-(A bYiC([QPaT6].XVe'[Z-6j14_K3is p!1t_l^;?@SMJC;pJ=_6LaUer7ZpDO"@3R:lqT_(ac:bSd!EK*,sD^s8R0]as0lG17)r.(W%lA(q!b=J:E!rM8^dA1?Zk^ab^"c,Zd(@tD8 sM.[E96p.DKRG?Xl)oWB tD)(>REQCj(OlNi(gC]=!1ajYA0AHo[%2cpmW#=YIga?,f1E*W>9Vk(0DS[spBF,]+a8NWn2f3A)kOs$eG;5 *LGGH:3ZDK!B5BZ+bX][I,Jc47T7;#i2Re7tJK&]_N(e;qSY2l#.bU9mebC:8EE"U F+B.-o3GRnEtA%NM]7ICk(+h;KO`I&\LDE. B\VO+0T!-OiiOkh+.]RE3DDda0Mj:L^id\d#PdKc!Qt/W`:m-aH+8*gq\Zd)0HoGG(T:'8LH\Oj0`oJ(YU^_6ZKrjZ*t(S2d!8qMTUn 8Wi38sSCkKcZ"/_5n%fUZ!HRiaMYF'g^EXj93.-=(/oHe'!B,LGG9?cF[?X[WcE5\?=7% ]OQs6nJnRJ/':A6UGZGm7g/Ke%F[7p]Bs"J+>CCigJ(T%bZ"jnPIU@G$(++1S_@b5%mREh&2TbH5II@A,jS.[MH\1-b<"?Ak'6,(CjbRG94=qV%8 TJ6Z6&3(o?hYfKn95Wb=(=m8.IF?JS`Qh*R?@IEp,o7U-J4qZGjLnW aaf[VF(AD>YDU>0@ZreJ0L)(&F)-U$F@j5msJn)t6K-SGr:Td+9$PJ2j-s9EU6\:N'$=7BfT)bcHS)5AeDqbeVO6r@":i09:':jY_-2'ZY5['(PYtgge0LB(n/fK"i6?9]4)C9(;g= G;" AZlZW0t3bPYs^?t$OtdRVn:nV/m[@A"p.%9!p&AP@G&S^)g="qA>AVTb^=6T-HAJ@j+Tc;GU 3pDNba3iS3[$*FE<$UE(pF&@9a>)k&1MOK1MTY#1?df*dn2C>hH$;dK5>1b)=j"CNaV-atWE_"-\'\OPdRk;b1U^eIA4e=7k)U9rDASSEhs;H[*,Vef3PhO@&?,Ri,>BAqmEZ^tm._A#[@[9%jb!G#ft"Bn?:^0G4-Y`fMSLdelJrVb3:"KDAlPH#@m1!MX#.VDA6ZLIdnF(6Flqgd[GUtN:YDReU`>pUBBQlGhQbC:`b)A]:'AfM86]'K[A1G3[Yb"4oD.V=NhSl3JH)qA7TTW?)`2A[(.i=S0N0%!J1D:#";lcAWp>,#d+7MgM&[8%'>% P* kIrG4,JZh6ArHLiW<30`[U[`n0X":Z57 [N*HgZ$I7otWr54/Ok\NEQTXVZKt8D6,q.R3mp>&_IPAI(%?e!5?A/Qbe@ g5aGG(ni3aQ%8;=R7B4TgE=cNBq+FW\An6k@VSnE<(EC-dYOXi5P[Tii;s=l&'p1UFmJO[#pNbt8/q8Mq:I.Kl7[5+g8)\XkA7=1"7GT.4kFYob70WpJIM/7`^?rOW"*C\'\[Ot%I@a\dc?'cjQPlh\h5R/M@DqMap%_lgJ\f!Fn(UQJHGTlr?>6mA,VAb3793AjHbXFg`E"d-kr59p,"q.g1FgFVB?%[V&V2T:?02JO!OEQ8?_GKU!:6^lAL7C;Mb@2b o_s\1j:e]df*LQ79TSjDhM;AOd/9Amf--]#c?4Z4DA*h&/?MH0(=W[H>U,j'AQ5=Z84qS_]io5sdC/Y!)Ro/#1-8eahG<=VGleBq$GtMgJ'iaA&!0>IGh<Ar[[r(DdF1mRYX(:Ah^8=<_HA:&X:*+ra(p/_Dh_,i)B7 WFq+ZfD1/-rZ#rM-i\)%3a@Ud]n*+O;b0j3c7:&A,T=<273+Ib2EmD[`=N&`99S8??o&/@qoP?$"H#EL ER[h^aK(iFGP%TAeefT$Eib^ "eH`n!A5\Tl.DjW:'CC!8/rt;Xi`S_Cj$Z=H490!0#9:$A!52\G@WG =]X`K9CI4)gYNKW0]=OP;HJ/%pakp c>":0rPlQsSSUKaEQY2iD/7.]oCP"omV(OO5WnrAI[&&A`EL>R_/"r8.O/6cV Z$JsGlfKOZ:6t!G\[[;\Yjb42^6ROJ[TA=jbf9AG>t9_6pnNXioVqA=2<]-;[t7LX58k`<*K?\p8IQ0At;LEW0+H6+*fd3SaI'$abi7rAfNh/,V!@M^H@_i&]O,^,hNt"(mg!7jji^R\ 5WC=]M[q_[Mb9.nl!"BTOBj&Zkp:0X],&nJ$\]]S1?Ra^#V#X3](Q9qUlM2FqQefOt`oLUd=2`-ILq'kl';P-$m&dbNq4_Xmcam,pA6ZI^Z&eX3jLk'W0^hf('1^&b:oT=nOhOTQA!oh'^#R>P?3+L:XM@anPUHL8pEW+.d*,t`Q423Ea'3*,\8?[_7i8SQ,Z8-EeA(or+LtA^)r,Qdf!13HT>+l>jp'qK'!5\S+\1R[T(lAWG@*@WXWjiJ(-C,:$Q*g;ZAs$K+Hf3f,l'(.`2+Ltg=LlUj]A)h_.D4AVThb_:o"E,Ac[$r=`6CM WM85D/Sa&]RgDY7Q%1/8AP\-`Lla-5N?aXpkcrB7VV`E!E8ClT8gsmJb'3W`?C9rUFac[X^gUQ9TDjZ"(jmU54^H*-E?/q?8cIS:dL0@ b]9#DoU)^p5b8X$*I51q^WsA'd%2O*N$0gEfr(ZTj5]CgAC2n@"p0tBEHN1mYX"?InEGR7A0T>VMD`$`9?cmc+SA!/^SHKc6PB@7-/P'NLQ)s%@ (7\Eh$-;DE*hDtr/PG[]J69FRXG2K(MJRMkOrO(Z`KnNC<)o[<;`1hDl#((g:W$CrPUn(FVC =a9A-p&SQ-.Z9I o(1,pIadRJHa3ZLTVh].bH;#MkK<-en/H^=(/"fsg&B*bOAQE_X[??,*N/ ,7=',iAYKN OnML3[P^e;$Xq/Y-%i@[)P9cim"-8t<=^bh!srU3cB\&^^>O8IjQm5HNC/dnKsYf:Bj0dN_)i26qR\k8k@Q0]_tO[dGBL4Prgl'n@/>Uq32\"I/pFTG&X`QZDM/,O t]LC\nSP'mjQ:'NA=&ln^;D\nlQL&M;kAniTD](c28,8,18:6!M7n$&RVZce8TeHW#o\G^F%2_XM-/U5UZ9q4lg"St_'MSKisb"#e#NfZ,Ce(=nU] h/$U.Spq*hc+e[@1ZC^=2J\P3bp8$c58j3_O:0k6WC##3=jW!& .f!B,H^\e0S;adAUOo;6ekIP$>Rh[\-nN+,ph ]3C1"AntH(F?`s_SB6CLBsh7D@7 ]SAJd$j'.-aoYTsN)r:=>*Gf:U/! -03/6n&B$JBQ'70?@&G8eDUk:-tPpsa=-lYS'G6,^t+WNDdb06]"EpeqtZ"fq=P'"pUgVY*r#D"JNmJXs1t$;P0;%$ORIhWYeAbL@ZSB&G'n4QD*L/nS/^GS_9?9>N]3fFnAGr!neR5=_cYH7$)Pcf<Vf[rh+C"(2A?.m,SQ+:A-I-BU-Kk6prA&+><'ls^\6#l5#gEl0o5l784M_U3.=W_qGAmQ*%%^^]6j$/S,O0"1e5/YmQMqj?<-TR!*0lOrtSkQA99kNQh.%r"dOm+eGSXYY8- )FeVXEH:P@Sa##kM\2&7EY$WsDC30'l"h>%Ar#"]CrI`Y2\8o#-\A+qnB[3Nqq!a+'Cab&_3WC@]2?kr66f$mXoJHVQb1L;/"E/[_i"2A#O_@8!_onZ:KfIm25I;qhK"A3L@W2?$7>_J%UAKVto3lMX$-(b7s#nZRWJ C8^J.dqq^X+f;:nS.j'7',)boQ07P:be3Jja&_SjlSF/KCf]MlAj\q8MYh@X?E9PZEAhdOI9`bB0)DN3M[)i!`5iE&/6cP,K8fd$Z;6g0ZR&MA+m"ikA`$A2.0e5!2g==^N`#'j#rqt:\ _q.1dcbKhVo5QdUjl=<^Q%pF.J[KsmE/p<.0(?j=(@bU7 V`Q%*Q-\pdr%W@>etp(Y+?H+WbnN;JBNA)3Vh91?M<9/f7_j,B =E28rLFmb9C64o?NB1Tf]a4#GU:!(3o?;79.Ij^jkY+e7Q^4?[f:@sFiqGiP%`n/f*IHLa0CepA>VB3hJgZe32-'2hf$1) BHM#5PtgK/B'5D_/qY1=%*GQ40 `k-S D!DtVCL"a9kLRr;^Z\S5?4S4abC^_Ji.9=:kR\r=)D7H=.-1r.OZa.N"T7(U\snk_BLVsX%0AJ0_%V'jK_.e;o,A=ercfJTZRlB:js__+O%m9/`Z]`[CSU4%e<4T=F3NGa83EIc^MZtk;J[Yt=&hJ'$PTA#8 F?B]XWF(CAKpLX_Iq5FWSe5._?it'%Bh7EAbZA"95NAo;_[WE/Z/0bGIP'FkIK*/Ie&la!C\nR&'>'c'n2C(t-ZcodJ" %s04ZBVLT1OpehGq-lKmTD1(1"Ds^"^Oq(P?^66F9X\HT/&MUTcM 0OA;\<[A=d\TRPmia>:qdh@qi.IOBj]HO#"0.h%nSlXOGY[$mrSVp[Y0NICa8RL-.!ClD,90Hk^'k6a6cin/Zb!&je^@+[00bfcGFG(LY81#7tpAeR6Lb=qT_H("eb:YOiiI6hV*SF3:9iQ\d qs2h->dl6OT#PDQEbJX66i)]FtpBF -g/J^S\sl6n=G'Jr2:#B8)KM./9:S]Br[&7qh*'hl6L;"4f'[e8njR^#S@J6]4DAJST!XpW>?UcZp.d64.E#fAR#AQ"CFqY2BZc+AOK2VqA6I'YgjrfqW1rL?F[BD.fRm6+@2nsc3/liS%:$83NB]RUFI5I; M14H'Nik4^<'eaTB(=6L E*d$(CG@ >mUikAR:"3Pqd7$''eK1^GU`>aMY*;?gnmc_E_1ct+b6LWJpR_AJG$b&?iCaD.R"S7VkB*8&"h`YciIiHg_3%54DpD51IWl=V:5@t\EJ5I^8K3%8#@l85N#[C#<7]!*1MpRCS44&TfRhG_?BH 5;)CoIJsT&m9KBB;C<;WK$?9r(h$W0X5=W:_B+@W>O@dJL cU' fH,8;M!O(08I?W8S [oN8c\,Cc&'bP.;Bh&(+$P*Xq,DmW)Tt t/(Q(EtlLC:fCY&XD0d[BZO0^ht[APo#Egl^c<\Z"FUY_A!K=j8?9#/N30Kc)n78ib8?b^7cU^(fT@q:%(W-k-FdA4Q\_8r9VB]%SP]?(:>DYF2H@);(A:!2$'QhpD:B40!K.BBlUk-,W5T;#QD7=Q;k5,$:!,OF>XA/N#+ia]dUIF:!i"9tl:a]$e2=CE&KdWFBC0mA/(%d$qgD#5=e?R=S]\$M5jm)EJE4McR!Y`olVI#D%AAe[?*KXS,b":;275`hGb7QpHA5/'sqb,m@pXtWq#WC",L35mH[FD`P@mTP8-m=nQ5lOpVobKa##,I^iK=Wj8SN@^^sK(]2\<@W8oKs:<Ur8%E?i(4?H5(,5GiqX]A4:"rD*\cg!*$*(DN[2IaG:l7S+(K@%G%XGLW`5ld VRXkrEIJXk@,6RB4RBbrm%i9rYsE`]&^' $FpBbgjj8[a*F/,7*_Q0"3V"e2_&NW_Q2nM?E@(hjd1lm4O94'_6 IAJeXbp;m,!(J?H6I$k;(n]H1a*p@P:1+hdYQbTi.8>:j.H]q*N'cZ1a,a.IsC@c.rl"*q[s8K,kg:3PM?:t #s81l&,"5]]Q%N1H`D\WUS+AA!'\2;4@Xt*2b:JI2F@ERF@rem +O2.!&L#sAsZ[U]B\O$p^=;_WUPcp $-W/#_@jmh-kiq*5-LC*i>Q1)>7N;k[_jqJ!p^%sYC^*h)k tMUVh7E%P&TgZP\B_^1/SS](B=e7C3?%C=f$$?D+R-R2W)[ln`(Zn?\/k\;%j*+_;/AK9iJ Zb&Ic7UW&GU"b"*sU_@D 3Q"oHbX5;P3`UAAqF,keZ`8 "j6_fld7YUI94*YMRE*K99rnd$o78=?O>:Zh_ LpQ9F_L#^A3QCQ$Pmt8>N^W.)QBB#b/fefCTOO\/C[DbqdJN;iQc)_2K)i>tEN!t#Eo7EFcDQM*/Q$DVq73A>3q"?rs,DC^<@Xa*UNT)3eJ`p,0@eB-^MdL]-+AW?+k'TT"=*QA_6N#0QOFGW\J +CDa"d]!*[O+l[\"D)aLG*\Uqo /lpZS'`25':Se#*7@QG@>i1.@tN\l0)48QCp,Be"c7Vd8C!NOj7,,GA03+k\JAPm6'EkqMBeqlI`0o=jW2AD#Jr"eLF#K#DMXTA?)p\WG.+)@aT5$rEkal[sh#f)7D1:N@J.hLlbZ5gld*A%!]Nj+93+Mdh;e8oRR@(OQdp$:KHVG"_>S+"/0$AKK"iET>q4-g$g`'GQA#O`iA Qa AP+lgoob, QXf&Bm!5/(8N (/Ht#*%2/dPin7^G+o0+$6<8RAVppX4`\eo>*RtAe7)'dO9B[GH:)cl<Aic(Z-4gZeOn1Bf]g 9epr`)8M;m#ftY:ZEMI_8UJdaqj)q ,h\piI:L:%#+*+7o.GkgkrmKBU"`WMJ8$XMWK=hU/AR ZC4IUaT'24[l.XLM,/.K,qtV(2cf:]Y#G0O_92(ALUY:.'q79aqZ4CV%P? VF8qc#^Ss3fGdSA>8SQdK?;MTW_UK"kj2,F#_OA/objAB^k_BZ%re/blK+3Rt lrAJ#ZeACaIA(jh \(Ne]R_`BNQ>b8A\P-"/ABZ[KA38!pWd00d"FSX/]S=CB=,)FO0QioNX76k`K:9,YD5HX(arVUq_-Y0co*V)Z?h`C+Tt1o0e"@m7SVai']@hMG\*)P9M7S">c+bEkkCS>Hlot<dEmi4$KCat_n#)QhYAUUKX-ZU*4O;D=/4-OkOYdbVm)Ng S:Ia5MJ),E33_<^dHQ%j,t*#?M6SZNUT#CH<\a82m22`@NpdTH>(1[6)^ZVlAKE5i2o(s)rskb3MfU6lYlss3&96[M, .fSc`*OrF'.Y#MpkH/pde%<7m:LtYY&V)miFbqegR7Q ACrslZO^J@J*#V.H"r5m]5j.A.U7#82lN*]3'4mC2fQ]*n*`M>JZYCoAr6m[s7=V9Jfb3U3o77(9XYT;A!MY>ke"ni<TYVJ$6k.#. PMphNC_J*bi:DS"BTb[CZc92qjomnC;Xd*iHA3@F*C^Yp?Fa6>S2[0 r*ch2+bA U@j\VAZrA<6[4b08g*:-c&ke ?fU9+5$ bkkDB#9?FP_C5aTLiHaY%D7#empaDa4W%`KV$<"tD,H>GSLPNO'TEj./\m,jt6TWP:*hT'eP[?V]-Sr_AbFZhABkt1n?t0*Es"WQI1i',F#/=?Cd<.?!LhStaQbW0,1DS"<A:Y]5rIq'R<[j<!tYP8^mf=,n[J"]>V<@dCam7\A-[<&3qo:RSSHB8\8qVEAlG8n#$fbnV$5RHEtbDJ-6QA%J,OQ47n@#mO1'2Xt)>_^ocfoAT>Q`>GkdZ$$aM-Y"6acopBLJI!N`qA96bBoap9c5FR&(T;as,B9.D)"6n6A#-Ikf8YJML?$N?eT@_]@Y!R*B!J&`0!P#IW6I`eUO>qm-NA/W#hJjN!M\>=%iXX)Ik6;G`Rl.BJF7b4+Sd7;q-Etb0Smtp`7/02B^]@7>GHJn9XdWE1LL'bon0j)f7=9-I9'5gi)-RHhV?Y+gWL .W2*XAT-qg6VW,)3>(86YA\cIc6%s(/M8FM`/3>#akaIC>"I__#?ls`7PJ*Q@RZK/.-%%9toT/m/V'"YQaV1kf-Pg+$;\*grK1KD2aQM1tLp`T -V+qXm%=$@/%'k(!f?'HY"9")?KZ]<13,lPL A.CXOJN_h5$m`%a[S)fi,2j"C(aAsK#?db:m2EG\ Bhq>Yn:VVQB`VMLIK'P&n$- Scm&j=ilONY6qSNS?@j)'s,(K;K%\1m\A$Y'GHCPG_sJ U?+S`cXCrDAM0_jq3.q#R/FMf2JekA0bWY%UPQF>E3g&TmJZPY1 8bj\Gj^`q@#!DMA+`1rhm:]n!D!V#.\kA485=ACZNRP]m"]fhcJA.@&14C25=Iq]FdO7+XWe+ )S*qre%GN[ 9=$t8,g! $l.1$[MO+FUXqq8o$[dpAA()4[8^> 5p-9i]L(Y=g:M%.EM:nCF6[O&"B4;MQQq;\E@t'/1,NZ>:iXc6 *QXIbbUMA"[jV`iAVA4i%HCStaApU?fs(_(&c-`?C6W(TD:QAABR;-=p1VhDKoQC=Gj_DQg@j?;_"Vm,8Bk#OZG8sCYkii2AHa7'-Eet/>Z`(hFCN ]Sa';LE>#qn5:!a#-WGAQt!r'BAFI:B'r>6nqngBVHlNK5Zf>9VQ9o\*Xi(1t4lJT p#YQ]1c37h`mP-8J ?qRg['1UY2!KB./E,`BP#Ca-RNbR5+#o,npPUNdCp]@0Yk\D1*X/+cog&LS9?O12P-:.9gk`)K#=SWI0]RV\Hi]-b\^N&F;tUQWBTY3"[94O!8mc`?__6,[ATkf-X"-h?Qs1hs\1&AP:d9R\!Q]Ul&r-NgC;&D'_ gdX%j hX[hk:p6khM#7'8s'/AfS1.;FFji7):shg-1?LcP\*0cVT^/g.4WU45eMOms'FX8+ihJ!\ip/>)Frb$pXtIYY;U.]q`XC8'->lm2?0l/_9d$1R#Q "MCPLgc9t M/hASnmMmK[nMXJ5-Usj5^I?Ut$1:O@FYsRm*V<@2W8EhOA,g_Cto"2b#p_"m[_^`Yr%O?g);KE,/C4+\;drM)$*$UZ)7_.:DCA+k2eAk!sB5[I@5m$Or_+:#^`M#L%Mlj&P$XtBA1Z>4S[rf) o;'?;E>+$k38#JNNke[RO*!XBKMq$RaMB%a#]FgtKLWndl3d"OF;/OTY'2a56Q.TpOnBT'c#52Po"N jpRV YaZd6\4/R0E/ZY8@G*epS7ja&_M4W&OI=UjQFmR:]kma"f_3CrNdepp6O_-k&+Vg4-A)H/d,@ZZ;41X]XB`;3))Af12R8d%nqj"9g"%XJiKUWM3'l`:-9<(cc8/OAUK,G[f^iOMoI>t.At&n[(+Q0@pq; l4ket*a10XhApT`(0H@Mtp:UP=5M<$SJFm%r!/J+2h4?:e36P[]54Ajm^#+*R*=eW19S[$&(psdMZqX.P5:'G5'@\-&NEk+(Ptk/t;b7O"'H<+Mg4*Kh7(c!nZNQ=;i_)3iE:gDgIl;a^f/l/Z!7j$;p16Z4rqp5]88j[[>1\?psffh;Yq6DBt7joW#+T0E$b:i]L?&"LR7`(N1cS^a57>O-!LOG^M'bH3VqY];-:dCetc4UIM`ciab,_Ek18dYU"g';'"HKbF ;>fLTPi7@sQ-&er``/-X5C/A.G%q:e/I(I]dWTV/BAj\HjVtZ>aO,gi#o=(;1D%tds3@\T;ZDC^qLV:Wl[N9i'=VWD!j9P0hBZmE>1dDqS][[ABO)H(%E:'R][551":,UD$*U^`lU&9WD=@eD!]R74X#qo']*FEO3tkId2eEb"=cea?@04l ME%QZ7oji'B/l`r+.F>9@/c@dh:W]E9T?e2S?W"i>l/F;f9jF9/do%]S1-9Y:sn[8B.!ss^bHB7[9>TQt_n7W]2f&IK3KZBLAR5M`-:SQG=Nm!^2O=oXjQmN**Bbg82=,?%1 ZRb;4:-tt1RM5T`%)5X6Yd'3`0c"UT$-$$ ipE;cs9ng;KA&- 2 p\0#/YI/D2S=p7qF%W8kD9.T&E>4[d_;s=(*H>p,ReVWnLW-U)X!.A.pI'=Zf*SapAW5/$+fak%QqgRL`_U"CA!@LAAfjE-Cj>A,`<?m+,,W3XOVQr[kTQHY>@1$PE:LSf!'FjLjR;;g%j?P0?LiC!fU[AY>TQnp6[*!Pf60],b_%DI/%`CqMgDp[?3;P`M#8U2BRAm_^PQ_8,cFB!O8*ng9o#^::F^AU_JTUH(IiNs3]a9V;01;<7Bf-WaN`)F^"Be0RQ7LX)oAFlTL9krLkY`V;_8qOj>k#1;Qg=@sNr)I&/gAgX lVbhF.FCEGo2ChEgGH0:&@TBik&Tb7[``d7T>L7-_%:Xf2n.ldtlj>@Bd= j&N[s[R@5cQA*o^WAB:%A=kbN?pS14eFM#Y3Ls[b](spXdn>7[1"(8XY91\g"8jdkQ_)P[FE`O9A?,!ZGs&l8>%1%6EMTA_qEqsEZcH!ic:.=[IP^7/q0"JXId2 8Hs+2AtK5l5ZW^%h8([?A38LIPT`PAshLUs,''dC.6i0j^l.'U%9Z!"YEal*$6s2(N$nM21&T')KNc];JP,K1AZ&HgQ5g0i;@Alof@02jOWXa(mdOktRImheaBTF"+_G9S$6RSn';FoDmm?QeSKHkA7.DfA]b.Fi1k1LBMXk'>K&Al..qA1daLmIQAgD =bl(WW rKQ^kg!0_HL08,_&coL3"L)8Zp(cm;K#J5-)#V*._78W_AR($ZKHP4-:fPm0@/k1!8^[BXSoQD!o:Yrn2"2T^"Jb9s=UDLX5W@Nr@'SmXd'1c'VspfP#7b4@btdUBJN3!^Ye@n\;)Sf#HeATK9mrVQ;='!-::"IJk[^1n2Akm>Gi,e,aIAZ783dI&Ns93`,i)Ml@%l^Z J-sqj"b*a$$9Wj?h)>a6(0a4@^a`NoF>EA2Z"%6O@'9%.2PaXIDk-MB^h`RTrFG"Ki-]4k,[2kB63/da"r,g)*cH;HC-daTZ_,Bk] W:? ?`,e2`=TCLJ@knRUkoM*i`_Ah9PKTTIatn#:pp0;T_kfn+$c?Mq\S$_^Yj/?fOK^&Q$-94\0iF%'8D/C*3@@XfcGZ;K]E*)T%llg]b^SLSt Vrdt4)Q>?k0SQQ6:Xeg@pm0]1>,TnkC s&LKP5n:EHp2")g='d@s)2;-Y(Ud!A-'AE4R dVZL>MT)q4<'9Ymfs*9?Q`d)b2H]Om:]r+Kn`gt"_>:)t7!GA;&6'h'-.\lr'erd(b?#9?9Yk?T%;AXE?=09Y[DSUh4)8HltINi0J#b]Bdt"k,Fb ]NBR2/8_AtKDN06M,(Q*0IVE:pG[%)2l@A`(R$%8frtGF^i!6c*[)*Mc%?+6q[0@Zq=V^]`#/U&BT_'6FD*mS,AHh["]`N(QVo'7Z-f,1_^s&)nG!,A4j53m`k,%Yl0i]A2S6"DHDUN_,kR.66#dN];A$\_ggOGpVsS"p9]cN)rL#C511GK*j9H(K(0dqSJ]Gdb5A!Gmn+hFB2]jA>'@8iscCUTqIJ@^Sk-GT'pR9<P_Wql2^,(O&'An3QidAhi-0VS=^@dbe%;!On(OYba(j[*dJ>5b16&<;>3DZ2G L0,]6V$0)Q(fK9o6g&439WHT?C/W&Mkc&&&7g2V/Kq"_LqJeGEJA,U%Z`^$eT reZ34p^FaPAKF>]3RJZ_,)>=r\E1 I-K)$b+ -@[&ZT,mc0b;C4A@T3,]Q97>AC% ZHN b"f8D *a(! YCXb+^Q8j4V6+*:<]j+De"ZeR(fL(/@Njn5'&JG`?@f.$AL%Ht-:iLUCa*hl17k([ZY\MB kDRh#JS]J.jt@S?LBh0SVG`AN.?!gqAH,4DjnOmK&iG#[P2X"H!fb(35A[cr$HLcY`cp^Sd_7N[]@o2i9,N9Z7:STafZ@E>,"oXL>W""!IsW`n'9%>O9 .]!-O``>qCK02AHnPOAYDK:f][ZX;^E.mF-#JpSNM45q;7Npc;JsgQVtD@dnT9n,SN4Z_8V3ML .Bd1brK:0]9[-'!?gqOl^$g9#he@F/#0AFi44-GFOmX;1Y:ot=40rm%G)rZAp*;A#$]bXcR)FL.ot!/ HGcOY6eboK>T;c`Q@YZ2)E95k0(Q]Qk2mG!lA;3=?"f+s>Z9gOJe:`%EA]IsP^bL%a0'Qns/V/oqN*X\A*SWV1 7H.;U)V,f?6l26J)'r9%S8DHKYBSA'6>d#Y5bHErPHIH)h ; dcmLG9=WNP^dV2+N;./c>/.'Yg,G!Z ^"c6S3H+AJWf =i\^@CX$IFJnC(,AkAGfY;jttXd;0K+,#j 74DomGDbk'5OeaYs;*0R0b]$N4L+#f"s?8$`t9;OG%Ya@kQfAANhdLr=qRH:2e"T)/b`Bjg(gD( 6Pc+^[&VdH@`B>"qJ8NAa]8A@t%qd>[l]RHQ]pZp2\In6]5?]l%j`&A)5r2IQM:;Y9rN+PP*lL`ZCP_@tq:r%T?B_$39l r\hehLm38iF,_7?jQ"=.\Hs^+nEs0Jp3[d.3mjc1]OH#`oM#1ikiAL`]8p&>Y>.AKBB4KGA2r%(Z0K1\QW7!X- =.BLhN=d3as/*B^#MY7W>5hH,55H1,tMY9]Cs?H4/6da 2JSJa/t.(Ms+LPPirD0MXP0!NF6 =`!+`A`RfU,&d3Q+lK`,e)6$IcpA]r0mMfncKc[1WetLAXiV7]U0AHB3/"nBr'kYZU_/3:joQ-*(OE.2,@L`K cM;WT3sF>(s3=-i`o!-XdtHROf@RQKdIh<+\b,GY!d$r.8ho5%KDtFok?`?bP6:T+D?(qj_=htP0r*[6B'WEt"m',f^<\`noMW!_e!c3Gq")i?spm/#Yp BAQ2jmc9G "]FA`L@8h2aSZ9X!Ym`fKQg%ViTALaF&-3%q/BE(s/%`A7q_lf8DJrfgT,'o_(dKBR7j=o'G2Y6"O`<-OCWTGRV/=f8HPB:d_/tg)@'" DjV?mI%[4fE^MtHE8eeH"h2pS./3#@Rt0%T"-"X'aLPgmk&1WC7^$e,Sq%Zm;%.+=c)2MMg2@k1JfBNFJO20-$D=@abC+kKf5`\-g9L:tll4(mq\6X9jH(?dUVK#t>9J]H0?EtAO&:BW_pV(mCX1qoP1&ArT[oU_NWphc14NNs60UO9]gbTH` >n!IH%IO*(FaeHm-ePb(>t'beip%>6(FHP-)+JGN`C>D4ffmfcYsWcmJXBpOVON4``0Q SHQG?@!cW/hoZ ']MH'^0T!5"(i)h]Y\(9FTfJV:4Q&ac[Z*f:,@(pL'T@0:ooO73t*S.S R?@3gc+=bcCM%M[$P:K<;o$J='rX9Sr h(fI^fR\'E/#][^@Y$OZBe;-88NUnS._L,N\$5cs atk#T3A$ffIU;''(A$%rrsBGD;)f.Ar(>3/\BQr\Tp@LX^_71-\)@q"5U+dG\m45Z[RWI,RY]=UE=nSh4\4*(F4K?&Y-XSFAP-irK]<">lYQ-?o.j_N5>#L:^aaA?%Vn8VQ3'@m*sF#2Cr^CNV!f"S_WMCICaMih:_?p]%MLTPB6C3o^&L!<13?gm_qY)o9;2hGRSJoD;Dt-#Yn#e;<1=OL7LD74Srmp5&UAq(t2;"bQ/\5n.@$kZ5VR*(Pd -Uq%T`9j[S4J@*g14fA-LLted[D.m7f?"#0olA3Q8%m4KIoI("&Ks,.d@5.m%7S.D*M"XSC<iUQRKUHa%e%8LWNS#]I6]](9""8pJL'd'ba\l%9Rcq%n^hZ6'=pF7^rYsoBnGcg_T+MFV<k0-h'*YjT[-#DfD/L`6gqp<4M^M?<`Dt9NU^!=UXV*Y7'P=jA.:-^ _hP5oYKAgO/-VA];+43=cTaOg"(G`@$6M-J*C2.jPo9)Z%IOq7K'5",U#XK(WTc:D*s0oSK%(pEl.Do3Qof+P9A"Gs &o-20FR_;G3Ab:KV!q>'JBX,2'^>->L`,,8odNI"\<&PEk%E99kZB'#\R:.bgbgUj5**>=NE ok7F-:0.&DXk1Y_h(3SI4ki"GTe@%(rc=t4>jk#o!@rTC97+bJtVnc^[*tVpW*6NIZC* ;kAf*))ghWh+T`47Y^6h?s<P*0ds(h*"8Cd$ ()W&_95S)U9>t\MZHTgTBZ01;3;TQIMbjC\PA]r0$D8Oj3>n=O ?N\)E e>a@\+AS77?%N1K[qjLVAgob#IUGIFa8lQ%tCBIYXCjf?iH.5]j5+*!k&DsG_E_H+Z"(PJ$+l'PRmA XO>5BpmN(MqiNP*A,@?9Wi44tbi4'0'W55LNmM2AZfU;DGU^l,g-XENS,rh"ZU$E3\=S&DAEm9r;iK^N-]cF?I>n*ZLbA`2<5[7KBDLZlA1r1%ls9R;oNZJ.9R,]eQCnhBnF)bUL&L.?RYSbFONNqAka]OVF*#biD75m(&]@k6d5%dNiCs#NN=e\=^itmKL*UX )q\j=hb'J=.s`QV2hFD1K r(oZ(lmdXR7kK9`j?MN7,ghZ`r0N:_>A Z#kS(V*C Y7bAeYGTpK%;tl6P!>Q1W!SKT\FS8hq4MV*:leK^H;N>pFkI0)F9K7MZ1Jpi8Mp2T\_(sjO!b-Eq2r1:[4%3V%gC)pmecS,cs0GP(/(l?X260AgGL9:&)hbAUX0q7Wl!Vk9$D3.X8#,COLJ^a"B.KbmT.*%eJLl'HM'i81@)>>qfq"HJ4IZ*e[&CF_FgnM]WT%;Y.H2br/ir>G-]="3TJ]/Z9&1i5a_DArr$d6ST?+ 606gF.trN;AQg?2TXfUmfNE0P*Tt&AGpK"*,,]\k':dVcTY:GPXXW=6\cf>C$F@-KJ$B6n2ZR6U tYkl-'1D\A<l=2E9TBINsjp1(&tsc>Z $"%O+e(QUcGiXAO8JtZ8 !K-O]NEbc&R*G)_:D^nfU7p->OA(Td05*?\`A#D1&$Z,L7 3Qh9i)b=L737;!*a8$%j?Snd3\tr>gd\5tXUWs$!aB*-67+&l*TL/`G;c:^\L j=pV5:[,pE`tKNIm:"r%`b&^61IJ)$2Af86;=AFkQ'4H<`L/S'X.3[?VXa7@WiOQl'oV?Eg"j;m4Zj@$][-.4Ak+3DqADc8+<9rZ+h/%:6+OQ=4-(^Om*s"6hnAW_3tb=?H5>"f5k$bD]a1ULOWdf7I$/j6YeaFq+5rrJXWkAGL!;Cq.P&KD@IJR1 ah[nI- kM"l5=bj 3O4F%P8s\M4T:#aZB 0"dgA.V3*9L[n s>F+RW35/TO<.5iX!P;X@OVeZC=p&]LO1P!aGRn\!MiYF>n`ORkFbOenKAD!FKg.RNAl2jiE t;,;,i#k]n;SD$c+1b9'j471C!/0I RFm?:h,Ac_Pl8orLp4&A@oUX65JFZ7,;?$ZF$c)!Li9Lh/bLr]gCRKA#U)ZiE>g?jIrAR-d^Jom7ON9Y?^kaokCpR'QhF8M86-4g<TF8\clNT =K?Y',qiqE&3F4,T VU8f`K57\j@!sO(Lbrm$c`GYK%Q$fn0P/,telXc->@[Bn!UB+l')=]A54'PjY3$-4870FO^0+/8_BDHd.2^4.`(/I.dOY98T0NA>)t^h;5*:+KJ-6#@`=B/t@hHR#p^m&k!;4K9B^4FMr &70R(ErANQ^7U 7E123;pZtT+72f69F>4;HDg`kAg<Pp0IBJU1]+cpM9Pl,Ae8X5Fo[Z9[r(hEd(>hLH@: slgm+_4Q@. =qXge<."NP!0A5]frD]s%/;TTUDfZ]*\p\c"HW$=&-#,MA_VE".&+o%3*P+O?E$oE>2o/&R.ce-ST6kE<U.G^PPZG#;,8:E?b<`3QWMa>!X6NOT5CtIc9D9\h&YbD%0WAPh@#3KK;UgB'XOp0SP9/6T"mA`>CaBeebX4eCKBWtOc"'HjS6[.*YMZ5'm'R)_88g?P.cEnRBb+C7q>Q@TVX]a-DfE,;Z4n[0ZV:TGQF4>cc\IeJAlhNJ3`m4A.4;fOtMI]E/1C,%>UrO,spXDX^7pZe/B5@='S7ChLD1DiY]U6"VJ3"pUPJC!`A"2Whb4]c:.]4B3"#O+Z*4*%aJ8BkP+7E/jDcH!naD+iDmS`3QS%OBM>Q'cZAaZ!a#Hh?A(=H%k!;]/:AnH5o&JrV8.sZ%c=S0)oA-lG[4_Y2TT/KW@:^gtt$eq?q]R?)ZEC`Y!^O&/k,I?A3:]<`2:As186Y0PPBfDm34gtctp$8@F;BVd(,4h4[QAY-tH!TA*nY []?mQMIe^R"jrNMqs*?KF$q*00tT.l7t0M9;S>]MOf=]62.RG`arrBH.`(ZP5&3POn%=,aSEW >Cb&Zq51r/^MqQeX!a4U`H2]$$4OhKag8jdpk-JALjcp8M^J7*ga7J0!jTBPa AfR1_1aD"4@CUe9) k#T(*3WG?j2%-m8$3>.A02XQ$(P3>IC7AL:kO$7kJ'pdWi]A-)tlA&3 9dh@ L-!oa0r%7fg4i<\TejfAKt?FVHV9b&3Kc;fmBi`TF9f'\Sqo-J%`F8,;-&i3=B+F+>qWglV;!\T52SeM0X^D7nYjm<@1i4]j/X2Sj[L[5-8]r*^h2_Ega6##!9Jpr`a%>+1RDg/9"G"@><97=!nW>cg,r=HP2j:8Z%bM,3)&^R+=dqhRmLgL*p%Qd4cDnTJA_\kT@E=_^t<3 TbBON/N4p+ohs=)8d0AT&[[GU6rQ)U=@AS3!O.:ae%$^a:eF$E-B*)NC+I]RMb(OP:DcGh$/kmKC^Fa*(aQUa%aIhe@fTj`SO3p2hf^cXp],Pr+?^N?qi7.+PdZ.Mc7gKP".^,^M^>)Tkg,15F*OZebWqLVtmjP_'tX "dJgUs^=('a99?t%3is^Xc=b?$+R.TVfX7LQ_4ZsSs* V<E%#6d69WI>:bQRrr<="DSFR;h[*=Aj4j:3:3:&n$LA'="tGLIqr>Ho4k0[/k;$_abW0=ne4`NlXo1!VN.sA'5'eZ&;%9kq)#s!IAfo(KD+?ds*nYSVcOrhn%PFM%hQ*Zh&ArDNHq3p7TS&Ans>Z:;@:a3:8-T#rQfUdad/nX&B/1%4SK\2H[]k(42sTnPa-om6ofNB52NMl('Wf\R;G!h^WjmtRS%`R's ?A^KUf<>E)aHs)mUo/U_-,1A(MS]C,0,3Hkk6QKWYOCBhMp"o.T/mi]3Xd8e9%296>X3>Kd):Fr41"T::Fg&<ht[WAFrshW4"bL+TmSsj."XRSW9gV:hBk&/'c.K_&G8tf.$o(W^'EjdR=m>k#S'JBX4p`d+5[V'T!rHTV!fbSRST$kr8^*s_4,n_HRXCOUb:Qh<:f.^A*6T@nb!eiPa$77Q;:-2lE=FC9"Qg<9>8API'1:-B=\_X=)8'UrRgU"'4>V7Jr9k+lPGT*tZ((i.OfYj_N\PPQHXA23G5pC6NgFAYJs0#+'Ha`1hVf/>td- ]8T[c:qm^IkKp1*!c1)m1lYmKj@V"GcI?^ss;ZJAk%SnNfbPPI^>t:Bh-BaWK.l>W!ChHrtKEZ>ee_\MC^\C6]<:C$]Aa=PnMq(l%LsV`b&A/?iCoX;oXsj2Eh-NEX_'"$p`1SsA+Y;@/U3R"4TmTtRS1PX2-N(p(tE%E[!f54H X:=RX]04.tMH>kd"_qmXao4"PhQN [)2E3X5^KFGUs^*6nbXPPB>`*m_X"bPRr_j09<9&MUXsHee&m=pR[d4; GIhr[^A-m5:MN 0BfKb"V.72m`$R[rbZAk)o r%KqQXP;kG6AS9oUk`rt#i\T4@'EhXWqDk)s2%VVKYrf]>lZf;4CrH&LMT-4_(AX"amL?UeerlB:f&+"ko?:K e4m2!=LI55i;jg,-;NXPU3gAhbO_7Ga$,1FG<)lKK27]2468]I9NKi>c"&B4E%Ga!qWcc>A0Rl\EtN!dkfkBM@.+dS^`+nEAiaE jP^7"k5do[g*R"eZ!NM1_oeq+?E95+SRZbZW#mq/-p#jL65sA[TfB+V_+8YpG%CjS/R=eX]F@hf-H8cARJP-s2/A'A[s%+% _d_roE_7!J] qm>F1&7,=@0c%0o6NGP%BA*Fc9@jmKL_"Y9PSG"'FJs#Ki+T'cSb2 8ZA?:kYUQ[UTY_Cl)%9.'YjB c%[-c0/h!S>fOFV`7pFcXEo$/.k^JA:XAPqg@\ ?tl A(;C,llcO%HbKGJiM7);(PK#*6"df'QK@7>%_ils n(J=\(=2mLPK4#@.k_RRKX8qAeoR%-'4(#cF!Aa9^kiF8gInAM@1J#cHN)D]eUSh%.U=4K#<:R;]ApDS!N/UAA[@KPPQG?j'-5HoMK"a"P+=6E\#a)\/'$XH:f9AK6lAPk=HH6)&a=,[L\[00iK8Jbgj-lqA2jX#fp^Vn+D"'fWg%pGM0L;eLW-]]k5a/fhh,#7`75hhR/a*L0;3pQ7P8$+le8YQ0$lGoObrc=N@fA`_m`^S-C-:e"!/GZ@"g2;(+*7AJ*K8E''4_Bh(K0;,)3, g't>enZq/"VbTGnJ.r`9Zm\P@MV2Pg6b82'$X5%C*ccs,o8>G'2Vnmrf%7- Y<^>TL#be(V*ALae<3r30r\^=a#^o!OA"@F9=CAgO^nUC+*_%b:VZ<0ka>XB#,t;4]S'Lf[3j)7,Yl=TrK KmJ1@%QebB.J7 ^F=g)"QP,LH>45bAF*l @Jh!ObUpj;;eH](mN#gAiYNW5VrcfCc6GV*aGnPh'S@0@0;K\it@r`lsn`hWXa!mQ"Km gtp-:^;>O-4kHE`*MrSq)F^0RI<8mBbo$=0e%;)YT&2+?(!jjaT=2Qh+nr=#078':9DA9m7 jH3gh5YM\]XBls%gibpM;bm(T)ResJ$LGs;W`!GNs7R387UL3@CoMX^,BaUT-Xaj'6$,30i/VlT08Ftl^R M>`ltK`/?.N,MLGN]?T:<Hl):)U/dG@X:Ap'k16(AM-KPd3]KQ%/=eGFLi`UUr\:?>A+JMa=C^?&(5GchU!AG]GlO<`(qinQg/2t7;E[Q4>8^(A[>$MNj4=/K;S53Kj1_[(7%aL$.t^XltDja#<0,.#b0lYG%$9SAALMIcSoa7Gl:`G#W)4\mH5"MH+WL7FF0EtR6K'.^0Qbbb6pkdB>]6/Fk#`MPG5BC,V6BfQA`gpEEs(*M?rl>-RI"'b=jEAtl9J5Fhr,BS?EN5#83F<").-s^i<G(pF/=BbrD.o;hgGmbSC"0Yog9B8i,??ddI#/FD(WZkI^?(G6,$2[nE?QF+THAUsc*SRE2QaA;Z&'d5QFW/F/K*HB]%VeNK6_'XQ>">GXVQC] 0cAL$p01/sK\ !gR23"/_nA g5\"'Q,(mW@hMd`;-S^A\d_d=PP2AP'VC48n=&[(jA\Y0DRiID>6$hAN@ M9=;=Do7=MipjH\DMefN/7Yt/h/e]AZr'6XQhPVL5b/.?Y;S6h-cMK`-Znal'^>.E>BSW"<*!)h]TgMVSBeV<-0X&olt*fk^3T1otA@N>Gb,Hm*"MY/%e5[j6g5PFUo+.qO$i_1=s8mf]I4dRSW:4da'CG%"H@m$<_cC>*#@V\k<CUit>TW6+6i1&Fqa5Kmd0LQH7[EV``MZnlDDoTjQfU[eXQ3RN=SF+pVc5o1Q:EH4gojn2$Eo&Mf3D._j(`fcM;'gQI>6Ec&qO%55jKt^'5AF=]$a".(A_Q(p_KhMeD(mJ2H)=gm$L"`ED1hb.FY`kR2>FcS6Wl4(7*=F9l,4`TKEB=(5Rr5"P ?h4$f.@p"gQO[C>n(gPR&l>gU/I;.PU1dF4DO?%^m?AM,aUCGaP@8_>ABJ>/jW)m4,'jUWTFga=LA9A6GnIr[*r9NDRPd,8\S%JV:b?8J"Af8(tf*6LS3^`_sh86/FZD0h'.OXjmoOOipn_5@6EhHgg3Em/k9Z>C< jP;[EN4iLRPa$\="`RLH/7NS?OA /kCX/:Kl6A[qZUrl]dgBfYB^WjFj[Ho&`9:s8a8ik/ ]d-=[6F[*>30 )c0"JQ&!n1pde8*2Ug?0"E>S_1+lL,eV_>16D%8iWW%?^\cbNC?hQ/mNla l;fbt_!NqG!!2rO\=pH  fs`.=XdqGr!AA)H7H0lsAhj;O[I*F^[T"Nj <,8'1F?U\': ;JB=E @L0B&&4E>k^=oC;(ARWB>RME.iU,nrF G_U-IM!MjZC:5h4?tfT_GFe??DS07>U0RJ(r6&RtPR]GSi ` L!aebX\<#;-L9ZbAR3f\cs0aXj=/I(57(P27:)?i,%[9WC##2I@l/MNB Tq4g^@PX"f1R3`)c(G?AWG9]UUE\G9&s&05dOAJt"nmF7I0rTe\U"eUm;H&]Nb*J ;k2?fLYAetX7.FH;qhPO34e;dq?_6 4W\pQ[-b0]q]f@8rSkAhb,[0)N3t\CM$%I]T@J&1McJ*QQbK_%:tH`2AAGo/nAN_Jms5N<P>f2Y0Qs3k`<9p5Lm/C1[N#OGK?42e(7Zg>J%"jT"LE]pJ&fMAA,Up+Jogd#?A+HI[8m75=C5/g.SpQC3bkVMlA-ne\9Z%^Mb:G_*P>s9*?l'NU_OTLIQ3lgp$`T-AhF?Q8W,]t;j?m^1"C0%L`]9l`WA%A?AEhEqagE]l*c6;AK7HBsZ!O ]!BSebksPB,p7T@Q>5CIsRh[:1Z-*(g,s\I8o;ZFbE[R)QO>&.1fXW;XUG#7,ibDMQh$QA#,cO\pa&G]c*"2!rZ//k0Z':#"mt&!)[(./8VSA\X8%teD@itpI6 8lQ/1^_]a cKtH6o%*C=AOC*G+Zh,7K,);9iVc?bm:VAHT?/_*U\mAfAm)oGOA2q!6!QJi4"`hsjR36p4K+LA'pt[J;1tEZTs!h\V>G<,pVpA0B0"D&ckk,QCRX]K2]*BU>8![4U:o7K#F3$H4mI"t?r=%3rj7_I._+CBYa]V_"% n%9cN\)+FH2^cl3mE\=`)OLeEKs0AFIFBlGtd> kT`s4Ql9A@m54)'DpL5J:Qc3:gK/`>1AfWHcA(+6e>P&]9'/0U`(NpFd)A$MIFPM'ansaARG*TH$dHp@@j$&T+]A75M7)+gbBDI]ACmr"E8kDqA$JqXpEtH3Va?QOY&!A_=/=7p.&cG5_K8Z?+H$rdV5p?3ATY+.ea+k[8-Q;]!V2\AAc5g24:,^MW?hc= 7tAeqM='\hjSp.?p:O2BF8$TkH>#=6:Ddd9,RDqm61SIQ(+_d4">YB9et:P[4s>6>ZYeL*E415.\=PJ;eWJ+kJ3':`s^H,/7:iY1=Ek5UK^8CnXV[@^ dEACT^^;0^H\GUFTa@oRb-LEcKo33\Zl]0*`lWW4:"SbaDkO5)"+3X_,_!J5c*Qfb%X#Va^6oV_/V^[%IVlYI>r)@,*D%dY;U+B[`\L&J/XBhMg9CrTl7FrJBJ_$sE**8i2ae:E68aGQVX+Om^q\GM6q2F[m[[B6'h"lQ.Xejf,5`H%[Rh Dhg59IPkQg[@UG6l->.YJ0PchkF.jU69ia*L]NBA^MLliPJO*UI&AZNDf%qX?5UXW_1:AOFkC$I$Q6/"RMZ?' K;#b[7IZA:;)'mn9oAc'1"'QM?#!IfT!tq+<\A-51sS^s97deem-.JT]q)7S`(N]6,,j#8G8TCC/M6'tjhLIs!N?7k`F5jsXQ/^YV<1l,#![c`mT6F',B4 ZRb:=m>!Fq;jfLX:;9%tQI]&NDA7U1a8k=)"AY5I-tPH#$tCOEC,->'se."W%R"\hAiVcnMr[[;,RP8#+g;.1TYIEK`&NRt^MoF7f+?>8`k 4Vckq,7.AJ*%U5nZ&1<8B6d 7U#aK^NeRQbBDWDhSD!?q ;AH0#[b/M$0Stjd?p[*rM-PR8I=rT,U(/E;gP/\@Q$ZO.ec:)bfK^189OANN'iYO=PEe!99Gek=2BAq\ctHAfK"A9B/Qr#"=YSY$N$;OE"Q*Hs<;N_OkJ>U:(BSS[NALge&RO5^]XqCJqGoq5MX)b,eBV,6i]Q)a.GcMpK#E8ZEALQj`VT"nA_VCjINfki8V1#KOMYVs@6*$nt". s^KA(4B-A%>H]`[Z732#CRNFEZX0*XmWcr`V$/#DNc(a. N 9NY&-i!D&]ET:/pB1AFsBQZ0>.U!7f4pAn_rgO8VDWY7ThT)H&3C5:T%@AqIK50Bn2:f' oG]8^$Q7VQ^N=TQPrEm)^IIbDB\oA;AXk&F;*rPl=CM6-5fB(ZJ>#l[+(=0[HXjC='iaOHfO"^BFjN7YB'o[,p:Ei%HM7&kZp9"403BHU#?GPN m+r\2j`,T*XL-*d LabS7 Ke. AtPe+9h5A:rBbLDU&MYk,Qg.V;l30V@jM(ZsZ1.Ic2A[oYE/Hl`8'1s.AOC$* 0q(^1At6LA.7Pb1*'ElHDN"CZknM&pK@+MG;2r8SCWF3g'YRb"!CcY!+$rc]Fs3W,jO'dFE_7Bs;W2`SK&qLYo=?N<A%<VD!nAo[Hj?bAf_A*Af*PpIfE4Qo*9RH)RKTI-gdD6/Rl:G&gGG.\t"DeGGm`.7oJ?#?3>8q8<`CE$>p0h0pk&E8!17`N7?XmSEZ4jA[5]&99$PaNUH(-biCJc.IGrEP*0"Y;J%/Vm*A`mmT2KN)iS%BG 64Qk?@P/a-Oa6f5@0W4*I>"eM`q>X)_-L[\mmm9Zqbd+#rYi&%@\doT:s^nMTa5]].d?< _,r"D(E5HYdk4GdYYbN]h%QZDi7]oc+l&b`Ld>o;]40]V"V.FtPF`(E`nE.]c)=NfAN0<&+cRhi?>[e1/i9m4=RM&<;GW:VYO,$8gb.M;4>_7<+DM+.9/C_[F`DC8iQ@p;:ji-n94iBF-D8o'pO%9%ANb>4($nEgT@k2bGKXUNp=V"Y!ZKfPr3BjT&cOLLA!/Ne`o^+W02Hl3J]_9q)AEqE)MdYf;1tQoA#N`jb"*A2FiY!-E#Y(OArJI+8?#$?Jre6gmP=R#bc>m"/[U0N+l# k.5IN%FrnJ`qIerjU(:D/\ZF5l4`3qYppHj?q9A9M rVrM5M!ng9>Z .$^2Fs Y:tr/AgR_]^6^FRi+8#kss[PBAcW#KGe@m8?PVRq1A#nkFNiT`_QfJtM'M-sBDdDS*D9b57SBX/e4hR+b45<5<+X6i22k3LP`.X1:gOVH>#mjAcq-jU&f$30$II3Jpl76qKf42O7t,s_%NRVQhmQ2Zfh/?bX!S+f6:A2O1OLM4-o+KJrA1d>2B*\F@o2g25^LYfP>r,!gB.DbCs>dfAn?p:LZ2V2o+&$XaGhB&MBZhZUH)oXgD6:pn*(0j6K=rH;6??\Qn7Qd-XmqlA.$YE]`54cOA3(["9-*\#t&jd,6eaDA6"D,\2D8"mCM9$S*!YB8A! \<1P9MVXgVjp$V*ELGEY*>2%EXTrDO]^.9m:mmh^nV#,o5)$2.!["@N5PF`:(ljL[^ES^"1V5g,*%\UfYJAlssgLlT-+b%kqJ hifHUKKTc1`hB&3@Xf/Sj;((5HM%j hd-i>k\4(d\@8t1gY!Q2SF>t*O&Z[?QYdoI_K%NG3"-dLTco&-,A\LY9s8SX(K_S86Q[I E0*;!HU-)Nr* d1Dhll_G_O[c6^"3U_6^`O#]8.6lF[1AZ=8&lF-TSp9N^9Cm'rR_dfblH%KZlFl!Q1ZM]`oBi*YA>"dJSO2AU[5/R+`-QI+cl(08btkfVY^$)TL'7W`#,[*Xg%.=sgDW:D-$!97NarD.k"Ya@XWOA:Bjb<B%6I4p7cb6q(*D]0+\Fk%g-2Jfif1pkcs(!ahc.+EQE_e"?=H<`[Tk<ts^=K4bX;5lMB.D%jIGc6AHBc\gUP#:f!89g-%ato` h>TT;Ne>bo=?cSkQ/ n^lSUMn6k^+;@]n`0&"V9tqlOi>9ZCjNr#bof6(12\^@fEqP?F3U!W;6D%WUd[>.SQN@,*j:g;g.hL==7YMI4$[g\8 cW<.:8gQgI$n$=+kT F 0`"e+-mp9Nk52!"srFN-hh9ft2 =[q7YDdknBcb(_??0o] K\+35LFQ+SKUl*f^8G`b1 R4NKb\4Rfj4HN8V7>"Fp-9t`<R*H-*O^2QTEh6ScZ#oB AnS(7Y/40ohoYI`+!Q[2(s5aSOOQ;0gA5-M_SEF=0O/4FE\!C")m:SC"]@^6=%6,BPGNM2mc'Qf\8<=.sKAM)Cqp="[(7`U(QL*+JjMnVo-d-J"'0,gWsff6[3/<;=j@^Sp? 47p3P<&HU;2G0;G[QhJV.(m8Bi!DA&GXQdZ4>kr9$Q?+%4ho=WMFE&B4Q5=AT6Yr9%?[4]&6<elV0,,p[GMo.1o(gj#>W>]m6g:`_DC`B3!kD\-/FO_5/iI+5Ls[p2A_b,8g_aXt^g7ST!"U\a&AfN=UF CG^X7I^5/VL&T7pD]A:E0PQg;0R\Hg m&jW:= ;tQ.A6=F=%:02SI"9 ^EZg11\e0=2eF^/ZSZ#h&bje9%.H4q@'p4*YrB4+ .ZbA-CdN\30^(JNk6cKJ\Y"EKH+STS;Z:UVSA1mtd MXd>*hfa'(A]?p3'?ZNC4p82 fn*eZLC8Kp:)0@mIj2)";9SeqtBB^+42=Nd3Gr^Vns3<-"+WF%7$ge94WS"+%[;^#8Ug%R&spIBgUX/HJ(^K@BJTeFYGI:jdSNX1Qo&a.OgOt70s])D ?S`\<#-[S[W"aQkA0m,FaN+4:_%F +m)a%BHkXB@Y61/0 YsS2>.NlnYZm3&n:rQEVZ'h<4^/M[@$qaXM#X(O7j/_iekr,*7M#><$o:f-3D:mUO2gTK82A5,a.IP&ScI+tIdM$)E%T]WnEooPL&$JqoPY fb^D^&.?\.c:_tm0AE+MB_B.'pnltbInSb[.o8!2)I(XA3_+a?#DA4o[k7]2%,B]I['0eoZ]t,,sXd?D+AGN@-9c/2Q9'p(e:,hh=5JZjZMg6\_.n$#mr9f[-A^kY%@s(@Z [8m24'C!,q)=9*Wk$,,,W:#\?HmrlG];sRATTY!29P`MR3B0Di&b+_h_,jrA0:E54>js>bs%8).Al9_(?6Zn)JLa]S9JIApaomLeo0$sDEe0V0,WVe(WR>Gb5#^J$n+7_c=V$:l([4G*eX=2b3pJ<*j.l='>A5OhP\;D1nY%91q)!>*^J0G&1&k#*3Spm^]3r.rHZEki),`@4CI,2>mJ"QXYP&k^nI4K8:G/2Lc!36TC$%:0 AAgP_D']j.)sQ =80_XNqYt?E#S59#CR`B]rG';Q#tj^LJi'SQ&od9WnN]CrNf&h?n1lMD[nHA>3FV%=Jrh\kj'$&$"YrQ0k$2I:8#.!07cL1#Y8a)K[r:eAXSOJK/aW8WAd8Xd>hWLfrDk_BPN XW44E]h:#ai*4)k%*638_nj^;grgpV&H%"4Wti8lG"J@>J+M)#hdtZ0E7^?7`PacX48dPYEk<#TPH)$_Q#,d8qi`IA$!ZmYB/rXIS];mFSI6VUAr`om't&oa2g`th1F]?4\G,o%>t3b:4UgqbtAqHbS$#cD8I8k([]Me3Gm@)Fq\H"$V(s1h?>_^Vc;a9]kg+5\)^+MjVj07]=JY6mlk9qZ_:g+Jre%+T fQ.cJ9TK%YG,71(:kV74(Yir%i$,`g#?sM2Q1a<]VZ07FX/A=qb[?1KH!\nSq:kLTXVBmW?WY"c])sTX<\6rGL3FiRU3.sB<60=/,h's3N=>qs5Jit;O?nEam,7757l=6LA-.mGbk3:q]=#oC8S_$c>mGLEio1K^'/h1.=9pBB!9a(-&VgPglM A8c14j1O/'8M\M3UoBUccC8roZbLOep$ND=bjQ(2%.1C"M$L?m$3W\n6K4&7S!g !4,`pEJ4F5jAY$E),dU&jUiiC4><&!rs<)#?JoWcc6IY0qtb9%NF\/p89FWK>WH.Jq&HTdgddl3*T%N]0p !;"2GWLf[O9KWhs(h@Ac[oj5t@$P2M.:A>PfFi;3*Pq?%MX0Lt)hLh5 N?D!si%hn_Btp2Qagn>T\hU4gbMiqO1.'gaJ"ioTbn_T+M%hgGPmU$<0Q*4rnt3bqR3)d3kTnN0m\;a^W<#@MtdscIR'HZjl)01*Zae(Viob5FC?O[#UKK^Z']$CjtT8B[O/p)h4Jm`k=2c*B=R$6EX*8I*[jgd,>)sp:AT\fAZL?G7!fBimJ6+:O(j/4o+CX A")c4B:8=Qk1V-WJ.kDOYK8th[#Rmk&=f4c_f-R#K*?U9%,pNKDeL+SHmbcL(6]Ti<S4;i5NKcJ2&lm$C%?QgT141 iPob=k&RYraoEj [n_gdRDGnc^qW2srXg"s")HY AAD_97N+XYql<$@6]1?Ksb@$='?!RMK;IAHH_k R`lWbJP\B;XAH%gWptjHrN['tc6h!$b@ l,?-JU3M\WNQ/M\Z.k"c3m#R@]gP ,WAa/Aj=JCg2egdf cA`_K1nrn40JM+[OFk:2.3J5A<71USti8Hg*%TtdXPj4"RH9m]K?kR<pcZtGHA8ID/I8fRBQj]kB&\mU25<"DTp#G.1N?54i4bX;(kH17'r[7]VUrNnnN! H$&;>I#oD*&2EKF5.44;Y1j0[08Mp[n$+/eg;Xs\sfm\YU+.XcP>?sGfKd3QqC\JRS]ndgoko$'JYSq_/QDfAQK?9fT2BW83L*1E8Hf%"@(]Q Q)2=g47THjh*p(_#o29^/g7`/'==eRQ0[Af0`?&^D]DM\!?:+J X2bG>AiJL#kjd0_1"IB%)P'5o2Vb!s`6ASOobS=GadjR1q:MJAAdtIV:lL8eXF4K;^\iS;f>5fF!TD.tGSJo9qp,]!)YsSn3VsiUtqRq!01`QG he7)E-sBRXgM67Y%rACGSM1EXn\R7$7I__*kr0A8"3F?17i%4?@(lQNCm)acGB;G3I+i3rO)+2"T`J>A8I_B=*Q2:Qk-mdJL^3]8Fj0t0COl^Ln )YtroDj?J_cJ*%".F=Wh$=tO-9p#="/Hr3n<`b)03;iOXGGdDNAEFA/s40;X@9jrk4=Y>7^V4s4e/]-2%cL`/%H.#C/66h0aNi8W+6BPLi![ n_OcGFibhZ1c=sO^BRO8JrpE8n\15]l3;9Ra?;2X;c=dTZAkjJ`sc@SIAkoBIl$QaJS&,o"B#)(ec*[ehJ&?ksoSn0RGC#ad\@WCe,&pDS0fmJ`KE.iod_8cQYgO6p'-G4?"\-5`_bjs2V)t)3-Cf:SqBh+r_Sl[8FJ+sl:NIOL*E)/P0 9\H)Z<$c+2fk,<)$+=5UK 3_>]QWK,b3X_k9EI2Zn1.OAJ_+Kjc:.>iLGEUFV#U;DX";n!SG16@3fcP?[6JMlPs"-j0J/:i+1m":VsTss7E-M\Q(VR!;R3#SHSZl%JM Y[@,-(n /;"h]WIIPk+ UMD1P]gobmSKsdM.J4&#P3M9:ErT8%A/A+><`oO<"0=LK;c2Md""n]o_TbOoESkPN>Fr1PdB1j\?5*.V,)RAJWW`@csFaSWE>cT^PO3EL(=K%]=3ld;$fISk^0@40)o,P"W__$Z&Mhg6=.RDj?hB`''9""+8jeI5,O:s4.[ODpEbr7cL8YA#*0l[0orYp?I]ld!98YXkL)XQTDp:?Q"b<(gY-L*I#f,]4l_PO$&o29Jh3)5Bo^FLs`mbH[F@kNNAnIR:aR.E7 !2U9\1RiE+ml!J?ZTWK88Y=gAoqE$[iG^2&#SPp!+_)iRrjUBm&`!e@]b.d^iP2eiVIQgQSWJa]2Ik^mQMPJDO?q?7"ONnK*4$n*jG"/pK*bUBHWoM#\YQ1D1a[t3_s8N"$[!)'ifH Z.DAaiX7e_Ub`\l2a!Jnk0'!Tl]1OpfsO]jdcX?PbXMN4#_DE=,V<]kWX\ba6#V:GRH,*>BYKS!0ome=EtQ^Q^#[kW]&%e5bkeSY:p&'=J+EW=iRQl%3# Ar36ir:$M0tNsm3O;i0LSj,@JcK@KQ5F$#?0;p N817&,m^s7aMrdbsCph_d\pEqLjrJ$\73G`Z_janham:U)L\f1O;^-= rS0pMF57Y-fXA$,-rp01<PLIpiQ;h``1rlTF.)t#Cf8*:Nb<#kTYfM..W&r<`pa>>)B?%3H`VmpcV^>TXRi9]mbnb5Z7mR=H_CbK[:aAbaNpJ2n\M40n>nOe' XG/Wk!-'+MU"d-:?kQYh0it<#n):+ Q+km?m1kCs,^Ui2\WlA*#ODMPfKHEG]("XQR)?Ohc4YPr?t?_>aP>TFgo)c>`Q;jokC1t=Qq%#&=\6kp/sA8+"MrD>apNL%`Y@; ZLsPb4_"FkgoQ8*kNfU(l[8$= "er0G1Fd'B:AZfAlo$@$O\Gmnjm$P$=f.Y5Cep(jc1\:5@?9pnn9MmqSoN&WQ.L!5FsR 3Wa#E!7_fD+mq?OK%#=JUaH0)BE&;]Bs780&ptA YMLt_ptb\8f)/AM of6QC?#hmUEem4MR"IE]0:CT]s5o[OZ$soO!:7I+!LAeCGH&?00pMA/Et)ip8&[%@Pa&^?a'F,*DEe:=i9)UlD] OH@+55;U_%VAPCQkVGk5;7' +4^W.=OP2SEB@?(.Bk)ii:+&^LB9cKgj8Btg8b@=B5K5idP;n%C;N)*:^'H_9aHLmU":r&d Ff_OWB5/g;M4L@X:D/2JNE0dAj"Ceg-WQ]*7I:D?BW+#?_FoSUs*9hCUWe`lK9P^fP KGGI%)"sNAQG-Xr:opbQ7IO3^#GY\Xs@+:0qKBI2+isSbG+W7O8dm%7hbllcY sA(d]Q:io--%h*4Ge$cAgr`6bh0Z8siL`>Kb=BO_*&ld;k%B+5d@AlW_DBI" <':R#Qci-7Mis#?=D#9S5^jn]EHXgp*H_HALM4!&L)N.IKDrXkQbNTYV)LaJot?O6htE%^OE+mIrGUKKGXL:R7Ji:g\UT(*dMpVf\:a0co7H2"6qUnb0o=.B3rI:@pKXMA+_UHaMp^>*>Rmt9m]La!GGAP%0,"%MEF\JXr<%n^OH!c_BdM?NOq[DKqdBL_WC'$D`\qa["]D'c_[AB9Q\AO]c4ad7P-_U"paLAQ#L"_"\-U5b4HnsjOsV8ARl4fi&q=q.(JO:iVZ!8sle$0D&_Y'dG/oO>\R>t4-?kUmH2- =N(;="ShBU9hGEVK P'b/T4-9:`'`cT2'_jTU(,)`p"=@)8"qg4C2hh"A*'3nJJ0]V*89-4t[SPOrkbN?KEJ&#4k3pUV=irI&8gAt]`4iM`r>A`3LiIA'E`'V<^!3mRn$sA*Ci.ahto%Nd8rn*gast/>8)GANspk69PoA5G&>;:9!,SO"0OMa8r`Vbl9B+M>!>1!f"+:9-ctYqdg1fW0d(_#/te4N/b%*DZ%b1OU9sr)G9Z9eGT*aMKiTGY65&8*N35siCZ=:W1GRK7HmAXCUF*_`S4g 6Y43V>rf:rAEV<0[/,UZ\q5?E20A_OZ25!9T!@5 lm4S"[NjK lC:[(P?V/if]#;Ie^k7gdO$mTDH.m4[5>YIi$hgA#*!]k\rO1U5"J`$N1''Y(Kjdj>Za8.12gsSMk)XY99k8_f1GYUFfn!--Z'0I$hLUKQA_t@W@Un%C;NrqX;@%M"DZ(ZV3UB'B<#Y@,$.OZaKAsmQb]^Qep+OCC:Tj-.W?P`Naoo\W&9T2IL$BH\*W_%Oo:G=Jlr:fiW+S^PhWmSog;i&lO0A09jhl69Fb_,Ghn5TP^4Uh$i"%;Fa)P;>TPj;W#r\%=:H\q`*A)/EZ=eZ Y?'E75_`*pL6)H6#ed&3\r:Ug1t*E eT-_$IOsA8!#$b5m$(O$bO$(6kWG@\Y5jl4R-98lt\Y\[tA)IJ a`ALi%)Q*%j,!tWYi3[oSc+HO6oZ>;a>BH&[@=kh(g)?1%s36gf2;7DcC\9)n/([6BQIOB8UFV;K2Ad%8E+6MgNeCff4G3?cFN?-_joN,$<=X+m%YsA;OU8%?/.Ub$fFtQ:(AN9m70K2XEL%[XA-L0Q)>4(OIWAp]qO[cqL>N9&X&qk]]&)?r&UGZPQfj4["I,1Z#QPq\p%_J 2b'nn@p[<1M9K@Tc!<3D,ESNOYoK<+gV\<(ADKc#Z+:MJs8hj_=ae/2m5S5.9<#$hbTNo"^G6=]e&2J3F]$=hS;\Q"]Akt4hj+MlcfdCWL64MR@-^oj"HY=,FeRtbD\[S0P:fo 0R3O t"*#k#&aq.5bbOf8Lfq\f^=[6AN)&oXctr\mNAJ.dt\F7a>GV pnj2+.Br\&:0:_S+Xr7IQ`bU?Vf[:asH.!W6`<_(?BUIGe014HDKZnIDsY/K6`hq1jA["gY^DH02R7#cXmWYh!s^_ A?@E44Z.cEr*b;cgY4.FRT%28's"b/@6,7-c1.kHnb2$ZjHd'F#E-ir?g/Zf\_#AdeSl#0YD4C##4Gj>$D#dbF9;n/Q)a&cNlM;]&=Yk6k(DQk(=4@'RNh+=*e+kj1AcpC%N8=r2;G+<So 63NJON+Q*aX-+)PL!0%k(:j@.5n(/)2o][O]45X8-Ai_NQISKY$(&r!3:5MM6e"8tED@6FADKQP+JB!oFsAZ@D"39`glmmmR:UW@'8"[QH/g4tr'Uep[+Hg$l*,8,ZLn)s#I(3WPLa.1j(3\_DKW!\BIj#+1N[GAk'KZl0f#(cc=)?9Xc^FG*h[516XRZ3-bpie-0>$=9,4J$0XL!6D0)'Ob"dgmP[20BtQp>aB7D+-B\%4P%\_9Uc:bimEB4od&b!@7k@V\UXltEis6.R,&'; U(]P>&XCp-;XQ\-cU5]9&n)qKZpfC0jEA^++9MA@%LEqS/7Es`Jco=Kf@,Xi.4_p-j+=5eqP\C#qp'rKebkWK6ij!b?V=4-dr#dgXF`9qYWA.nsn)Cf1/0Ag;VC<m6E*i )_)+X:Er\=dg$;L8m +WECs%3=O[+hH'h"Q>>e>E%m27a1"Q.#ng['MR+o;03mp_%#9QlAGKak/A/"Cf+5,Ic)+!*IA,h&jG9(A8"[YMVMCO6m)? V/hN]_c1BkFTF3Sso7pGQ19;m>iCqXEr8:Z@6!eiepA.8K^h2_?Q5@r_8H.5)*d_gH;41/__#gnT8%KE+dqqV cpKtJIF C9^Maq*,]P=Ct/Z-c&E^;M%rlA1"t8Ji42gR\c*EoR)J9.6?e3]_^G+K$:)[6!Rn>9\;O7(`8)jBj[+4>AH*Ei@fUD^A;gbla\d7MaQtH#Q"`qF:"04oiKV=^Q?PEI%9eq$7"-2pMH3<\X5L5LfhiojbbZWd?#7m4VESC&=K=5,6Zje@e(58Tl?mmh;Y)T%EPk1r/`H4j%.\p0s%X!Lp2m:L$7KO:B4F/qi0[Wp!O_lO$^*k-lY@QfIDV)sWY*5aD.&ctt)=l-s-l4KTHGR]FM?g?P3s"o2[lh[/Y_!K3gIUTiKfQ5^!pX`md#$hL*/S3=hVT/B(P^%8&l7l"'hprAqWCl]c[O=.2#8oJc#A4]F:%\_0K,>1MUd4=;I9k2/Dg.Fo3AJ\q"JZs%XdL7UXGPNmSO![L7acm_XG3cLP886lr]p0N]dI99IKZDEHU9:oMAj&Q/NH+3,28S`g<>RDo\CtZsGaF.m&d,H>*aA`l/.q6d3T3[r(Zi_EoVf?q"UfN\;S7n,Fm4es"OkbE3X71]T tMn(/iQEP>EBM'M@8pa2f`>@VODBO&66T>.3F;^2P?7B%!V%R3#1n$>a,PC5.s'me%T$igaenhZ/';-o&YA+7g]'?9R0 HP)q`g&.N"$%3a0d^B01.p*oAV*A#_9D2iY.Y:n#kT7N?XMp%6(HC@??ABt^H$%ABY(nZ!<"'Y#!$qC9>mr9/3fdl,8rl[ rD_fBHJ8?oKsd\3hbU7*dB7g:RHIg5lO(/Q?m1&Pjh#B_^i?ZC!3+W6O/PE$ZKKbnVHed4A9aePnRZ4_X02CShsUb`4W7CK4iB0,!2iE2(1 gHgQ(JAAn25(1T/g8d*I+*lY5YG?:.0j[5iUAjmA5>\U"&Y%>A47N8,M\)4B(iobO%XGHK^Sp$:o,BtCTsOp?%cnFK4Z'D-f'4&g;5r>GB1)HApnC?DOCYj*eF]N]1Grg[3+LTKZEj*3S,d]MUsrX+U>EEDJ"%K8lPT\hWM\VDa# 2m&VY&SMB)L2Ot0>2P)Mt-j,UYn"ei>WE%g30n*I@@Y@L.P/'&t">8Cp1',b4*h0pXQ-TQ[_!m>P&>H,Z8V;-[OMTS.:O\+0ipF%P3m]#k?%IJADme'c<9Li(0rHN76C&pg1kA7!G-,.+83dAE*MN1e57FCNkkN0Y"J69C\k_88)+NC`Al_o[G?XQ1VAiMS!0.]*39J&P^+:D"4VUN)A\Fg-0TpC6j))C2\>;/gP%;C_%NTk^Q^2EJ7Pod8Ia/758r)aF!V'i%Kb)MGGg-Zd#.HHc6^h/^2nE #WQDEKkJmP/7AE'pT?RMRN(>?jId//^M8\D5A-rDDNqn9m=Ok^%CSZ1V^6SZ<9=Wa?B_Q9>lJ#isoZ5-aS-BOdILmhWf*cih9fqn4n)/9V-le Uo-'=@Y%>p1qcQPPM63TP^nQ iZpQM;6kfIl&o[6_MWA$I3*V&nS.tt',OLKtnrCS7Lf.'p Gb1W3RJ[V]7^e8UV_T)_d\/d f+`a6t&dTjV,AC*c1E\[f(FM?B4[3IAWIH]=K;n&rK5_Ts7.T->+;2QEL^^Of`[mY3\Gmo)kRD?`hFU:XkOL."K:a)<-qK+e3^`32^7^Ah>-V.?]07A&m['DG7SslHD97<>@rPA^$fE;st ;UK1]8)<,qSAOS(jtr!sh&0MC0Bp8:dMq)7d<G;mJ&to"t"g;%)M'2dPe!)*2^mE-^AZK#Q&d!.R(LJW.^Q43d9e[O(^-G$oJAJL2%^4p>7tAO< &$=)]3r"#,XiA8T49/[C5?md_+Z9do<;Lb8s&4U5_PaJtN.,jVn^P$)<'q8QE.8V=r90QcNm@q%\kAIN!E^kCF*B0+'qMf'2>Ah(/^IkHc]fa"`JAS^$$fRX&o813E;hm'U-CS?LR54dTU82 %'^_MsNOMghCH'tQci%$WPfA,Tjkob\\,5=qAQ#&*#,h`.jDlqi&qXS#e%94D_Tfl&^R=:0he\FO!!ZLX!=d&,8oK64Ab*rT=9IQ.lHJ-gPb\-K'njG7W$`moQnl'UsIlA7Y>h3[$.50@m\UFFAbKPekPsUg2?A0*@-cRT=mP7TDER0\1gj+WAQ`i\Ts3Z*c1?;jqQ"CQ?^L4=;./Wdf[`cEsFdr6=0QD a18&gs"AW7"nh$AH08?M:NkAGRYL=q_6".6[2Q14nKtMpP'C2I^8/OR!JfrU+'#q[*O3M4L986/%E< Ao8'5X8 O[&@L._>$ZYe1PPY9-7C2# =YUqm+;/5p2_Ann]N-lL*l:tX6AjBiDc`e%!g4;SNaV)>99N!?(KPQ0Q:,]qL>;,.`EUo<&a$=PpGhXOm)t _&;8#HfSRMR? />clW,HkdXYVdjr`:9k=<[WZ7EJ^2l$\=`lM%+_bAnd[?9>jn_n8RL6kpI=kCj6Qg_!6$;,27AAe#bV>$3gXJXD`>G&VB$#H9A lhGF-[4.2?-+;VV02.1c%2Ki3;W[I2>qa0J4WM`K$;[X73`flB,t;e6GRh)NXkqRt*Z>f$fN%_o&6T@0QjL+8R1O)m?!>YI^K3tWc95Y\;5S*9?Qj>]h._Zs^EQTJk;A?YA^Q,c81pA2Kb C<*dEQ@PRtlj\A,l>W>GBA^=D/<9jZLV8pB^Qe8S#BiklO0EQdM]Y8Pq1^M1;rmMHLUP\$ Xbodoa%^'9XkE;MmRtT;!W/e/;`^&')H.sXQBQ*d%EKgop`o!(mi.EsCk0+lONOnlM+8?W't^k)L\==d=l[P5GYAqgPS7TX^C2B:p8\6B9sZQh?j7jrTk[q@!$o/G&n@5E>^7&%A=-h_Fpm&`\/)3?GSTBWjA/6W9p3bf5Pm)Wj 2M>5K('Y.V"rYkNNDVr?!G;qES[Q7)&_te dYVBJL^LUrQl"25['"`GQ[[k2>I02O^@0sOtNq#Y1:T__V('?=WI_0&TOOBe8f\Qn42^n)?8-YH7DEUq;lLLZoUh@ih'Og:-A"WAK6S8,'/[5/B TlH,%,dO@; A61b85dp[a*F-70:9d`pih`]V:_XcH\P)t k67:f)85Yh6C,pXq>#aC61*5r(agq4K=(,2btc 3CVe:>tKp&mp_;<8KCoG-I1-MgYfDArQRN@1`ds50@g_b:M\!?(4U7AHQ3'LU\=l?CG$-,VU\ii_oUnOGSY;f%[mFB]G+e&q/P*V]h!abF`R?;DLen/K;&#e/@V>qZ=cK0ja4KAZ&WlmdCDeV)BA[Z?=4SmqV&lC\%g/6kR!!H)'k<(Sl33W')p_5ko_,=q&nS7J7F.U[Phh+4f I$C'6FNtAn[@-&p"Lp(!q(r1FJYc$Zg!9FE.e0JnY"blEYo;r:'Asf(P63)8]7@!o &"?dVC\$n8@^N4GVL K6!:'E(GH E8#okq*n7>,kD%arjH:jgt@p_&6+pTO7;*=01q] Zd@D\\DN@/G3-<[Zp]#">q40K#E@LH/I(3ZQb!NA4cO0B'@+D#@@9naEr1EGW>/4bBj.`lablik#;?\Rc+":=$?MoF5Acg(TDi^ s#)R'lTA>89e.bmM;jKbJk5A(RRJN*i(`d&)5]$VcQos1/#2phBoXB_&VID` _+$V.@8AA`k@Ank9)V36/O.3Q1ikgAl$TZQl5X 83(?dTPs?F!Mo;9L?AX`Jbm[s*2bb`G45<-NM$Uc/ 'rV0!gHW7Bdb`2."U?5`[Zp%Y29@F[Qn_s&nnqKI3o@UH9:hVoH?/+eF(jk')AGn%F1dp/PA 1pstn8fRi:^AL^9sF-!")holtVOrB3f2p6^LEcG?!gmdh9tP\`YU0qc>_!$""8^)Ebf!dH#D74(H6K"e%+hNJIfqCh/3BYAPQ\Wj`-AI28K:3Y2S[]Y4B#3_N)X8C I.h!P)f84RgSPCq5B3^J@Y^E.WnAC\sFJ;!E!/bEhsFFSb^JsGAA7E;&%P]c+P:1N3`X5?:A,]%L1IPV]H@Lclptin_V&%3YCo_#q`k,*ZRgL PJ[UWm;C8gkl?c-N(qRHO/pSq>ZOjA8&'bm5e?Eh]9j-slrO.(WA0>"?pMKO`$3MdSGlj_kr4#0<#Mjd_bff'0]O?'gC-dAFK2YKrA%MUDn /=g>K%$mIpkWb-oTWY33@42n(*PNQ:rcKA./AOFI)o '-12j,gQj_&fAH42)VeIR#"]>^B::]DQgZDLTG_9s#`\4\s[BH6gM(k: +2n2QFZ1!clKpAjG7hLn.F$XE^L_SVO*bU+t ?[QX:-cgYH]Fk_?:/sKq22<6L!0hnU-m`la2"Se[s3TOG\U1i`>8]*,j+A^l 33gKkB,l)a );aoOlC<#nf?hf)6g[58_'A(N`> t2f2/X]ZAS6JhqllB!h2"Qe483 !ne;)2$:jbp0G0gC\t3/&b2nRoa;`lW@p']OIIBK&Y)'l@$I2kDEMD:*@:M* )tCf ^:JUa+9,r+FG<;;R*klWW=7O?J2"(4>UUJ:=ismVp!o!.Z6_4aM7\op$0YAK\34V-LR*2ISSKr*+Z/j^L4c!'>%mW%QU"PVbHEcE^=A@B:#L3g)N'e9*m]B8T%m#p[hCQO"k`8,B^j4&Z&qHa-EVlGbn,^J&hG9'9AI=Y3P$tE_4AW4Y^T.p@<9d;9*658d$aS'5f3lXJ'3!_U3M`8JBC-G(FeeG[Od%he_"%Zo(,qo(c33 .m;:psTHUiPU;^lGUshP%5%,l?(]Mff;n=[1Wgb^Jf6Q,jIGqAGSTVHpWL5bLj'.sf.-UBjlJKfqd_d4rKEL,i2\/Xciq_f>44PRpROh<#^&H[$(RYW*^,/Ol I;l^9&fj'DtNl[(CdED]'QdET6dAei#G=#f,sqR@AQT-&1Pc)]Q_O&6#i7$iP@>lFZ4],&-MfTCg"*'`Rq\Hh5i ,L#+6$:V6SW[Tsi^5iG-t3Bf^FahQCOd=q*[R45bc=?GfJMY[cR"R"j9,I=EK;bh:l/^S2b=[8+JK;tZp0p+V%:D/Ck,gN'E,_%DkBeg)a$nf!!-2=! >d7j=:l\pIc!A'I$p/]c"nP/),.nt@/,7;+KVsRO-acIj`g;m[^#BkIZq_?TA990PGc\.ACkK/orpm:'/jT9[jn=L8C^-f>DhN?YX:AF&q`t/)=g?2[Y%A-2+0:Z`Qo`fH81%/d[s9oqo\P)=Fh`Wr:ANZ$1\@RYHcJ<:'He lQsoo]rJONQJ"3(f\YqO@HF!(=U*]\1Y9a''A;,IIPeHPFJ%2=*1FsmnZ[ANmVXNPRgJ]B3=g)37Grhd_#mF15;O&8<#?(W96;ImlG6EaI pY8AASA02NtR^I!7^f9k#.=R=cV`-,_&QqIFaI%oTn7an-!pO;)N >JTTeO.)6'C"AoK9RnLJ@+hHRj=[Nb!(JY4*rrE'R0)qSWPb?C;Rl(F9l?7:XL[/DNS#+QI^B1Z7b);nIVsoOl9CAh-d-- \\PIN!S*>-JL/&-RGcC1/ aU([@nG*4AN<(.7Di6cLgX4qq\D?M6.@Fmod%de_DD)&'9-_m&?nrGVEFnk.M)UW$i%kPAKUZ%!^+,2@b'Fk?4skJGKNdUgZdokFE" -7']_m. YO>beJ?g[Y#A5ARiT(U.KVe4;:QBgOM2^OZ(GK# li9G+rD>P*5o,H/O1I&+jtt\Hl:Ogn4p@@`-"Q/jcmS_at&C8lp-c`DMh!4JXYN$XKYP(Z#%gHI EV$qpVP_Q/Q:#5j\=bi]bbPUH6]sV::AK)HT^O)P P"+AR+S1OTDd$[Dl^!]if4?&HP ITD;-/KhdmBaANA#$Ll4<&rOIA#[H583h$0C##K"tCp'n^_>s4=lrM\5SED,/AF^Gn#Q,P38AD+([Ka);gF43.fV#2iYG]9m,Rn$t[;<4kC:7DAf,R*bZQE P;5MqT$M?_HfD9@];\?U5qsqL8-88l6d_8Y+ntTHYEc21Cdaa@Ak=]3$2?CN8Y)qY;H?XY p+*;IUdr]/5^P0r\_335Ek6K7Ftb$?Zbht\C9[<4)^5]HpA$T]DKTes\6aiW9S+^+LnGOqBN,Wg=L7pC:;h@o5WU`lZ^s]aNsHJ2$n-?LF5.a.]4,r45grfiGJM:>[c?PqFrm:C6*gC4[MB244"jJ=>KV*h@IAR:sA!poW,4m r.VEq5lgo](gE3$>d\r<_.U[WQ4[OmeY2jZYaF!2TDolY'\K;S_!L><t312rDS>Y9@p:D2kGjCdA\IA_I##qQ:Vmf:dS?O?=][Lh?OQ50S*nTHOoq%co`Eg$&7<=0f^J\24O@[Wl%p8P,E&oQ+S9Z^m7k.`Hpr ]cCLnZkS+V:&NHM(drJmnra+7SHMDS FVt=aB$XD% HqbAg]"BgL*!lGngo-!DW qI)=A[(jM:YV+jsZ!/Pd>d,6&'^$cDn(U)lDLN\V(@Js+kDN0DcRR\%(@:o32!p#PP6dDP!],@[>N7A VY[eOWZ*@^lWXZm)*+P[B]1+%oY1h[hma#L@#_LJT5>e[Y[&)RH7D^()tHOMCQ-p-k>f-XppYP7a2E>9,b4$Y3N1CFWr'He.?;DDHNqAO83oNqlFR@A[?HJM>4r(QJKfM;Ma-++]'D<^G.E+A;Y5]eVl>'t?S9%-)`3LDd-g''5nUQa^`#a'HA;d;:Nnl1p+SJ"(c !$27gl@pHI(gSSa0*9&ggk6BJj^o\!oV(h>oSbg%/BHeO-mQc#q/G?cGdN(T/1&>JML>@Fl0=I4)'?9pA&\anPs=2+Eo9c7=i\psA?5!5%Zg5,-9n^jsb/cU,N^3LL(hi #9lYqB,ma6+F]j+jtnHme!nd!'i-- >eBc/8nsP,PmfHT2ROo'dMQJp%6j]RdBfS:^IEY'b,*PqV!Dg"4($Y:^Pc"Ta!(k5SR[YS#Fr6JpGWALb:JGc__UGiAeXIoYAE`7( :YX?cH/Mt"c-WXD '@Wc:$s^Bod0RiiQqI4@ANe@aY]:+0XHq*c(p=sW*%tP'=K##Zo>CmpFq8H S3^L4`<0^mFrnM&[[`p:+38A*s1/CT%GU'qQnsTs7B_2@Ab`NNa:a@9AatSl(BMNC<,914O<14R(V*W[VCsJfjVJ;4<<_f@`9bIV&LBHY]RN2T nIVn-7_Re;1OkUg+XUoY8NsK26]>c%eaq*C@'>K4JS9Q@^`Ik!aso]nLZ05%(dtNH3t<6Z/ZLP@Vm911nMb't,d,.\\4Iq9[(tUT\/:[jO7PQ1(p>%/ Z2q8][fT0^:dq]J8Dndps8(WdVSpi;o+loBSpA<(KW[_B)[S(B3fK\&0eG8_^mOX:@_MiD%%YTeDg"M0+#e"nZ&o^VLJG'nrU+1K.^c(OZj8c^IH;%5?A';=sO%fYJ#mkknh`O\.`&nO]g"-^1%d7!;EBsje\tgXg@ 1LbF7(B)H<K?`$r=#j"F(0rM6ga`%#Q`P>ndn)UAU-SpX?.IVRBm)hC5^3XSJQMYo+L9f%QkYrg;:JBrkrB@op(;oXJj03j1[:'@VIN*5)*#&O#T\nA/-UGM-)_AVo/m4N,U0lg>cTBs"X*AKp1L7qfZ3(Q/7N2B5kb1!B_.*3^1cq#]Z'^r>JcR(Toc]XZ6l+6@&A_PFjDGs!Xs+V& $=kNhG!de10LY(<3B$L6Ng%,O+1KMe7j]qCD##blsi:D6^hT0L2E/XC1##jJ53>:[m*!<@8smWH`ohme=Ej QOc4*4[ S'?Jq000Hj)nS&C-hjpM%OdL"L93iNbhBl]69Oem:CEF4@QoJJaca\+sg'#F:=fgU\e7Uo$11jKI!)&1H,'8EWA+-*eRP2j,-oBCf98A@$6+pnajZo7oaPX:`NCbtfL-<ZDiG`$i@78m\E#8sRD0rLr2aN?)>/G6bo=(o&[V6e<7B=! 5@JO_J`Q.>DT'hVtM8V-OeUSi?MF&]--F*c,kS@&;4e:S_\VRka?EWj+;*aOEtCpgL$r`@fA:i#O\@p`htpaOk@h-4,DULE>%!-0k`DDB,,'^(GhA'^8"$8-kZN5/32%YDANP=eUi\$pB62fL",W%.lSaQTa3.?1"Ye54\9RtZB+l_e%>RT5bE;RcbmS+e%0 &&eg/UnRGIHB"]6 ZiA(hHW18NSP40lcp.BkhpC\44KA3 G][Jk(YFR]t-c9\17nV;XI?4l_>IsZR3Ko9-WNm7*fV=5i#8FE9f; sq7tdJ9(W-WBbl+s0-F#h>H8K/Z_[B\Y>%5i&VUIT&T<62^%cH6D&r%U]9>0M^OC1\P gd.4?^H/mp[A^TmW<0L4W>1EfDOG:M6r#/+TTi*of>6k5BTlGm[)UIJ"=8]s@s=G9;^!=7?4'KI$"9'R%l`lpGhUBJ]8ncn>D[?'`"fCLit50"Yd^Xt^Q!Xs!>8=j]fn#=Ff9F^b`Q7p*$!)Yk\=hps2(4"sVC"o]k51ro)`1_6[,@<1DnsYa ncRro!mM!?$n5/,?'rnO@gUMmaW:Bj%MbI/2NVWgJ)-W^_#93Fc35fm"M*&H;"HY;A85+eKZQ&o#'%^QUID!nsAm2+IRWJ78+-Unb/<=bpZrO";8mC5$j5q=qcmg)WJH`$D?>l+0k<.+-YmXZ(,T6"6h1QA,8>D1p'!(N=!:3&gO:C$9o\>95oW'Q*FC-iK>`IW0:[. 4?FYIM[@%EO;legl" 1F?,GoqD[B5*3NhfAj[a5oOk#dWAq4!qhpi=67X&-N+J9 ia@d.VYOe.M`K@,"""fE2sa]I=-1o$ U88DcaJX,X(FTXOb87#\W1@='4"3#.BsP Qm@s>$I5+cn@>DAn_RB.Q!>[q:p-c_Ebt-Y4leG0)8nOQJ7"5Fb7N(*+)9WtJ1a[=j4A@CJ!T_r/[-!gL[JrT,t@k^iPAX=roY%)G=W:mjl4-rZ7bK+(B[R>6LmlF]]nb6m;".rfrZAHWoZ_bO)b6#?lNc^ 9.[UV+M1Kgap<)9>],RN9(3MF[Z.Ro5a ^bfm,09"iFK 9S37-<=A-2n1Dmrq4rAYbF;LJ++UXR_E[jk`tdmUEaEB\TR`^ZZ5+A0i_?gHjfS^c!t&pHFc73YsNVI[)_Ut-6'e9U%2N&&r>\HX`'GPo716A8R3C#rN[<2,V_lZ[?QkL4>R>f%EB5_*Y\2Yn2q6K@"7pIlen0cG=dC$hen\dj.ho-0'Ik. c:8(+lT$Agg/`LIt/<2PH3>$oW!Y+DAo1T-"YJf"_`nWT_)-F0-0#TV"\*,/Ai5VT@iTnbAI0ornM+k;QZ7hkX*m=LeIHtLUPD!i=f4E0$h3^C/s+".a0/jgoGb0d/?:ID0jt)T%EL4PLgpqkWU&;d2"]Op#Or@7c#p1r3K&KKUs!3^q:W-B3eAfc[A_=nR3lN\hG5![te4+Ealfg517GpXQ*cZs]US@No>\OtkFUXqs`e-7#3TYYX;;p= G`kGU6JJQjAChM9^P+S>qb%ZVL*a5LrMqGjB.h lTo@_H8AlHXl1s_LHZTj6TDPX#KjrO1Ph,rBN* 3 m]dQ(#QU#5s3shF,*rZAW$6Sr9T;4WAQhtZ%3+ r.$%pDG8 <VB>M7AEZ*m'k-3N@(KnjQJ3"A*EF/h/qst?U:Jfjd!)MmP1!#PGL9:J'$sE M.Hf]]Frld-%*HUVWsUrD%?K"F/gXPe!LjmKNSM1tJC$NK*o5Le#ors`6iLUg1=2MaD02aaZH[geljDkU'qc(tg&nL'102,0V>W?pZ-CB!:$H\(:dsB@b=$R+"Z_*ZFTDkp"TAD9bs.88&8?BG0oA`/6_9:Xfeo3J+[BYcc&Dk!DAhQn/HO&mEGsZ1A1\%+HmZ8AO6`J T!3:Ggj/R4V"?gW2sXh.2G``LIHD`N5lC8-4X4-9nBoZfAH!;Fg(mq!EO!#i%Gc(1ZE05MaV>"b"OT%F[U?YB.to1!4S!WG#g>I-YU"s9\s*H!RTr]jS0Z)4[9ig)'"brRKb[pb7 7M[k8.B]i.*)oHiFnK/Cb.qr*OkY@jc5>^K8g;gaf;Eb %"#?EZM"6[H,7a+s(XFiP)>dd%(lLHTUK#4pZ]&sJOa,&MRZ!$2oGO&=7Rj7R8\pA/p)0a?d6htHH19G)ej6sGfjWsS2@*1^c"$'0LEI5*!X8CdC%j-99XcPs8X+s7H#H06$*4h\^KfW.U$r#Tb+EG@Vf6sphpDc:A5]9hkD7`ijZd5^00%_N0B$5,RMN7M>Aa;*Y5.F;rFnK;E'):kMST!r\G=^DjsGF>!^\4L8>VY4$VJ\WUpegjJb5ArjLWkJ8@W'a#p(VW%7S*YSI;IH@A\O9)Y(`5jb]F )5S?,I,F$./qc@SFmHfnFf!$bW+erR:4Y99,OB;caB.E:G/B>AnN)jF^75Y)Mh'<<\1PSGUta0&WVn>&c]ShG#qb+)fNmE(tX/13]n!'l:EM7@M9VX_AT$\[IsHA#NQ+0:gZq'@W"\XP,<*tJKl#E$*0O[M1$ii3;CA.>bT8(1pp4+Z&mlV5lspqsJ)?P0eXGmV%CqZ:P9`KJc9TQJDqa_AqVgGKJQW`\<%>&@"2W+Gg:akVgpl1><:,N[K(d3H[;d$L8)!9tn7 >P,YPND1Ij%bJ""!hm!>VK"AoY8[)gG\@ F1^G[m6=5Y]r$knf'G)e20=.Kd;\c*^*;"Ds*O$K/kVOp%PE33M8C8-3]Fs=HH L](7Xi;BBRDW<`p<&^(IXmlpmT#oQtY>:T[?W`Ze^_' %2.93Mt. $`@c`k=h/nPPf\Gl655MMb//13lmfahEaDQ(+47_f6g)I?ok6C3DmAbbj@Erg&S7[eK\[C2-oTtY<`7AU+?tAllfsA9AL^+5!EU?bD ftpGZD(COq/dchiOg;]F7b2-Y1_mcq"-d^ 4d75YdVN9U%AZV:99,YIPrG'a2-Atnt!<_^nER.*g\cp, QW=?8AnA(A+eLrOJ9Ea4UeLi6NAWJJD[Ai$+E?>R*o(WHjq1?"+n?`",]k3kX;'^SeI)]2."\9>EqQo2K?^iG)TmRKp?=Q\DZ"__Pf^MW#&+Zpj=/B11Wa'Pk[-.:pr_1.L9YfmM2NT/X(6-NEnK'Fl>t\__fN- ;baPoO<4E8tNq8UpS.(W8t[_B]oSl/A:& %(Fbi7t55lf3LigGUo$s.I-_=4,^I;^)$d&92Y$_5McBg`]bD0npl#ILcRXjMdP<&@H8HQ:%W'!p-b@PjasM$c!tKpg`J-dJ-1sjS5+cAVplC@Cf^F(k%PSj4/Y6h+!:2pXa#55p?s0)oMCTgq+mZdX*%,g:L)MPG`qi(PmY8V=9:DOa]`H\MeX2BUd%GYRWha;j8kkdDkb!o6%.c!^o=L,U/Pnd[Bm35ED] @N&;,!'_laMA8k44iGQlM?S'F1\a[qAlX:$4@Q/^jMojWh1jTBTF@$SDRlP,%"W7X.-RSkeK*KV;:tDILZ5tQUB!%\P.HA5D>m!q,qVD@r1+lOFE<>n*7D0.F`HHhn0q d_0nFK,1*b^^40GoR@1lSKZV&N3FQ(BDcl^B>3!PHCY *E1bHs*Sr[j=BXR-k/6V0#6_R>VYs:VoaBVCNA5,&r#;c#F@A1$tH/V@4HTFTHA>%IJHFV_=g2_Ue;-b?)pM&0BA`(`h,f.XL8U2CB9Pt#]HNdPKsQ"CXQ6MhQ )poA[s&c F"RZq;i!=DE[Xl2MH"DYV`D8<*UcPWP&i dbA[((MNLT>hFpROb'7W9*&m,`%@"40b>aJMl! 1gD&sDRtAd3I2llc41."H37l5N;$hj,qI.M0KO/:Q3.f\hobc1^e?4CTh/HL]9[A)-c d8OZG J>eR#Y/EIhlP`22ce&C-S>c'f=_mS5m39X&(JL0B?>B`4;1`nR$DhTHFQ=*UdSa3:BA63T/D5-Uho >6iZAH.[.q$jVZslOnD)T,=(''GYSAA]t"M+)H>"k8; U4BWgsni\beh.YDfrY(,LqTUA:K.OlE^Q8f8%Fg_+eZFZfn`XqhQ]?%@,X>,nd.V<$]KLbA1k^[M'?,ZNBrEiS7s4to=(bAJ6;O7C/arKE$qk5>2KkO)ic&hPmV,@!Q"2Xi.rZ-i-tT:t^t,V9%rP8I^/nRIR-H^bKP Un)CRl&BYVMc>Qf?tN]8'`,-j"!["F%"/P5:QcTgZVlMXJ']t2A,Y?(lkdTZHnio,ta4J`QQ-Ro;)0[.=D*qSFa!KUsM n.A[VN3FqG:J7%THcciT20Z$-.Og+It']r7]meY3A$`*)UN;Ep9h3hEULe"i a:'^bR"q-J-1\V>CmA2liB.fQ\.>`oNB!l5Af<[7_;5Veg]JS3MUq.t2j19N[kMZIkodDDhXNNl@Lk['\(\#Is_V%M,li?I]V*EI@\sJQWRe6/QH:k>9[pf^+[C71lGU<@Vh>5Br&3Ss9&,9M?QXKL0Am&*VJAAs>pIUjNE"-/T'@gFoAt"*d;]qj gU-/lRArHsq]5q =UkR6(Rm'(++,o;3[Oo;WM6U;'$2X)/qY?JG+&1Y7;EGl"E%!rk,:]A@j8*]A!3'-rBrKlpBjX[&KS[\@0oKa%/@F aGFpV+Ak1$@"YBk/,e-Fh"S@JP]IX[@ZRCkVb9[_ks`jDFpC26A\>A"lg.q_q/?BVN(PrBgJ.(RGYArD'Sa.1 UAC]P=_1_Qs6%bm$UgJ)..gWeGilHJSqjhYAd+'8jYZ)[YelNG2%T5F#."W:S; m_Jm`#) E';U(]\\hosFM&ib[@OdZj,mdF-MHs"mI"0]JST6n=e>s^]>*A"P/a)#n+t9,V-aI3Djm(FQ70R4E:g@CJ##3IgOW!qe:hNGW.m`0._f":9&ZmoaYX`e@*eC9isRL^iesY#gjoFR0K?$!\Xl8_11k&;+!%V/QN/;G"g"7]4*BX(.F'#[ET0[b8sO>:A:daV2\OL8nIQ6PVqcVmTFb)qs%$D]-:Am>re,n6>MI,4DZ%;CPf%51m?BcB%"]=snZ9BU9[ X/d8-Vc=tqI&P*pCTrS8=VW2qQ[_o'*'AENb$ac$nTZ^6oMUl>_EH)S(8>Bn6K);0Wr(cfhGpI=8& on-C)Re4A%Z9&L*XsAAWH=5:tXD-)ApKHW;AM5X;dd`R)3<85dG>KD fF+`oDgsgL$knXJn!(`Vs o#5mg=J*@DKNeAgTgPEQp[(]me.4H=`:\HnM*j!eg*ZIb+EfU_op"/FWl.i&TI]gU<&aBmh5:/HG7ct`aFABOhS);p$q(M(%85[[$X(Ab>=%rAZ^?!>D#kmq[OA;W*^Z*R#O^Q@]HnV(7T.\@XpomAO!o2fP#nsdcZnIl=%eA*YoA>W?^J+Xt>ZMeAcHLs`D_1JkBtWt>F;06h5#4O[4+p.tC5K)L1D/(0:^d(lmalVL[Elc)cR06B^%J>^s3DhVi^Zo*?C+>T/"J4-6'J%#A(o/?N4*lc5mOfS3N,$F4AfNMj8f)l8p iYFiO@2e"7/nE,GCblomBE7AJ9!p3:AMPme &Y`o_Ork6`XNEMo_otZa2N3h4.+c$!+4dT5C1os+jGG@pom5=sbo+'2TtjigZKr5m/pMP3@/+#%HSt=)SfU\329H^*NA+,J\OAZId;&EP_j'j<#/@a,%r=L'1BPiH+.LgHOA%'%?W+lO"RgJ)e`o.[WPo@$2)GEF1BG5%lZC2N7JCB,L5h!3bIX@AMj5%W2LI%;Zf;fH1`PTIQD'-r@48"V;p$iP3KJ.U!*E!n76L64O(oW7?CV7<8:ZhPPZ\E)AL W@5e%8Oe2a9@BqA;>k%Xq&ocVJb,+UBig5<$7d6P&[ \-oMN(V$L9-Zh:Ad5:BX,MA;DXKIfk/^N*$=Jk.aH`0@J[!j$2=:"n`MBMQ9i7^=3*,1C>(CCb:d>D$E:=+H^Ap.th9KA]j*FQ%\FkMeNiq9+?D"mZS<[Qi(O'Ra"22/:)']K/@NJ)pTdka:"5kfC$/ljl"[[G6A,o(r_eKjHPWiJt0iJ@3FS!^'rcg2:]^t/(6BJ[trtWG+DP,b6;l?K:[]/RDo?>!a%e'*NOcmqj #^3N#A?N^M49AQ%-cZoMAm)a"F2EM3;Aa`_\:D+(c137HS3F-2T7VYJ)U6'Gf_i-NG89'R'hg+GX`j<r:K$VK6I,SdL/giQc$E\Hf[^C%C k!7"lZo8@^"*Y[\X\lI(pd>-B[5PPFK3rC2Zt\[q->#*e"$f,dN$[k5k&V6:C6KI8fNAD_SIW>@!k*o Bf@&m;H<jhQ+U;+gACds(8qTm2#CQ7J?.CWAVq?7Jce5H@(CQ$IX"7$mATFZC@i>r8C]IjVF_#Zc>q'5P*H6iARNP1B&)$oqWLG#en5kT,em!Q"c1J / hZP _b*6-pp-0CNBP#?^K?\&\a:`T1Y.k:hh:eangGB8K"HY?n 5Hg6^8:oo>=8tKoIPkWsZUg<L5jc/AZ,:A$]K%oM@"MBBY=\P6:;V`!to2CFRDeh6No1/R@n$7rI+2!]F!;VpFaY#)f%#4\<-r6CKbfohI+sMZ Gp/"8(4_WJ>SjN,NIY\nhf\S$rl<#WmAf%j8rFg,K4F3`]8$H=8N';0n+D$oGnVNKU.F-Y7r0Hd*&`K7A7E5X2;OMSf9,LO0Wl]h8U/FW_d ?Upf>?XjPaO.iN9:DQKA&M>t60_t)/;(,>^LK&eIknR/^DW#U/.m13+4a"V?>#ABV.>*^;#k9&^ZC2.sSo:2aH%=iaA;*TdSZ+?NK:O:LS.[&+_?>`W&7Y**P56Xsd-gE3rO_b=qHI"%^]X76o3 Q )2^(Y^@ZsHYJsq@A]&J4l+E]HO=T7p(`Vs#/bAsTCLE2^mdoZR(,.A8pshE(kWn=EtMh?_h2d/=-bUH^F<'q4.f%H;Ia-BYA_q0jfH3i=C+jmYk0+CYEhH&&^D+0 (X9_NUfNDd.*PIHHhL;pma#bRED'W#D2f!P1^k9,#<32j+ Yk&UMl,tgAG]Q79kf^s1IpK'1b9?P`:agbT!eLS@+IiIHI6asRAAf,`4WaiXtZ+A<BdQIq/%UH2CCiQN%BaDrAc5pa(OZmb5!fBsO>i8 Rdj/D8UgIo6=g7fc`*YoXU*L[>H*lBtQTA)=Z.OA'f-F8:jTsoDYLr?B<OC0djT0Fq4$qR$rFha3?4HTMIL+0EcXa3iL2;3YWgee]qGV^4J*:h",BA\>]/-ns9,F>^<"F(lH4KmOV8I_M_#ioPU#Wi;;2r*h)a#tr[">j-Abb!>13#]!WK53-A368__:9$hC9h7P?tnB.'O4D*9>7/(nU#\pAGQ9'/ N"H<_f.XbTYln786*;mFsQ.0hP9X'27a8047@Qd%E>a^s>L$:M!Ej07sZ[/IOOAiU,;[9FdG%Xpcnh,\:qc3:WS^JBH[S>AR;bM$OTP)2'QUo1.7i5Ucl?C#p6^btCI0) qAl#l&]p(00.8W\at&1CUAa)Dj ^^!IY?d#.K20Q\rAhXnj1b;Bm\")io*SSVTd_P*$+>' jQP*#]re`4@FL)M2!i;HYZ_k pN US1gq*%UBX1fpgiM'+7KGXF4o`-RYY9O.; "g>`g,Vg?NZ3kgA90(#Q1aqkD9.MG&4DFnhr/3Fb:T0`GfgoXL T'S$/X4_8nb1I>SY@9E)6?7M)iS>QfQC*;r&lRCG,Kleps"JCo&T003jGAU.(#"]WnmAG^rHh\h>6qcUC#ldB4DHa(T$^$*rO5[hlhLS@q@ZAOlaid]-O['(8o3=.8>?gA>jM=tPW'pX!aX#IgNAX,@)]!e;Pk^"\-:mbU*gdLFt-CmZ@3W_567]2V.I3ntMIYBen5YbQVaAX9] rc.Q#K&gC`Q%b`NaH1FAIe]A0%qlG3WhTE13oHrOs0(A,[X/q6G8VAT.%gk>+>;;Y#B1,1?s]sWa`'/gmT_+Dd+lVGCLskmrf;T]FXDjit@=b.`mC(LIiY mK&YFUAi$Ka(,,JTH!)9p^-NkGm1HlQG/"%r@@@c)>]7TDL*G$_1l]&=_('hJ2VpX&NE7$(etCjPf"nHDiN/%>KM\@e/;8C#LJHBX,XKl0$tKE4.:KL;DHF52IVY-aAmsZFX_&7=_Lr;VDip[UA2D36E[P=^GPJC(:N_[?qZjrI_)ttY9rF(F9 #h"(<@k%A8%"@ktM.$)>cSd.1KlK7WkQZr[TQ]MK+rZ35A5il]IMnqMJb-U92HRGsAXbF_&[hAV4]02&;Vr;l=Z(I4cG*0f/91;r/1d*QRY//(WV J_tY,EY+_9eaYE>@tGN=[ ;K0#E3OeCP1UfSMH14#P;(A&JCod>`_qB9H!kDG,\GPVr.>*OS?  Bg>,m@0r f7&GXIsjJ?]cK2?/^#)snGVDjB*hmgik?/SpPL<]$*,HkGbmPJa7Z,H<;l_"-//L$Df25%(g +G`X>HiIam< [A%dkdB1856D3P#dGQg1?_a[Q8bnRAmskmAkH=p;?WMKgsGB9HB"YDEZN/=Eb[]C&!+Vp@^lGRH1p$G_FG;O:AA*hGoe=4>6:C)ABX5!;/o2M+X? 1t&>8^FmUO\s.UmMO(>a@mR08HJA4)@dEP2mn`/'&+]k!e8L2Q32*'r,Ad;D?ACnc&*o9p@rEV^D7JG$SZLS1i2q51:sgrDtWXI?4Km1c,NHe&P2rUlhea.f"*o+ksBL<_F\pf+sD`n8](PWH$h/G4df`THCo7-6,&4d,C";%*UFQoWOMWrG#T_a+[dQH&[1,\#!Freo'D1">W)d[=bh6YD/@YURLi]GDU0EX1f!Nj(f'^Kea5K1+UO#f1"O!q,hA`]ior/]BZ(iQd#H_2jj.*kcAtq[Bk@hhCpB.Hb+Ud%@A]NBY,^Uh4^m)?2ORP,C$q#pNBkU6NBB#_YV"_,GeZU-'VSU.RRPn5r3'rm3^mXr*&%$"diWq&[RM$G7(+PjT/plUcS\Q*UA-YWn\4;e),MoMYMXV3Q/r$MoHnhrnpqn/)#InrT8:G\JRA>GRfk@t(FTpr!OcjJ_=K8(,`_FoU[-A<4@Ip3c'M36V+2EmLU/2sb?Ad9];d>t&_NEGhdbs_<#['6:N;tnY%Uk#-8;t;VmFEms(!&07?`?2"0VR"7Xg%/?A;k>A\,(1,Aj,srR9)%qJdji<+M*5M+pU9H"eW?3jrE`apa!;qV0UKIT6R?\TY,a3oWBl9k<pXr;.*r&[MmmQAA%$oLI` GEkfsTPN-%5r,"]B=Y[fd39P`"HnPA7lAGsHW@NP&oN!>34;P49"mtO/RK EP6mMmi9HYi%TG$AslA@=M]cN8A'M>#=-[bGdLh9cOXh1.N)?H_kHo4nH\6II>Lq5'VWI&56#\'%qn,L[EGALMb<q#4nB+NralWhAE\]fTQpVrbO'((nJG.^]=bS]'A3_YL^(HM%V-GZS@"B[UtH1\%)-eN9=R:Bn6S+se&9M9:gP81lj*h(8RWj`E\Lq"L2$W/rUCCI:Ylb'2XWA?c&=C8_5/P86_fhg05B<=NLpDcR ;rg' SE8'L%mUI-9Xa**8@6'WJ,TTYjO66V`8A#olMgs$2_b".Q23Ai"nNI"4ECibgbEnr$8OD 4]3b=#;A@G-.VYKM"PKmq0P7,-0eSZgl>=Op60pU6=;A%U'LW4 MI;KR#qa;"ILAqjM000Gkq9KkH+;(:*.!c8<1tjH$A=c@Y./ikk)r;ZV*fJ]<(JA$teH/'Eg"Pfo"+8`/TB-r(% l2K'E:_Wf;5t!rcUpA%Fr3#5(\+PV0Jl;;Z'+D''@FS%Sr^Pi'=sGE'&;ATs`;GiaSBTjPkdiEce?k/a6+16dKP.?n5h3SXOa,c@.48=gqN/!sRpJ5G$)J2Y#.8no8d^:fVo\Q30HaWP1+l/]"K.oG;H_4AE,rd]L'G5(:CgAqFsoC:2DtH94<,D\=!CiYV8d0(j9rt-CaR*$#'pL_kZm????VMfoN?tIlB=cJ>HOVH:$]P-1mHoXXZ"I00Wdq5j]E!)&#S9n=%VV67\@B*9?CjlV>AD:J8/o%PG9[lBV'3)!"]%Z-p, -B#[a9MkZNTQ(V>Oh1+L!q6?]jc()`?20W"6I8HA\%4'q9J1S]rAb`Pas.Ts%7lWog6XQ\ *S6dMc,-Rd^C?\@bIFq` 3jO+o,j-29Wp!mN%e3P8_La[A!*UbM+mhJri`a!$#8=\,J.(->;/%$%L<^MRThi"s%oPQ,=?'4\1;SF3b@/$HeC]P&,(^;Sg0V6ZJ/O%k_qF:H+!q<)b(]3>^VC(@e,FT1l6!j=Q\"rVSSZjR9N]_<\s*@15N#06gt:J%8%4EFbktD1BZWA`RK/l@K43K#1.W:;jQE)cN1Cp@A?@RM;<lHd)q!oq9[W O5UKpC`#88Aja0i.fn">`%>+]5[oDL;N(+Bitm"Vk^6VJB-[rJ#6#GMH*je^)pM).U9lZGQXE?h?jkXoZ .G:T'E<\3#0apXS(#()fj@^0A8l3S"e?r3E/A2]hbSU\Y%JY$<&Zd)"cHs`jNf_8)*K75EGXaG02T4GY42/?X>#HNEHP?]ntgZ'l=I2CTa"TJ#fELgaMTZ@X/0%?s3%c&#Xd"$Zgo[oG?)?TBSoC9^%"\5)4Ccs$l"k(skSq`+C;D9pCgi$PkmfV,sBPInTf[s) #"q=KbP\lE$Et\pfaepfX@<=qHrj1) E!A2W:oFRZUed;2ZF4V9NqmU$>/e$2h]rHJ2bl.1H61)5bZ@H4I/e?T.3cN=YA3<fpigZ"fJ$$!$n&tQ2N:fO'Gi(CHMe0L2H(Q8M"7Q\<#n?gHFi)# Vk+^pp:rfc`cAqarbFsQY+;Ms_0/m&d$l-.+SaG#GPR0\K/;H/E9S-9llAZ0Ge&3-[X>B3m[^;$r\NlKb=ZgkVl0P?OrNR(F^^NDQgV0\N_K$8h&.1?QAE/ada%f\"NL&VYpfk_Ah%k.g$VrU%15WYcA"bdAKY<KP:fs9a6db@*h/<&O5t` 2dUJD@Ai. [nKs:3.U9iKp4ANWJEMZN8n?CrqG_Cr/q+h#3L%\)HkT6)OP4o([CsG9@L;-0#f8JNGYFc %o]n@IjLJCg>af8B89D0`mmRsTD6QPP'2EUOdV02/23/07NX]dBAC^CHln(7b&DGV4GdSVE>5MT@:g'<(I%E@Eoih:L"D@)2[rg)3@Ctrb'2()Oe1/7MpO"2A!57c_[-A;*]N_"2&;A/k9=!Ha7BYAq+'1(N;t_DA32ml09.J4RXaI4#NK'=8>H2P8g]9g;_#E'H\7R?1'%l3RUl;WT[i>.YkaKU#1IH4?YI,,CLSHVBVr=S@Xk4TA?%K`q#\YjT$Bq:Sb#U;R;%WZANs+Wf/eWHj*.,ZRi>mh7j$[Sn7m8H_&gH+-!e(Z7TLDOqI;pbJYA,aF<Its&KI5Q?;_E@hONF:Pq(rr`smD9UoHEaqdoj7 qm3G(c+P7Qcm[o&:+LC7]p/GXXH80F33??MYp l_8q5s,)VkZeJ?#s)cq(/fAh"g\n`j$jm;afp.&SqD$&]X,EAK^8D[Ag>MX#t*/ASaW#+)o9gr:/]9>XE_es6dO3RUPQC>]HS%)#b_%[Z^g0rm^q5W>[Y424TcF,mi0<'JU3o_eGcqKE%)Vj8+1MM7HFt5.Z2YcZ?WW4W*m$U@(O1-"imf_%1kgAVHRJ(:GptA!1id\<;'3mV][Q,bqEk%8 L/[KbsDk\h`pirL5\pp/?to+NK=Q= .s[OHR. 3>*\Yt4=6G5&2U1Oqq+bm8dZEH.Qd_Gc)(Ze;&Zn?:jC(3^2-W6*m*5:GrPS(JE&#MDIL(Td&3nrl-ge87?mtq )"(3$r_JCWcj'VRmd-24+.j3I4&X5fMb[sntUDWci$*K 3U:[]/YZLn08 %hb6GRFRW2U(p56 /Nq-Z]3r81kDG#p+E'T-Hhq$"5G"e)irQd0J9"&QB`ZffD&5!e]$];IfWsQU?gLS+9U08.4XroA+;s?0-k2d2R8`.m/UlS])l7$J)j`1:I-tffj$DSX)t#U;KkO/P'0^o@Sj+MO^lF!tAs>m&%XS'RYdC4Z<1_FY'[H".-;[&NP^ ]2nHOm!^RO:V9GEm'8sifqpcZ>l6Z1OiJkCGse2B!IL7\YP'cJ_6!CEg.J)fCi <5.UfrRlDY'&""3e`O"?sD7e:YrWai>;a_Bn#fZF)#8h_G5$Bisde?Jomn^@o'1>5LO`NbpW6?NJ!S5'iVQqi1862S_)o7><'O+ p4$/d!dZR(.&iplrrV7Kr@Vi ^G8?P8sn)XZ4<T^qU .j6tQ@a'n(%*?Grc[>)1L`^F/K1Q?`'8lA;DLDDmp5VMbpi+7GOd2$:pD<6%AM(Mh0kg?jD?NBSFW,6L&[PXNo$YgY//Ac[2+A7X7R7ZP#1')sAEN]_A2[K:M9h9lVE#\=;+Do&cnCp?3"'S$0YsF!7Dt><V:!X%lT?orUNR)A4#N:Wr'FMKc7_fD(e1g_hkV^'-Sa_MIp4BAFOHZBni2f$(1jQ1@C#no]N#j)LV*p6MT_)Ze9rF9ql89QBsGj2>3%2<_@#.W(\G+mcm'+[q'*Oc4a%E/A]MSncGaf;B(',QCGP2eL@%7D+g0%!FSLl]]L*.F;o)qZ@63<&F\).cDE<&2e -(5O<;2G8X5e[j:U]G-5U.WM)5#40mQAUSr)E":a*l7I&W[@*ZlT1ESJ3OQZ1@1cL*Ac<]MJd+%.USp+(=CAcI)_hnADV^s-GW6Fm+r,?$S28i^PJ'GsY<>)7<+b$PWq c'jtT#nr#AXVBFX,pcM`%OeGKWT7/!SqaqH9@X57F#JI*FKA_/1:*s&H#XO;-sOOS&G0i`]P"^1jo5W6>$%Bs:HgZ.9,WK3DcQ`W,aP+4:s5AWjM35_1)dks,7`f-VJOsE;D:c)H=7FZ/VC,t'csDfF%/Fp*T?@ie*VKUWkGTsa<9Ud,l;kR>/7jjs-eH4^j=VF.l@Tl7a,ApLbj,?PmL*t37#R)TVNE>9'LjZl^+@ha;WR'X9FjOU*Ot?k+#YE:7G>nW+<AT'8p!TUpZ,+]V>rDPR(L9MJY>ap?'1 A\EZK$bliYn&5&oT<Yl>P!D!K%BS[U!j;b0pY2 L*gBClCjlt*&<1Ko`FXB\:*ZbD]9K#`-YKZ&+g5h)F/^=97iE!ApL^rdR?1".l(e)t!h<0lg^;6!4@#1jn\Q<^$LBt\;  8`9V<`g4LC(so`<% sAY*a.P'Y=M>q-C?;k!?knDk!pZ%%$5K`XW,b8H1k9,)sEbWjs4*AC;!&H6fafG:Al,0c,eWQ4>,lDnFSf.DK;*`F7`b$WmhO_ZdOa01Uo#A?,RVD=,@H-%;/\CBD/-Jb")HH!(0XgSnIhK[%b5-/h^?Wq0Q'n!d.NHig]\K`5c"X^b"h&t,Pg- W"[X(gqPQF4W/$GtB;%AJ6[#VaHTgV8HNNV2^rKR%R_"MU:Y+-Ms4nB,1#ArtADMSY=\dYXeQ])g\M!2cJg#SPCHqh711ObJk&HV"qQ^od<LfK@:FV'm;$t^k:qE>*Jh2f/+m9;\Q"@IG$0JE/Sis9XS_2T!;K [nL+VWJG!s0&:@klHsX@(f*4R/`sPYR'>8og.[LK-Bb cq+Zt6JFbdaM\n;o,ohqe<mOA$3@5dfO-)pI,e#[QOo.k"Wl2h[Q'jk0[:4p!LVWA.+l\,1cRTL.oogstQ#6:.1=.4)9q92c1]LcaJ-K'n=W!^^Mpg`5/<(6>1r 2p&'i)&bEGE.ftQfZIsRh\C4H=>3M]d5@c+3?F`]MNZeKh:/[(JWbXNa]q`?F4jl8OJEQFI\>#B-t1r?1m_[I= 5:BHcP@3$d+aG"8;Mg#TL4.lT2A"pmGo@a"&nbID9)DCW_SVJeZBCClsPG/03gddPG7D@!A\Y&j5s93d:6kT'LX$Yt7gEP_L?(p.#r=*b-'sc@SE6F[(>4nn(ZoC<8AJ*k@(Ua(mCNt,N@b>qm,o^LQ9W&V^9A5I%Qh;RJ\E+\BQ%IoG(!3GO>l>CAi(a%mmB*\4V9(lAI2J%?7dS^3/b0--0g25foi="!]`r3B`ist5eWDsqF'GNI9q%#TmbQf.L#ReEont*o+oebK/OH=B+;*tiAsbQsnUFeLIQ?j]kr1rjM2TWiEbkmP1]eKPmR9/A]t!Te=W>9A57.dQP^mn2Vob'5jY,5orT*p5*`'@'^GEG[C`A-saaa#cQUo^#>i+4H6tEkHi4@6(]#W.HQT0FQ0IL%=-(!r9^!k2MWXTN-dt^BU/'"0f4tZ>gQ^4/6>3:kb!8h gZ#`[kD7QBPK8AH9/loBF`d+&(.72#=JC!egf 95%>9#IF]0.T-&Y%IUD+tLR1:C\&R!rZ9Uf2>LjOMn%Xn; YMQ5C[f(UhZ3nAb,CO7LW7$^!o,bB5VRhSt"i4i::S=7J5X[ .Rp!-E5#FQN;+qI]7,R(:SX1%qCWK,m\9="cesMOMHp$pS1T0 \C^,?Jt;_Mm4]=i1XCD!spSN?1KInk`qiFiWF.]NS(HN]_bh:VgO7'\etNMBrm,/4>&o`W+tf4 -FUmm5\r3[ALm9[dUJ').^8);Y^`3P'A^iVSjaXGN/sQhOITrQaU"p&6?$4!q6CE)>Glm2pGe-)AX@4V,XDT $`)7npm8=e%*!>2FF^aXQYV_[2d5C7I_-[j]DE^\J#Q&AMW!$W]G3+N,.\?h>%o0s0o\gqVHL:%N]iL=]9,j(m/Ap5moYVK^T"Sc(\^qk1pe33N=`j(<*V:b,(#h;6rS8iq1A)RBW@!G7O&V]l9?B;Mm+8<-fWe]Zo5d%VXW\h9a4%4o`NKq0B/n]i1@%9GQ^2^Q5k*.$=LJQ8kXREg(8RK8c#.^FYVT@_$.N,j'sOiLfPX4ePXH;)c3jd-[9Te2f;dqhqs=S1Xcl&KmS%I(;Nrp,*7Z58NA/4OXlQ?[%3.2co(`#KCT;3SJejOR')!?]^^1^-UYY/.8 823gU]>h=#BjfAn=*&mDcSKpPsL(G4KgA.5%@acdimWp?ef:eiQ*@X)Z)MZ-pe72V)P]e l-A!=/Z<%80KA5*$0F@:Tt%qDNs4^e.Z]CFA^S"JhaB7r?A-n=otK*Vi#)<58lo/R4l).aDAeLSFsno`1Z#P3t2GC3FAal78/hoK,>'/'Z>h`:8[-`^7G-#Q7d.Vp.O^b-\#E:q86[UP@32gn-R4$-dN'48YiPh=Wj/H.K[^>0e],)7j6tnNq=G9(lHZd=*24"@WP!\.rC_R3V>W f0CF;SKZTE1ZgZc?$p&`.eE]:5^?<`]T")RtQJiXFI%U$Y]+cc[ 33SM^_RGC<;&B^XnoL>"4g)6RaHjX:)!P%EA_91FCViV7)"lR3HYXWpet\#r>+f`X&g[tAHI9iZ+RB*!4/jP:Wn?`*A5Y$b!eWe_[Z$M\<`@OQm4&(RWRNg4@k^D(KhZ.*?K#=On8L5sGd?::5C67$Aa[.t)9S\1"(id(R)-O5 GIcCO;05;l4;MQ4)K^-i;UHS ^Y2]!ac8r=K9#i0(YVENL_>WO`dk'?[m0AQOSqX_UDGWBkhS,.@W)J6s0aAdj3Tk>I' $ghFc!V[+,SS!:sAIg*lao;?1Ule(YLR*M5hgS0sRY-ULD%8"6"Y*CFA(V6hW%KE\=V2D%:,63r^g08WZV:OD'?-pdNq7Xs i$aSa^,'saNZ.?M+g!YO(Qs]>N?IUY?TSA)=5QmS!@%U6W!MQ#Q3rS[tnb._ab&BM,OnhAE$QlJXT*H3MH$jKa.1sV+aEY5p:[5LgFE[+n01)l/B6iA'4kB6NV!#.,^LAK]r9Yi?mG?VoM9RkW6j96cnWCLG`4EGS+b)'_!4tAfYJN)H,'[:^'7G02\eEZVFkL^b1C5VW5%-HC5 Rb8"E%5!fJ#@l51_4a+j>&\36@h;AW;GpNcg)QVBS:SJn.CE*(5p'FqT_fe$8=ILSaA]KqU-'S-51i*AQU5d\m<5'VZt_nJFYYPa$h1NWY^[2Pn8rm[^A$K5!86p8g@_m@i6oAIE4ScABg2^@1#5c&V$G%b6qXMEWFP=hZ1I4@2,Z9OE6AjkPDrgAWXS!Qk]M<*%H0ck/5Q\[B/%)R`\]%?/8K-\VM3NF$W1s@Dp=6+bk#H2KV`b989I@RUiQ2[\5LJkcA#MD/ah$-g4GFC2&/>F][OmO0nT'ATVfl+JtK?5OeOlmXOsmW_]2:a-*#!EDefH(RA&d3hBVH51b`JNNcZjFmZW8LhhCfRdsX_;[LPk0^Amr'Y]MaFM>&"Ah@5oag&U>0sgOh4mqCk96t-5CDAAIrtBjMt6!'K(j/!Y (h/'9m3N8:?B".D<&37kX3Vd?kdMId!r2N VO :#/M9pebF+)s8_`k-jZ KhD<2Qi; ]"&.X8Yh=`_iN84L^>.,okJOs#e\:V9)_As;W7&fsW\9M9A?bpeq4[BAJj)^GanF;dRBATt!MoskAbDbjmkS7)(,J#<3n-$hfAM lP\F0Go-'khS`KU^>%d>-ROR%t?Jst90nsR3`9OO+mE6X\japPR"54,(bhMjc$";$h-e_H5=tp,[YicH^1Y`<AXO_"0M`/Mda?f4A2.oYt0CKf]+2D$h@C<>#K5%o%)D>QD: scf`r2dgX">cHlTH:>O@ZHq=r1MS^$gGN'Q'_MHD5n%7m9At6WGIAXS'%V*C%I(Hc@=aKUe]sWo LZG9-?USAg,kG:bZNZ\Q2Z@-aM^l5CFCQKa%(M=APehR>Q;-8-0P/!-'q 3#apC":a*D'E*a9[*!Q^"l-Bf=@@Llb6AtdX@D]E)T@rUe^+CUqm:o'']Tc>hSVnI0*mTmJ@r5`k9@Fk`R)2 ?`!FIV[Km(<W:a`+GdRnS^/q]o<>Ps)aAdN?*,Qk!,[^72@"0Fc!?'pr2jVr;W,Sc6>C*Ttp33,+@[p,/0^N]>b")p*3^c:p1UULHW'`Be"Q]%:>>!lJb:/f`j-Gisba?UA#G)FA^tE[=KQFMt-s-NVI\03s>h;`@E-D6t_6L @ Hq(Yf[.O(@;"R2i)7l/>4_`_NaT19i26)Jr_+d_$s X:\&;O%@[( :%Z-,$!9Ee@r5MHL6G8&?^!Adb]e@oD+9ghjPrk8-A&1KfVNA+1Yf1;04dqhb-<>5[#LJU#;t1K/!e;]$c_eMG0s+F%Y'6$A/5GJ;U])jA/JK4Si03G$`^7A0J@g10a;Z*B3IjG4@@R$G&oYI0W=!m6CaZ96WZSC7"=QM=FKpoGA)m`Md7:.amAMa5BToXgk@PAYXElF[]A@U\>AAU]t>MALHRkqRZ<(*o8coNQks[i(rlXl1>/#Nn2`GSaAE=ab>6Rt_` +=p'e9f#9QVU[#UgLV7IM*&6lRf8(.'-DNK>ZTA;/hkV`1&k+A8n9!6JO(3fb_;O3.[ QX4+o^09RMK0-'bi']\J\g+#04UmYei)g]%=#-ZG&PYQbY34(8D$6Q!PKT$+U2CrpR"[K6,\XAL'El-h&TJ%VJ'-qsL=qVdGNJo`V0bn[)oeX7S"qqLl50T=h*(d]Yo@@C)+)(6QDJ_[O&I=[:(O6ABIPAg"jFg+gm0=kl,GMtT<#L@ !sjU%S85O.iG`1SptR!Bks[AQ':h,\FM_#p69ZCI:VR6M1M/?ASYkm \ng;kEZ"<+31"U@(`*ar^?jd&M5Aie`T.RNs2$H;0BZqep.33K $CsM-4)9Af16*)TE>rZ+5b0;-"' &edIKN(`N7A8)8qsrW>)_s%d4f3o)lsG9jMBG ;1nS^#QE#YkA?,R6R>JfK=%&j]0*(&6p3icNN$h.:P1_t=!00#0l!SXlAPP?>03)\99)GUBkPlAWf`6&?@!l.BZqq8D n6sCeXg%M:EK2`%m1C$_kF+PW%IS@.%9s/CF(Og_:hT5 MJR6W<-:S99' d!:PgHA=.RG6-bUAcd1.5eY7&g]Ca1,;U?XLD]J)\l\rkG=Q4ML#9;HD$> i:;On'i:k4G:%F_6i[FG'2V<>k?^b6.lF;leO!GN>`T]$\mH.J9*mdF^0kNC:24 !5(S@X[AJ7 Q2h[K:1^Ab*J"56tmB%7$Rln"q&[h&=,BYh_At:?asAr#-fM)n]lK@%lA)h=%.%-X+LM8b=K9`6&;$0D,5X$QHS`hNP3m9tZN=s#:5kd6!Tc=&LW7br/$?6YN@L0E4h/Y&:DeAB64,D!osg%\Ij0A W(0A:QVGh*ne^n$m%K0tPW969Gqf85jH[*=2;8V%gpHV3KH'bqZj#i]QImc!'!rKVP5AP6l1K9^T:&DmQla*='?X1SgmA>;@'>K!n7mL%]]L+L_)NE*c36S6pRk.&P,#AFhISXq1d:(E@)ltEIq2Ik&KN[.Ln(AH\qqX/[87\(P]rM3Q[F 8hE:![%M/*2V3U.Ncn$8eT20-@NA*RNt%p_-"W]/fsC(Nop\Am"f.VW[0,jQfLCPm#XBBE2U^sV] GasoT^9Q (HDl.MMKbU,fNR>.[N28U;d>QHeeg?RrMJ5diRlXW4OdOO'YSL[Tj0KE2k1A;g,+3da@N>X&iR*DVB$hgOrB.0q%iA[/LU!#f-s.1gh/nd,8cK<B0p-.p')jE[X`VR6-2V9*0":](e*6!p7sFhgmi0a*q-g(t]^eOQCrO"-[SH0#0o0Z^pJZXOO`Z9EaV`C?^m#Iog#sYVgm-hfNIBGUR3tebZtKE'aN#Mr<QcE@'<M_Qo6<1k,s(8#k-p4spe`o#\eUG?- .;tNl>H9tlP)mr3Z$!'o+jX95fDM[t2"1G?ADrG9j7EM0,;WB-FpEm$sE[&"::Pnqq3/@H(,bW,f/KJZimq(WYlJ"eRMO`TXOpSYM6-Ob&d6S+Sf&+!Yg]4+A=qH5S)3d7*\mdiP?Amt?[ANU>OW#L8teRfSZ[^67<[f: _tX'AEHnAE[W.oCg8a$Pt_g`'hUe9L]R)93.*,M<X0R&t@#q\qkOhcn23?on@ZHTU-;\qS@%<;P:?h>W!-2]Z`.hh(;BT)2V/2m(LY&)<[1I">#]<[nSVMi+"9Nf1>_(KKoG9mT&s&_k\g7%o,qZJDOtRAl[#@\AI&^*fm!No$e7*4r+i^E^T<k>s/=osO'Q.`OSr_Y,L0TdQO!Gt#A)+2t^X?Li6\p+PB-4A(eI4$GBrC47;&FdG2AB.#Mf-_fP#W@ro;\jcEr0/ct12[+N%="D"UF\qhD3nJCm ptMaZ!-bS2:;0P>&[T]k]a$b-3XT\-'P=KL]A%Xh70nX:Uaff`i#Pgf,edW'_GKg7)g5gYt_,9\L]>go,jr!tgjAOlRTI"3DnSX(mtXKlKgA9bD35!>>*1_6/"@)NkVS%mKFfHmqZ7`.LBR;,p=_Q^D63lt\Z("HjpNb\4^0<m%JoPS:ST9?D9YciCmG2iS5Zg<02U*Ai?nLJ76">-<L9\PU Pk?V7NZ'd]t-AZ'dlO+>U0cth)+ZG"<2g;Xc.n]L$btADVq.e"VWSL1rV>=4C=0;o8:9to5FBNO,nAm^Dh3fR1j,!M2*\*;0e(C_i,km\PAn/fJ_^5nfOMk8=>,d;!ZB(#TKmVTo>;U\Ckq5Y>[/b-JPf7L@tL#d6'&NBV)f],\5I-S:#ASCGF!XI3BH^=breg"m8lAAbV0k_BSC2BZQ:U5"C0Jo1GGd`1gTH&N,IhHff.UnfZTB_WfS2Zn.Gqlnj7sZS?L%R_S8m+P)f#BZ,.]jj9;Al#9I";l:4Z2-IMIZl\]4KFmiq=(t1N&BA8L[H0r[Wl; ++?AU3o.A6T)cjD()7_99M"mVd.S#"LIoicsog^EW&k?V*X_Y?j-)4AT?Jr^58IJ:!p2G/q;iNrQXTMOF=JOBfL:ZBlh"L0"PTK5Q`1p\sK0Ne9Jn[I@ P&/e<:,>J!0k0iVd( -oVhY$&PS(>6#6D0R?@"/G;cdJJZ'kpIYjE0^W;XF)@6)ebFR5 D$<WN,Fch3(1j? <0DW?a674XLcm/TTJkg(ScO[?2nlkA6iin !4D"iL!/W.>i_h?4'XgH)kK9].eX,I+d 5@IUTA#m/_>^LdkKsCGg:6%?`CO-*2AhY=cAfQE:jq/LUfKS%Oe_%Ac2571+OS^:q\+JMM#DTiK$?qs2qAD?fp6Q'!4H*<07)Q`Qq/1++o)VCNW ";j<S&+-[ois:kC)MW,Ba'35Yoh1hR#"JlLPpPTXZ@Mr:fW:PMcajPaiR,"+a_3$A%YA]j5SdVR**sM9K!(V/G!#>0_l/:*MEAiXIPP&bs6%ea@Z=[;l`TqM1!o+7mHg-YD?3m%1GS00r<P5t_Y3+jVHRR-*RLOCFA:="StiBqqsoI0fGl!CV]PeACc.%SA"gn%jmS/Fmiqq&3=X!NUBc]E%k!5nZaJ)VVX;9B+pI2fO7Fk!"Afkr05Bg&-_A;IIcQW1EAK83'=;% a.Q8sA.fk2.Qcdm`,g=$CbdABJ)[&F*n')mgl`Hst,f?QW"`rU(a9([[\2Ikeb&,_"i_"r!E5\rhS6>^EK@J'=L"Lk\"A,VSWrSAki;r<'_nj>'B4%O*TQo1D<"\8 A J;Db)5VXGp.JEDoU&cCGK8:DqAh'DJ-@Q@9QmL9"3Vb6-P!IVl_aXc_Y`6,d4W1#9P-[O^$-$XpP3a5TP9QapQA.3Y,>S\9VE-s%!'-:J3[>@E&RU!B^l`5[/]5NF#E)KN3iJDVli&(^APc=W;C\ts_-A DQI1G&DRaQ["gUk'[.-qf<_?7:DTEOcsA"WZVI!1DA?6jC*3"KF1dik<9ZsM!*!sIW9A]?1A3H`Ggn."5\R"m^cEO0nP`UXAT^:r@A=GtfQsYK QCrXn=HkrAMhY24e-qFNG/N(E?tFiAS>++fFKXh_MKkGI$_#BhA]fm7W7nL4b-3>dsLfceR=.-644QJa@%SREh[fB%lQ L2203F:Z[re0bL*j_M<nstP<:#;\VKQGLs'U:K]h&N[Vb4kQ&UYN,-D.[0S_cUkC4G1f70%nI%T&[rTG`WL'E`j:Tk.>qpjB.=$=)1F6rVgEehOOA?,8Q/AL@^'f.=D&;AFKtF1!qa38E_e4EY.Ul/.qMA-^'-L;nZ2+k_!s-*Z\f?P&D9e`+T?U;X%EpP)+m_e`WaKK*S:f%.L[9Fsng43neJVmSA5VhlEhYV<4Qk/0$?7?!OIH7/%T+k;h.d?e;,Hp,FMVjL*]ZBAjbHL8e<:)#m HZC<]:3D\!gsl P%%k+#`ep.P@V8@FE;89DnX/oW*/Qleh*]5O=#eQ,h)6^XMds1%Sc?s*DXTj/F" cJ=\WI%pj;dpFa2Dbs0!g-JcCql!(t61`Lgg s3U-4*:f)@SG&dS.P5i$9[T/^ATKIBllJS$Z9-_!Y7[/`<Ao\GJT>QWbd]X9K274$"[1K.<(j;7 h=::Sm_hEn>l;kaZAnVtEV/C*f^n&At1FDY4nqJ=f=( Jnro]cA&UqH`M+Id@9h7ABJ)2&6%@#bbRJG5reK9l3ndDB]KoBnB;)/t 7QPTpk@6g(?q,eF'"rBXXI_-LqfA/cYARq0Ot?ANt95D3*f>1e'#2o*D^->`HJ(@q5E ZE%&hM'okp0R\*\MAAMoAMje-0SAU)%$\&bJ]49!njTfPEA*?AS`%2ecd)A>j'@S(Sl8:@@?!]`;6o,$k#J,LI`T?.; DaUU9)#^nCkr,-I'/*g>QJ:Ol% [<1KRqcj"TD\'O&Y2<%X0(Am=7o#VXg[h9Y"@1tV5&#@--Sr.(QU.0nf]P,4MRAl7\_H7-f0 \M/l.UUg\t/jI:'Zs!r'a%^o[k8*/hA0g&Ht6L(^A6Z*l2HK$1*PAZCN5fM(G^nT\V^O";oobZb>;#1WeTQdB;9%t%E9PtXBsN'QkjAi_CK<1*do1HS$lVpatOaAWH4`.*)7mP%gFIAo:A37TFF?Deh)B-PF)QP<'8p>A-D)\GLG+o_>+O*YepW=P[b]n++Sbn)0J?@ehKoD?VSmHiK++E\;$,#?,j#Ks2a!c3_R=K-DJ7.N,8aJ(gIfsX3c2)r]W)=@e:!-CDW`AEM-UBa7/MCc\GVGa"C+pN=B6Tc)b-jcR)?`?ljG1'4XU/7j#qFqg8>@MmXD;,%mni&W6U-9%.#A#J1)j6S:qe:7HNrN9f00@"=@g+o'=bA(LB(#M2Q0#(15*,#hI=0ei7nsbYW?rl0Jh2_'m9.CLpb2f^DLI4'h;kDoen2D%[njMd*]Brq',GS%4Ti'&lri]L[^1,llHKBI#LA_]"5F,^ .G&,@/ATTj67<&QA;A\[C5bKT>p$*d"-I?X+RFd=Pcm8WOk-O(+j[0inG64`nWU)>UX2K+8r9]8s)NXL'5L)Tkn/i>P\UKVb H-#/$Rk`J%Sma#PO/=H+gBY"1PWQ]-$?O/Xn"k09lk-i+t$&aEV!:tgY?5>k?Q"f9#HmnZK!Tt$5Yck7V3c?ngJ7sn4L8'kW[U7CVAjhCb`F/Q<RU*3?kSQO83c!G]=76=C6OENoL"J>q/6rP6-eIQ[RNfOihrr%[ta3RXVhh2Nj4A2Wd&<;sYQZXpo+4Qgaocf]b 34B;59\?%Zp_8TBbO/`4g2lAm'H/2%9/;eP-0.U`[,SOYJ:SVE][itH,RW"PbZ!MgHV4%[&-9LQS^O\C?B_YL%W r1/\2l`r5r-eTKc7:jRFI[3k(Bdbk5$3E'NGeg#!Y),<%'`Q+$Zh>N! ?K0:2:H`P`H1mq9kG+',b]^`-TJ6!VDE kXq7ODPC'db<HTc8Y \?'3?CLLWB<58:Aa3G$!YP9>FaE6>YRi08]PTC*GQgeXpnS9djJ\/8B6\i^40"ZC=e[O:-^5'F#3B^MlD(j,SCA\OLt0@bK:_6]i^3/QrapY0OcsfO4F-h(n\FqE5JT[?s?qF._HG JiHBZ`;*b#m]=(2%96l#.!rYe4((6K>DN;40gp@=iV_4=@33s=!+%_Q"N.7W)Hb[_/Kfh_gAKBL*NtJ-_!U(ms5KnL`.37@`C"sO-R#rNf25)WKiB`CM'7FJ,!b9#&+:J-6pb52+F[XBQN4WZG1fJS!Z*s,JmA6[KV`g+q6pq4EAc*5!WA80f_Q[>0]2*[tA<G$Aci\tYO%Z?37[Xl-8)9(<'F7r'lO"^*"rf#h1Vi#6=TtDmi0@#5D3?=^Am`GiK"R:N7*]<"c4# ;gZsp:3<69dbiHc7CG=Gr1Kgr(rt$,e7;.(oA3C1AfXY`q6pO0%rB!M+a_AD4Pj46.O2mI@7n/Q<[@,n@t5C':,T?AN:^[P57m(nl+Ud4el*[,M2jn5!(?2'M\S*7n(EK$TqA?THdj*g"?.YM3F'\atVAkckL:E;CKEA0_!dMc3n)h\Or^A'YiLPW&I3=NL.Y+B@tATD6MJV]=j[F8N'W*nA'hWpm(^(,*p.[BYnF84Bk??ZfX7(/i3_Aj=fKl/N&#kIi8dIAM8Q5Z%.Q2A"KfX/or\San76C0)s&Dlc!MY_R+-f4A.H;'$H>os4rf+#>f;'9)t7KAqc4nj+cB9)%]UrV6P\pS abT$k>HB YaIYN]j3r[RM;I&#`T-ADV52bqOo->D'X,3R3:=f/$Le%Q#g7qb)2[]^mJ<7+%N%%!`#A'L!tQ-s?Ri??bX:etWR_)R:."<%g2VUQEe(&'H%/4k0eD,Q%g9+ %O9\0Jam:+d5.aE+):XrnrDCZ)J1MO&=)5G@`bQS[Hn#E)N_Y$j'^N[&!^N.KL!^YXKH6=JRr?)Qk$_c+N(38A=_BrTSJLh;s].,D^-)U]H!*80l@_XA]<'iCPF$#ZGM'2,JWo=MP'&Y?HlMKd;Q7L<1#U(3f%8"iSNFfh.iFXTSAJQFgYp6\B)[TI)]N\ZNti]8+$OKoF=eI"AhS.VcC?E+7I1IoFV+R`]dJqfrF#@?01]/QVYk!n2aiq3,RWOJ.d!VR&h.RRm5"C1-#hSAI1NdXhq'b.MAP#YF"Zs`R+Uq8tV[KQs!bOlAG35odc0aHh=3qirWAd"?Z6I^.4lb^XHM"'X4E=[YDbS%I9pR[.J"kY6H,)2^Gk-K9SiUN"o/S-;0_sgoNSsh+kp.GAX=J5,E>\l'$. LGU$=Q$Q..^_Y%gf5ft@6)hX;6SSVD(2ES,cA,i9;&9p;U`sirQZ[_n_QP/,lBIKpaEs9=#l+*n=cJ&3bto9DC9UN%ZWiW?l>TE26L`D%lcqQ:U_Cf*5d+3%Il0k9>Y7D[r`#pPm[8,.]EiKIIVY:jI*@tNioeS-plYcaZ3YKc^3rUr8kS$a1:Ulll&Kbcs8a)cCXO.n_/?DKneYMB_AlA"giW'AkkjhA$5#Fqo%4khT_2ABAA^QI 0JT>b/E`r!bNVVXXNG!.*]i!PVfh]MT q@rt@:%d3mG8*qq b<17hcTcU+Rk ]d#.Aj0:Sgh)R^:MN6o[R&2i,+GdVdj-0-QIngWG;N`$DBX]l)K0%n;3C)A6$N:Uqp^=2(XBb!]&AS;Y1-;)IAY(o*3,"JEAmOX O/R`(q>=0P(3`rSP?:`mR3N-#En].K6e/h>Qf6[>WT"*pK0=6cMAUgL/hR=e(%Gg"nED KptIn1S_8P(ab9M?RY#^]G\3s(^qcq-6E_K.]hRDiM"sEU\ UWV\4Q7h;[2V9Z+dj!(E+W/Fl//UFb\`QLN%>YdO90@4O96K;_:M/4)W*Kj2e,QZXo!Xq(l@6<'+L=c_?,B3VA2AS?AfU R`X js9,kLt3$GCS%21rQ9seO!e&@;3AVdl)&3s@HCfAj:H8l,UUE^*b!0Q-AL8l\:^#2+ $KLAh&@C[(Sit(tV27A*6rlR=>7>6dM5hHA8AXh](F(==jB"mT&mA],Z#nU(50e\=8lQj[Y3d\N/XQFsHs<bNM/_:Yd+-iY2O_$QG=EBqmg,[LGP[d0cAhd_aXZ]0+TYT4&`tY'*H)m!ZR[$T?^Vdp,RI;oJVfKp::cpH:\POOh>7Ye^I1aW_BoEl'B@cj'pk]]3EcShAoPXg7jqHI6!KlVl(kb1"]6W?7c>Gg!,;m4<]'.XQ[DcUA.9/UnWfWBf`-%DTS&g*O#NsfW9P#Ags_HW'$%0RpUZG&kK45VaCW@;7TSA4,[Zt,,-@b18*@BY< ,1.Z_nlhV;:SXo&TpqJGWb99j^lX^,qY>%dSGtf)M'FgMW,*c27@0]ACL4fH4HH4rejDXr_T@0IA+LW K2nA^0ZTG:[B.s5J`0 ih'!10=[:OtA*W>8Qin#'1K,OrS-,1GT!,5,+2EM("!k9RAD=M`+p";q!S76o79;Ii7g"WD^DOT$k4X7E&-mZj&GfkZa sl:G;(05#jSq1Fm"Ym9q 5K!U.G%_@Eh]=,M(c5G[+:l-/)U,)Sl*%A\$3rW$X;AOXhAX'sf*7DBTi>9skJ%GQiYSk');4L"tMK<\(HVF%E&,coajVoUP^V_T5?-!MIkCnGC-m(2`mBGWj7(5T?(9AQ )0tYgAo?&:U=Bm"7ia[?PC>0)_qWWUU>/jP(q)+OWn6LTW \gfa>^kXsO^qQlD33@qAUseAl> "FdoEpAY7jtf1mJNj0=!/sSpBU[Ghs\q4j0abhL,A"f,4U:]21a*5!N$p$&9 ]0A;EOf67e\04b.-+3d].\mAkfdhC=@.ZUgng!9dqF$7R;l7)&lE&mjN$/"E,MAsGAQY<4&AF'[s:lG JT&lO=[ck6$$TQl*B@ViB#gPRaNF:oKs?GHXm$91<\D+J#AScG\fPC_!D:5iHm0QoU3aUL? 3WB>`C]7QB]pQE,B#!]CGCK66p%EG6[8AW@"*Dm<8H2#(:Fgtae4#!&CAV*?!A,>/5j()QJid19Wap'025k,sB(-1NVt\KAlm;/6lnQ'=$EoDl(A!I^6?0JVOO@t5Xj6a]glpg`Kb$pAVC`$Z`%*t4Sr^+3%CT?H'Q8:_C9q$qeDB2G@&NAN?3"2ct2!R`J`_Rdk<[2?#'4I-&eWNbEcH5O^A<,45kbAJTng5cjY3a$@#"7D>DgbL_oY[>2N<37$)A1o52B\fR mdT>'igh2Ij)VtGBU\6;<?g$APIHf EQd)f%VgQ0 &cdkjm\W@4KrXW09na.=?s?6\fF8f#<A5dDVV:peYQf+2i`FH2l+5VNKe+JM2i>d6C"t`L5eqC[KAaP4XPLQKYB?Dhmo?,Ul3(f]AdVF6E,#4?N;@+d[fAH`GcpAl j %m>5q\/=_HrDnj(S=l)gqNXXt5i3tOl$/3P!5&dINtg7XbOR)ngTV^`f1!#/[-;Jp%Jf$@9VtfOQbhA%%AbJ-$@/Tgf#p9ndpjVhjT:L0e`lJABr5<-&Mo/+m9:.)>SZ*%LXfiJLOT2g)HM,+D[U=7hAO:oLej8=eg7#`TK/@FFm8/l M"oXQAgoEK(]IfTt16t]=Cc9t1RKc+1B9ZHU9B+Xi:j^Mdh;3QkL42'MUp$ke?IdFVP@'>-W[PqLNLQ>P[P8Y-,ZtJ.2rlLo:pb1AXoKt^Ql]OTo/5DMrp_DDiAi#Aj0];_#:9LB]2%Fd4ni(*BrD=7D*MfeX"aF*0o]Tb<4mN;!J"N#g.Z'8p>8AAqrY0< d*PTA_9JA6<^^cW(E2g_,.O]B8XRHc9 g_1A)f(*o^=.TQqIGp1>6[Hhbk"I"rJ'D3Gs2*IA*['9aiT%<#+UB@_Y!IL/`k: GSk7YW[">kK=YP[aj8^X<`&?;*189@+ 5A!';)=k!n@&>K 99BErIqF^-HYH(tsdRoAD,-B>2K]@SkUBhFWd7/7L>ABL-6[Ai_!!X9khq_IRcMM<_$/Y]rBa@t+ab/`maX2JBXqApHG[0>sq@o]A-"EY7f&\VPn)A(%H65WEo.?d>CJBMnB/sEDOU&6_OtY,.)QE?j-`;qF[MQN?[%l(8M6)6(50.^^!8!GPGer__c-dA:TU]Jd)K\ oC+,0tIjPR9:Y&jMEk+E'p Z?-S?>Mb6eb3(j[+8^-Il=2<#/OH2hT0k>Z0[[ssS% jc&jJDqIj05q 2H)_4:tIeX,9O#k<@3j_kI(\mG`MJRJ&lq6Rlbn(Z(iXCLs3W=D`7O=%qE/a3L@rF,2 LHMlOd/+O85Kf%FH:Z5th-l%DNoKcPk6qHA0 SR`ng%p*^tf^hl;pQaHdRsaNiPIa%H$Fj['!_2IARV6nks2EqA$2Fg)]/dGf?,7HMD)#;=[es(W=gOOrQc%Afp+'Mh<1#3mV71a0a`R(b0BEm%H1H-j-YNWd338:"\d khVYX$npa2m\'p,$/C/,iPijo\,'$+)$VA>fX(BI=5L$Aq9U3j6gQ#&A1,V]="AX["74tC$$h:@12L8BIYH#2`h>#p)8,PeYJR%Ji?f,8aH!N6oQ)I%_d[+0aE$a--fXo"o?P-J/5T4&& Q]@ZH<1hindE]&N?!fBjUs Nt6>.(*Il"`3bH2M;,X[_-tGAY-or<3jPBii^BRB6e\_]%/='Qm?YO=BmQ;\o>6CXb _jV-p9Gi32@">$<__8(mV-2onU;SI4D1 @+7H%d3Na;"0MRd( Ip'GR;Y9-U+%tN;VZVe!C ;DKo"FH69j$OM:8![&VrKWlmb`m )W_hT7m1Ki"lERR )P 7Roe/E5T+Yr6 aF/*4\VFg?),8H'0<19moRd.P:>;:37Eq)PLcE(m+c2_i`L9Et+a[%QA#dhT20^;fq4Pi.b+dYh.fnaQ`K&_s$;7+2DK=G2sBY=Q]D05AOSgkW;gMpJk]/^e_8Y'HTa@hQ_4 F4k[Q.X.gH9,Z]MBh:@O,%m1<&&%q87meWipq8,BTSRh1jn2Tg]tJPjU4(J]$PGCb!jCYjt(=e51DQ:%4ce_e#61K!brrMtO0K^)Uc+qA:"bj:P0d-9HL2oj%72HJGJ^@Q)m7A(eMC"AM3CHg-@6plUUiJ-$M]0V!>^E?\M`Apcf&@YKq33(Xm]O`:ARIe@QAfsF!.QnrZ1"11A;ioWci%j3rETcn.?8[-b!^Am39b''D _kt,;D&^\moFpEbaFQk.iL0gsh!7`g=!=Z2mIS/Xi%A,sJQnE^o"642#0$%?"&5of9d<..7 $![*BQ#DhFerH@#oL*K2[oPr=8.pr>,Y%l=Aqar\;_UVZ]YBDO[IjF*M^YB;>ecZ@OO`!t#!jV7C%;bAtf%:gnfgDhkb"B=_pYmF6%WE@_2gV9-+<$cCNL]oAaM&5)m.GrSno/+>Q:^f&POh#KblmSf`3WtZo8.\TS[.6GLB+a6"%m3m38>n@KU\K90Aqn5j+,`"\F9Ya%\@qpK=Sa<T!33fYi=[2jmA,/$ r0a.C".=aZK@q$$ Ecg_kl.5^Q'Se;=/UT.age >g3km P9- 2,^RpC[q?9r[:m GcQJ/.M$OO&b.r! /X b.[_\moe/C-kSpon'7eK.g\Apt]612!=B7BS+)h*MY.9Y5Nq'5l\?%6[Np&!o\7!B)6]O#nDP,MJ-/F4PKCL46[EXg->I`nje*+1EJQ4_Z!W?98AD0t">@J1S4" 6DnV-?T*r"MH`!$Ec6VU)2gH##7P !/.Z';K8R1Ns/$0A10KQ9RTd/nel7AndJRfEAf24+#[C/c,WeEn4/Ws ALN+QJ!Q5;ib-Ucl5>O\%0//.fFi\S,c)%,K!,Y_6n0^nD5k\;nmbSLf_l <Yf.cs"o#gAZhK'SBW1-'&q:@-p65!GQ_&Uo!mN:kRl\=8_8HQLX1TaOANa/?(8NtU#i<^T!&ABOS9:^:PULc"ghLa6<9ms-QL'E0UWUbYIQ<.hIbP]JA8qgb17+l)shX(Lt8D.8?d+tq$Ym3bGk9Ng(Jq nOlf=C#O9+Q:k^cE=,]+c^T2UY$GmPqRK:1qdH&eH\b%N#0d#%P=%5Y@pUa(m3J=^.OU97naP_H^Q6=X5VgnEB\Rc\R]_rPPF +CjPJNLVfJ(^M9:L>C:RaAblU+[7UAfQHWP+q.`rT,PLWD)<8PB LH@<*lanqM=l/.\OkXJEFFV0tA#2'o,Bt7#PZ:bb3q0To=)S%N&rL30f.Id4o,3Ie1Vt= '^'3'^i9psXE\M"MS\,?S-Z nG8[C&V5TMabH4XVi9Gb.GMCP"D*ma7(#;nIn(WfG*hp;_2HsUF#GUd#=&7XL`[sVMi%j2)/-:->AUAHiQE"GXQfp5Z^@TKQ)YJ3E,)!AFb\IW#ETD$NZ(<;)L4D#Lofa=)(G7QR MNZ'[)?*"K f3teIhHA&A+Z;gN(2Db^A,M9Ak7 92o5EOtEhe%H4AC">Bob^kO_ o2)`2'1Y81je?]k_Pn]cY&sg\pb?c]"_ERiNa(5Ih$?aj`>or.b 9ef3`lX+^WpEDP"sAK7E`R?t*R]""hf\a.5ch9@FNE/k`-d$lO4,S"PLKkFo6pmpNX?-!.fN,?rMeIA5;^:m5AKA3h=<m6>XqIRgrkS!XW/W]RtKDUVtY?/Hg% ^A_#tU`%HI7`O;:=fi;CO]t&+=cWkkO= qW<&>Gn4DbX%WG^@LMiOA:DM?F_noP0[ti4p=eb=jUlQr-%?=tI_*h;j,FGg6n'[1+/YL2e%XQ%5Za?H1 FijKT=bQnh)Y,L5jJ'i(CiWe@k V3I(3\..UG^D,1c$8'^E"d1&OPb3+b;9'"4XIGCYW"3rc@7dn!lHr2NVI#-@GlePX,B^-/%GM_?AWi>=UO42JZtbN[=hB:__5lCt+\W_,4ABdQ,*aU V]ZJ8>7g\=L>KWe>'!C?6+Z)-0jRE&CA-Rps5K(70Sl1roE&LBrla.XhSmI\UtL1mcQ8be+cl4S+-aTsWbdr#fJIVl37Ap$.$"jJ;B'nQGQWIXlTh:(\9L1\kq'h3B9nm5h?D0F6"mHe:8WfR,:FZ`?B:Ls;/A *\FIk_&W!4'B[q=eqCG O74/*A)T;>1s$\fnot$3M/YYiY]U*S2808n3Qfk!F=@lZ=D(\N6ZeFj+6"g!$.Q,J*0,IO@Xc0m+/P )6J-K_8@A,(]XdT]DQ5NdUq)2]a ARkg"jCl.Chf?;X+#Pf4UtXtT_%I$L7&;t.4dr3A^eWFCM(l0]BHnG"r<_ ]3+&RcIbb4/sFEg=Jlo ZO+@;_]qG09Pf/iN+o*njqQ*]V6NkkH=o).iL/N(eaS[;Fm37b]/hhD9e)Akf;iWg:Y@#=RI`ke$N(M8/Vh[ih9YeB/kE/]6ISo:h>t4PVNP#d/I0jN]q0-]U0)5RK/B8E\ D6.O$J"^tm">HrScj`3pl/G<h+mG%\Ki2JHQ[&VaN/R2qUiXES^'\*L5AIV9;I/Kj>@m[_tl7LZ"K_V*9_:toSt`Jb&HKZ59Jd)M.U=2L*MK#RK]D+k_1O \rN$SjGgbPH6c4q&940efHh`_6pfr<`;mZ!+'%QF #Z"NL;b2tObIKb,oX_<]5?L:4H@.:^?Yr1N0XKrflHFe08O8iAoC&%_]5 rGLQ:;+];W-d5Xd\m@cMfo]n$$nbFR$D=!*sFI9g=t:UA9pGhX;Z_"G-j[XieTA@N8=8)$VV R#seSQ/-OO1g@ho:05*ZgY?=F$L$8FZ7isK[`M[P"#r9.8ij22-VnZmCmT;Zkg]fT_D= kCt`_MU#4HfD)7#QWf8 nfIKPKFK$lS=$n!\5YB)*/2<)1iAU2"8;OGU*M*j%A `i?USbJHUGmrenT3\=<k-J23`n `r\71d3Z3qp<;*oA2Vh,rd2A5/0%BM18]8j_!QkDN#6oTX?E9E?bcPpA$A*VO!nd3?Apg60\[o"++YAJEYigSs'(p9adY[0>#]A3NM$AnIAo J9E];p^10fG?g./pNe&$.o>&o>1eI/e &n^0m'Jc8eYdG*AX4lLWg9eAJ/d5;Kh-T'O%I\0)\("66bIG"5+2D@,C*tf#)_]ElQom_j%%ndqP2i]esMMcetM<`?5+P>K\?9?A=$*OQ#UA]\b[o+diY#>"0g8S]475sOa,-^)"nRcF+)ALo_FpEA,+/j/5!/4pR l<^g,NCj)eD]OW,-T93p+T<*e++H.#Y=/HAmhBtKs!7jc`pf6kV1aEA( 5B]9KBeVop.NV(:%GT.b.Fe`RcrX$-]aYZn$m@4t`7n[GVNm=i`0sP_$[;,2q=_4QW @bTWV`dCb8<^hcrBaqNB59ERMDEP[ps"4lRM0R<50k>osK$U0s's3A_n`1]6igsA1W1PiqsF3X'ccZ/9AO,YBP%m]q7N&+Vbcbr8_b7X8&n<3mbD/."]38%>p=Y!s1PhSV5ld+qO2oK/t"D2mgS)r="TmFF0^5 49)qG-GBn/k X`[J,nI/.>Wf,Cm'mI7B9\PX=.J]00CBkj)IoSG%isn6.K`cS4.rX-c#`.IPfP:I2Zo3'F5Ybo7Q4.24%+:1Z#CiiK(Mf9,>VBh'qphp%]56afof\X;UXnqL5&qT*f?%g2RT5AL R $j!.baUTI57,H7"[m:A0g;KjN,g9X%4bZl,f=nQ6.r;$'2=('\pb5&1hAfB"A1!F2!Ig>M5`Si;dk' Larm2<:[GRk%D6WCL_%K*to=+]RhCCqb(\EZE#.XU\geYpA]Q-S\Z24Pf(.FI9NopAptQ_94Fm#:kFBj;DW'K$a3tAnF3#oY<%EEiskpRq-"q_sPeHPIZ]O7E5E40TMV q3kU MNVRlRYRWI?tLlsb!A&-ZQ2Q0:j'AnA^NC*_N#Knf%+RO6EWS5b&s+hp9n7Jjt`NBHoTa5>*$C=q5=Zt[*jhRQRYX^#NaPfE;WB>NYk'PELnsn5.a N(8QWAa@VpQYUMO."U_U'j7XFVr]T ?Pk[HDbi6$Y8)8Jm8ahPI^3]$lLeRte_fA7VA.._H-GcAtMsC%$k&Er5QY>] $eLqENb)rRA&]"L^!0p dUK!l1NUh9N\@1rS1MiGSN4r&B\Y59U38)E+C:[(=bi)ieLR?jTRY;6,f%A#^(qC%j&2:[bDN:o*thZI,HHk7`?o'WbA=$TfEnGj3&^@<MrOK8LZsF/ie %+87>agOQJcpQ-[)W?IgsXO4Yl0h;fnKaDU5oI&FdiOeC$S2=p\SPR2C.pdn M[.65Y:b",dsJQ;acF=pP P)Q=OZ3N3@kMp\GdI4a7DUF-\r=^^jJcK.V26Ul#2>=A260Y8P&,g&aYR^fIh(rV5dRt;IcInk8E\Va:++%D<+1ETI>_:#"mjF/k(SYr0 +-@.+mWLM\=p)%XBFN/#Ao5MX7>$BFYkq`<7O9[;nXPLO)Fm$h!)[O6V(/hraN_=1m4o1q6benTM+U-FWJSEtI$&UKQ69cA;Cf5qOaE\A$B$0W'ns/F1lJ3]sl"q`T#b)o6@CGfs3N+i#R@*dsA;bicGN3I`ABl0pN1[UA0HKOa(RKdS,>o`R>?r-D'hWG]iTIAA&GJ_T)!`0I$Qe9MH[]3Ar33D4nd5(g><^5 H8-U_0 5c')PJdA73oOW?I],hh3C1.m3Z?:AcWU=p&7P!<^>Es_NeEiN-!$S1=r6/4WA@`LamN!o7>Am%Z@"\fn*O8IqFGp3fr6SGN*6BC/`R?> bt\R3+3K`2"C&AbU?>pk4]+MjSTrHs(F-Y.S4[9[ZL\@$IIB[W, 5.AWBXqJ9`,9 /k2)G PXeir$/jEdp^rdN&A JfUa(;<6\4/`_^OkN91CJ*dc#bjc^31p*Idd@hkSj3)Ft^P"oI*Rf%OlZI8n):UC`R9M%Yd$>"]25-_,o9"[bNAm7!@4HeP/9@O>rR]HGHhJmqr$Wnh@:Uc6\9.bB7/-QN,3le@Zk.T"#O#;g8[lU&3J>U^G;emN)b7gHi*^i,h(^I6riL0q>V6%ON$[5 VU#k#O&KGXUBAoi":>TKBbOld8Cp7Z*QedV!)qEp;GeRmL#0L1t)Bg*SEp9ZFWDZ!pof[[tfifAtE'[_M2ODcYe8G-QP\%`JimAQM'2=bQhXtt.=]a\17:QZ]>^[KgnAgU=HPk0\Jl2\L7=c`E.=*?kij%`@&C6fFG73qHg$%KAP6r4CFOi;7G^Y`3i[2Y>Ub&rLr7mp1>Y,F"]_0G!b*/(rC$Lk5F%`'BHD%AU-s%oSq[Ti-#[&^0Hr^j4b^+d@1)J'onFnf"KL5;Ar=Eo>,"#>TGm_(Z\/M>JXZn!-i,;&[Tg\`TqnFRTTAR[7%@_C^kA_nfNXs's!f*G;-ZW=,/%mfR?p70-Q-iA`"Z4:qM0SX?tB?ao1,O%ZS4aTe4[_(P6*g&7,DPj%DKp]oDtlZn9sgcK&jaFE`TjQ[B]05&\E^n4@e*hA]ZnnhoEA.sX\MJ%aNJ]NQB3WH]`[6d!$[m X ?XZmc41Hj3A`gd\,XKf#X)oCp7pgFt*OtSUEe>SdPD`.X;b)JaNA\^n$Hqq^Mh3_r?+eHn,8$5)cDH)M-!eWgOZ(]mlh`AJ^,tDp/$$J&;pH\%^\Y[API^i+AHK/i,3?26(PW55Hd0RC0VVPF?@Af?AViM.k brkN5LA3M?g_dD+(b8.tq,2S"F* Xtj.VbXlpKtTmP,mHh`)HLeXP#tpcBeZg-K)tlqbaXl'!E9%Ejo9P?0<=T;,ANC"5Bn#^H]?-d9!Se'+mp&o6YR(m25k2Rf@`CFUD[kdAQtj'I%NmQ/`W,BFdMG;;P%XaZN@D_.TTS5KfG3W]br<.]YjY'k.V+O#[0l1O &#g6C5AM(#_I.*\F.No3^C#s6][S8\MYs[iG2I2dPPG]W5JAVklQg_EG25j7`I'(jKo'IQ?0D]L#X,pf6=-RSB9j),A@6.+@#EM(_esBY)5>PX^L]&F"fgaFS]2TBfVJ*BEc9@>K%D#:>Hk9R#n8Hj;n8F]:;Et8UD)ArC:15Q0+1snt3Dj&\P.<q6r-@S%abjA)K6qe*+\#tIlsb=DQjS=.[[OD;&k;T70#&X$'A,>W/bPTOr&dUS..Z1GQK*KA(X%%$k/md0ZmN+E21iLMiJK'GFdS'@5L5!$j!JD#hJ>9s#UsqU':$(#)!NoWq*k$=hsXj=n`,AA6AAP"]Ak*5_P>0.VRZcP.A?0]$^P.94Xps^Me753/ONH_i*`*7oG)l!g8CGG%=1-fH^BIU_t\#?Fs);Gf('Xbae<<=:l)j#h\e;rY.ZU#F!N-:o.1-<$Qk. /M!rbGAc&r%=Vj&_,i-+M-"G]fX@1Aj#j7J+$/5hfbHUOA>bmb(7]@+jYCNCg>B>9M;0#rCq5oZ]r9@hb$e$R:P"+2D,'J '"ps:gb'TGEc@'t;"4DJ^k6aM-)(E*pScW4dAq%?Yr^,[!`.FW3q?^6aF40AYUWn,GM$Q3ZN.a2Oi).1P$>s008oRAV$XmF(!X:HeF:EJ`E$tnj,RSAR(`(Z_2"=A,)WE(j65.=r-3t&6b4[>/EQ5Iii1OBA:o;''k6q3W$N"+DnJgNKN^2%:[Zk="Xpn[f@7#GLKdFi<[>ZO"Y@ 7R#Vn5DNP]kl.6?QX<]JJ>"U(G>6;TV,'>X`N/>^<6e]Y=rEG/maO*SWSH5cMYhpfT:%TC3TAgm[aO&f2R"WSX39mtB)ED:`;-;W*7?*Oa6_I0YY[HPeFAsQ'A"5s_f'H^%BUN]1f\] ?p9LX+lWWreE"PZ].Ef7Qe2P?s6-^$t&'T&[0,EaBKthk\9*AlDW$s)CS[Qlib6-r[q@UshcoJBUc7ndrtbQPM2K#CBm6SI,i&A5:]>C +4_ZC#R%:mKOq0$FmMCUeP!Hg^Jr8P:% ?e%Jq19AG.\OAbFGV*\B9Y.?j98=S=bJQVrOjV&hHGTf+kj6@%%l$El[B-U85[bg""pjC6;r4Ya[dN`#[N/$1\YfI*l:DiL%?#N`9AHh6A2rLr(Vhc$[Z*C^U?SM1I86hto\\Tb6@UsglAIo%L\"lbh>h]G8/s+4)a *4olRYgfXB,!]:BDb=DA)ICp#)6c!BZ\])'K>PAX$,'0]5^E-ZI>MGac F)Jp9mi=rhr"%n[W*BMPIHkU"_:]Y?P*\N]AfdGkR?HEoOn&Ge9)BkUjH ENcm,MV:EP?QB>0B!SCDoBWb%I[A"8A7Ii5A2A)>e;ViJ#bC1XQ.g9jqLAO$nQe'g@ISjnFkg\t\Q^EVg:e(XaU-AT2,Xe.%D-g`W$PFDP7c_C1ln8Ui]pp@U*/2)'lc3Q>J$_5Nl%.a.=1<<46LR:WBdA2ETem5-^'p[6G_n;\gN=)N@E0DP>kfn!_46eMq`2Di4(K;+1G,X*!KZ'&(Gs6IdK_c<4n)p'gP.K!hp%g2+'pAHPdX.kq4.H10aO($ns)&JtK:2?^X=L$T!nd`:oHb$,O/$PM1 hGkFY5mi"^ZHKFN<0*\0rkWB[()Fg.1'^8pd#G`sA!X'r,o0[eiF^CM%G0pmYKKHg%gIWJ I1']6cLlFKg5nW:&:ofb+Ejk&naPs3iQBTG7H`.UDg;n'<38XtqH6-NX!5rG*h`n>r@'`.c9&F"eG+A?3G![`;O%*LiB;koOJt3a,\aG9L??iGc?RF,Y9)FH 19=WQT0W_bU -:J/!3Q(R5f! gD9&5HK,$B=d)1i-#,bT9Me9+PEY4*#Lo#bK6(ADp+_8MLO0!R/esc`#W/,ksGpTGJd1k0Zl8dk"LrEPI;`VfF"&]`bl<$9A`NPBAqEV91:IH4-mH-b$?W7oHKX.07\hlj]G`&QBi 4R@+l16$ T&P7KhnF_LKNG;DtSR&ch&;j$&828OT==(BMt,/WGBil%iW*j,HZ=HRO.TSV7m`>kbWTo9P$;l#2;spkK\j>E3?h-ZpNH!:&50TC]\&0-%hiHeZf4j<39n1e_Bl^+JhkBJA? DAatMI%1rZ(YF C_c!2D+_`t+kAFF=9@S)fjBPD8L]Oj6%J"5A S`4(OidbFqk",r-O N^g9j$C7Io9^!]KZk"s:m#90bM]D5E)js"Qa9+lk'Xb+ONY=,(-1 4aA6OgC(qdOV^"N] $AhU-9&2Kd;^UM9K`7$6.W3F1Fc\sp]/%]rG-Fk-(jj1qNr,5 5QqnA]@A[Nt/&0U1?eA?A[r6&Bk3,DjS17B@g4o[6Z3lAT>PXK"MG1fl`U27L-7IRk-//*\ k+6OJC1M;X:XY?s9-VjH*AOQ%QGK#o]bm$,`hQN&$0QF_.-(2`$"cbE0jQrH7pWZ99Z#%]*s&i/ctQ?r\9K%gjYMg!ZB48"q/q+n.fW6'*`0D3]gGFQj-B2X`&e&*Md%lgf-2:>lk1AH7h5>6pL3p"PSO)^)!=/?7(S:5%fpb<.]"!frm;o5/.qtpr4G,=Et+A"-_VS:Q2Ph&A#?p*FVUi9OPj)sYJK/d#Pj6ZU =gXMCK?h$WTY:#JjN=AA]K.dZY,B;AGO56C(c'g]$P-(\/DF*X"/jl96JA+gJn>l;]RdWp6jH#pNdt'1U7^4qgNl7K#O;PA&\;1a/s*,PmG$BZj6L,5+dO^Hq($;\je4;`5`D<"Y0-[o1_6\r.AF.emOM71,=T])=4RlPMa5g6.)mheX*t6)M7cVKQ8LV!BEd$R<. h2GqHFC0Ns+s?JYeXAt"C=H(apc;]J0pAnML& $Ma55qhEp&k=:9n7mPTOA7P8rS_E%an7;M^(:aY,D`U?3YH*^Zh)^na=bkW@JOo&f?E\qNC+Z(ck7%Z/r8F]c]M/si't?:2I@;o2?FT8O1,iGhM9Lc/^EB5lUKa-Ilj_f'b?KH6U)A&A:YnG.k8;.gc#iYhU/5PKO*2CkC)A=Wm9hAF[I?7rA=J;Mjb'9n-nQ7c?_Q/$L[VOe^_q;%%t)@\A;G&r3E1-Ce6hG(sYt9)qtJhs!gjpPa5H=Y^sj`7M:3l')69]7h/>Oo !E]7oAFhAf]O h<=)V+74ipr4'OWir3bB(rp](X@B9(j>O)&UV29,=r`\E\pgD6aLVO@4]p=QrA^d"48KtpS=JAXLU'U)FVN4mQ2helEl]%kf L/aPr4R57HoT+(JOA?Of>:BQ_fEV==N#Y=D-!jeEcm"U,a7HE!AI#Ap=c=p!?jq8rl("H/m*:3iN*+YI"cm?&!;ESGIao< +`8Uj!FAiL+r+lD(oh(\G\U<-mb>Zso$QRskn#&=QLl+)M\&D,mmcP(G.V@Q&\l6]%WSNUaJ1\EV+-Mo,H)f0c<Z$>@?=/-?hU\8n T8 9o4M.!^]X%i5VV7kL[l$UT4?D!aJH!:Lp`MgXJE_2LYVSA0s%P-a0[p596d%s %V!@0t5O#e(+ `E@" X[B >tQ>ai%n/D=:Oi&@%,Va'npZ so4N$!)k,_h4mpg ClW+6jrf^rt@\7:L0AUVG6j30g+Dmda`I*AcG[r-J^]S5ER:L ([\ 'Oj^$!PT^/K%qWl&^VLV@'Zq`WcbF+tL`M E#RJfj27.I$rC_hh.W==$s>Wo^8U<`3p'\)>6#:Kmt[IS;/FA1c3MOO;15qR\k%b74fT`^j8NQ]kbs%N.5k2))oGJ]GVe\gY">Cj+cc^:RgbqaGOG7*aPjU=4I1h8%Ym&)O/^UdMO]s_i4aCp&:Z8C2`R2BDAj['ZE(bY 423me^/KaMH04tC(Q>3 V fiIpUX>EKdp_.bCc2AWW\Tk>?KA-Z&jX$iQ/*iZO#HFd1:SrVX#E[ZkG.3hbt@*r44i4&XC/K]9%?Hs3caUV+&fIqI21*h4nnW4tVD&tVK44p];U,Y;LsLM8&>4l3r.:'YiW>)q2=K^!3h9O29F_m40jW7Bi##fM1^DnJ5oWrN_O:d;&SX=e=Erqo;JHn\o9CD00qVpT4IjMA`r1')8JY,(p8d5FAb1ERtAsArdH+)1!>c/As.1Af4q,Ads//k1^V%4q1htP*"KAAU$:8Tl#Xp' SY7!a0h)GrV2.g'JmbYRLO)LRA<4b>"`LY([l!QIeWG; gd,hdog "Y`#g+M:b_O0"\.f9E"1'O*o'eML4nD@:ARo5/G>7[rpTP\i:7 tU!rb#sBA4EEN)o)Ni[ ;2/-_A>F%U)GMj c[_s18UoP6k-A-t@"aN/KX9cA'Bp'hAc3Zp'i.O(iH=o4b5JRt6&`C\RE8D<.*KA_2fRf-IR?<aDo#7oeI+ @cbq@6QnaPeG+q@RXQSS,A2]J:ce.[VMq-8H$dJ2?YPGfr,$a6gXYkkZKCoEYMCe*HFbQCgYn$GfFr6ELPGH=QF7g%p;aj)dPeUmISchF\"]6P'FAH0f7iDjao-n'[qXI"PT4la?DUfc9k?'m.-N\i_:dC6/'UfH8BSZ!rAAd/+58iD,\I;#"kZ-NoUr$*li&@'0d W'RnmA%&+R^lS]WQABo2P3P^#>;>N;G2K-fTeXB%;%8fn;A,Q%%ns?><8o *QJF]rt7:1#[loX+;0\@"RL&[*9+.d^2Oa+2cc<d?\&kY;#g&CC`ik)@6F&mP/(#7>$(O>kMPCp3&$1aAV&(-aL^I$QM6?5UnJ"@]_Vs dBbJl_681=,g7pNAcVD@6MFFR+p=Na^QKhb5" m)1P&9d](6!0QB;@ZNN"[^RIGq?dteA/H&Wg?!NmJj)n9j?;Xrn)A.G000"[?bIi982-n6rAf`gnb]Li9_pD_00p\O!VJD#RJ:SM7,.OBk$a+/%ehlgR/`-a,3Dl[6U437I(g-dFm?3a,"0WAS`MSdckj;^91A,DS_jlfSnr'NBPn9An^:<>2,tT%e2IF?MH:%T:om3@b-H's/A8hT+",Ho@<0.:MHts;XK](7P9ro#NaFHsR6n#Sgd#56*RM+t95gWAo6;/RK5Z\\kSam[(9@)/;_!H]eXco]q3+hUF Op8eZt4 `OKe+LDOF]qTMDnY9!M@Fo_i2LFLsTlnM@cqcl(t*a/Sd$Vl@8Jj;a*@diN/...8;bboWLH ";eFtsQ3!S/U;]UA_n@+n2://?H"OZg!t/8BY18p7HCLq,]h/O$M^XNV[]B$!2mKZ&Dp#0dPk1lc\9`"OC!j^ KqIoc#/s\GAfsW18)-XA8fkOT7W;_BJGar%p`pQGl->3%W;3kb`NBh;jlPKtiT?opK"Z)m#(?2jYIt;c_Gi=m)noCh3nM,MURUo'"-A@Q$E!/YanjTG)F'>lV I!6D:6iX]8;[">h:$aQZt[I8J5b5ha'':)oK';Ah",Zk)mj)$IJ]53kP\9%bPcf2q1>J q;4c/b7U 3]5<Ji*PH&"e!2&i%s,PV&:+mM&gT^osaiZ BA6 jIsjqOJs[*'2pJWZ2?!MPBB[No_QWpD*8=41&0ikriorRAi3[QaID5ki5@SIKL-P7`a h9FWc./jQndQ3gC&mb&>EHe(m;rHk*JWSC `[`6o'U#MGFW+=#%]>gYQda..\Uai?714@2"n`26b5N]AKfOa"@himgc:Cf-?$K3*Na%'2P$R)OmJ48%&[i6c?+#f4@t?A!jBGktEl?gF^"=rbPBle;s0WfFpiWKpOO;#/5`\Qnghr'\0&QMbrZYB2nrrB"E?n9@F;/:;!H:/a5`YB4"L%+ Vs)6n^F'R\fA(C^n3f:AM"`+!#Pr*!k='5ZS'<lt8a0qpkHDcUiL')5+0S6>Ka-B!S]7\]W5DnaQZLXfeT0+l:PR6l[ZhB<6p2m#$XUl4K=-00dVAat_b371"\eYVPe+kK'?gFA9T;PAG5SFqN%;Jl.&FP&G?KG?`X,hdZQr"3)D#.ZrP&"eFHP4\>,>A9e_M@,51:Oc6,Z*`m?k]Ej@9B/l1e[/NSA#/PDK`+R^Z0:[$_9=1R,$!PhSOY_#c0\<;"J$tt:>s.0Vn\L.V07Han]b4!Ti"d,M%5)AC(8JohVLR5qJkkhB 1 4h:t()$A0d4>=k`nS$<^*T`,?-#4Lb/A/HC7Jfnt$Ys;@p6%%ofb1eg1d*[Ob%,S?DP#"[2Vt3,D[A'')R>XQief!P!GT>PaSE4cD&5d2D B=1b-*9`kAinr6pYq7QA']!%JA\b;QE&-B%76m*3T 1d[lW@nf(o(264V s];P]5A=;Ad#a2BsM1>oF^A+ 0fTQg]\ofTp`<&_e[A>YYFAo7b%#?\QUVS]l^AQ7@a2>WDBm&T)[CkA)H>h7q(m4)-Ilf6Ah%*rZ&Od!"no"AFLQFg\]ODV+j+_/Y#%c7fLZHD*USnfmKn=W+J%Y>\$H]]a&eIRgLgm36@KthJp)6^6r:AcJjicCR+dJZ)8AmNFH^MkSoG9G72Wq"oRn8bM+4Sj0Drg&)b<9s>+SJ:H!+B:.R$rCl%@r*8VGd7lmX[/Bp(\nhtU9No7OG%Z.n%!t40&=RA);(h&2re#QVjaI">Ie+&DpW"%44A@l$_?P*S.q#Kp;-?\1<n0S,C+^h;RfAG;@KdcrCfFcYOl3+DW!+89kD$>`((G9c\?G(O%^A6I1(%j"6_;(h-oS05i*]PVsl!B1bGr+,#F9B"Trdq2\#rXiV>&q8BTf8)ZPl`P[0dd&chG=?GiW-LC80L`6GP8/sf:S\/7CJ_,`sU!VeToliSQ4)oN,E2CjEt96D'A'$Jf_GHlPW05caah,O.?AjL3EcW0 U7,qU-E!pKce(2/0`8"77bgBQ*"q2Gh.+[@.E"tn=X0[h%CU1g?Bk&,>2d7nS5qtU!%?b:3<7O[!Ym;Ws&F.bq$$8V/-@D38X*<\46*T VX7rg$cCG?#W9 =CEi(:AYk38OAHBbo@6gPSM\)FF29a!l6U9A9iFq..l=45o23O-Y"ql1KW?!;O=7TFBdokoT5s(XkbBoRGs7pZ[s]k;;'`i*2olK%K6=]eapN&*G/A30`..,U+_n+;Qai_1\t[4%iXHT''ABsqHAWO4c7(!sY7@DAt>rS^`LJKmC)62:KCh!L>1>M0Zplodd..Kd9 U^c=h)_c0->jP=W+9Ip=c3q]Vo93^ZMQOG:!#ikFbN[dV0*+sK]A"q^V?e2?YbA;()aF5od-c;Uj:(.d/$C=\o-lHB)4+0KiAr`>Y%A$A47US3H9Ml!/i1I=&!Gsn4T6qY/N1Qio+m$p9'F:VhR q&B>XDo6'$>e6pdh*WYB7[5`k^"HtY)0?V]2_>BWto!K599ds]mUt,1KOt=3B!lcQ'E,>I"A?O`@9qMec$5$U-5\3pE:TQ7F9+]!"p`K=ek@>,dC#O/$8BpkYbVL\*6Wi8f2o,;VLS@RHr(]NkRQnk?8IL0oKLj'*N\Vrq:AN)aZ!"i;e(D(`*F:_.$f',ZEg]NdGT*S.:A6PkGf0?/@dmLP^A) Jh3rjQ0-kZ@OA^T41[DLG)O0Jtg'A#G+c2^X>l8g]1A\lB*)c&bnG8imS[ocBS.AXL%K^ .*L2`,CUAE.'DkbK4LZ_@)4MZS:Wlk('RHFUO&WsM;tK5fL5dm<-G_tmh><M48CSG#aDd =eP*OC;Sr6-64e74'>aA/"Rn>e-@cKaUr#`D"A%Bp2)>#0 Y-=s-jr:ita j_jD`jN+i(GL@)Cm%o@Afc`c$66HAt[k5gOGJt-